diff --git a/.editorconfig b/.editorconfig index f511aad460..bd318e5b8a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,16 +1,14 @@ +# In case prettier plugin or eslint with autofix is not enabled in IDE +# The fallback settings here should match with our prettierrc config +# so we get consistency! root = true + [*] -indent_style=tab -indent_size=tab -tab_width=4 +indent_style=space +indent_size=2 +tab_width=2 end_of_line=lf charset=utf-8 trim_trailing_whitespace=true max_line_length=120 insert_final_newline=true - -[*.yml] -indent_style=space -indent_size=2 -tab_width=8 -end_of_line=lf diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000..8e1b6fe994 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + extends: [ + '@joystream/eslint-config' + ] +} \ No newline at end of file diff --git a/.github/workflows/joystream-cli.yml b/.github/workflows/joystream-cli.yml new file mode 100644 index 0000000000..71537074c1 --- /dev/null +++ b/.github/workflows/joystream-cli.yml @@ -0,0 +1,47 @@ +name: joystream-cli +on: [pull_request, push] + +jobs: + cli_build_ubuntu: + name: Ubuntu Checks + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: checks + run: | + yarn install --frozen-lockfile + yarn workspace @joystream/cli checks + - name: yarn pack test + run: | + yarn workspace @joystream/cli pack --filename cli-pack-test.tgz + tar zxvf ./cli/cli-pack-test.tgz -C cli + cd ./cli/package && yarn link + + cli_build_osx: + name: MacOS Checks + runs-on: macos-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: checks + run: | + yarn install --frozen-lockfile --network-timeout 120000 + yarn workspace @joystream/cli checks + - name: yarn pack test + run: | + yarn workspace @joystream/cli pack --filename cli-pack-test.tgz + tar zxvf ./cli/cli-pack-test.tgz -C cli + cd ./cli/package && yarn link diff --git a/.github/workflows/joystream-types.yml b/.github/workflows/joystream-types.yml new file mode 100644 index 0000000000..22a72c8895 --- /dev/null +++ b/.github/workflows/joystream-types.yml @@ -0,0 +1,49 @@ +name: joystream-types +on: [pull_request, push] + +jobs: + types_checks_ubuntu: + name: Ubuntu Checks + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: checks + run: | + yarn install --frozen-lockfile + yarn workspace @joystream/types checks + - name: npm pack test + run: | + cd types + npm pack | tail -1 | xargs tar xzf + cd package && npm install + node ./index.js + + types_checks_osx: + name: MacOS Checks + runs-on: macos-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: checks + run: | + yarn install --frozen-lockfile --network-timeout 120000 + yarn workspace @joystream/types checks + - name: npm pack test + run: | + cd types + npm pack | tail -1 | xargs tar xzf + cd package && npm install + node ./index.js diff --git a/.github/workflows/network-tests.yml b/.github/workflows/network-tests.yml new file mode 100644 index 0000000000..af0c69bfd4 --- /dev/null +++ b/.github/workflows/network-tests.yml @@ -0,0 +1,37 @@ +name: network-tests +on: [pull_request, push] + +jobs: + network_build_ubuntu: + name: Ubuntu Checks + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: checks + run: | + yarn install --frozen-lockfile + yarn workspace joystream-testing checks + + network_build_osx: + name: MacOS Checks + runs-on: macos-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: checks + run: | + yarn install --frozen-lockfile --network-timeout 120000 + yarn workspace joystream-testing checks diff --git a/.github/workflows/pioneer-pr.yml b/.github/workflows/pioneer-pr.yml deleted file mode 100644 index 60c4d9e842..0000000000 --- a/.github/workflows/pioneer-pr.yml +++ /dev/null @@ -1,71 +0,0 @@ -name: Pioneer -on: [pull_request, push] - -jobs: - pioneer_build_ubuntu: - name: Ubuntu Build - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [12.x] - steps: - - uses: actions/checkout@v1 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - name: build - run: | - yarn install --frozen-lockfile - yarn workspace pioneer build - - pioneer_build_osx: - name: MacOS Build - runs-on: macos-latest - strategy: - matrix: - node-version: [12.x] - steps: - - uses: actions/checkout@v1 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - name: build - run: | - yarn install --frozen-lockfile - yarn workspace pioneer build - - pioneer_lint_ubuntu: - name: Ubuntu Linting - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [12.x] - steps: - - uses: actions/checkout@v1 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - name: lint - run: | - yarn install --frozen-lockfile - yarn workspace pioneer lint - - pioneer_lint_osx: - name: MacOS Linting - runs-on: macos-latest - strategy: - matrix: - node-version: [12.x] - steps: - - uses: actions/checkout@v1 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - name: lint - run: | - yarn install --frozen-lockfile - yarn workspace pioneer lint diff --git a/.github/workflows/pioneer.yml b/.github/workflows/pioneer.yml new file mode 100644 index 0000000000..bca36c79cf --- /dev/null +++ b/.github/workflows/pioneer.yml @@ -0,0 +1,71 @@ +name: Pioneer +on: [pull_request, push] + +jobs: + pioneer_build_ubuntu: + name: Ubuntu Build + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: build + run: | + yarn install --frozen-lockfile + yarn workspace pioneer build + + pioneer_build_osx: + name: MacOS Build + runs-on: macos-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: build + run: | + yarn install --frozen-lockfile --network-timeout 120000 + yarn workspace pioneer build + + pioneer_lint_ubuntu: + name: Ubuntu Linting + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: lint + run: | + yarn install --frozen-lockfile + yarn workspace pioneer lint + + pioneer_lint_osx: + name: MacOS Linting + runs-on: macos-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: lint + run: | + yarn install --frozen-lockfile --network-timeout 120000 + yarn workspace pioneer lint diff --git a/.github/workflows/run-network-tests.yml b/.github/workflows/run-network-tests.yml new file mode 100644 index 0000000000..d2ceee76bd --- /dev/null +++ b/.github/workflows/run-network-tests.yml @@ -0,0 +1,25 @@ +name: run-network-tests +on: + pull_request: + types: [labeled] + workflow_dispatch: + +jobs: + run_ansible_tests: + if: github.event.label.name == 'run-network-tests' || github.event.action == null + name: run network tests using ansible + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: install toolchain + run: curl https://getsubstrate.io -sSf | bash -s -- --fast + - name: ansible build and tests + run: | + cd ./devops/ansible + ansible-playbook -i hosts build-and-run-tests-single-node-playbook.yml --become -v diff --git a/.github/workflows/storage-node.yml b/.github/workflows/storage-node.yml new file mode 100644 index 0000000000..499deead82 --- /dev/null +++ b/.github/workflows/storage-node.yml @@ -0,0 +1,37 @@ +name: storage-node +on: [pull_request, push] + +jobs: + storage_node_build_ubuntu: + name: Ubuntu Checks + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: checks + run: | + yarn install --frozen-lockfile + yarn workspace storage-node checks + + storage_node_build_osx: + name: MacOS Checks + runs-on: macos-latest + strategy: + matrix: + node-version: [12.x] + steps: + - uses: actions/checkout@v1 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: checks + run: | + yarn install --frozen-lockfile --network-timeout 120000 + yarn workspace storage-node checks diff --git a/.gitignore b/.gitignore index c2b08ec41e..3c2bf49836 100644 --- a/.gitignore +++ b/.gitignore @@ -22,7 +22,7 @@ yarn* .*.sw* # Visual Studio Code -.vscode +.vscode/ # Compiled WASM code *.wasm diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000000..f2c1c07c33 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + ...require('@joystream/prettier-config'), +} diff --git a/.travis.yml b/.travis.yml index 4ebb0dfd7f..b8ac04844c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,18 +7,24 @@ language: rust # sometimes break the build. When cache is enabled do not use the produced WASM build. # This also means the binary should not be used to produce the final chainspec file (because the same # one is embedded in the binary) -cache: cargo +# cache: cargo -rust: - - stable +rust: stable -matrix: - include: - - os: linux - env: TARGET=x86_64-unknown-linux-gnu +# Skip Rust build in a pull request if no rust project files were modified +before_install: + - | + if [ "$TRAVIS_PULL_REQUEST" != "false" ] + then + if ! git diff --name-only $TRAVIS_COMMIT_RANGE | grep -qE "(.rs|Cargo.(lock|toml))$" + then + echo "No changes to Rust or Cargo Files, CI not running." + travis_terminate 0 + fi + fi install: - - rustup install nightly-2020-05-23 + - rustup install nightly-2020-05-23 --force - rustup target add wasm32-unknown-unknown --toolchain nightly-2020-05-23 # travis installs rust using rustup with the "minimal" profile so these tools are not installed by default - rustup component add rustfmt @@ -28,8 +34,10 @@ before_script: - cargo fmt --all -- --check script: - # we set release as build type for all steps to benefit from already compiled packages in prior steps - - BUILD_DUMMY_WASM_BINARY=1 cargo clippy --release --target=${TARGET} -- -D warnings - - BUILD_DUMMY_WASM_BINARY=1 cargo test --release --verbose --all --target=${TARGET} - - TRIGGER_WASM_BUILD=1 WASM_BUILD_TOOLCHAIN=nightly-2020-05-23 cargo build --release --target=${TARGET} -p joystream-node - - ls -l ./target/${TARGET}/release/wbuild/joystream-node-runtime/ \ No newline at end of file + - export WASM_BUILD_TOOLCHAIN=nightly-2020-05-23 + - BUILD_DUMMY_WASM_BINARY=1 cargo clippy --release --all -- -D warnings + - travis_wait 75 cargo test --release --verbose --all -- --ignored + - cargo build --release + - ls -l ./target/release/wbuild/joystream-node-runtime/ + - ./target/release/joystream-node --version + - ./target/release/chain-spec-builder --version diff --git a/Cargo.lock b/Cargo.lock index d0da082b17..f2d46b21b3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,43 +1,79 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "adler" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" + [[package]] name = "adler32" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" +checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d" [[package]] -name = "aes-ctr" -version = "0.3.0" +name = "aead" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" +dependencies = [ + "generic-array 0.14.3", +] + +[[package]] +name = "aes" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2e5b0458ea3beae0d1d8c0f3946564f8e10f90646cf78c06b4351052058d1ee" +checksum = "f7001367fde4c768a19d1029f0a8be5abd9308e1119846d5bd9ad26297b8faf5" dependencies = [ "aes-soft", "aesni", - "ctr", - "stream-cipher", + "block-cipher", +] + +[[package]] +name = "aes-gcm" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f5007801316299f922a6198d1d09a0bae95786815d066d5880d13f7c45ead1" +dependencies = [ + "aead", + "aes", + "block-cipher", + "ghash", + "subtle 2.2.2", ] [[package]] name = "aes-soft" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd7e7ae3f9a1fb5c03b389fc6bb9a51400d0c13053f0dca698c832bfd893a0d" +checksum = "4925647ee64e5056cf231608957ce7c81e12d6d6e316b9ce1404778cc1d35fa7" dependencies = [ - "block-cipher-trait", - "byteorder 1.3.4", - "opaque-debug", + "block-cipher", + "byteorder", + "opaque-debug 0.2.3", ] [[package]] name = "aesni" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f70a6b5f971e473091ab7cfb5ffac6cde81666c4556751d8d5620ead8abf100" +checksum = "d050d39b0b7688b3a3254394c3e30a9d66c41dcf9b05b0e2dbdc623f6505d264" dependencies = [ - "block-cipher-trait", - "opaque-debug", - "stream-cipher", + "block-cipher", + "opaque-debug 0.2.3", ] [[package]] @@ -58,6 +94,17 @@ dependencies = [ "memchr", ] +[[package]] +name = "alga" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" +dependencies = [ + "approx", + "num-complex", + "num-traits 0.2.11", +] + [[package]] name = "ansi_term" version = "0.11.0" @@ -77,22 +124,25 @@ dependencies = [ ] [[package]] -name = "app_dirs" -version = "1.2.1" +name = "anyhow" +version = "1.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bb70cc08ec97ca5450e6eba421deeea5f172c0fc61f78b5357b2a8e8be195f" + +[[package]] +name = "approx" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e73a24bad9bd6a94d6395382a6c69fe071708ae4409f763c5475e14ee896313d" +checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" dependencies = [ - "ole32-sys", - "shell32-sys", - "winapi 0.2.8", - "xdg", + "num-traits 0.2.11", ] [[package]] name = "arc-swap" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d663a8e9a99154b5fb793032533f6328da35e23aac63d5c152279aa8ba356825" +checksum = "4d25d88fd6b8041580a654f9d0c581a047baee2b3efee13275f2fc392fc75034" [[package]] name = "arrayref" @@ -130,10 +180,64 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d0864d84b8e07b145449be9a8537db86bf9de5ce03b913214694643b4743502" dependencies = [ - "quote 1.0.3", + "quote 1.0.7", "syn 1.0.17", ] +[[package]] +name = "assert_matches" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7deb0a829ca7bcfaf5da70b073a8d128619259a7be8216a355e23f00763059e5" + +[[package]] +name = "async-std" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "538ecb01eb64eecd772087e5b6f7540cbc917f047727339a472dafed2185b267" +dependencies = [ + "async-task", + "broadcaster", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "futures-core", + "futures-io", + "futures-timer 2.0.2", + "kv-log-macro", + "log", + "memchr", + "mio", + "mio-uds", + "num_cpus", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "async-task" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ac2c016b079e771204030951c366db398864f5026f84a44dafb0ff20f02085d" +dependencies = [ + "libc", + "winapi 0.3.8", +] + +[[package]] +name = "async-tls" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95fd83426b89b034bf4e9ceb9c533c2f2386b813fd3dcae0a425ec6f1837d78a" +dependencies = [ + "futures 0.3.4", + "rustls", + "webpki", + "webpki-roots 0.19.0", +] + [[package]] name = "atty" version = "0.2.14" @@ -187,32 +291,31 @@ checksum = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83" [[package]] name = "base64" -version = "0.10.1" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" -dependencies = [ - "byteorder 1.3.4", -] +checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" [[package]] name = "bindgen" -version = "0.47.3" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df683a55b54b41d5ea8ebfaebb5aa7e6b84e3f3006a78f010dadc9ca88469260" +checksum = "c72a978d268b1d70b0e963217e60fdabd9523a941457a6c42a7315d15c7e89e5" dependencies = [ "bitflags", "cexpr", "cfg-if", "clang-sys", "clap", - "env_logger 0.6.2", - "hashbrown 0.1.8", + "env_logger", "lazy_static", + "lazycell", "log", "peeking_take_while", - "proc-macro2 0.4.30", - "quote 0.6.13", + "proc-macro2", + "quote 1.0.7", "regex", + "rustc-hash", + "shlex", "which", ] @@ -245,9 +348,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330" dependencies = [ "byte-tools", - "crypto-mac", - "digest", - "opaque-debug", + "crypto-mac 0.7.0", + "digest 0.8.1", + "opaque-debug 0.2.3", +] + +[[package]] +name = "blake2" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84ce5b6108f8e154604bd4eb76a2f726066c3464d5a552a4229262a18c9bb471" +dependencies = [ + "byte-tools", + "byteorder", + "crypto-mac 0.8.0", + "digest 0.9.0", + "opaque-debug 0.2.3", ] [[package]] @@ -260,6 +376,28 @@ dependencies = [ "constant_time_eq", ] +[[package]] +name = "blake2b_simd" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" +dependencies = [ + "arrayref", + "arrayvec 0.5.1", + "constant_time_eq", +] + +[[package]] +name = "blake2s_simd" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab9e07352b829279624ceb7c64adb4f585dacdb81d35cafae81139ccd617cf44" +dependencies = [ + "arrayref", + "arrayvec 0.5.1", + "constant_time_eq", +] + [[package]] name = "block-buffer" version = "0.7.3" @@ -268,17 +406,26 @@ checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ "block-padding", "byte-tools", - "byteorder 1.3.4", - "generic-array", + "byteorder", + "generic-array 0.12.3", ] [[package]] -name = "block-cipher-trait" -version = "0.6.2" +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.3", +] + +[[package]] +name = "block-cipher" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c924d49bd09e7c06003acda26cd9742e796e34282ec6c1189404dee0c1f4774" +checksum = "fa136449e765dc7faa244561ccae839c394048667929af599b5d931ebe7b7f10" dependencies = [ - "generic-array", + "generic-array 0.14.3", ] [[package]] @@ -291,22 +438,30 @@ dependencies = [ ] [[package]] -name = "bs58" -version = "0.2.5" +name = "broadcaster" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95ee6bba9d950218b6cc910cf62bc9e0a171d0f4537e3627b0f54d08549b188" +checksum = "d9c972e21e0d055a36cf73e4daae870941fe7a8abcd5ac3396aab9e4c126bd87" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "futures-util", + "parking_lot 0.10.2", + "slab", +] [[package]] name = "bs58" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b170cd256a3f9fa6b9edae3e44a7dfdfc77e8124dbc3e2612d75f9c3e2396dae" +checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" [[package]] name = "bstr" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2889e6d50f394968c8bf4240dc3f2a7eb4680844d27308f798229ac9d4725f41" +checksum = "31accafdb70df7871592c058eca3985b71104e15ac32f64706022c58867da931" dependencies = [ "memchr", ] @@ -329,12 +484,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" -[[package]] -name = "byteorder" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc10e8cc6b2580fda3f36eb6dc5316657f812a3df879a44a66fc9f0fdbc4855" - [[package]] name = "byteorder" version = "1.3.4" @@ -347,16 +496,16 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" dependencies = [ - "byteorder 1.3.4", + "byteorder", "either", "iovec", ] [[package]] name = "bytes" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "c_linked_list" @@ -366,18 +515,18 @@ checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" [[package]] name = "cc" -version = "1.0.50" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" +checksum = "f9a06fb2e53271d7c279ec1efea6ab691c35a2ae67ec0d91d7acec0caf13b518" dependencies = [ "jobserver", ] [[package]] name = "cexpr" -version = "0.3.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d" +checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" dependencies = [ "nom", ] @@ -388,17 +537,42 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +[[package]] +name = "chacha20" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "086c0f07ac275808b7bf9a39f2fd013aae1498be83632814c8c4e0bd53f2dc58" +dependencies = [ + "stream-cipher", + "zeroize", +] + +[[package]] +name = "chacha20poly1305" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18b0c90556d8e3fec7cf18d84a2f53d27b21288f2fe481b830fadcf809e48205" +dependencies = [ + "aead", + "chacha20", + "poly1305", + "stream-cipher", + "zeroize", +] + [[package]] name = "chain-spec-builder" -version = "2.0.0-alpha.3" +version = "3.0.0" dependencies = [ "ansi_term 0.12.1", + "enum-utils", "joystream-node", "rand 0.7.3", + "sc-chain-spec", + "sc-keystore", + "sc-telemetry", + "sp-core", "structopt", - "substrate-keystore", - "substrate-primitives", - "substrate-telemetry", ] [[package]] @@ -407,16 +581,18 @@ version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" dependencies = [ + "js-sys", "num-integer", - "num-traits", + "num-traits 0.2.11", "time", + "wasm-bindgen", ] [[package]] name = "clang-sys" -version = "0.26.4" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ef0c1bcf2e99c649104bd7a7012d8f8802684400e03db0ec0af48583c6fa0e4" +checksum = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a" dependencies = [ "glob", "libc", @@ -425,9 +601,9 @@ dependencies = [ [[package]] name = "clap" -version = "2.33.0" +version = "2.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" +checksum = "bdfa80d47f954d53a35a64987ca1422f495b8d6483c0fe9f7117b36c2a792129" dependencies = [ "ansi_term 0.11.0", "atty", @@ -456,6 +632,26 @@ dependencies = [ "bitflags", ] +[[package]] +name = "console_error_panic_hook" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "console_log" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7871d2947441b0fdd8e2bd1ce2a2f75304f896582c0d572162d48290683c48" +dependencies = [ + "log", + "web-sys", +] + [[package]] name = "const-random" version = "0.1.8" @@ -463,7 +659,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f1af9ac737b2dd2d577701e59fd09ba34822f6f2ebdb30a7647405d9e55e16a" dependencies = [ "const-random-macro", - "proc-macro-hack 0.5.15", + "proc-macro-hack", ] [[package]] @@ -473,7 +669,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25e4c606eb459dd29f7c57b2e0879f2b6f14ee130918c2b78ccb58a9624e6c7a" dependencies = [ "getrandom", - "proc-macro-hack 0.5.15", + "proc-macro-hack", ] [[package]] @@ -482,6 +678,28 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + +[[package]] +name = "cpuid-bool" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" + [[package]] name = "crc32fast" version = "1.2.0" @@ -493,11 +711,12 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.3.9" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa" +checksum = "09ee0cc8804d5393478d743b035099520087a5186f3b93fa58cec08fa62407b6" dependencies = [ - "crossbeam-utils 0.6.6", + "cfg-if", + "crossbeam-utils", ] [[package]] @@ -507,7 +726,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285" dependencies = [ "crossbeam-epoch", - "crossbeam-utils 0.7.2", + "crossbeam-utils", "maybe-uninit", ] @@ -519,31 +738,22 @@ checksum = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace" dependencies = [ "autocfg 1.0.0", "cfg-if", - "crossbeam-utils 0.7.2", + "crossbeam-utils", "lazy_static", "maybe-uninit", "memoffset", - "scopeguard 1.1.0", + "scopeguard", ] [[package]] name = "crossbeam-queue" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db" -dependencies = [ - "cfg-if", - "crossbeam-utils 0.7.2", -] - -[[package]] -name = "crossbeam-utils" -version = "0.6.6" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" +checksum = "774ba60a54c213d409d5353bda12d49cd68d14e45036a285234c8d6f91f92570" dependencies = [ "cfg-if", - "lazy_static", + "crossbeam-utils", + "maybe-uninit", ] [[package]] @@ -569,60 +779,27 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" dependencies = [ - "generic-array", + "generic-array 0.12.3", "subtle 1.0.0", ] [[package]] -name = "ct-logs" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d3686f5fa27dbc1d76c751300376e167c5a43387f44bb451fd1c24776e49113" -dependencies = [ - "sct", -] - -[[package]] -name = "ctr" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022cd691704491df67d25d006fe8eca083098253c4d43516c2206479c58c6736" -dependencies = [ - "block-cipher-trait", - "stream-cipher", -] - -[[package]] -name = "ctrlc" -version = "3.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a4ba686dff9fa4c1c9636ce1010b0cf98ceb421361b0bb3d6faeec43bd217a7" -dependencies = [ - "nix", - "winapi 0.3.8", -] - -[[package]] -name = "cuckoofilter" -version = "0.3.2" +name = "crypto-mac" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd43f7cfaffe0a386636a10baea2ee05cc50df3b77bea4a456c9572a939bf1f" +checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "byteorder 0.5.3", - "rand 0.3.23", + "generic-array 0.14.3", + "subtle 2.2.2", ] [[package]] -name = "curve25519-dalek" -version = "1.2.3" +name = "ct-logs" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7dcd30ba50cdf88b55b033456138b7c0ac4afdc436d82e1b79f370f24cc66d" +checksum = "4d3686f5fa27dbc1d76c751300376e167c5a43387f44bb451fd1c24776e49113" dependencies = [ - "byteorder 1.3.4", - "clear_on_drop", - "digest", - "rand_core 0.3.1", - "subtle 2.2.2", + "sct", ] [[package]] @@ -631,54 +808,28 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26778518a7f6cffa1d25a44b602b62b979bd88adb9e99ffec546998cf3404839" dependencies = [ - "byteorder 1.3.4", - "digest", + "byteorder", + "digest 0.8.1", "rand_core 0.5.1", "subtle 2.2.2", - "zeroize 1.1.0", + "zeroize", ] [[package]] name = "data-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11c0346158a19b3627234e15596f5e465c360fcdb97d817bcb255e0510f5a788" - -[[package]] -name = "derivative" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eae4d76b7cefedd1b4f8cc24378b2fbd1ac1b66e3bbebe8e2192d3be81cb355" -dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", - "syn 1.0.17", -] - -[[package]] -name = "derive_more" -version = "0.14.1" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d944ac6003ed268757ef1ee686753b57efc5fcf0ebe7b64c9fc81e7e32ff839" -dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "rustc_version", - "syn 0.15.44", -] +checksum = "72aa14c04dfae8dd7d8a2b1cb7ca2152618cd01336dbfe704b8dcbf8d41dbd69" [[package]] name = "derive_more" -version = "0.15.0" +version = "0.99.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a141330240c921ec6d074a3e188a7c7ef95668bb95e7d44fa0e5778ec2a7afe" +checksum = "298998b1cf6b5b2c8a7b023dfd45821825ce3ba8a8af55c921a0e734e4653f76" dependencies = [ - "lazy_static", - "proc-macro2 0.4.30", - "quote 0.6.13", - "regex", - "rustc_version", - "syn 0.15.44", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] @@ -693,7 +844,37 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" dependencies = [ - "generic-array", + "generic-array 0.12.3", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.3", +] + +[[package]] +name = "directories" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "551a778172a450d7fc12e629ca3b0428d00f6afa9a43da1b630d54604e97371c" +dependencies = [ + "cfg-if", + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a" +dependencies = [ + "libc", + "redox_users", + "winapi 0.3.8", ] [[package]] @@ -702,7 +883,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4d33be9473d06f75f58220f71f7a9317aca647dc061dbd3c361b0bef505fbea" dependencies = [ - "byteorder 1.3.4", + "byteorder", "quick-error", ] @@ -718,18 +899,6 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4bb454f0228b18c7f4c3b0ebbee346ed9c52e7443b0999cd543ff3571205701d" -[[package]] -name = "ed25519-dalek" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d07e8b8a8386c3b89a7a4b329fdfa4cb545de2545e9e2ebbc3dd3929253e426" -dependencies = [ - "clear_on_drop", - "curve25519-dalek 1.2.3", - "failure", - "rand 0.6.5", -] - [[package]] name = "ed25519-dalek" version = "1.0.0-pre.3" @@ -737,9 +906,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978710b352437433c97b2bff193f2fb1dfd58a093f863dd95e225a19baa599a2" dependencies = [ "clear_on_drop", - "curve25519-dalek 2.0.0", + "curve25519-dalek", "rand 0.7.3", - "sha2", + "sha2 0.8.1", ] [[package]] @@ -749,25 +918,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" [[package]] -name = "elastic-array" -version = "0.10.3" +name = "enum-primitive-derive" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2b90e520ec62c1864c8c78d637acbfe8baf5f63240f2fb8165b8325c07812dd" +dependencies = [ + "num-traits 0.1.43", + "quote 0.3.15", + "syn 0.11.11", +] + +[[package]] +name = "enum-utils" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "580f3768bd6465780d063f5b8213a2ebd506e139b345e4a81eb301ceae3d61e1" +checksum = "ed327f716d0d351d86c9fd3398d20ee39ad8f681873cc081da2ca1c10fed398a" dependencies = [ - "heapsize", + "enum-utils-from-str", + "failure", + "proc-macro2", + "quote 1.0.7", + "serde_derive_internals", + "syn 1.0.17", ] [[package]] -name = "env_logger" -version = "0.6.2" +name = "enum-utils-from-str" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" +checksum = "d49be08bad6e4ca87b2b8e74146987d4e5cb3b7512efa50ef505b51a22227ee1" dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", + "proc-macro2", + "quote 1.0.7", ] [[package]] @@ -791,21 +973,20 @@ checksum = "516aa8d7a71cb00a1c4146f0798549b93d083d4f189b3ced8f3de6b8f11ee6c4" [[package]] name = "erased-serde" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d88b6d1705e16a4d62e05ea61cc0496c2bd190f4fa8e5c1f11ce747be6bcf3d1" +checksum = "6ca8b296792113e1500fd935ae487be6e00ce318952a6880555554824d6ebf38" dependencies = [ "serde", ] [[package]] name = "exit-future" -version = "0.1.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8013f441e38e31c670e7f34ec8f1d5d3a2bd9d303c1ff83976ca886005e8f48" +checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5" dependencies = [ - "futures 0.1.29", - "parking_lot 0.7.1", + "futures 0.3.4", ] [[package]] @@ -824,8 +1005,8 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231" dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", "synstructure", ] @@ -847,26 +1028,26 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.9.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34754852da8d86bc509715292c73140a5b678656d0b16132acd6737bdb5fd5f8" +checksum = "8feb87a63249689640ac9c011742c33139204e3c134293d3054022276869133b" dependencies = [ - "futures 0.1.29", - "hashbrown 0.6.3", + "either", + "futures 0.3.4", + "futures-timer 2.0.2", "log", - "num-traits", + "num-traits 0.2.11", "parity-scale-codec", "parking_lot 0.9.0", ] [[package]] name = "fixed-hash" -version = "0.5.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3367952ceb191f4ab95dd5685dc163ac539e36202f9fcfd0cb22f9f9c542fefc" +checksum = "11498d382790b7a8f2fd211780bec78619bba81cdad3a283997c0c41f836759c" dependencies = [ - "byteorder 1.3.4", - "libc", + "byteorder", "rand 0.7.3", "rustc-hex", "static_assertions", @@ -874,23 +1055,21 @@ dependencies = [ [[package]] name = "fixedbitset" -version = "0.1.9" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" +checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" [[package]] name = "flate2" -version = "1.0.14" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42" +checksum = "68c90b0fc46cf89d227cc78b40e494ff81287a92dd07631e5af0d06fe3cf885e" dependencies = [ "cfg-if", "crc32fast", - "futures 0.1.29", "libc", "libz-sys", "miniz_oxide", - "tokio-io", ] [[package]] @@ -899,28 +1078,186 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da62c4f1b81918835a8c6a484a397775fff5953fe83529afd51b05f5c6a6617d" dependencies = [ - "num-traits", + "num-traits 0.2.11", ] [[package]] name = "fnv" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ "parity-scale-codec", ] [[package]] name = "fragile" -version = "0.3.0" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f8140122fa0d5dcb9fc8627cfce2b37cc1500f752636d46ea28bc26785c2f9" +checksum = "69a039c3498dc930fe810151a34ba0c1c70b02b8625035592e74432f678591f2" + +[[package]] +name = "frame-benchmarking" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-support", + "frame-system", + "linregress", + "parity-scale-codec", + "paste", + "sp-api", + "sp-io", + "sp-runtime", + "sp-runtime-interface", + "sp-std", +] + +[[package]] +name = "frame-benchmarking-cli" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-benchmarking", + "parity-scale-codec", + "sc-cli", + "sc-client-db", + "sc-executor", + "sc-service", + "sp-core", + "sp-externalities", + "sp-runtime", + "sp-state-machine", + "structopt", +] + +[[package]] +name = "frame-executive" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "serde", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", +] + +[[package]] +name = "frame-metadata" +version = "11.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "parity-scale-codec", + "serde", + "sp-core", + "sp-std", +] + +[[package]] +name = "frame-support" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "bitmask", + "frame-metadata", + "frame-support-procedural", + "impl-trait-for-tuples", + "log", + "once_cell", + "parity-scale-codec", + "paste", + "serde", + "smallvec 1.4.1", + "sp-arithmetic", + "sp-core", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-tracing", +] + +[[package]] +name = "frame-support-procedural" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-support-procedural-tools", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", +] + +[[package]] +name = "frame-support-procedural-tools" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-support-procedural-tools-derive", + "proc-macro-crate", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", +] + +[[package]] +name = "frame-support-procedural-tools-derive" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", +] + +[[package]] +name = "frame-system" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-support", + "impl-trait-for-tuples", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-version", +] + +[[package]] +name = "frame-system-benchmarking" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "sp-core", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "frame-system-rpc-runtime-api" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "parity-scale-codec", + "sp-api", +] [[package]] name = "fs-swap" @@ -994,7 +1331,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5e5f4df964fa9c1c2f8bddeb5c3611631cacd93baf810fc8bb2fb4b495c263a" dependencies = [ "futures-core-preview", - "futures-sink-preview", ] [[package]] @@ -1019,6 +1355,22 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "futures-diagnose" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdcef58a173af8148b182684c9f2d5250875adbcaff7b5794073894f9d8634a9" +dependencies = [ + "futures 0.1.29", + "futures 0.3.4", + "lazy_static", + "log", + "parking_lot 0.9.0", + "pin-project", + "serde", + "serde_json", +] + [[package]] name = "futures-executor" version = "0.3.4" @@ -1031,67 +1383,30 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "futures-executor-preview" -version = "0.3.0-alpha.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75236e88bd9fe88e5e8bfcd175b665d0528fe03ca4c5207fabc028c8f9d93e98" -dependencies = [ - "futures-core-preview", - "futures-util-preview", - "num_cpus", -] - [[package]] name = "futures-io" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" -[[package]] -name = "futures-io-preview" -version = "0.3.0-alpha.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4914ae450db1921a56c91bde97a27846287d062087d4a652efc09bb3a01ebda" - [[package]] name = "futures-macro" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" dependencies = [ - "proc-macro-hack 0.5.15", - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro-hack", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", ] -[[package]] -name = "futures-preview" -version = "0.3.0-alpha.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b1dce2a0267ada5c6ff75a8ba864b4e679a9e2aa44262af7a3b5516d530d76e" -dependencies = [ - "futures-channel-preview", - "futures-core-preview", - "futures-executor-preview", - "futures-io-preview", - "futures-sink-preview", - "futures-util-preview", -] - [[package]] name = "futures-sink" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6" -[[package]] -name = "futures-sink-preview" -version = "0.3.0-alpha.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f148ef6b69f75bb610d4f9a2336d4fc88c4b5b67129d1a340dd0fd362efeec" - [[package]] name = "futures-task" version = "0.3.4" @@ -1100,13 +1415,18 @@ checksum = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" [[package]] name = "futures-timer" -version = "0.4.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878f1d2fc31355fa02ed2372e741b0c17e58373341e6a122569b4623a14a7d33" +checksum = "a1de7508b218029b0f01662ed8f61b1c964b3ae99d6f25462d0f55a595109df6" + +[[package]] +name = "futures-timer" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" dependencies = [ - "futures-core-preview", - "futures-util-preview", - "pin-utils", + "gloo-timers", + "send_wrapper 0.4.0", ] [[package]] @@ -1115,6 +1435,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" dependencies = [ + "futures 0.1.29", "futures-channel", "futures-core", "futures-io", @@ -1123,7 +1444,7 @@ dependencies = [ "futures-task", "memchr", "pin-utils", - "proc-macro-hack 0.5.15", + "proc-macro-hack", "proc-macro-nested", "slab", ] @@ -1134,16 +1455,36 @@ version = "0.3.0-alpha.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ce968633c17e5f97936bd2797b6e38fb56cf16a7422319f7ec2e30d3c470e8d" dependencies = [ - "futures 0.1.29", "futures-channel-preview", "futures-core-preview", - "futures-io-preview", - "futures-sink-preview", - "memchr", "pin-utils", "slab", ] +[[package]] +name = "futures_codec" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0a73299e4718f5452e45980fc1d6957a070abe308d3700b63b8673f47e1c2b3" +dependencies = [ + "bytes 0.5.6", + "futures 0.3.4", + "memchr", + "pin-project", +] + +[[package]] +name = "futures_codec" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe8859feb7140742ed1a2a85a07941100ad2b5f98a421b353931d718a34144d1" +dependencies = [ + "bytes 0.5.6", + "futures 0.3.4", + "memchr", + "pin-project", +] + [[package]] name = "gcc" version = "0.3.55" @@ -1159,6 +1500,16 @@ dependencies = [ "typenum", ] +[[package]] +name = "generic-array" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60fb4bb6bba52f78a471264d9a3b7d026cc0af47b22cd2cffbc0b787ca003e63" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "get_if_addrs" version = "0.5.3" @@ -1190,13 +1541,23 @@ dependencies = [ "cfg-if", "libc", "wasi", + "wasm-bindgen", +] + +[[package]] +name = "ghash" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6e27f0689a6e15944bdce7e45425efb87eaa8ab0c6e87f11d0987a9133e2531" +dependencies = [ + "polyval", ] [[package]] name = "glob" -version = "0.2.11" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" [[package]] name = "globset" @@ -1211,17 +1572,30 @@ dependencies = [ "regex", ] +[[package]] +name = "gloo-timers" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47204a46aaff920a1ea58b11d03dec6f704287d27561724a4631e450654a891f" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "h2" version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" dependencies = [ - "byteorder 1.3.4", + "byteorder", "bytes 0.4.12", "fnv", "futures 0.1.29", - "http", + "http 0.1.21", "indexmap", "log", "slab", @@ -1229,6 +1603,25 @@ dependencies = [ "tokio-io", ] +[[package]] +name = "h2" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "993f9e0baeed60001cf565546b0d3dbe6a6ad23f2bd31644a133c641eccf6d53" +dependencies = [ + "bytes 0.5.6", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.1", + "indexmap", + "slab", + "tokio 0.2.22", + "tokio-util", + "tracing", +] + [[package]] name = "hash-db" version = "0.15.2" @@ -1244,16 +1637,6 @@ dependencies = [ "crunchy", ] -[[package]] -name = "hashbrown" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da" -dependencies = [ - "byteorder 1.3.4", - "scopeguard 0.3.3", -] - [[package]] name = "hashbrown" version = "0.6.3" @@ -1265,12 +1648,12 @@ dependencies = [ ] [[package]] -name = "heapsize" -version = "0.4.2" +name = "hashbrown" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1679e6ea370dee694f91f1dc469bf94cf8f52051d147aec3e1f9497c6fc22461" +checksum = "34f595585f103464d8d2f6e9864682d74c1601fed5e07d62b1c9058dba8246fb" dependencies = [ - "winapi 0.3.8", + "autocfg 1.0.0", ] [[package]] @@ -1293,52 +1676,27 @@ dependencies = [ [[package]] name = "hex" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77" - -[[package]] -name = "hex" -version = "0.4.2" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" -[[package]] -name = "hex-literal" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc2928beef125e519d69ae1baa8c37ea2e0d3848545217f6db0179c5eb1d639" -dependencies = [ - "hex-literal-impl 0.1.2", - "proc-macro-hack 0.4.2", -] - [[package]] name = "hex-literal" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "961de220ec9a91af2e1e5bd80d02109155695e516771762381ef8581317066e0" dependencies = [ - "hex-literal-impl 0.2.1", - "proc-macro-hack 0.5.15", -] - -[[package]] -name = "hex-literal-impl" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520870c3213943eb8d7803e80180d12a6c7ceb4ae74602544529d1643dc4ddda" -dependencies = [ - "proc-macro-hack 0.4.2", + "hex-literal-impl", + "proc-macro-hack", ] [[package]] name = "hex-literal-impl" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d4c5c844e2fee0bf673d54c2c177f1713b3d2af2ff6e666b49cb7572e6cf42d" +checksum = "853f769599eb31de176303197b7ba4973299c38c7a7604a6bc88c3eef05b9b46" dependencies = [ - "proc-macro-hack 0.5.15", + "proc-macro-hack", ] [[package]] @@ -1347,8 +1705,8 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" dependencies = [ - "crypto-mac", - "digest", + "crypto-mac 0.7.0", + "digest 0.8.1", ] [[package]] @@ -1357,8 +1715,8 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6e570451493f10f6581b48cdd530413b63ea9e780f544bfd3bdcaa0d89d1a7b" dependencies = [ - "digest", - "generic-array", + "digest 0.8.1", + "generic-array 0.12.3", "hmac", ] @@ -1373,6 +1731,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" +dependencies = [ + "bytes 0.5.6", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.1.0" @@ -1381,10 +1750,20 @@ checksum = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" dependencies = [ "bytes 0.4.12", "futures 0.1.29", - "http", + "http 0.1.21", "tokio-buf", ] +[[package]] +name = "http-body" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" +dependencies = [ + "bytes 0.5.6", + "http 0.2.1", +] + [[package]] name = "httparse" version = "1.3.4" @@ -1409,9 +1788,9 @@ dependencies = [ "bytes 0.4.12", "futures 0.1.29", "futures-cpupool", - "h2", - "http", - "http-body", + "h2 0.1.26", + "http 0.1.21", + "http-body 0.1.0", "httparse", "iovec", "itoa", @@ -1419,32 +1798,57 @@ dependencies = [ "net2", "rustc_version", "time", - "tokio", + "tokio 0.1.22", "tokio-buf", - "tokio-executor", + "tokio-executor 0.1.10", "tokio-io", "tokio-reactor", "tokio-tcp", "tokio-threadpool", "tokio-timer", - "want", + "want 0.2.0", +] + +[[package]] +name = "hyper" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e68a8dd9716185d9e64ea473ea6ef63529252e3e27623295a0378a19665d5eb" +dependencies = [ + "bytes 0.5.6", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.2.6", + "http 0.2.1", + "http-body 0.3.1", + "httparse", + "itoa", + "pin-project", + "socket2", + "time", + "tokio 0.2.22", + "tower-service", + "tracing", + "want 0.3.0", ] [[package]] name = "hyper-rustls" -version = "0.17.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719d85c7df4a7f309a77d145340a063ea929dcb2e025bae46a80345cffec2952" +checksum = "ac965ea399ec3a25ac7d13b8affd4b8f39325cca00858ddf5eb29b79e6b14b08" dependencies = [ - "bytes 0.4.12", + "bytes 0.5.6", "ct-logs", - "futures 0.1.29", - "hyper", + "futures-util", + "hyper 0.13.7", + "log", "rustls", - "tokio-io", + "rustls-native-certs", + "tokio 0.2.22", "tokio-rustls", "webpki", - "webpki-roots 0.17.0", ] [[package]] @@ -1502,18 +1906,19 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ef5550a42e3740a0e71f909d4c861056a284060af885ae7aa6242820f920d9d" dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", ] [[package]] name = "indexmap" -version = "1.3.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292" +checksum = "5b88cd59ee5f71fea89a62248fc8f387d44400cefe05ef548466d61ced9029a7" dependencies = [ "autocfg 1.0.0", + "hashbrown 0.8.1", ] [[package]] @@ -1523,10 +1928,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f65877bf7d44897a473350b1046277941cee20b263397e90869c50b6e766088b" [[package]] -name = "interleaved-ordered" -version = "0.1.1" +name = "intervalier" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "141340095b15ed7491bd3d4ced9d20cebfb826174b6bb03386381f62b01e3d77" +checksum = "64fa110ec7b8f493f416eed552740d10e7030ad5f63b2308f82c9608ec2df275" +dependencies = [ + "futures 0.3.4", + "futures-timer 2.0.2", +] [[package]] name = "iovec" @@ -1537,6 +1946,12 @@ dependencies = [ "libc", ] +[[package]] +name = "ip_network" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ee15951c035f79eddbef745611ec962f63f4558f1dadf98ab723cc603487c6f" + [[package]] name = "ipnet" version = "2.3.0" @@ -1552,11 +1967,20 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + [[package]] name = "itoa" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" [[package]] name = "jobserver" @@ -1569,105 +1993,131 @@ dependencies = [ [[package]] name = "joystream-node" -version = "2.3.0" +version = "3.1.0" dependencies = [ - "ctrlc", - "derive_more 0.14.1", - "exit-future", - "futures 0.1.29", - "hex 0.4.2", - "hex-literal 0.2.1", + "frame-benchmarking", + "frame-benchmarking-cli", + "frame-system", + "futures 0.3.4", + "hex", "joystream-node-runtime", - "jsonrpc-core 13.2.0", - "libp2p", - "log", + "jsonrpc-core", + "node-inspect", + "pallet-grandpa", + "pallet-im-online", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc", "parity-scale-codec", - "parking_lot 0.9.0", - "rand 0.7.3", + "sc-authority-discovery", + "sc-basic-authorship", + "sc-chain-spec", + "sc-cli", + "sc-client-api", + "sc-consensus", + "sc-consensus-babe", + "sc-consensus-babe-rpc", + "sc-consensus-epochs", + "sc-executor", + "sc-finality-grandpa", + "sc-finality-grandpa-rpc", + "sc-keystore", + "sc-network", + "sc-rpc-api", + "sc-service", + "sc-service-test", + "sc-transaction-pool", "serde", "serde_json", - "sr-io", - "sr-primitives", - "srml-im-online", + "sp-api", + "sp-authority-discovery", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-core", + "sp-finality-grandpa", + "sp-finality-tracker", + "sp-inherents", + "sp-keyring", + "sp-runtime", + "sp-timestamp", + "sp-transaction-pool", "structopt", - "substrate-authority-discovery", - "substrate-basic-authorship", - "substrate-cli", - "substrate-client", - "substrate-client-db", - "substrate-consensus-babe", - "substrate-consensus-babe-primitives", - "substrate-executor", - "substrate-finality-grandpa", - "substrate-finality-grandpa-primitives", - "substrate-inherents", - "substrate-network", - "substrate-offchain", - "substrate-primitives", - "substrate-rpc", - "substrate-service", - "substrate-telemetry", - "substrate-transaction-pool", - "tokio", - "vergen", + "substrate-browser-utils", + "substrate-build-script-utils", + "substrate-frame-rpc-system", + "tempfile", + "wasm-bindgen", + "wasm-bindgen-futures", ] [[package]] name = "joystream-node-runtime" -version = "6.15.0" -dependencies = [ +version = "7.3.0" +dependencies = [ + "frame-benchmarking", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-benchmarking", + "frame-system-rpc-runtime-api", + "pallet-authority-discovery", + "pallet-authorship", + "pallet-babe", + "pallet-balances", + "pallet-collective", + "pallet-common", + "pallet-content-directory", + "pallet-content-working-group", + "pallet-finality-tracker", + "pallet-forum", + "pallet-governance", + "pallet-grandpa", + "pallet-hiring", + "pallet-im-online", + "pallet-membership", + "pallet-memo", + "pallet-offences", + "pallet-offences-benchmarking", + "pallet-proposals-codex", + "pallet-proposals-discussion", + "pallet-proposals-engine", + "pallet-randomness-collective-flip", + "pallet-recurring-reward", + "pallet-service-discovery", + "pallet-session", + "pallet-session-benchmarking", + "pallet-stake", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-storage", + "pallet-sudo", + "pallet-timestamp", + "pallet-token-mint", + "pallet-transaction-payment", + "pallet-transaction-payment-rpc-runtime-api", + "pallet-utility", + "pallet-versioned-store", + "pallet-versioned-store-permissions", + "pallet-working-group", "parity-scale-codec", - "safe-mix", "serde", - "sr-io", - "sr-primitives", - "sr-staking-primitives", - "sr-std", - "sr-version", - "srml-authority-discovery", - "srml-authorship", - "srml-babe", - "srml-balances", - "srml-executive", - "srml-finality-tracker", - "srml-grandpa", - "srml-im-online", - "srml-indices", - "srml-offences", - "srml-randomness-collective-flip", - "srml-session", - "srml-staking", - "srml-staking-reward-curve", - "srml-sudo", - "srml-support", - "srml-system", - "srml-system-rpc-runtime-api", - "srml-timestamp", - "srml-transaction-payment", - "substrate-authority-discovery-primitives", - "substrate-client", - "substrate-common-module", - "substrate-consensus-babe-primitives", - "substrate-content-working-group-module", - "substrate-forum-module", - "substrate-governance-module", - "substrate-hiring-module", - "substrate-membership-module", - "substrate-memo-module", - "substrate-offchain-primitives", - "substrate-primitives", - "substrate-proposals-codex-module", - "substrate-proposals-discussion-module", - "substrate-proposals-engine-module", - "substrate-recurring-reward-module", - "substrate-roles-module", - "substrate-service-discovery-module", - "substrate-session", - "substrate-stake-module", - "substrate-storage-module", - "substrate-token-mint-module", - "substrate-versioned-store", - "substrate-versioned-store-permissions-module", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-authority-discovery", + "sp-block-builder", + "sp-consensus-babe", + "sp-core", + "sp-io", + "sp-offchain", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "sp-transaction-pool", + "sp-version", + "strum 0.19.2", "substrate-wasm-builder-runner", ] @@ -1682,13 +2132,13 @@ dependencies = [ [[package]] name = "jsonrpc-client-transports" -version = "14.0.5" +version = "14.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a9ae166c4d1f702d297cd76d4b55758ace80272ffc6dbb139fdc1bf810de40b" +checksum = "ecbdaacc17243168d9d1fa6b2bd7556a27e1e60a621d8a2a6e590ae2b145d158" dependencies = [ "failure", "futures 0.1.29", - "jsonrpc-core 14.0.5", + "jsonrpc-core", "jsonrpc-pubsub", "log", "serde", @@ -1698,22 +2148,9 @@ dependencies = [ [[package]] name = "jsonrpc-core" -version = "13.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d767c183a7e58618a609499d359ce3820700b3ebb4823a18c343b4a2a41a0d" -dependencies = [ - "futures 0.1.29", - "log", - "serde", - "serde_derive", - "serde_json", -] - -[[package]] -name = "jsonrpc-core" -version = "14.0.5" +version = "14.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe3b688648f1ef5d5072229e2d672ecb92cbff7d1c79bcf3fd5898f3f3df0970" +checksum = "a0747307121ffb9703afd93afbd0fb4f854c38fb873f2c8b90e0e902f27c7b62" dependencies = [ "futures 0.1.29", "log", @@ -1724,78 +2161,93 @@ dependencies = [ [[package]] name = "jsonrpc-core-client" -version = "14.0.5" +version = "14.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080dc110be17701097df238fad3c816d4a478a1899dfbcf8ec8957dd40ec7304" +checksum = "34221123bc79b66279a3fde2d3363553835b43092d629b34f2e760c44dc94713" dependencies = [ "jsonrpc-client-transports", ] [[package]] name = "jsonrpc-derive" -version = "14.0.5" +version = "14.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8609af8f63b626e8e211f52441fcdb6ec54f1a446606b10d5c89ae9bf8a20058" +checksum = "0fadf6945e227246825a583514534d864554e9f23d80b3c77d034b10983db5ef" dependencies = [ "proc-macro-crate", - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", ] [[package]] name = "jsonrpc-http-server" -version = "14.0.6" +version = "14.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816d63997ea45d3634608edbef83ddb35e661f7c0b27b5b72f237e321f0e9807" +checksum = "0da906d682799df05754480dac1b9e70ec92e12c19ebafd2662a5ea1c9fd6522" dependencies = [ - "hyper", - "jsonrpc-core 14.0.5", + "hyper 0.12.35", + "jsonrpc-core", "jsonrpc-server-utils", "log", "net2", - "parking_lot 0.10.0", + "parking_lot 0.10.2", "unicase", ] +[[package]] +name = "jsonrpc-ipc-server" +version = "14.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dedccd693325d833963b549e959137f30a7a0ea650cde92feda81dc0c1393cb5" +dependencies = [ + "jsonrpc-core", + "jsonrpc-server-utils", + "log", + "parity-tokio-ipc", + "parking_lot 0.10.2", + "tokio-service", +] + [[package]] name = "jsonrpc-pubsub" -version = "14.0.6" +version = "14.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b31c9b90731276fdd24d896f31bb10aecf2e5151733364ae81123186643d939" +checksum = "2d44f5602a11d657946aac09357956d2841299ed422035edf140c552cb057986" dependencies = [ - "jsonrpc-core 14.0.5", + "jsonrpc-core", "log", - "parking_lot 0.10.0", + "parking_lot 0.10.2", + "rand 0.7.3", "serde", ] [[package]] name = "jsonrpc-server-utils" -version = "14.0.5" +version = "14.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b7635e618a0edbbe0d2a2bbbc69874277c49383fcf6c3c0414491cfb517d22" +checksum = "56cbfb462e7f902e21121d9f0d1c2b77b2c5b642e1a4e8f4ebfa2e15b94402bb" dependencies = [ "bytes 0.4.12", "globset", - "jsonrpc-core 14.0.5", + "jsonrpc-core", "lazy_static", "log", - "tokio", + "tokio 0.1.22", "tokio-codec", "unicase", ] [[package]] name = "jsonrpc-ws-server" -version = "14.0.6" +version = "14.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94e5773b2ae66e0e02c80775ce6bbba6f15d5bb47c14ec36a36fcf94f8df851" +checksum = "903d3109fe7c4acb932b567e1e607e0f524ed04741b09fb0e61841bc40a022fc" dependencies = [ - "jsonrpc-core 14.0.5", + "jsonrpc-core", "jsonrpc-server-utils", "log", - "parking_lot 0.10.0", + "parking_lot 0.10.2", "slab", "ws", ] @@ -1816,38 +2268,69 @@ dependencies = [ "winapi-build", ] +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + [[package]] name = "kvdb" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d#b0317f649ab2c665b7987b8475878fc4d2e1f81d" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e763b2a9b500ba47948061d1e8bc3b5f03a8a1f067dbcf822a4d2c84d2b54a3a" dependencies = [ - "elastic-array", - "parity-bytes", + "parity-util-mem", + "smallvec 1.4.1", ] [[package]] name = "kvdb-memorydb" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d#b0317f649ab2c665b7987b8475878fc4d2e1f81d" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73027d5e228de6f503b5b7335d530404fc26230a6ae3e09b33ec6e45408509a4" dependencies = [ "kvdb", - "parking_lot 0.6.4", + "parity-util-mem", + "parking_lot 0.10.2", ] [[package]] name = "kvdb-rocksdb" -version = "0.1.4" -source = "git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d#b0317f649ab2c665b7987b8475878fc4d2e1f81d" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84384eca250c7ff67877eda5336f28a86586aaee24acb945643590671f6bfce1" dependencies = [ - "elastic-array", "fs-swap", - "interleaved-ordered", "kvdb", "log", "num_cpus", - "parking_lot 0.6.4", + "owning_ref", + "parity-util-mem", + "parking_lot 0.10.2", "regex", "rocksdb", + "smallvec 1.4.1", +] + +[[package]] +name = "kvdb-web" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c7f36acb1841d4c701d30ae1f2cfd242e805991443f75f6935479ed3de64903" +dependencies = [ + "futures 0.3.4", + "js-sys", + "kvdb", + "kvdb-memorydb", + "log", + "parity-util-mem", + "send_wrapper 0.3.0", + "wasm-bindgen", + "web-sys", ] [[package]] @@ -1864,9 +2347,27 @@ checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" [[package]] name = "libc" -version = "0.2.68" +version = "0.2.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2f02823cf78b754822df5f7f268fb59822e7296276d3e069d8e8cb26a14bd10" + +[[package]] +name = "libflate" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0" +checksum = "e9bac9023e1db29c084f9f8cd9d3852e5e8fddf98fb47c4964a0ea4663d95949" +dependencies = [ + "adler32", + "crc32fast", + "libflate_lz77", + "rle-decode-fast", +] + +[[package]] +name = "libflate_lz77" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3286f09f7d4926fc486334f28d8d2e6ebe4f7f9994494b6dab27ddfad2c9b11b" [[package]] name = "libloading" @@ -1878,401 +2379,299 @@ dependencies = [ "winapi 0.3.8", ] +[[package]] +name = "libm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" + [[package]] name = "libp2p" -version = "0.13.2" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4674c6738fdd8b1cf7104dd046abcef78dc932fe25f8eb40f3a8e71341717d" +checksum = "057eba5432d3e740e313c6e13c9153d0cb76b4f71bfc2e5242ae5bdb7d41af67" dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", + "bytes 0.5.6", + "futures 0.3.4", "lazy_static", "libp2p-core", "libp2p-core-derive", - "libp2p-deflate", "libp2p-dns", - "libp2p-floodsub", "libp2p-identify", "libp2p-kad", "libp2p-mdns", "libp2p-mplex", "libp2p-noise", "libp2p-ping", - "libp2p-plaintext", - "libp2p-secio", "libp2p-swarm", "libp2p-tcp", - "libp2p-uds", "libp2p-wasm-ext", "libp2p-websocket", "libp2p-yamux", - "parity-multiaddr 0.6.0", - "parity-multihash 0.2.3", - "parking_lot 0.9.0", - "smallvec 0.6.13", - "tokio-codec", - "tokio-executor", - "tokio-io", + "multihash", + "parity-multiaddr 0.9.1", + "parking_lot 0.10.2", + "pin-project", + "smallvec 1.4.1", "wasm-timer", ] [[package]] name = "libp2p-core" -version = "0.13.2" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01efc769c392d0d8863a7160d266f9b9f794968554f87490c8af4aa34ccaa94f" +checksum = "3a0387b930c3d4c2533dc4893c1e0394185ddcc019846121b1b27491e45a2c08" dependencies = [ "asn1_der", - "bs58 0.3.0", - "bytes 0.4.12", - "ed25519-dalek 1.0.0-pre.3", - "failure", + "bs58", + "ed25519-dalek", + "either", "fnv", - "futures 0.1.29", + "futures 0.3.4", + "futures-timer 3.0.2", "lazy_static", "libsecp256k1", "log", + "multihash", "multistream-select", - "parity-multiaddr 0.6.0", - "parity-multihash 0.2.3", - "parking_lot 0.9.0", - "protobuf", - "quick-error", + "parity-multiaddr 0.9.1", + "parking_lot 0.10.2", + "pin-project", + "prost", + "prost-build", "rand 0.7.3", "ring", "rw-stream-sink", - "sha2", - "smallvec 0.6.13", - "tokio-executor", - "tokio-io", - "unsigned-varint 0.2.3", - "untrusted", + "sha2 0.8.1", + "smallvec 1.4.1", + "thiserror", + "unsigned-varint 0.4.0", "void", - "wasm-timer", - "zeroize 1.1.0", + "zeroize", ] [[package]] name = "libp2p-core-derive" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1eeb2704ac14c60f31967e351ed928b848526a5fc6db4104520020665012826f" -dependencies = [ - "quote 0.6.13", - "syn 0.15.44", -] - -[[package]] -name = "libp2p-deflate" -version = "0.5.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef2b0bf5d37692ac90e2bffa436bec26c0b0def6c0cab7ea85ff67a353d58aaa" +checksum = "f09548626b737ed64080fde595e06ce1117795b8b9fc4d2629fa36561c583171" dependencies = [ - "flate2", - "futures 0.1.29", - "libp2p-core", - "tokio-io", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] name = "libp2p-dns" -version = "0.13.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3175fb0fc9016c95c8517a297bbdb5fb6bfbd5665bacd2eb23495d1cbdeb033" +checksum = "3cc186d9a941fd0207cf8f08ef225a735e2d7296258f570155e525f6ee732f87" dependencies = [ - "futures 0.1.29", + "futures 0.3.4", "libp2p-core", "log", - "tokio-dns-unofficial", -] - -[[package]] -name = "libp2p-floodsub" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b360bbaad2560d6b8a905bd63528273d933fe54475a44def47f31e23108b3683" -dependencies = [ - "bs58 0.3.0", - "bytes 0.4.12", - "cuckoofilter", - "fnv", - "futures 0.1.29", - "libp2p-core", - "libp2p-swarm", - "protobuf", - "rand 0.6.5", - "smallvec 0.6.13", - "tokio-io", ] [[package]] name = "libp2p-identify" -version = "0.13.2" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c087bcd044a6f67a994573a92a109487a902a31555e4e63bcc4ae144c45594fe" +checksum = "62f76075b170d908bae616f550ade410d9d27c013fa69042551dbfc757c7c094" dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", + "futures 0.3.4", "libp2p-core", "libp2p-swarm", "log", - "parity-multiaddr 0.6.0", - "protobuf", - "smallvec 0.6.13", - "tokio-codec", - "tokio-io", - "unsigned-varint 0.2.3", + "prost", + "prost-build", + "smallvec 1.4.1", "wasm-timer", ] [[package]] name = "libp2p-kad" -version = "0.13.2" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcaf76a5b33b6c0203e85d450ae1855cae6860dc82eb0174ac1fee8bf68f7af5" +checksum = "41d6c1d5100973527ae70d82687465b17049c1b717a7964de38b8e65000878ff" dependencies = [ "arrayvec 0.5.1", - "bytes 0.4.12", + "bytes 0.5.6", "either", "fnv", - "futures 0.1.29", + "futures 0.3.4", + "futures_codec 0.3.4", "libp2p-core", "libp2p-swarm", "log", - "parity-multiaddr 0.6.0", - "parity-multihash 0.2.3", - "protobuf", + "multihash", + "prost", + "prost-build", "rand 0.7.3", - "sha2", - "smallvec 0.6.13", - "tokio-codec", - "tokio-io", + "sha2 0.8.1", + "smallvec 1.4.1", "uint", - "unsigned-varint 0.2.3", + "unsigned-varint 0.3.3", "void", "wasm-timer", ] [[package]] name = "libp2p-mdns" -version = "0.13.1" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4c2e225a7dfc571c3ad77a0a5ecccc9537afe42d72289ac9f19768567cd677d" +checksum = "7f55b2d4b80986e5bf158270ab23268ec0e7f644ece5436fbaabc5155472f357" dependencies = [ + "async-std", "data-encoding", "dns-parser", - "futures 0.1.29", + "either", + "futures 0.3.4", + "lazy_static", "libp2p-core", "libp2p-swarm", "log", "net2", - "parity-multiaddr 0.6.0", - "rand 0.6.5", - "smallvec 0.6.13", - "tokio-io", - "tokio-reactor", - "tokio-udp", + "rand 0.7.3", + "smallvec 1.4.1", "void", "wasm-timer", ] [[package]] name = "libp2p-mplex" -version = "0.13.0" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2fe584816d993dc0f893396521a3c93191d78a6f28a892b150baa714a12c3e5" +checksum = "be7d913a4cd57de2013257ec73f07d77bfce390b370023e2d59083e5ca079864" dependencies = [ - "bytes 0.4.12", + "bytes 0.5.6", "fnv", - "futures 0.1.29", + "futures 0.3.4", + "futures_codec 0.4.0", "libp2p-core", "log", - "parking_lot 0.8.0", - "tokio-codec", - "tokio-io", - "unsigned-varint 0.2.3", + "parking_lot 0.10.2", + "unsigned-varint 0.4.0", ] [[package]] name = "libp2p-noise" -version = "0.11.1" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50494fcba7cdab08390d72b3cb9d2c72fcf178e6a0c1043855ab259d818b972" +checksum = "a03db664653369f46ee03fcec483a378c20195089bb43a26cb9fb0058009ac88" dependencies = [ - "bytes 0.4.12", - "curve25519-dalek 1.2.3", - "futures 0.1.29", + "curve25519-dalek", + "futures 0.3.4", "lazy_static", "libp2p-core", "log", - "protobuf", + "prost", + "prost-build", "rand 0.7.3", - "ring", + "sha2 0.8.1", "snow", - "tokio-io", + "static_assertions", "x25519-dalek", - "zeroize 1.1.0", + "zeroize", ] [[package]] name = "libp2p-ping" -version = "0.13.1" +version = "0.19.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b975ad345eb9bb29ddc64670664a50a8ab3e66e28357abb0f83cfc0a9ca2d78" +checksum = "b8dedd34e35a9728d52d59ef36a218e411359a353f9011b2574b86ee790978f6" dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", + "futures 0.3.4", "libp2p-core", "libp2p-swarm", "log", - "parity-multiaddr 0.6.0", "rand 0.7.3", - "tokio-io", "void", "wasm-timer", ] [[package]] -name = "libp2p-plaintext" -version = "0.13.1" +name = "libp2p-swarm" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f07be6983e1c00e8f6a5676da54ed3a8cae7fb50f1fb6ea163414613ca656cc" +checksum = "ce53ff4d127cf8b39adf84dbd381ca32d49bd85788cee08e6669da2495993930" dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "libp2p-core", - "log", - "protobuf", - "rw-stream-sink", - "tokio-io", - "void", -] - -[[package]] -name = "libp2p-secio" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04aa6d67a5fb2b36241a1ba54037a13deb2594cf141e43b597ce379521d530a8" -dependencies = [ - "aes-ctr", - "bytes 0.4.12", - "ctr", - "futures 0.1.29", - "hmac", - "js-sys", - "lazy_static", + "futures 0.3.4", "libp2p-core", "log", - "parity-send-wrapper", - "protobuf", - "rand 0.6.5", - "ring", - "rw-stream-sink", - "sha2", - "tokio-codec", - "tokio-io", - "twofish", - "untrusted", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "libp2p-swarm" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd55bc9f5f9eac2bb1ff24ca3c8a655810a566ac38c7a6ee1f30aced5a62905b" -dependencies = [ - "futures 0.1.29", - "libp2p-core", - "smallvec 0.6.13", - "tokio-io", + "rand 0.7.3", + "smallvec 1.4.1", "void", "wasm-timer", ] [[package]] name = "libp2p-tcp" -version = "0.13.0" +version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234a7093d05651ab5630db926a4a42ca8978a65bab8c27c2ce2b66b200c76989" +checksum = "9481500c5774c62e8c413e9535b3f33a0e3dbacf2da63b8d3056c686a9df4146" dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", + "async-std", + "futures 0.3.4", + "futures-timer 3.0.2", "get_if_addrs", "ipnet", "libp2p-core", "log", - "tokio-io", - "tokio-tcp", - "tokio-timer", -] - -[[package]] -name = "libp2p-uds" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e2fe0648967da3e56e4a55055c857c8c48326b66be0047d0e04c8ca60d34630" -dependencies = [ - "futures 0.1.29", - "libp2p-core", - "log", - "tokio-uds", + "socket2", ] [[package]] name = "libp2p-wasm-ext" -version = "0.6.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f7b8f2bd81fb356e81352d4513856bc21215ecf91502aa1f55b6449642a9acf" +checksum = "f59fdbb5706f2723ca108c088b1c7a37f735a8c328021f0508007162627e9885" dependencies = [ - "futures 0.1.29", + "futures 0.3.4", "js-sys", "libp2p-core", "parity-send-wrapper", - "tokio-io", "wasm-bindgen", "wasm-bindgen-futures", ] [[package]] name = "libp2p-websocket" -version = "0.13.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d74d4fc229ad7e8d1a973178786bdcd5dadbdd7b9822c4477c8687df6f82f66" +checksum = "085fbe4c05c4116c2164ab4d5a521eb6e00516c444f61b3ee9f68c7b1e53580b" dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", + "async-tls", + "bytes 0.5.6", + "either", + "futures 0.3.4", "libp2p-core", "log", + "quicksink", + "rustls", "rw-stream-sink", "soketto", - "tokio-codec", - "tokio-io", - "tokio-rustls", "url 2.1.1", + "webpki", "webpki-roots 0.18.0", ] [[package]] name = "libp2p-yamux" -version = "0.13.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1913eb7dd6eb5515957b6f1770296f6921968db87bc9b985f0e974b6657e1003" +checksum = "8da33e7b5f49c75c6a8afb0b8d1e229f5fa48be9f39bd14cdbc21459a02ac6fc" dependencies = [ - "futures 0.1.29", + "futures 0.3.4", "libp2p-core", - "log", - "tokio-io", + "parking_lot 0.10.2", + "thiserror", "yamux", ] [[package]] name = "librocksdb-sys" -version = "5.18.3" +version = "6.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19778314deaa7048f2ea7d07b8aa12e1c227acebe975a37eeab6d2f8c74e41b" +checksum = "883213ae3d09bfc3d104aefe94b25ebb183b6f4d3a515b23b14817e1f4854005" dependencies = [ "bindgen", "cc", @@ -2288,10 +2687,10 @@ checksum = "1fc1e2c808481a63dc6da2074752fdd4336a3c8fcc68b83db6f1fd5224ae7962" dependencies = [ "arrayref", "crunchy", - "digest", + "digest 0.8.1", "hmac-drbg", "rand 0.7.3", - "sha2", + "sha2 0.8.1", "subtle 2.2.2", "typenum", ] @@ -2310,45 +2709,37 @@ dependencies = [ [[package]] name = "linked-hash-map" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" +checksum = "8dd5a6d5999d9907cda8ed67bbd137d3af8085216c2ac62de5be860bd41f304a" [[package]] name = "linked_hash_set" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c7c91c4c7bbeb4f2f7c4e5be11e6a05bd6830bc37249c47ce1ad86ad453ff9c" +checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588" dependencies = [ "linked-hash-map", ] [[package]] -name = "lock_api" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ebf1391f6acad60e5c8b43706dde4582df75c06698ab44511d15016bc2442c" -dependencies = [ - "owning_ref", - "scopeguard 0.3.3", -] - -[[package]] -name = "lock_api" -version = "0.2.0" +name = "linregress" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed946d4529956a20f2d63ebe1b69996d5a2137c91913fe3ebbeff957f5bca7ff" +checksum = "9290cf6f928576eeb9c096c6fad9d8d452a0a1a70a2bbffa6e36064eedc0aac9" dependencies = [ - "scopeguard 1.1.0", + "failure", + "nalgebra", + "statrs", ] [[package]] name = "lock_api" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b" +checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75" dependencies = [ - "scopeguard 1.1.0", + "scopeguard", ] [[package]] @@ -2361,23 +2752,12 @@ dependencies = [ ] [[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "malloc_size_of_derive" -version = "0.1.1" +name = "lru" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e37c5d4cd9473c5f4c9c111f033f15d4df9bd378fdf615944e360a4f55a05f0b" +checksum = "0609345ddee5badacf857d4f547e0e5a2e987db77085c24cd887f73573a04237" dependencies = [ - "proc-macro2 1.0.10", - "syn 1.0.17", - "synstructure", + "hashbrown 0.6.3", ] [[package]] @@ -2386,6 +2766,15 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +[[package]] +name = "matrixmultiply" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4f7ec66360130972f34830bfad9ef05c6610a43938a467bcc9ab9369ab3478f" +dependencies = [ + "rawpointer", +] + [[package]] name = "maybe-uninit" version = "2.0.0" @@ -2398,20 +2787,30 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" +[[package]] +name = "memmap" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" +dependencies = [ + "libc", + "winapi 0.3.8", +] + [[package]] name = "memoffset" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4fc2c02a7e374099d4ee95a193111f72d2110197fe200272371758f6c3643d8" +checksum = "c198b026e1bbf08a937e94c6c60f9ec4a2267f5b0d2eec9c1b21b061ce2be55f" dependencies = [ "autocfg 1.0.0", ] [[package]] name = "memory-db" -version = "0.15.3" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dabfe0a8c69954ae3bcfc5fc14260a85fb80e1bf9f86a155f668d10a67e93dd" +checksum = "fb2999ff7a65d5a1d72172f6d51fa2ea03024b51aee709ba5ff81c3c629a2410" dependencies = [ "ahash", "hash-db", @@ -2427,30 +2826,30 @@ checksum = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" [[package]] name = "merlin" -version = "1.3.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0942b357c1b4d0dc43ba724674ec89c3218e6ca2b3e8269e7cb53bcecd2f6e" +checksum = "c6feca46f4fa3443a01769d768727f10c10a20fdb65e52dc16a81f0c8269bb78" dependencies = [ - "byteorder 1.3.4", + "byteorder", "keccak", - "rand_core 0.4.2", - "zeroize 1.1.0", + "rand_core 0.5.1", + "zeroize", ] [[package]] name = "miniz_oxide" -version = "0.3.6" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5" +checksum = "be0f75932c1f6cfae3c04000e40114adf955636e19040f9c0a2c380702aa1c7f" dependencies = [ - "adler32", + "adler", ] [[package]] name = "mio" -version = "0.6.21" +version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" +checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" dependencies = [ "cfg-if", "fuchsia-zircon", @@ -2459,7 +2858,7 @@ dependencies = [ "kernel32-sys", "libc", "log", - "miow", + "miow 0.2.1", "net2", "slab", "winapi 0.2.8", @@ -2477,6 +2876,18 @@ dependencies = [ "slab", ] +[[package]] +name = "mio-named-pipes" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0840c1c50fd55e521b247f949c241c9997709f23bd7f023b9762cd561e935656" +dependencies = [ + "log", + "mio", + "miow 0.3.5", + "winapi 0.3.8", +] + [[package]] name = "mio-uds" version = "0.6.7" @@ -2500,11 +2911,21 @@ dependencies = [ "ws2_32-sys", ] +[[package]] +name = "miow" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07b88fb9795d4d36d62a012dfbf49a8f5cf12751f36d31a9dbe66d528e58979e" +dependencies = [ + "socket2", + "winapi 0.3.8", +] + [[package]] name = "mockall" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b95a7e7cfbce0e99ebbf5356a085d3b5e320a7ef300f77cd50a7148aa362e7c2" +checksum = "256489d4d106cd2bc9e98ed0337402db0044de0621745d5d9eb70a14295ff77b" dependencies = [ "cfg-if", "downcast", @@ -2517,34 +2938,66 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.6.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5a615a1ad92048ad5d9633251edb7492b8abc057d7a679a9898476aef173935" +checksum = "826e14e8643cb12103b56efb963e5f9640b69b0f7bdcc460002092df4b0e959f" dependencies = [ "cfg-if", - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", ] +[[package]] +name = "multihash" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75db05d738947aa5389863aadafbcf2e509d7ba099dc2ddcdf4fc66bf7a9e03" +dependencies = [ + "blake2b_simd", + "blake2s_simd", + "digest 0.8.1", + "sha-1", + "sha2 0.8.1", + "sha3", + "unsigned-varint 0.3.3", +] + [[package]] name = "multimap" -version = "0.4.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04b9f127583ed176e163fb9ec6f3e793b87e21deedd5734a69386a18a0151" +checksum = "d8883adfde9756c1d30b0f519c9b8c502a94b41ac62f696453c37c7fc0a958ce" [[package]] name = "multistream-select" -version = "0.6.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc3ef54aab1b2e37e911bcb99e376dbe4c1e0710afcdb8428608e4f993b39c47" +checksum = "c9157e87afbc2ef0d84cc0345423d715f445edde00141c93721c162de35a05e5" dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", + "bytes 0.5.6", + "futures 0.3.4", "log", - "smallvec 0.6.13", - "tokio-io", - "unsigned-varint 0.2.3", + "pin-project", + "smallvec 1.4.1", + "unsigned-varint 0.4.0", +] + +[[package]] +name = "nalgebra" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaa9fddbc34c8c35dd2108515587b8ce0cab396f17977b8c738568e4edb521a2" +dependencies = [ + "alga", + "approx", + "generic-array 0.12.3", + "matrixmultiply", + "num-complex", + "num-rational", + "num-traits 0.2.11", + "rand 0.6.5", + "typenum", ] [[package]] @@ -2558,15 +3011,29 @@ dependencies = [ [[package]] name = "net2" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" +checksum = "2ba7c918ac76704fb42afcbbb43891e72731f3dcca3bef2a19786297baf14af7" dependencies = [ "cfg-if", "libc", "winapi 0.3.8", ] +[[package]] +name = "netstat2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29449d242064c48d3057a194b049a2bdcccadda16faa18a91468677b44e8d422" +dependencies = [ + "bitflags", + "byteorder", + "enum-primitive-derive", + "libc", + "num-traits 0.2.11", + "thiserror", +] + [[package]] name = "nix" version = "0.17.0" @@ -2580,6 +3047,23 @@ dependencies = [ "void", ] +[[package]] +name = "node-inspect" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "derive_more", + "log", + "parity-scale-codec", + "sc-cli", + "sc-client-api", + "sc-service", + "sp-blockchain", + "sp-core", + "sp-runtime", + "structopt", +] + [[package]] name = "nodrop" version = "0.1.14" @@ -2588,18 +3072,18 @@ checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" [[package]] name = "nohash-hasher" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721a2bf1c26159ebf17e0a980bc4ce61f4b2fec5ec3b42d42fddd7a84a9e538f" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nom" -version = "4.2.3" +version = "5.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" dependencies = [ "memchr", - "version_check 0.1.5", + "version_check", ] [[package]] @@ -2608,6 +3092,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" +[[package]] +name = "ntapi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a31937dea023539c72ddae0e3571deadc1414b300483fa7aaec176168cfa9d2" +dependencies = [ + "winapi 0.3.8", +] + [[package]] name = "num-bigint" version = "0.2.6" @@ -2616,7 +3109,17 @@ checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" dependencies = [ "autocfg 1.0.0", "num-integer", - "num-traits", + "num-traits 0.2.11", +] + +[[package]] +name = "num-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg 1.0.0", + "num-traits 0.2.11", ] [[package]] @@ -2626,7 +3129,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" dependencies = [ "autocfg 1.0.0", - "num-traits", + "num-traits 0.2.11", ] [[package]] @@ -2638,7 +3141,16 @@ dependencies = [ "autocfg 1.0.0", "num-bigint", "num-integer", - "num-traits", + "num-traits 0.2.11", +] + +[[package]] +name = "num-traits" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" +dependencies = [ + "num-traits 0.2.11", ] [[package]] @@ -2648,70 +3160,45 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" dependencies = [ "autocfg 1.0.0", + "libm", ] [[package]] name = "num_cpus" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" dependencies = [ "hermit-abi", "libc", ] [[package]] -name = "num_enum" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" -dependencies = [ - "derivative", - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" -dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.10", - "quote 1.0.3", - "syn 1.0.17", -] - -[[package]] -name = "ole32-sys" -version = "0.2.0" +name = "once_cell" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d2c49021782e5233cd243168edfa8037574afed4eba4bbaf538b3d8d1789d8c" +checksum = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d" dependencies = [ - "winapi 0.2.8", - "winapi-build", + "parking_lot 0.10.2", ] [[package]] -name = "once_cell" -version = "0.1.8" +name = "opaque-debug" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "532c29a261168a45ce28948f9537ddd7a5dd272cc513b3017b1e82a88f962c37" -dependencies = [ - "parking_lot 0.7.1", -] +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] -name = "once_cell" -version = "0.2.4" +name = "opaque-debug" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d584f08c2d717d5c23a6414fc2822b71c651560713e54fa7eace675f758a355e" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] -name = "opaque-debug" -version = "0.2.3" +name = "openssl-probe" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" [[package]] name = "owning_ref" @@ -2723,2850 +3210,3803 @@ dependencies = [ ] [[package]] -name = "parity-bytes" -version = "0.1.0" -source = "git+https://github.com/paritytech/parity-common?rev=b0317f649ab2c665b7987b8475878fc4d2e1f81d#b0317f649ab2c665b7987b8475878fc4d2e1f81d" - -[[package]] -name = "parity-multiaddr" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "045b3c7af871285146300da35b1932bb6e4639b66c7c98e85d06a32cbc4e8fa7" +name = "pallet-authority-discovery" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "arrayref", - "bs58 0.2.5", - "byteorder 1.3.4", - "bytes 0.4.12", - "data-encoding", - "parity-multihash 0.1.3", - "percent-encoding 1.0.1", + "frame-support", + "frame-system", + "pallet-session", + "parity-scale-codec", "serde", - "unsigned-varint 0.2.3", - "url 1.7.2", + "sp-application-crypto", + "sp-authority-discovery", + "sp-runtime", + "sp-std", ] [[package]] -name = "parity-multiaddr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82afcb7461eae5d122543d8be1c57d306ed89af2d6ff7f8b0f5a3cc8f7e511bc" +name = "pallet-authorship" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "arrayref", - "bs58 0.3.0", - "byteorder 1.3.4", - "bytes 0.4.12", - "data-encoding", - "parity-multihash 0.2.3", - "percent-encoding 2.1.0", - "serde", - "unsigned-varint 0.2.3", - "url 2.1.1", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "parity-scale-codec", + "sp-authorship", + "sp-inherents", + "sp-runtime", + "sp-std", ] [[package]] -name = "parity-multihash" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3a17dc27848fd99e4f87eb0f8c9baba6ede0a6d555400c850ca45254ef4ce3" +name = "pallet-babe" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "blake2", - "bytes 0.4.12", - "rand 0.6.5", - "sha-1", - "sha2", - "sha3", - "unsigned-varint 0.2.3", + "frame-support", + "frame-system", + "pallet-session", + "pallet-timestamp", + "parity-scale-codec", + "serde", + "sp-application-crypto", + "sp-consensus-babe", + "sp-consensus-vrf", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", + "sp-timestamp", ] [[package]] -name = "parity-multihash" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a1cd2ba02391b81367bec529fb209019d718684fdc8ad6a712c2b536e46f775" +name = "pallet-balances" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "blake2", - "bytes 0.5.4", - "rand 0.7.3", - "sha-1", - "sha2", - "sha3", - "unsigned-varint 0.3.2", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "serde", + "sp-runtime", + "sp-std", ] [[package]] -name = "parity-scale-codec" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "329c8f7f4244ddb5c37c103641027a76c530e65e8e4b8240b29f81ea40508b17" +name = "pallet-collective" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "arrayvec 0.5.1", - "bitvec", - "byte-slice-cast", - "parity-scale-codec-derive", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "parity-scale-codec-derive" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a0ec292e92e8ec7c58e576adacc1e3f399c597c8f263c42f18420abe58e7245" +name = "pallet-common" +version = "3.0.0" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.10", - "quote 1.0.3", - "syn 1.0.17", + "frame-support", + "frame-system", + "pallet-timestamp", + "parity-scale-codec", + "serde", + "sp-runtime", + "strum 0.19.2", + "strum_macros 0.19.2", ] [[package]] -name = "parity-send-wrapper" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" +name = "pallet-content-directory" +version = "3.0.0" +dependencies = [ + "frame-support", + "frame-system", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-content-working-group" +version = "3.0.0" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "pallet-common", + "pallet-hiring", + "pallet-membership", + "pallet-recurring-reward", + "pallet-stake", + "pallet-timestamp", + "pallet-token-mint", + "pallet-versioned-store", + "pallet-versioned-store-permissions", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] [[package]] -name = "parity-util-mem" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "570093f39f786beea92dcc09e45d8aae7841516ac19a50431953ac82a0e8f85c" +name = "pallet-finality-tracker" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "cfg-if", - "malloc_size_of_derive", - "winapi 0.3.8", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "parity-scale-codec", + "serde", + "sp-finality-tracker", + "sp-inherents", + "sp-runtime", + "sp-std", ] [[package]] -name = "parity-wasm" -version = "0.40.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e39faaa292a687ea15120b1ac31899b13586446521df6c149e46f1584671e0f" +name = "pallet-forum" +version = "3.0.0" +dependencies = [ + "frame-support", + "frame-system", + "pallet-common", + "pallet-timestamp", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] [[package]] -name = "parking_lot" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0802bff09003b291ba756dc7e79313e51cc31667e94afbe847def490424cde5" +name = "pallet-governance" +version = "3.0.0" dependencies = [ - "lock_api 0.1.5", - "parking_lot_core 0.3.1", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-common", + "pallet-membership", + "pallet-recurring-reward", + "pallet-timestamp", + "pallet-token-mint", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "parking_lot" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" +name = "pallet-grandpa" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "lock_api 0.1.5", - "parking_lot_core 0.4.0", + "frame-support", + "frame-system", + "pallet-finality-tracker", + "pallet-session", + "parity-scale-codec", + "serde", + "sp-application-crypto", + "sp-core", + "sp-finality-grandpa", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", ] [[package]] -name = "parking_lot" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7767817701cce701d5585b9c4db3cdd02086398322c1d7e8bf5094a96a2ce7" +name = "pallet-hiring" +version = "3.0.0" dependencies = [ - "lock_api 0.2.0", - "parking_lot_core 0.5.0", - "rustc_version", + "frame-support", + "frame-system", + "mockall", + "pallet-balances", + "pallet-stake", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "parking_lot" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" +name = "pallet-im-online" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "lock_api 0.3.3", - "parking_lot_core 0.6.2", - "rustc_version", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "serde", + "sp-application-crypto", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", ] [[package]] -name = "parking_lot" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc" +name = "pallet-membership" +version = "3.0.0" dependencies = [ - "lock_api 0.3.3", - "parking_lot_core 0.7.0", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-common", + "pallet-timestamp", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "parking_lot_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad7f7e6ebdc79edff6fdcb87a55b620174f7a989e3eb31b65231f4af57f00b8c" +name = "pallet-memo" +version = "3.0.0" dependencies = [ - "libc", - "rand 0.5.6", - "rustc_version", - "smallvec 0.6.13", - "winapi 0.3.8", + "frame-support", + "frame-system", + "pallet-common", + "parity-scale-codec", + "sp-arithmetic", + "sp-std", ] [[package]] -name = "parking_lot_core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" +name = "pallet-offences" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "libc", - "rand 0.6.5", - "rustc_version", - "smallvec 0.6.13", - "winapi 0.3.8", + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "serde", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-offences-benchmarking" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-babe", + "pallet-balances", + "pallet-grandpa", + "pallet-im-online", + "pallet-offences", + "pallet-session", + "pallet-staking", + "parity-scale-codec", + "sp-runtime", + "sp-staking", + "sp-std", +] + +[[package]] +name = "pallet-proposals-codex" +version = "3.0.0" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "pallet-common", + "pallet-governance", + "pallet-hiring", + "pallet-membership", + "pallet-proposals-discussion", + "pallet-proposals-engine", + "pallet-recurring-reward", + "pallet-stake", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", + "pallet-token-mint", + "pallet-working-group", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-staking", + "sp-std", + "strum 0.19.2", ] [[package]] -name = "parking_lot_core" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb88cb1cb3790baa6776844f968fea3be44956cf184fa1be5a03341f5491278c" +name = "pallet-proposals-discussion" +version = "3.0.0" dependencies = [ - "cfg-if", - "cloudabi", - "libc", - "rand 0.6.5", - "redox_syscall", - "rustc_version", - "smallvec 0.6.13", - "winapi 0.3.8", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-common", + "pallet-membership", + "pallet-timestamp", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "parking_lot_core" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" +name = "pallet-proposals-engine" +version = "3.0.0" dependencies = [ - "cfg-if", - "cloudabi", - "libc", - "redox_syscall", - "rustc_version", - "smallvec 0.6.13", - "winapi 0.3.8", + "frame-support", + "frame-system", + "mockall", + "pallet-balances", + "pallet-common", + "pallet-membership", + "pallet-stake", + "pallet-timestamp", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "parking_lot_core" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7582838484df45743c8434fbff785e8edf260c28748353d44bc0da32e0ceabf1" +name = "pallet-randomness-collective-flip" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "cfg-if", - "cloudabi", - "libc", - "redox_syscall", - "smallvec 1.2.0", - "winapi 0.3.8", + "frame-support", + "frame-system", + "parity-scale-codec", + "safe-mix", + "sp-runtime", + "sp-std", ] [[package]] -name = "paste" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab4fb1930692d1b6a9cfabdde3d06ea0a7d186518e2f4d67660d8970e2fa647a" +name = "pallet-recurring-reward" +version = "3.0.0" dependencies = [ - "paste-impl", - "proc-macro-hack 0.5.15", + "frame-support", + "frame-system", + "pallet-balances", + "pallet-token-mint", + "parity-scale-codec", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", +] + +[[package]] +name = "pallet-service-discovery" +version = "3.0.0" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "pallet-common", + "pallet-hiring", + "pallet-membership", + "pallet-recurring-reward", + "pallet-stake", + "pallet-timestamp", + "pallet-token-mint", + "pallet-working-group", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "paste-impl" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62486e111e571b1e93b710b61e8f493c0013be39629b714cb166bdb06aa5a8a" +name = "pallet-session" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "proc-macro-hack 0.5.15", - "proc-macro2 1.0.10", - "quote 1.0.3", - "syn 1.0.17", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "pallet-timestamp", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-session", + "sp-staking", + "sp-std", + "sp-trie", ] [[package]] -name = "pbkdf2" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9" +name = "pallet-session-benchmarking" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "byteorder 1.3.4", - "crypto-mac", + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-session", + "pallet-staking", + "sp-runtime", + "sp-std", ] [[package]] -name = "pdqselect" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec91767ecc0a0bbe558ce8c9da33c068066c57ecc8bb8477ef8c1ad3ef77c27" +name = "pallet-stake" +version = "3.0.0" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "pallet-timestamp", + "parity-scale-codec", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] [[package]] -name = "peeking_take_while" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" +name = "pallet-staking" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "pallet-authorship", + "pallet-session", + "parity-scale-codec", + "rand_chacha 0.2.2", + "serde", + "sp-application-crypto", + "sp-io", + "sp-npos-elections", + "sp-runtime", + "sp-staking", + "sp-std", + "static_assertions", +] [[package]] -name = "percent-encoding" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" +name = "pallet-staking-reward-curve" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", +] [[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +name = "pallet-storage" +version = "3.0.0" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "pallet-common", + "pallet-hiring", + "pallet-membership", + "pallet-recurring-reward", + "pallet-stake", + "pallet-timestamp", + "pallet-token-mint", + "pallet-working-group", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] [[package]] -name = "petgraph" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" +name = "pallet-sudo" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "fixedbitset", + "frame-support", + "frame-system", + "parity-scale-codec", + "serde", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "pin-utils" -version = "0.1.0-alpha.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" +name = "pallet-timestamp" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "impl-trait-for-tuples", + "parity-scale-codec", + "serde", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-std", + "sp-timestamp", +] [[package]] -name = "pkg-config" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" +name = "pallet-token-mint" +version = "3.0.0" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "parity-scale-codec", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", +] [[package]] -name = "ppv-lite86" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" +name = "pallet-transaction-payment" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-support", + "frame-system", + "pallet-transaction-payment-rpc-runtime-api", + "parity-scale-codec", + "serde", + "smallvec 1.4.1", + "sp-runtime", + "sp-std", +] [[package]] -name = "predicates" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "347a1b6f0b21e636bc9872fb60b83b8e185f6f5516298b8238699f7f9a531030" +name = "pallet-transaction-payment-rpc" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "difference", - "float-cmp", - "normalize-line-endings", - "predicates-core", - "regex", + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "pallet-transaction-payment-rpc-runtime-api", + "parity-scale-codec", + "serde", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-rpc", + "sp-runtime", ] [[package]] -name = "predicates-core" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06075c3a3e92559ff8929e7a280684489ea27fe44805174c3ebd9328dcb37178" +name = "pallet-transaction-payment-rpc-runtime-api" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "frame-support", + "parity-scale-codec", + "serde", + "sp-api", + "sp-runtime", + "sp-std", +] [[package]] -name = "predicates-tree" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e63c4859013b38a76eca2414c64911fba30def9e3202ac461a2d22831220124" +name = "pallet-utility" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "predicates-core", - "treeline", + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "primitive-types" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4336f4f5d5524fa60bcbd6fe626f9223d8142a50e7053e979acdf0da41ab975" +name = "pallet-versioned-store" +version = "3.0.0" dependencies = [ - "fixed-hash", - "impl-codec", - "impl-serde 0.3.0", - "uint", + "frame-support", + "frame-system", + "pallet-common", + "pallet-timestamp", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "proc-macro-crate" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e10d4b51f154c8a7fb96fd6dad097cb74b863943ec010ac94b9fd1be8861fe1e" +name = "pallet-versioned-store-permissions" +version = "3.0.0" dependencies = [ - "toml", + "frame-support", + "frame-system", + "pallet-common", + "pallet-timestamp", + "pallet-versioned-store", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "pallet-working-group" +version = "3.0.0" +dependencies = [ + "frame-support", + "frame-system", + "pallet-balances", + "pallet-common", + "pallet-hiring", + "pallet-membership", + "pallet-recurring-reward", + "pallet-stake", + "pallet-timestamp", + "pallet-token-mint", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", ] [[package]] -name = "proc-macro-error" -version = "0.2.6" +name = "parity-db" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aeccfe4d5d8ea175d5f0e4a2ad0637e0f4121d63bd99d356fb1f39ab2e7c6097" +checksum = "00d595e372d119261593297debbe4193811a4dc811d2a1ccbb8caaa6666ad7ab" dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", - "syn 1.0.17", + "blake2-rfc", + "crc32fast", + "libc", + "log", + "memmap", + "parking_lot 0.10.2", ] [[package]] -name = "proc-macro-hack" -version = "0.4.2" +name = "parity-multiaddr" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463bf29e7f11344e58c9e01f171470ab15c925c6822ad75028cc1c0e1d1eb63b" +checksum = "f77055f9e81921a8cc7bebeb6cded3d128931d51f1e3dd6251f0770a6d431477" dependencies = [ - "proc-macro-hack-impl", + "arrayref", + "bs58", + "byteorder", + "data-encoding", + "parity-multihash", + "percent-encoding 2.1.0", + "serde", + "static_assertions", + "unsigned-varint 0.3.3", + "url 2.1.1", ] [[package]] -name = "proc-macro-hack" -version = "0.5.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63" - -[[package]] -name = "proc-macro-hack-impl" -version = "0.4.2" +name = "parity-multiaddr" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c47dcb1594802de8c02f3b899e2018c78291168a22c281be21ea0fb4796842" +checksum = "cc20af3143a62c16e7c9e92ea5c6ae49f7d271d97d4d8fe73afc28f0514a3d0f" +dependencies = [ + "arrayref", + "bs58", + "byteorder", + "data-encoding", + "multihash", + "percent-encoding 2.1.0", + "serde", + "static_assertions", + "unsigned-varint 0.4.0", + "url 2.1.1", +] [[package]] -name = "proc-macro-nested" -version = "0.1.4" +name = "parity-multihash" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694" +checksum = "7a1cd2ba02391b81367bec529fb209019d718684fdc8ad6a712c2b536e46f775" +dependencies = [ + "blake2 0.8.1", + "bytes 0.5.6", + "rand 0.7.3", + "sha-1", + "sha2 0.8.1", + "sha3", + "unsigned-varint 0.3.3", +] [[package]] -name = "proc-macro2" -version = "0.4.30" +name = "parity-scale-codec" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +checksum = "a74f02beb35d47e0706155c9eac554b50c671e0d868fe8296bcdf44a9a4847bf" dependencies = [ - "unicode-xid 0.1.0", + "arrayvec 0.5.1", + "bitvec", + "byte-slice-cast", + "parity-scale-codec-derive", + "serde", ] [[package]] -name = "proc-macro2" -version = "1.0.10" +name = "parity-scale-codec-derive" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3" +checksum = "198db82bb1c18fc00176004462dd809b2a6d851669550aa17af6dacd21ae0c14" dependencies = [ - "unicode-xid 0.2.0", + "proc-macro-crate", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "prost" -version = "0.5.0" +name = "parity-send-wrapper" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d14b1c185652833d24aaad41c5832b0be5616a590227c1fbff57c616754b23" -dependencies = [ - "byteorder 1.3.4", - "bytes 0.4.12", - "prost-derive", -] +checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" [[package]] -name = "prost-build" -version = "0.5.0" +name = "parity-tokio-ipc" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb788126ea840817128183f8f603dce02cb7aea25c2a0b764359d8e20010702e" +checksum = "1e57fea504fea33f9fbb5f49f378359030e7e026a6ab849bb9e8f0787376f1bf" dependencies = [ "bytes 0.4.12", - "heck", - "itertools", + "futures 0.1.29", + "libc", "log", - "multimap", - "petgraph", - "prost", - "prost-types", - "tempfile", - "which", + "mio-named-pipes", + "miow 0.3.5", + "rand 0.7.3", + "tokio 0.1.22", + "tokio-named-pipes", + "tokio-uds", + "winapi 0.3.8", ] [[package]] -name = "prost-derive" -version = "0.5.0" +name = "parity-util-mem" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e7dc378b94ac374644181a2247cebf59a6ec1c88b49ac77f3a94b86b79d0e11" +checksum = "2c6e2583649a3ca84894d1d71da249abcfda54d5aca24733d72ca10d0f02361c" dependencies = [ - "failure", - "itertools", - "proc-macro2 0.4.30", - "quote 0.6.13", - "syn 0.15.44", + "cfg-if", + "impl-trait-for-tuples", + "parity-util-mem-derive", + "parking_lot 0.10.2", + "primitive-types", + "smallvec 1.4.1", + "winapi 0.3.8", ] [[package]] -name = "prost-types" -version = "0.5.0" +name = "parity-util-mem-derive" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1de482a366941c8d56d19b650fac09ca08508f2a696119ee7513ad590c8bac6f" +checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2" dependencies = [ - "bytes 0.4.12", - "prost", + "proc-macro2", + "syn 1.0.17", + "synstructure", ] [[package]] -name = "protobuf" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40361836defdd5871ff7e84096c6f6444af7fc157f8ef1789f54f147687caa20" - -[[package]] -name = "quick-error" -version = "1.2.3" +name = "parity-wasm" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +checksum = "ddfc878dac00da22f8f61e7af3157988424567ab01d9920b962ef7dcbd7cd865" [[package]] -name = "quote" -version = "0.6.13" +name = "parking_lot" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" dependencies = [ - "proc-macro2 0.4.30", + "lock_api", + "parking_lot_core 0.6.2", + "rustc_version", ] [[package]] -name = "quote" -version = "1.0.3" +name = "parking_lot" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" +checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" dependencies = [ - "proc-macro2 1.0.10", + "lock_api", + "parking_lot_core 0.7.2", ] [[package]] -name = "radium" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" - -[[package]] -name = "rand" -version = "0.3.23" +name = "parking_lot_core" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" +checksum = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" dependencies = [ + "cfg-if", + "cloudabi", "libc", - "rand 0.4.6", + "redox_syscall", + "rustc_version", + "smallvec 0.6.13", + "winapi 0.3.8", ] [[package]] -name = "rand" -version = "0.4.6" +name = "parking_lot_core" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" dependencies = [ - "fuchsia-cprng", + "cfg-if", + "cloudabi", "libc", - "rand_core 0.3.1", - "rdrand", + "redox_syscall", + "smallvec 1.4.1", "winapi 0.3.8", ] [[package]] -name = "rand" -version = "0.5.6" +name = "paste" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" +checksum = "ab4fb1930692d1b6a9cfabdde3d06ea0a7d186518e2f4d67660d8970e2fa647a" dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.3.1", - "winapi 0.3.8", + "paste-impl", + "proc-macro-hack", ] [[package]] -name = "rand" -version = "0.6.5" +name = "paste-impl" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +checksum = "a62486e111e571b1e93b710b61e8f493c0013be39629b714cb166bdb06aa5a8a" dependencies = [ - "autocfg 0.1.7", - "libc", - "rand_chacha 0.1.1", - "rand_core 0.4.2", - "rand_hc 0.1.0", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift", - "winapi 0.3.8", + "proc-macro-hack", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "rand" -version = "0.7.3" +name = "pbkdf2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +checksum = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9" dependencies = [ - "getrandom", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc 0.2.0", + "byteorder", + "crypto-mac 0.7.0", ] [[package]] -name = "rand_chacha" -version = "0.1.1" +name = "pdqselect" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.3.1", -] +checksum = "4ec91767ecc0a0bbe558ce8c9da33c068066c57ecc8bb8477ef8c1ad3ef77c27" [[package]] -name = "rand_chacha" -version = "0.2.2" +name = "peeking_take_while" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", -] +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] -name = "rand_core" -version = "0.3.1" +name = "percent-encoding" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" [[package]] -name = "rand_core" -version = "0.4.2" +name = "percent-encoding" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] -name = "rand_core" +name = "petgraph" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" dependencies = [ - "getrandom", + "fixedbitset", + "indexmap", ] [[package]] -name = "rand_hc" -version = "0.1.0" +name = "pin-project" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +checksum = "12e3a6cdbfe94a5e4572812a0201f8c0ed98c1c452c7b8563ce2276988ef9c17" dependencies = [ - "rand_core 0.3.1", + "pin-project-internal", ] [[package]] -name = "rand_hc" -version = "0.2.0" +name = "pin-project-internal" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +checksum = "6a0ffd45cf79d88737d7cc85bfd5d2894bee1139b356e616fe85dc389c61aaf7" dependencies = [ - "rand_core 0.5.1", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "rand_isaac" -version = "0.1.1" +name = "pin-project-lite" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] +checksum = "282adbf10f2698a7a77f8e983a74b2d18176c19a7fd32a45446139ae7b02b715" [[package]] -name = "rand_jitter" -version = "0.1.4" +name = "pin-utils" +version = "0.1.0-alpha.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi 0.3.8", -] +checksum = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" [[package]] -name = "rand_os" -version = "0.1.3" +name = "pkg-config" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi 0.3.8", -] +checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33" [[package]] -name = "rand_pcg" -version = "0.1.2" +name = "platforms" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.7", - "rand_core 0.4.2", -] +checksum = "feb3b2b1033b8a60b4da6ee470325f887758c95d5320f52f9ce0df055a55940e" [[package]] -name = "rand_xorshift" -version = "0.1.1" +name = "poly1305" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" +checksum = "d9b42192ab143ed7619bf888a7f9c6733a9a2153b218e2cd557cfdb52fbf9bb1" dependencies = [ - "rand_core 0.3.1", + "universal-hash", ] [[package]] -name = "rayon" -version = "1.3.0" +name = "polyval" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098" +checksum = "d9a50142b55ab3ed0e9f68dfb3709f1d90d29da24e91033f28b96330643107dc" dependencies = [ - "crossbeam-deque", - "either", - "rayon-core", + "cfg-if", + "universal-hash", ] [[package]] -name = "rayon-core" -version = "1.7.0" +name = "ppv-lite86" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" -dependencies = [ - "crossbeam-deque", - "crossbeam-queue", - "crossbeam-utils 0.7.2", - "lazy_static", - "num_cpus", -] +checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" [[package]] -name = "rdrand" -version = "0.4.0" +name = "predicates" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +checksum = "347a1b6f0b21e636bc9872fb60b83b8e185f6f5516298b8238699f7f9a531030" dependencies = [ - "rand_core 0.3.1", + "difference", + "float-cmp", + "normalize-line-endings", + "predicates-core", + "regex", ] [[package]] -name = "redox_syscall" -version = "0.1.56" +name = "predicates-core" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" +checksum = "06075c3a3e92559ff8929e7a280684489ea27fe44805174c3ebd9328dcb37178" [[package]] -name = "regex" -version = "1.3.6" +name = "predicates-tree" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6946991529684867e47d86474e3a6d0c0ab9b82d5821e314b1ede31fa3a4b3" +checksum = "8e63c4859013b38a76eca2414c64911fba30def9e3202ac461a2d22831220124" dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", - "thread_local 1.0.1", + "predicates-core", + "treeline", ] [[package]] -name = "regex-syntax" -version = "0.6.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae" - -[[package]] -name = "remove_dir_all" -version = "0.5.2" +name = "primitive-types" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" +checksum = "d3dedac218327b6b55fff5ef05f63ce5127024e1a36342836da7e92cbfac4531" dependencies = [ - "winapi 0.3.8", + "fixed-hash", + "impl-codec", + "impl-serde 0.3.0", + "uint", ] [[package]] -name = "ring" -version = "0.16.12" +name = "proc-macro-crate" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba5a8ec64ee89a76c98c549af81ff14813df09c3e6dc4766c3856da48597a0c" +checksum = "e10d4b51f154c8a7fb96fd6dad097cb74b863943ec010ac94b9fd1be8861fe1e" dependencies = [ - "cc", - "lazy_static", - "libc", - "spin", - "untrusted", - "web-sys", - "winapi 0.3.8", + "toml", ] [[package]] -name = "rocksdb" -version = "0.11.0" +name = "proc-macro-error" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1651697fefd273bfb4fd69466cc2a9d20de557a0213b97233b22b5e95924b5e" +checksum = "fc175e9777c3116627248584e8f8b3e2987405cabe1c0adf7d1dd28f09dc7880" dependencies = [ - "libc", - "librocksdb-sys", + "proc-macro-error-attr", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", + "version_check", ] [[package]] -name = "rpassword" -version = "4.0.5" +name = "proc-macro-error-attr" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f" +checksum = "3cc9795ca17eb581285ec44936da7fc2335a3f34f2ddd13118b6f4d515435c50" dependencies = [ - "libc", - "winapi 0.3.8", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", + "syn-mid", + "version_check", ] [[package]] -name = "rustc-demangle" -version = "0.1.16" +name = "proc-macro-hack" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" +checksum = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63" [[package]] -name = "rustc-hex" -version = "2.1.0" +name = "proc-macro-nested" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" +checksum = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694" [[package]] -name = "rustc_version" -version = "0.2.3" +name = "proc-macro2" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +checksum = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3" dependencies = [ - "semver", + "unicode-xid 0.2.0", ] [[package]] -name = "rustls" -version = "0.16.0" +name = "procfs" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b25a18b1bf7387f0145e7f8324e700805aade3842dd3db2e74e4cdeb4677c09e" +checksum = "c434e93ef69c216e68e4f417c927b4f31502c3560b72cfdb6827e2321c5c6b3e" dependencies = [ - "base64", - "log", - "ring", - "sct", - "webpki", + "bitflags", + "byteorder", + "chrono", + "hex", + "lazy_static", + "libc", + "libflate", ] [[package]] -name = "rw-stream-sink" -version = "0.1.2" +name = "prometheus" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f9cbe61c20455d3015b2bb7be39e1872310283b8e5a52f5b242b0ac7581fe78" +checksum = "b0575e258dab62268e7236d7307caa38848acbda7ec7ab87bd9093791e999d20" dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "tokio-io", + "cfg-if", + "fnv", + "lazy_static", + "protobuf", + "spin", + "thiserror", ] [[package]] -name = "ryu" -version = "1.0.3" +name = "prost" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76" +checksum = "ce49aefe0a6144a45de32927c77bd2859a5f7677b55f220ae5b744e87389c212" +dependencies = [ + "bytes 0.5.6", + "prost-derive", +] [[package]] -name = "safe-mix" -version = "1.0.1" +name = "prost-build" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" +checksum = "02b10678c913ecbd69350e8535c3aef91a8676c0773fc1d7b95cdd196d7f2f26" dependencies = [ - "rustc_version", + "bytes 0.5.6", + "heck", + "itertools 0.8.2", + "log", + "multimap", + "petgraph", + "prost", + "prost-types", + "tempfile", + "which", ] [[package]] -name = "schnorrkel" -version = "0.8.5" +name = "prost-derive" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eacd8381b3c37840c9c9f40472af529e49975bdcbc24f83c31059fd6539023d3" +checksum = "537aa19b95acde10a12fec4301466386f757403de4cd4e5b4fa78fb5ecb18f72" dependencies = [ - "curve25519-dalek 1.2.3", - "failure", - "merlin", - "rand 0.6.5", - "rand_core 0.4.2", - "rand_os", - "sha2", - "subtle 2.2.2", - "zeroize 0.9.3", + "anyhow", + "itertools 0.8.2", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "scopeguard" -version = "0.3.3" +name = "prost-types" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" +checksum = "1834f67c0697c001304b75be76f67add9c89742eda3a085ad8ee0bb38c3417aa" +dependencies = [ + "bytes 0.5.6", + "prost", +] [[package]] -name = "scopeguard" -version = "1.1.0" +name = "protobuf" +version = "2.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "d883f78645c21b7281d21305181aa1f4dd9e9363e7cf2566c93121552cff003e" [[package]] -name = "sct" -version = "0.6.0" +name = "quick-error" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" -dependencies = [ - "ring", - "untrusted", -] +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] -name = "semver" -version = "0.9.0" +name = "quicksink" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858" dependencies = [ - "semver-parser", + "futures-core", + "futures-sink", + "pin-project-lite", ] [[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "send_wrapper" -version = "0.2.0" +name = "quote" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0eddf2e8f50ced781f288c19f18621fa72a3779e3cb58dbf23b07469b0abeb4" +checksum = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" [[package]] -name = "serde" -version = "1.0.106" +name = "quote" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" dependencies = [ - "serde_derive", + "proc-macro2", ] [[package]] -name = "serde_derive" -version = "1.0.106" +name = "radium" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c" +checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" + +[[package]] +name = "rand" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", - "syn 1.0.17", + "libc", + "rand 0.4.6", ] [[package]] -name = "serde_json" -version = "1.0.51" +name = "rand" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da07b57ee2623368351e9a0488bb0b261322a15a6e0ae53e243cbdc0f4208da9" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" dependencies = [ - "itoa", - "ryu", - "serde", + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi 0.3.8", ] [[package]] -name = "sha-1" -version = "0.8.2" +name = "rand" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" +checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" dependencies = [ - "block-buffer", - "digest", - "fake-simd", - "opaque-debug", + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "winapi 0.3.8", ] [[package]] -name = "sha1" -version = "0.6.0" +name = "rand" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" +checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +dependencies = [ + "autocfg 0.1.7", + "libc", + "rand_chacha 0.1.1", + "rand_core 0.4.2", + "rand_hc 0.1.0", + "rand_isaac", + "rand_jitter", + "rand_os", + "rand_pcg 0.1.2", + "rand_xorshift", + "winapi 0.3.8", +] [[package]] -name = "sha2" -version = "0.8.1" +name = "rand" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "block-buffer", - "digest", - "fake-simd", - "opaque-debug", + "getrandom", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc 0.2.0", + "rand_pcg 0.2.1", ] [[package]] -name = "sha3" -version = "0.8.2" +name = "rand_chacha" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd26bc0e7a2e3a7c959bc494caf58b72ee0c71d67704e9520f736ca7e4853ecf" +checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" dependencies = [ - "block-buffer", - "byte-tools", - "digest", - "keccak", - "opaque-debug", + "autocfg 0.1.7", + "rand_core 0.3.1", ] [[package]] -name = "shell32-sys" -version = "0.1.2" +name = "rand_chacha" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee04b46101f57121c9da2b151988283b6beb79b34f5bb29a58ee48cb695122c" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ - "winapi 0.2.8", - "winapi-build", + "ppv-lite86", + "rand_core 0.5.1", ] [[package]] -name = "slab" +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" [[package]] -name = "slog" -version = "2.5.2" +name = "rand_core" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cc9c640a4adbfbcc11ffb95efe5aa7af7309e002adab54b185507dbf2377b99" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "erased-serde", + "getrandom", ] [[package]] -name = "slog-async" -version = "2.3.0" -source = "git+https://github.com/paritytech/slog-async#0329dc74feb3afe93d0cd2533a472b7ceab44aaf" +name = "rand_hc" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" dependencies = [ - "crossbeam-channel", - "slog", - "take_mut", - "thread_local 0.3.6", + "rand_core 0.3.1", ] [[package]] -name = "slog-json" -version = "2.3.0" +name = "rand_hc" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddc0d2aff1f8f325ef660d9a0eb6e6dcd20b30b3f581a5897f58bf42d061c37a" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" dependencies = [ - "chrono", - "erased-serde", - "serde", - "serde_json", - "slog", + "rand_core 0.5.1", ] [[package]] -name = "slog-scope" -version = "4.3.0" +name = "rand_isaac" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c44c89dd8b0ae4537d1ae318353eaf7840b4869c536e31c41e963d1ea523ee6" +checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" dependencies = [ - "arc-swap", - "lazy_static", - "slog", + "rand_core 0.3.1", ] [[package]] -name = "slog_derive" -version = "0.1.1" +name = "rand_jitter" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eff3b513cf2e0d1a60e1aba152dc72bedc5b05585722bb3cebd7bcb1e31b98f" +checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "syn 0.15.44", + "libc", + "rand_core 0.4.2", + "winapi 0.3.8", ] [[package]] -name = "smallvec" -version = "0.6.13" +name = "rand_os" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" +checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" dependencies = [ - "maybe-uninit", + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.4.2", + "rdrand", + "wasm-bindgen", + "winapi 0.3.8", ] [[package]] -name = "smallvec" -version = "1.2.0" +name = "rand_pcg" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc" +checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +dependencies = [ + "autocfg 0.1.7", + "rand_core 0.4.2", +] [[package]] -name = "snow" -version = "0.6.2" +name = "rand_pcg" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb767eee7d257ba202f0b9b08673bc13b22281632ef45267b19f13100accd2f" +checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" dependencies = [ - "arrayref", "rand_core 0.5.1", - "ring", - "rustc_version", - "subtle 2.2.2", ] [[package]] -name = "soketto" -version = "0.2.3" +name = "rand_xorshift" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bceb1a3a15232d013d9a3b7cac9e5ce8e2313f348f01d4bc1097e5e53aa07095" +checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" dependencies = [ - "base64", - "bytes 0.4.12", - "flate2", - "futures 0.1.29", - "http", - "httparse", - "log", - "rand 0.6.5", - "sha1", - "smallvec 0.6.13", - "tokio-codec", - "tokio-io", + "rand_core 0.3.1", ] [[package]] -name = "spin" -version = "0.5.2" +name = "rawpointer" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] -name = "sr-api-macros" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "rayon" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080" dependencies = [ - "blake2-rfc", - "proc-macro-crate", - "proc-macro2 1.0.10", - "quote 1.0.3", - "syn 1.0.17", + "autocfg 1.0.0", + "crossbeam-deque", + "either", + "rayon-core", ] [[package]] -name = "sr-arithmetic" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "rayon-core" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280" dependencies = [ - "integer-sqrt", - "num-traits", - "parity-scale-codec", - "serde", - "sr-std", - "substrate-debug-derive", + "crossbeam-deque", + "crossbeam-queue", + "crossbeam-utils", + "lazy_static", + "num_cpus", ] [[package]] -name = "sr-io" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" dependencies = [ - "hash-db", - "libsecp256k1", - "log", - "parity-scale-codec", - "rustc_version", - "sr-std", - "substrate-externalities", - "substrate-primitives", - "substrate-state-machine", - "substrate-trie", - "tiny-keccak", + "rand_core 0.3.1", ] [[package]] -name = "sr-primitives" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "redox_syscall" +version = "0.1.56" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" + +[[package]] +name = "redox_users" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431" dependencies = [ - "impl-trait-for-tuples", - "log", - "parity-scale-codec", - "paste", - "rand 0.7.3", - "serde", - "sr-arithmetic", - "sr-io", - "sr-std", - "substrate-application-crypto", - "substrate-primitives", + "getrandom", + "redox_syscall", + "rust-argon2", ] [[package]] -name = "sr-staking-primitives" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "ref-cast" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "745c1787167ddae5569661d5ffb8b25ae5fedbf46717eaa92d652221cec72623" dependencies = [ - "parity-scale-codec", - "sr-primitives", - "sr-std", + "ref-cast-impl", ] [[package]] -name = "sr-std" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "ref-cast-impl" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d21b475ab879ef0e315ad99067fa25778c3b0377f57f1b00207448dac1a3144" dependencies = [ - "rustc_version", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "sr-version" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" -dependencies = [ - "impl-serde 0.2.3", +name = "regex" +version = "1.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6946991529684867e47d86474e3a6d0c0ab9b82d5821e314b1ede31fa3a4b3" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", +] + +[[package]] +name = "regex-syntax" +version = "0.6.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi 0.3.8", +] + +[[package]] +name = "rental" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8545debe98b2b139fb04cad8618b530e9b07c152d99a5de83c860b877d67847f" +dependencies = [ + "rental-impl", + "stable_deref_trait", +] + +[[package]] +name = "rental-impl" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "475e68978dc5b743f2f40d8e0a8fdc83f1c5e78cbf4b8fa5e74e73beebc340de" +dependencies = [ + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", +] + +[[package]] +name = "ring" +version = "0.16.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "952cd6b98c85bbc30efa1ba5783b8abf12fec8b3287ffa52605b9432313e34e4" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi 0.3.8", +] + +[[package]] +name = "rle-decode-fast" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabe4fa914dec5870285fa7f71f602645da47c486e68486d2b4ceb4a343e90ac" + +[[package]] +name = "rocksdb" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61aa17a99a2413cd71c1106691bf59dad7de0cd5099127f90e9d99c429c40d4a" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rpassword" +version = "4.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f" +dependencies = [ + "libc", + "winapi 0.3.8", +] + +[[package]] +name = "rust-argon2" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" +dependencies = [ + "base64", + "blake2b_simd", + "constant_time_eq", + "crossbeam-utils", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + +[[package]] +name = "rustls" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" +dependencies = [ + "base64", + "log", + "ring", + "sct", + "webpki", +] + +[[package]] +name = "rustls-native-certs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75ffeb84a6bd9d014713119542ce415db3a3e4748f0bfce1e1416cd224a23a5" +dependencies = [ + "openssl-probe", + "rustls", + "schannel", + "security-framework", +] + +[[package]] +name = "rw-stream-sink" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020" +dependencies = [ + "futures 0.3.4", + "pin-project", + "static_assertions", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "safe-mix" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d3d055a2582e6b00ed7a31c1524040aa391092bf636328350813f3a0605215c" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "sc-authority-discovery" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "bytes 0.5.6", + "derive_more", + "futures 0.3.4", + "futures-timer 3.0.2", + "libp2p", + "log", "parity-scale-codec", + "prost", + "prost-build", + "rand 0.7.3", + "sc-client-api", + "sc-keystore", + "sc-network", + "serde_json", + "sp-api", + "sp-authority-discovery", + "sp-blockchain", + "sp-core", + "sp-runtime", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-basic-authorship" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "futures 0.3.4", + "futures-timer 3.0.2", + "log", + "parity-scale-codec", + "sc-block-builder", + "sc-client-api", + "sc-proposer-metrics", + "sc-telemetry", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-transaction-pool", + "substrate-prometheus-endpoint", + "tokio-executor 0.2.0-alpha.6", +] + +[[package]] +name = "sc-block-builder" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "parity-scale-codec", + "sc-client-api", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-state-machine", +] + +[[package]] +name = "sc-chain-spec" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "impl-trait-for-tuples", + "sc-chain-spec-derive", + "sc-network", + "sc-telemetry", + "serde", + "serde_json", + "sp-chain-spec", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "sc-chain-spec-derive" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", +] + +[[package]] +name = "sc-cli" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "ansi_term 0.12.1", + "atty", + "chrono", + "derive_more", + "env_logger", + "fdlimit", + "futures 0.3.4", + "lazy_static", + "log", + "names", + "nix", + "parity-util-mem", + "regex", + "rpassword", + "sc-client-api", + "sc-informant", + "sc-network", + "sc-service", + "sc-telemetry", + "sc-tracing", + "serde_json", + "sp-blockchain", + "sp-core", + "sp-keyring", + "sp-panic-handler", + "sp-runtime", + "sp-state-machine", + "sp-utils", + "sp-version", + "structopt", + "substrate-prometheus-endpoint", + "time", + "tokio 0.2.22", +] + +[[package]] +name = "sc-client-api" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "derive_more", + "fnv", + "futures 0.3.4", + "hash-db", + "hex-literal", + "kvdb", + "lazy_static", + "log", + "parity-scale-codec", + "parking_lot 0.10.2", + "sc-executor", + "sc-telemetry", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-database", + "sp-externalities", + "sp-inherents", + "sp-keyring", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-storage", + "sp-transaction-pool", + "sp-trie", + "sp-utils", + "sp-version", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-client-db" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "blake2-rfc", + "hash-db", + "kvdb", + "kvdb-memorydb", + "kvdb-rocksdb", + "linked-hash-map", + "log", + "parity-db", + "parity-scale-codec", + "parity-util-mem", + "parking_lot 0.10.2", + "sc-client-api", + "sc-executor", + "sc-state-db", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-database", + "sp-runtime", + "sp-state-machine", + "sp-trie", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-consensus" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "sc-client-api", + "sp-blockchain", + "sp-consensus", + "sp-runtime", +] + +[[package]] +name = "sc-consensus-babe" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "derive_more", + "fork-tree", + "futures 0.3.4", + "futures-timer 3.0.2", + "log", + "merlin", + "num-bigint", + "num-rational", + "num-traits 0.2.11", + "parity-scale-codec", + "parking_lot 0.10.2", + "pdqselect", + "rand 0.7.3", + "sc-client-api", + "sc-consensus-epochs", + "sc-consensus-slots", + "sc-consensus-uncles", + "sc-keystore", + "sc-telemetry", + "schnorrkel", + "serde", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-consensus-vrf", + "sp-core", + "sp-inherents", + "sp-io", + "sp-runtime", + "sp-timestamp", + "sp-version", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-consensus-babe-rpc" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "derive_more", + "futures 0.3.4", + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "sc-consensus-babe", + "sc-consensus-epochs", + "sc-keystore", + "sc-rpc-api", + "serde", + "sp-api", + "sp-application-crypto", + "sp-blockchain", + "sp-consensus", + "sp-consensus-babe", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "sc-consensus-epochs" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "fork-tree", + "parity-scale-codec", + "parking_lot 0.10.2", + "sc-client-api", + "sp-blockchain", + "sp-runtime", +] + +[[package]] +name = "sc-consensus-slots" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "futures 0.3.4", + "futures-timer 3.0.2", + "log", + "parity-scale-codec", + "parking_lot 0.10.2", + "sc-client-api", + "sc-telemetry", + "sp-api", + "sp-application-crypto", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", +] + +[[package]] +name = "sc-consensus-uncles" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "log", + "sc-client-api", + "sp-authorship", + "sp-consensus", + "sp-core", + "sp-inherents", + "sp-runtime", +] + +[[package]] +name = "sc-executor" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "derive_more", + "lazy_static", + "libsecp256k1", + "log", + "parity-scale-codec", + "parity-wasm", + "parking_lot 0.10.2", + "sc-executor-common", + "sc-executor-wasmi", + "sp-api", + "sp-core", + "sp-externalities", + "sp-io", + "sp-panic-handler", + "sp-runtime-interface", + "sp-serializer", + "sp-trie", + "sp-version", + "sp-wasm-interface", + "wasmi", +] + +[[package]] +name = "sc-executor-common" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "derive_more", + "log", + "parity-scale-codec", + "parity-wasm", + "sp-allocator", + "sp-core", + "sp-runtime-interface", + "sp-serializer", + "sp-wasm-interface", + "wasmi", +] + +[[package]] +name = "sc-executor-wasmi" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "log", + "parity-scale-codec", + "sc-executor-common", + "sp-allocator", + "sp-core", + "sp-runtime-interface", + "sp-wasm-interface", + "wasmi", +] + +[[package]] +name = "sc-finality-grandpa" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "assert_matches", + "derive_more", + "finality-grandpa", + "fork-tree", + "futures 0.3.4", + "futures-timer 3.0.2", + "log", + "parity-scale-codec", + "parking_lot 0.10.2", + "pin-project", + "rand 0.7.3", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-keystore", + "sc-network", + "sc-network-gossip", + "sc-telemetry", + "serde_json", + "sp-api", + "sp-application-crypto", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-finality-grandpa", + "sp-finality-tracker", + "sp-inherents", + "sp-runtime", + "sp-utils", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-finality-grandpa-rpc" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "derive_more", + "finality-grandpa", + "futures 0.3.4", + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "log", + "sc-finality-grandpa", + "serde", + "serde_json", +] + +[[package]] +name = "sc-informant" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "ansi_term 0.12.1", + "futures 0.3.4", + "log", + "parity-util-mem", + "parking_lot 0.10.2", + "sc-client-api", + "sc-network", + "sp-blockchain", + "sp-runtime", + "sp-transaction-pool", + "sp-utils", + "wasm-timer", +] + +[[package]] +name = "sc-keystore" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "derive_more", + "hex", + "merlin", + "parking_lot 0.10.2", + "rand 0.7.3", + "serde_json", + "sp-application-crypto", + "sp-core", + "subtle 2.2.2", +] + +[[package]] +name = "sc-light" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "hash-db", + "lazy_static", + "parity-scale-codec", + "parking_lot 0.10.2", + "sc-client-api", + "sc-executor", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-externalities", + "sp-runtime", + "sp-state-machine", +] + +[[package]] +name = "sc-network" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "bitflags", + "bs58", + "bytes 0.5.6", + "derive_more", + "either", + "erased-serde", + "fnv", + "fork-tree", + "futures 0.3.4", + "futures-timer 3.0.2", + "futures_codec 0.3.4", + "hex", + "ip_network", + "libp2p", + "linked-hash-map", + "linked_hash_set", + "log", + "lru", + "nohash-hasher", + "parity-scale-codec", + "parking_lot 0.10.2", + "pin-project", + "prost", + "prost-build", + "rand 0.7.3", + "sc-block-builder", + "sc-client-api", + "sc-peerset", + "serde", + "serde_json", + "slog", + "slog_derive", + "smallvec 0.6.13", + "sp-arithmetic", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "sp-utils", + "substrate-prometheus-endpoint", + "thiserror", + "unsigned-varint 0.3.3", + "void", + "wasm-timer", + "zeroize", +] + +[[package]] +name = "sc-network-gossip" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "futures 0.3.4", + "futures-timer 3.0.2", + "libp2p", + "log", + "lru", + "sc-network", + "sp-runtime", + "wasm-timer", +] + +[[package]] +name = "sc-offchain" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "bytes 0.5.6", + "fnv", + "futures 0.3.4", + "futures-timer 3.0.2", + "hyper 0.13.7", + "hyper-rustls", + "log", + "num_cpus", + "parity-scale-codec", + "parking_lot 0.10.2", + "rand 0.7.3", + "sc-client-api", + "sc-keystore", + "sc-network", + "sp-api", + "sp-core", + "sp-offchain", + "sp-runtime", + "sp-utils", + "threadpool", +] + +[[package]] +name = "sc-peerset" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "futures 0.3.4", + "libp2p", + "log", + "serde_json", + "sp-utils", + "wasm-timer", +] + +[[package]] +name = "sc-proposer-metrics" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "log", + "substrate-prometheus-endpoint", +] + +[[package]] +name = "sc-rpc" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "futures 0.3.4", + "hash-db", + "jsonrpc-core", + "jsonrpc-pubsub", + "log", + "parity-scale-codec", + "parking_lot 0.10.2", + "sc-block-builder", + "sc-client-api", + "sc-executor", + "sc-keystore", + "sc-rpc-api", + "serde_json", + "sp-api", + "sp-blockchain", + "sp-chain-spec", + "sp-core", + "sp-offchain", + "sp-rpc", + "sp-runtime", + "sp-session", + "sp-state-machine", + "sp-transaction-pool", + "sp-utils", + "sp-version", +] + +[[package]] +name = "sc-rpc-api" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "derive_more", + "futures 0.3.4", + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "jsonrpc-pubsub", + "log", + "parity-scale-codec", + "parking_lot 0.10.2", + "serde", + "serde_json", + "sp-chain-spec", + "sp-core", + "sp-rpc", + "sp-runtime", + "sp-transaction-pool", + "sp-version", +] + +[[package]] +name = "sc-rpc-server" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "jsonrpc-core", + "jsonrpc-http-server", + "jsonrpc-ipc-server", + "jsonrpc-pubsub", + "jsonrpc-ws-server", + "log", "serde", - "sr-primitives", - "sr-std", + "serde_json", + "sp-runtime", ] [[package]] -name = "srml-authority-discovery" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sc-service" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ + "derive_more", + "directories", + "exit-future", + "futures 0.1.29", + "futures 0.3.4", + "futures-timer 3.0.2", + "hash-db", + "jsonrpc-pubsub", + "lazy_static", + "log", + "netstat2", + "parity-multiaddr 0.7.3", "parity-scale-codec", + "parity-util-mem", + "parking_lot 0.10.2", + "pin-project", + "procfs", + "rand 0.7.3", + "sc-block-builder", + "sc-chain-spec", + "sc-client-api", + "sc-client-db", + "sc-executor", + "sc-informant", + "sc-keystore", + "sc-light", + "sc-network", + "sc-offchain", + "sc-rpc", + "sc-rpc-server", + "sc-telemetry", + "sc-tracing", + "sc-transaction-pool", "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-session", - "srml-support", - "srml-system", - "substrate-application-crypto", - "substrate-primitives", + "serde_json", + "slog", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-externalities", + "sp-io", + "sp-runtime", + "sp-session", + "sp-state-machine", + "sp-transaction-pool", + "sp-trie", + "sp-utils", + "sp-version", + "substrate-prometheus-endpoint", + "sysinfo", + "tempfile", + "tracing", + "wasm-timer", ] [[package]] -name = "srml-authorship" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sc-service-test" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "impl-trait-for-tuples", + "env_logger", + "fdlimit", + "futures 0.1.29", + "futures 0.3.4", + "hex-literal", + "log", "parity-scale-codec", - "sr-io", - "sr-primitives", - "sr-std", - "srml-support", - "srml-system", - "substrate-inherents", - "substrate-primitives", + "parking_lot 0.10.2", + "sc-block-builder", + "sc-client-api", + "sc-client-db", + "sc-executor", + "sc-light", + "sc-network", + "sc-service", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-externalities", + "sp-panic-handler", + "sp-runtime", + "sp-state-machine", + "sp-storage", + "sp-transaction-pool", + "sp-trie", + "substrate-test-runtime", + "substrate-test-runtime-client", + "tempfile", + "tokio 0.1.22", ] [[package]] -name = "srml-babe" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sc-state-db" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "hex-literal 0.2.1", + "log", "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-staking-primitives", - "sr-std", - "srml-session", - "srml-support", - "srml-system", - "srml-timestamp", - "substrate-consensus-babe-primitives", - "substrate-inherents", + "parity-util-mem", + "parity-util-mem-derive", + "parking_lot 0.10.2", + "sc-client-api", + "sp-core", ] [[package]] -name = "srml-balances" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sc-telemetry" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "parity-scale-codec", - "safe-mix", + "bytes 0.5.6", + "futures 0.3.4", + "futures-timer 3.0.2", + "libp2p", + "log", + "parking_lot 0.10.2", + "pin-project", + "rand 0.7.3", "serde", - "sr-primitives", - "sr-std", - "srml-support", - "srml-system", - "substrate-keyring", + "slog", + "slog-json", + "slog-scope", + "take_mut", + "void", + "wasm-timer", ] [[package]] -name = "srml-executive" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sc-tracing" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "parity-scale-codec", + "erased-serde", + "log", + "parking_lot 0.10.2", + "rustc-hash", + "sc-telemetry", "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-support", - "srml-system", + "serde_json", + "slog", + "sp-tracing", + "tracing-core", ] [[package]] -name = "srml-finality-tracker" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sc-transaction-graph" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", + "derive_more", + "futures 0.3.4", + "linked-hash-map", + "log", + "parity-util-mem", + "parking_lot 0.10.2", "serde", - "sr-primitives", - "sr-std", - "srml-support", - "srml-system", - "substrate-inherents", + "sp-blockchain", + "sp-core", + "sp-runtime", + "sp-transaction-pool", + "sp-utils", + "wasm-timer", ] [[package]] -name = "srml-grandpa" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sc-transaction-pool" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ + "derive_more", + "futures 0.3.4", + "futures-diagnose", + "intervalier", + "log", "parity-scale-codec", - "serde", - "sr-primitives", - "sr-staking-primitives", - "sr-std", - "srml-finality-tracker", - "srml-session", - "srml-support", - "srml-system", - "substrate-finality-grandpa-primitives", - "substrate-primitives", + "parity-util-mem", + "parking_lot 0.10.2", + "sc-client-api", + "sc-transaction-graph", + "sp-api", + "sp-blockchain", + "sp-core", + "sp-runtime", + "sp-tracing", + "sp-transaction-pool", + "sp-utils", + "substrate-prometheus-endpoint", + "wasm-timer", ] [[package]] -name = "srml-im-online" -version = "0.1.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "schannel" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ - "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-staking-primitives", - "sr-std", - "srml-authorship", - "srml-session", - "srml-support", - "srml-system", - "substrate-application-crypto", - "substrate-primitives", + "lazy_static", + "winapi 0.3.8", ] [[package]] -name = "srml-indices" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "schnorrkel" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" dependencies = [ - "parity-scale-codec", - "safe-mix", - "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-support", - "srml-system", - "substrate-keyring", - "substrate-primitives", + "arrayref", + "arrayvec 0.5.1", + "curve25519-dalek", + "getrandom", + "merlin", + "rand 0.7.3", + "rand_core 0.5.1", + "sha2 0.8.1", + "subtle 2.2.2", + "zeroize", ] [[package]] -name = "srml-metadata" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" -dependencies = [ - "parity-scale-codec", - "serde", - "sr-std", - "substrate-primitives", -] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] -name = "srml-offences" -version = "1.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sct" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" dependencies = [ - "parity-scale-codec", - "serde", - "sr-primitives", - "sr-staking-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-system", + "ring", + "untrusted", ] [[package]] -name = "srml-randomness-collective-flip" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "security-framework" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64808902d7d99f78eaddd2b4e2509713babc3dc3c85ad6f4c447680f3c01e535" dependencies = [ - "parity-scale-codec", - "safe-mix", - "sr-primitives", - "sr-std", - "srml-support", - "srml-system", + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", ] [[package]] -name = "srml-session" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "security-framework-sys" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405" dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", - "safe-mix", - "serde", - "sr-io", - "sr-primitives", - "sr-staking-primitives", - "sr-std", - "srml-support", - "srml-system", - "srml-timestamp", - "substrate-trie", + "core-foundation-sys", + "libc", ] [[package]] -name = "srml-staking" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" dependencies = [ - "parity-scale-codec", - "safe-mix", - "serde", - "sr-io", - "sr-primitives", - "sr-staking-primitives", - "sr-std", - "srml-authorship", - "srml-session", - "srml-support", - "srml-system", - "substrate-keyring", - "substrate-phragmen", + "semver-parser", ] [[package]] -name = "srml-staking-reward-curve" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" -dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.10", - "quote 1.0.3", - "syn 1.0.17", -] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] -name = "srml-sudo" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" -dependencies = [ - "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-support", - "srml-system", -] +name = "send_wrapper" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eddf2e8f50ced781f288c19f18621fa72a3779e3cb58dbf23b07469b0abeb4" [[package]] -name = "srml-support" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" -dependencies = [ - "bitmask", - "impl-trait-for-tuples", - "log", - "once_cell 0.2.4", - "parity-scale-codec", - "paste", - "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-metadata", - "srml-support-procedural", - "substrate-inherents", - "substrate-primitives", -] +name = "send_wrapper" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686ef91cf020ad8d4aca9a7047641fd6add626b7b89e14546c2b6a76781cf822" [[package]] -name = "srml-support-procedural" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + +[[package]] +name = "serde" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399" dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", - "sr-api-macros", - "srml-support-procedural-tools", - "syn 1.0.17", + "serde_derive", ] [[package]] -name = "srml-support-procedural-tools" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "serde_derive" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.10", - "quote 1.0.3", - "srml-support-procedural-tools-derive", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", ] [[package]] -name = "srml-support-procedural-tools-derive" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "serde_derive_internals" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dbab34ca63057a1f15280bdf3c39f2b1eb1b54c17e98360e511637aef7418c6" dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", ] [[package]] -name = "srml-system" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "serde_json" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "164eacbdb13512ec2745fb09d51fd5b22b0d65ed294a1dcf7285a360c80a675c" dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", - "safe-mix", + "itoa", + "ryu", "serde", - "sr-io", - "sr-primitives", - "sr-std", - "sr-version", - "srml-support", - "substrate-primitives", ] [[package]] -name = "srml-system-rpc-runtime-api" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sha-1" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df" dependencies = [ - "parity-scale-codec", - "substrate-client", + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", ] [[package]] -name = "srml-timestamp" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" -dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", - "serde", - "sr-primitives", - "sr-std", - "srml-support", - "srml-system", - "substrate-inherents", -] +name = "sha1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" [[package]] -name = "srml-transaction-payment" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sha2" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0" dependencies = [ - "parity-scale-codec", - "sr-primitives", - "sr-std", - "srml-support", - "srml-system", - "srml-transaction-payment-rpc-runtime-api", + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", ] [[package]] -name = "srml-transaction-payment-rpc-runtime-api" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sha2" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2933378ddfeda7ea26f48c555bdad8bb446bf8a3d17832dc83e380d444cfb8c1" dependencies = [ - "parity-scale-codec", - "serde", - "sr-primitives", - "sr-std", - "substrate-client", + "block-buffer 0.9.0", + "cfg-if", + "cpuid-bool", + "digest 0.9.0", + "opaque-debug 0.3.0", ] [[package]] -name = "stable_deref_trait" -version = "1.1.1" +name = "sha3" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" +checksum = "dd26bc0e7a2e3a7c959bc494caf58b72ee0c71d67704e9520f736ca7e4853ecf" +dependencies = [ + "block-buffer 0.7.3", + "byte-tools", + "digest 0.8.1", + "keccak", + "opaque-debug 0.2.3", +] [[package]] -name = "static_assertions" -version = "1.1.0" +name = "shlex" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" [[package]] -name = "stream-cipher" -version = "0.3.2" +name = "signal-hook-registry" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8131256a5896cabcf5eb04f4d6dacbe1aefda854b0d9896e09cb58829ec5638c" +checksum = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41" dependencies = [ - "generic-array", + "arc-swap", + "libc", ] [[package]] -name = "string" -version = "0.2.1" +name = "slab" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" + +[[package]] +name = "slog" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cc9c640a4adbfbcc11ffb95efe5aa7af7309e002adab54b185507dbf2377b99" dependencies = [ - "bytes 0.4.12", + "erased-serde", ] [[package]] -name = "strsim" -version = "0.8.0" +name = "slog-json" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +checksum = "ddc0d2aff1f8f325ef660d9a0eb6e6dcd20b30b3f581a5897f58bf42d061c37a" +dependencies = [ + "chrono", + "erased-serde", + "serde", + "serde_json", + "slog", +] [[package]] -name = "structopt" -version = "0.3.5" +name = "slog-scope" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b3a3e93f5ad553c38b3301c8a0a0cec829a36783f6a0c467fc4bf553a5f5bf" +checksum = "7c44c89dd8b0ae4537d1ae318353eaf7840b4869c536e31c41e963d1ea523ee6" dependencies = [ - "clap", - "structopt-derive", + "arc-swap", + "lazy_static", + "slog", ] [[package]] -name = "structopt-derive" -version = "0.3.5" +name = "slog_derive" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea692d40005b3ceba90a9fe7a78fa8d4b82b0ce627eebbffc329aab850f3410e" +checksum = "a945ec7f7ce853e89ffa36be1e27dce9a43e82ff9093bf3461c30d5da74ed11b" dependencies = [ - "heck", - "proc-macro-error", - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", ] [[package]] -name = "strum" -version = "0.15.0" +name = "smallvec" +version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d1c33039533f051704951680f1adfd468fd37ac46816ded0d9ee068e60f05f" +checksum = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" +dependencies = [ + "maybe-uninit", +] [[package]] -name = "strum_macros" -version = "0.15.0" +name = "smallvec" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3757cb9d89161a2f24e1cf78efa0c1fcff485d18e3f55e0aa3480824ddaa0f3f" + +[[package]] +name = "snow" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47cd23f5c7dee395a00fa20135e2ec0fffcdfa151c56182966d7a3261343432e" +checksum = "32bf8474159a95551661246cda4976e89356999e3cbfef36f493dacc3fae1e8e" dependencies = [ - "heck", - "proc-macro2 0.4.30", - "quote 0.6.13", - "syn 0.15.44", + "aes-gcm", + "blake2 0.9.0", + "chacha20poly1305", + "rand 0.7.3", + "rand_core 0.5.1", + "ring", + "rustc_version", + "sha2 0.9.1", + "subtle 2.2.2", + "x25519-dalek", ] [[package]] -name = "substrate-application-crypto" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "socket2" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03088793f677dce356f3ccc2edb1b314ad191ab702a5de3faf49304f7e104918" dependencies = [ - "parity-scale-codec", - "serde", - "sr-io", - "sr-std", - "substrate-primitives", + "cfg-if", + "libc", + "redox_syscall", + "winapi 0.3.8", ] [[package]] -name = "substrate-authority-discovery" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "soketto" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c9dab3f95c9ebdf3a88268c19af668f637a3c5039c2c56ff2d40b1b2d64a25b" dependencies = [ - "bytes 0.4.12", - "derive_more 0.15.0", - "futures-preview", - "futures-timer", - "libp2p", + "base64", + "bytes 0.5.6", + "flate2", + "futures 0.3.4", + "http 0.2.1", + "httparse", "log", - "parity-scale-codec", - "prost", - "prost-build", - "serde_json", - "sr-primitives", - "substrate-authority-discovery-primitives", - "substrate-client", - "substrate-network", - "substrate-primitives", + "rand 0.7.3", + "sha1", + "smallvec 1.4.1", + "static_assertions", + "thiserror", ] [[package]] -name = "substrate-authority-discovery-primitives" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-allocator" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "parity-scale-codec", - "sr-primitives", - "sr-std", - "substrate-client", + "derive_more", + "log", + "sp-core", + "sp-std", + "sp-wasm-interface", ] [[package]] -name = "substrate-basic-authorship" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-api" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "futures-preview", - "log", + "hash-db", "parity-scale-codec", - "sr-primitives", - "substrate-client", - "substrate-consensus-common", - "substrate-inherents", - "substrate-primitives", - "substrate-telemetry", - "substrate-transaction-pool", + "sp-api-proc-macro", + "sp-core", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-version", ] [[package]] -name = "substrate-bip39" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be511be555a3633e71739a79e4ddff6a6aaa6579fa6114182a51d72c3eb93c5" +name = "sp-api-proc-macro" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "hmac", - "pbkdf2", - "schnorrkel", - "sha2", + "blake2-rfc", + "proc-macro-crate", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "substrate-chain-spec" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-application-crypto" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "impl-trait-for-tuples", + "parity-scale-codec", "serde", - "serde_json", - "sr-primitives", - "substrate-chain-spec-derive", - "substrate-network", - "substrate-primitives", - "substrate-telemetry", + "sp-core", + "sp-io", + "sp-std", ] [[package]] -name = "substrate-chain-spec-derive" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-arithmetic" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "proc-macro-crate", - "proc-macro2 1.0.10", - "quote 1.0.3", - "syn 1.0.17", + "integer-sqrt", + "num-traits 0.2.11", + "parity-scale-codec", + "serde", + "sp-debug-derive", + "sp-std", ] [[package]] -name = "substrate-cli" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-authority-discovery" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "ansi_term 0.12.1", - "app_dirs", - "atty", - "clap", - "derive_more 0.15.0", - "env_logger 0.7.1", - "exit-future", - "fdlimit", - "futures 0.1.29", - "futures-preview", - "lazy_static", - "log", - "names", - "regex", - "rpassword", - "serde_json", - "sr-primitives", - "structopt", - "substrate-client", - "substrate-header-metadata", - "substrate-keyring", - "substrate-network", - "substrate-panic-handler", - "substrate-primitives", - "substrate-service", - "substrate-state-machine", - "substrate-telemetry", - "time", - "tokio", + "parity-scale-codec", + "sp-api", + "sp-application-crypto", + "sp-runtime", + "sp-std", ] [[package]] -name = "substrate-client" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" -dependencies = [ - "derive_more 0.15.0", - "fnv", - "futures 0.1.29", - "futures-preview", - "hash-db", - "hex-literal 0.2.1", - "kvdb", - "log", - "parity-scale-codec", - "parking_lot 0.9.0", - "sr-api-macros", - "sr-primitives", - "sr-std", - "sr-version", - "substrate-consensus-common", - "substrate-executor", - "substrate-header-metadata", - "substrate-inherents", - "substrate-keyring", - "substrate-primitives", - "substrate-state-machine", - "substrate-telemetry", - "substrate-trie", -] - -[[package]] -name = "substrate-client-db" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-authorship" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "hash-db", - "kvdb", - "kvdb-memorydb", - "kvdb-rocksdb", - "linked-hash-map", - "log", "parity-scale-codec", - "parking_lot 0.9.0", - "sr-primitives", - "substrate-client", - "substrate-consensus-common", - "substrate-executor", - "substrate-header-metadata", - "substrate-primitives", - "substrate-state-db", - "substrate-state-machine", - "substrate-trie", + "sp-inherents", + "sp-runtime", + "sp-std", ] [[package]] -name = "substrate-common-module" -version = "1.0.0" +name = "sp-block-builder" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "sr-primitives", - "srml-support", - "srml-system", + "parity-scale-codec", + "sp-api", + "sp-inherents", + "sp-runtime", + "sp-std", ] [[package]] -name = "substrate-consensus-babe" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-blockchain" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "derive_more 0.15.0", - "fork-tree", - "futures 0.1.29", - "futures-preview", - "futures-timer", + "derive_more", "log", - "merlin", - "num-bigint", - "num-rational", - "num-traits", + "lru", "parity-scale-codec", - "parking_lot 0.9.0", - "pdqselect", - "rand 0.7.3", - "schnorrkel", - "sr-io", - "sr-primitives", - "sr-version", - "srml-babe", - "srml-support", - "substrate-application-crypto", - "substrate-client", - "substrate-consensus-babe-primitives", - "substrate-consensus-common", - "substrate-consensus-slots", - "substrate-consensus-uncles", - "substrate-header-metadata", - "substrate-inherents", - "substrate-keystore", - "substrate-primitives", - "substrate-telemetry", -] - -[[package]] -name = "substrate-consensus-babe-primitives" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" + "parking_lot 0.10.2", + "sp-block-builder", + "sp-consensus", + "sp-runtime", + "sp-state-machine", +] + +[[package]] +name = "sp-chain-spec" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "parity-scale-codec", - "schnorrkel", - "sr-primitives", - "sr-std", - "substrate-application-crypto", - "substrate-client", - "substrate-consensus-slots", + "serde", + "serde_json", ] [[package]] -name = "substrate-consensus-common" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-consensus" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "derive_more 0.15.0", - "futures-preview", - "futures-timer", + "derive_more", + "futures 0.3.4", + "futures-timer 3.0.2", "libp2p", "log", "parity-scale-codec", - "parking_lot 0.9.0", - "sr-primitives", - "sr-std", - "sr-version", - "substrate-inherents", - "substrate-primitives", + "parking_lot 0.10.2", + "serde", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-state-machine", + "sp-std", + "sp-utils", + "sp-version", + "substrate-prometheus-endpoint", + "wasm-timer", ] [[package]] -name = "substrate-consensus-slots" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-consensus-aura" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "futures-preview", - "futures-timer", - "log", "parity-scale-codec", - "parking_lot 0.9.0", - "sr-primitives", - "substrate-client", - "substrate-consensus-common", - "substrate-inherents", - "substrate-primitives", - "substrate-telemetry", + "sp-api", + "sp-application-crypto", + "sp-inherents", + "sp-runtime", + "sp-std", + "sp-timestamp", ] [[package]] -name = "substrate-consensus-uncles" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-consensus-babe" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "log", - "sr-primitives", - "srml-authorship", - "substrate-client", - "substrate-consensus-common", - "substrate-inherents", - "substrate-primitives", + "merlin", + "parity-scale-codec", + "sp-api", + "sp-application-crypto", + "sp-consensus", + "sp-consensus-vrf", + "sp-core", + "sp-inherents", + "sp-runtime", + "sp-std", + "sp-timestamp", ] [[package]] -name = "substrate-content-working-group-module" -version = "1.0.0" +name = "sp-consensus-vrf" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-system", - "srml-timestamp", - "substrate-common-module", - "substrate-forum-module", - "substrate-hiring-module", - "substrate-membership-module", - "substrate-primitives", - "substrate-recurring-reward-module", - "substrate-stake-module", - "substrate-token-mint-module", - "substrate-versioned-store", - "substrate-versioned-store-permissions-module", -] - -[[package]] -name = "substrate-debug-derive" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" -dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", - "syn 1.0.17", + "schnorrkel", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] -name = "substrate-executor" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-core" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "derive_more 0.15.0", + "base58", + "blake2-rfc", + "byteorder", + "derive_more", + "ed25519-dalek", + "futures 0.3.4", + "hash-db", + "hash256-std-hasher", + "hex", + "impl-serde 0.3.0", "lazy_static", "libsecp256k1", "log", + "merlin", + "num-traits 0.2.11", "parity-scale-codec", - "parity-wasm", - "parking_lot 0.9.0", - "sr-io", - "sr-version", - "substrate-externalities", - "substrate-panic-handler", - "substrate-primitives", - "substrate-serializer", - "substrate-trie", - "substrate-wasm-interface", + "parity-util-mem", + "parking_lot 0.10.2", + "primitive-types", + "rand 0.7.3", + "regex", + "schnorrkel", + "serde", + "sha2 0.8.1", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", + "sp-std", + "sp-storage", + "substrate-bip39", + "tiny-bip39", "tiny-keccak", + "twox-hash", "wasmi", + "zeroize", ] [[package]] -name = "substrate-externalities" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-database" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "environmental", - "primitive-types", - "sr-std", - "substrate-primitives-storage", + "kvdb", + "parking_lot 0.10.2", ] [[package]] -name = "substrate-finality-grandpa" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-debug-derive" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "finality-grandpa", - "fork-tree", - "futures 0.1.29", - "futures-preview", - "log", - "parity-scale-codec", - "parking_lot 0.9.0", - "rand 0.7.3", - "serde_json", - "sr-primitives", - "srml-finality-tracker", - "substrate-client", - "substrate-consensus-common", - "substrate-finality-grandpa-primitives", - "substrate-header-metadata", - "substrate-inherents", - "substrate-keystore", - "substrate-network", - "substrate-primitives", - "substrate-telemetry", - "tokio-executor", - "tokio-timer", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "substrate-finality-grandpa-primitives" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-externalities" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ + "environmental", "parity-scale-codec", - "serde", - "sr-primitives", - "sr-std", - "substrate-application-crypto", - "substrate-client", + "sp-std", + "sp-storage", ] [[package]] -name = "substrate-forum-module" -version = "1.1.1" +name = "sp-finality-grandpa" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "hex-literal 0.1.4", + "finality-grandpa", + "log", "parity-scale-codec", - "quote 0.6.13", "serde", - "serde_derive", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-support-procedural", - "srml-system", - "srml-timestamp", - "substrate-primitives", + "sp-api", + "sp-application-crypto", + "sp-core", + "sp-runtime", + "sp-std", ] [[package]] -name = "substrate-governance-module" -version = "1.0.0" +name = "sp-finality-tracker" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-system", - "srml-timestamp", - "substrate-common-module", - "substrate-membership-module", - "substrate-primitives", - "substrate-recurring-reward-module", - "substrate-token-mint-module", -] - -[[package]] -name = "substrate-header-metadata" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" -dependencies = [ - "lru-cache", - "parking_lot 0.9.0", - "sr-primitives", + "sp-inherents", + "sp-std", ] [[package]] -name = "substrate-hiring-module" -version = "1.0.1" +name = "sp-inherents" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "hex-literal 0.1.4", - "mockall", + "derive_more", "parity-scale-codec", - "quote 0.6.13", - "serde", - "serde_derive", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-support-procedural", - "srml-system", - "srml-timestamp", - "substrate-primitives", - "substrate-stake-module", + "parking_lot 0.10.2", + "sp-core", + "sp-std", ] [[package]] -name = "substrate-inherents" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-io" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ + "futures 0.3.4", + "hash-db", + "libsecp256k1", + "log", "parity-scale-codec", - "parking_lot 0.9.0", - "sr-primitives", - "sr-std", + "parking_lot 0.10.2", + "sp-core", + "sp-externalities", + "sp-runtime-interface", + "sp-state-machine", + "sp-std", + "sp-tracing", + "sp-trie", + "sp-wasm-interface", ] [[package]] -name = "substrate-keyring" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-keyring" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ "lazy_static", - "sr-primitives", - "strum", - "strum_macros", - "substrate-primitives", + "sp-core", + "sp-runtime", + "strum 0.16.0", ] [[package]] -name = "substrate-keystore" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-npos-elections" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "derive_more 0.15.0", - "hex 0.3.2", - "parking_lot 0.9.0", - "rand 0.7.3", - "serde_json", - "substrate-application-crypto", - "substrate-primitives", - "subtle 2.2.2", + "parity-scale-codec", + "serde", + "sp-arithmetic", + "sp-npos-elections-compact", + "sp-std", ] [[package]] -name = "substrate-membership-module" -version = "1.0.1" +name = "sp-npos-elections-compact" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-system", - "srml-timestamp", - "substrate-common-module", - "substrate-primitives", + "proc-macro-crate", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "substrate-memo-module" -version = "1.0.0" +name = "sp-offchain" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "parity-scale-codec", - "serde", - "sr-primitives", - "sr-std", - "srml-support", - "srml-system", - "substrate-common-module", + "sp-api", + "sp-core", + "sp-runtime", ] [[package]] -name = "substrate-network" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-panic-handler" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "bitflags", - "bytes 0.4.12", - "derive_more 0.15.0", - "either", - "erased-serde", - "fnv", - "fork-tree", - "futures 0.1.29", - "futures-preview", - "futures-timer", - "libp2p", - "linked-hash-map", - "linked_hash_set", + "backtrace", "log", - "lru-cache", - "parity-scale-codec", - "parking_lot 0.9.0", - "rand 0.7.3", - "rustc-hex", +] + +[[package]] +name = "sp-rpc" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ "serde", - "serde_json", - "slog", - "slog_derive", - "smallvec 0.6.13", - "sr-primitives", - "substrate-client", - "substrate-consensus-babe-primitives", - "substrate-consensus-common", - "substrate-header-metadata", - "substrate-peerset", - "substrate-primitives", - "tokio-io", - "unsigned-varint 0.2.3", - "void", - "zeroize 0.10.1", + "sp-core", ] [[package]] -name = "substrate-offchain" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-runtime" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "bytes 0.4.12", - "fnv", - "futures 0.1.29", - "futures-preview", - "futures-timer", - "hyper", - "hyper-rustls", + "either", + "hash256-std-hasher", + "impl-trait-for-tuples", "log", - "num_cpus", "parity-scale-codec", - "parking_lot 0.9.0", + "parity-util-mem", + "paste", "rand 0.7.3", - "sr-primitives", - "substrate-client", - "substrate-keystore", - "substrate-network", - "substrate-offchain-primitives", - "substrate-primitives", - "substrate-transaction-pool", - "threadpool", + "serde", + "sp-application-crypto", + "sp-arithmetic", + "sp-core", + "sp-inherents", + "sp-io", + "sp-std", ] [[package]] -name = "substrate-offchain-primitives" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-runtime-interface" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "sr-primitives", - "substrate-client", + "parity-scale-codec", + "primitive-types", + "sp-externalities", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-tracing", + "sp-wasm-interface", + "static_assertions", ] [[package]] -name = "substrate-panic-handler" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-runtime-interface-proc-macro" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "backtrace", - "log", + "Inflector", + "proc-macro-crate", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "substrate-peerset" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-serializer" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "futures-preview", - "libp2p", - "linked-hash-map", - "log", - "lru-cache", + "serde", "serde_json", ] [[package]] -name = "substrate-phragmen" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-session" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "serde", - "sr-primitives", - "sr-std", + "parity-scale-codec", + "sp-api", + "sp-core", + "sp-runtime", + "sp-staking", + "sp-std", ] [[package]] -name = "substrate-primitives" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-staking" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" +dependencies = [ + "parity-scale-codec", + "sp-runtime", + "sp-std", +] + +[[package]] +name = "sp-state-machine" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "base58", - "blake2-rfc", - "byteorder 1.3.4", - "ed25519-dalek 0.9.1", "hash-db", - "hash256-std-hasher", - "hex 0.4.2", - "impl-serde 0.2.3", - "lazy_static", - "libsecp256k1", + "itertools 0.9.0", "log", - "num-traits", + "num-traits 0.2.11", "parity-scale-codec", - "parking_lot 0.9.0", - "primitive-types", + "parking_lot 0.10.2", "rand 0.7.3", - "regex", - "rustc-hex", - "schnorrkel", - "serde", - "sha2", - "sr-std", - "substrate-bip39", - "substrate-debug-derive", - "substrate-externalities", - "substrate-primitives-storage", - "tiny-bip39", - "tiny-keccak", - "twox-hash", - "wasmi", - "zeroize 0.10.1", + "smallvec 1.4.1", + "sp-core", + "sp-externalities", + "sp-panic-handler", + "sp-trie", + "trie-db", + "trie-root", ] [[package]] -name = "substrate-primitives-storage" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-std" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" + +[[package]] +name = "sp-storage" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ "impl-serde 0.2.3", + "ref-cast", "serde", - "sr-std", - "substrate-debug-derive", + "sp-debug-derive", + "sp-std", ] [[package]] -name = "substrate-proposals-codex-module" -version = "2.0.0" -dependencies = [ - "num_enum", - "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-staking-primitives", - "sr-std", - "srml-balances", - "srml-staking", - "srml-staking-reward-curve", - "srml-support", - "srml-system", - "srml-timestamp", - "substrate-common-module", - "substrate-content-working-group-module", - "substrate-governance-module", - "substrate-hiring-module", - "substrate-membership-module", - "substrate-primitives", - "substrate-proposals-discussion-module", - "substrate-proposals-engine-module", - "substrate-recurring-reward-module", - "substrate-roles-module", - "substrate-stake-module", - "substrate-token-mint-module", - "substrate-versioned-store", - "substrate-versioned-store-permissions-module", -] - -[[package]] -name = "substrate-proposals-discussion-module" -version = "2.0.0" +name = "sp-timestamp" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "num_enum", + "impl-trait-for-tuples", "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-system", - "srml-timestamp", - "substrate-common-module", - "substrate-membership-module", - "substrate-primitives", + "sp-api", + "sp-inherents", + "sp-runtime", + "sp-std", + "wasm-timer", ] [[package]] -name = "substrate-proposals-engine-module" -version = "2.0.0" +name = "sp-tracing" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "mockall", - "num_enum", - "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-system", - "srml-timestamp", - "substrate-common-module", - "substrate-membership-module", - "substrate-primitives", - "substrate-stake-module", + "log", + "rental", + "tracing", ] [[package]] -name = "substrate-recurring-reward-module" -version = "1.0.1" +name = "sp-transaction-pool" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "hex-literal 0.1.4", + "derive_more", + "futures 0.3.4", + "log", "parity-scale-codec", - "quote 0.6.13", "serde", - "serde_derive", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-support-procedural", - "srml-system", - "srml-timestamp", - "substrate-primitives", - "substrate-token-mint-module", + "sp-api", + "sp-blockchain", + "sp-runtime", + "sp-utils", ] [[package]] -name = "substrate-roles-module" -version = "1.0.1" +name = "sp-trie" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ + "hash-db", + "memory-db", "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-system", - "srml-timestamp", - "substrate-common-module", - "substrate-membership-module", - "substrate-primitives", + "sp-core", + "sp-std", + "trie-db", + "trie-root", ] [[package]] -name = "substrate-rpc" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-utils" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "futures-preview", - "hash-db", - "jsonrpc-core 14.0.5", - "jsonrpc-pubsub", - "log", - "parity-scale-codec", - "parking_lot 0.9.0", - "serde_json", - "sr-primitives", - "sr-version", - "substrate-client", - "substrate-executor", - "substrate-keystore", - "substrate-primitives", - "substrate-rpc-api", - "substrate-rpc-primitives", - "substrate-session", - "substrate-state-machine", - "substrate-transaction-pool", + "futures 0.3.4", + "futures-core", + "futures-timer 3.0.2", + "lazy_static", + "prometheus", ] [[package]] -name = "substrate-rpc-api" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-version" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "derive_more 0.15.0", - "futures-preview", - "jsonrpc-core 14.0.5", - "jsonrpc-core-client", - "jsonrpc-derive", - "jsonrpc-pubsub", - "log", + "impl-serde 0.2.3", "parity-scale-codec", - "parking_lot 0.9.0", "serde", - "serde_json", - "sr-version", - "substrate-primitives", - "substrate-rpc-primitives", - "substrate-transaction-graph", + "sp-runtime", + "sp-std", ] [[package]] -name = "substrate-rpc-primitives" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "sp-wasm-interface" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "serde", - "substrate-primitives", + "impl-trait-for-tuples", + "parity-scale-codec", + "sp-std", + "wasmi", ] [[package]] -name = "substrate-rpc-servers" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "stable_deref_trait" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "statrs" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10102ac8d55e35db2b3fafc26f81ba8647da2e15879ab686a67e6d19af2685e8" dependencies = [ - "jsonrpc-core 14.0.5", - "jsonrpc-http-server", - "jsonrpc-pubsub", - "jsonrpc-ws-server", - "log", - "serde", - "serde_json", - "sr-primitives", + "rand 0.5.6", ] [[package]] -name = "substrate-serializer" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "stream-cipher" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f8ed9974042b8c3672ff3030a69fcc03b74c47c3d1ecb7755e8a3626011e88" dependencies = [ - "serde", - "serde_json", + "generic-array 0.14.3", ] [[package]] -name = "substrate-service" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "string" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" dependencies = [ - "derive_more 0.15.0", - "exit-future", - "futures 0.1.29", - "futures-preview", - "lazy_static", - "log", - "parity-multiaddr 0.5.0", - "parity-scale-codec", - "parking_lot 0.9.0", - "serde", - "serde_json", - "slog", - "sr-io", - "sr-primitives", - "substrate-application-crypto", - "substrate-chain-spec", - "substrate-client", - "substrate-client-db", - "substrate-consensus-common", - "substrate-executor", - "substrate-keystore", - "substrate-network", - "substrate-offchain", - "substrate-primitives", - "substrate-rpc", - "substrate-rpc-servers", - "substrate-session", - "substrate-telemetry", - "substrate-transaction-pool", - "sysinfo", - "target_info", - "tokio-executor", - "tokio-timer", + "bytes 0.4.12", ] [[package]] -name = "substrate-service-discovery-module" -version = "1.0.0" +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + +[[package]] +name = "structopt" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de2f5e239ee807089b62adce73e48c625e0ed80df02c7ab3f068f5db5281065c" dependencies = [ - "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-support", - "srml-system", - "substrate-primitives", - "substrate-roles-module", + "clap", + "lazy_static", + "structopt-derive", ] [[package]] -name = "substrate-session" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "structopt-derive" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "510413f9de616762a4fbeab62509bf15c729603b72d7cd71280fbca431b1c118" dependencies = [ - "sr-primitives", - "sr-std", - "substrate-client", - "substrate-primitives", + "heck", + "proc-macro-error", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "substrate-stake-module" -version = "2.0.0" +name = "strum" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6138f8f88a16d90134763314e3fc76fa3ed6a7db4725d6acf9a3ef95a3188d22" dependencies = [ - "hex-literal 0.1.4", - "parity-scale-codec", - "quote 0.6.13", - "serde", - "serde_derive", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-support-procedural", - "srml-system", - "srml-timestamp", - "substrate-primitives", + "strum_macros 0.16.0", ] [[package]] -name = "substrate-state-db" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "strum" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3924a58d165da3b7b2922c667ab0673c7b5fd52b5c19ea3442747bcb3cd15abe" + +[[package]] +name = "strum_macros" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0054a7df764039a6cd8592b9de84be4bec368ff081d203a7d5371cbfa8e65c81" dependencies = [ - "log", - "parity-scale-codec", - "parking_lot 0.9.0", - "substrate-primitives", + "heck", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "substrate-state-machine" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "strum_macros" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2ab682ecdcae7f5f45ae85cd7c1e6c8e68ea42c8a612d47fedf831c037146a" dependencies = [ - "hash-db", - "log", - "num-traits", - "parity-scale-codec", - "parking_lot 0.9.0", - "rand 0.7.3", - "substrate-externalities", - "substrate-panic-handler", - "substrate-primitives", - "substrate-trie", - "trie-db", - "trie-root", + "heck", + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] -name = "substrate-storage-module" -version = "1.0.0" +name = "substrate-bip39" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c004e8166d6e0aa3a9d5fa673e5b7098ff25f930de1013a21341988151e681bb" dependencies = [ - "parity-scale-codec", - "serde", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-system", - "srml-timestamp", - "substrate-common-module", - "substrate-membership-module", - "substrate-primitives", - "substrate-roles-module", + "hmac", + "pbkdf2", + "schnorrkel", + "sha2 0.8.1", ] [[package]] -name = "substrate-telemetry" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "substrate-browser-utils" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "bytes 0.4.12", + "chrono", + "clear_on_drop", + "console_error_panic_hook", + "console_log", "futures 0.1.29", - "futures-preview", - "futures-timer", - "libp2p", + "futures 0.3.4", + "futures-timer 3.0.2", + "js-sys", + "kvdb-web", + "libp2p-wasm-ext", "log", - "parking_lot 0.9.0", + "rand 0.6.5", "rand 0.7.3", - "serde", - "slog", - "slog-async", - "slog-json", - "slog-scope", - "tokio-io", - "void", + "sc-chain-spec", + "sc-informant", + "sc-network", + "sc-service", + "sp-database", + "wasm-bindgen", + "wasm-bindgen-futures", ] [[package]] -name = "substrate-token-mint-module" -version = "1.0.1" +name = "substrate-build-script-utils" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "hex-literal 0.1.4", - "parity-scale-codec", - "quote 0.6.13", - "serde", - "serde_derive", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-support-procedural", - "srml-system", - "srml-timestamp", - "substrate-primitives", + "platforms", ] [[package]] -name = "substrate-transaction-graph" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "substrate-frame-rpc-system" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "derive_more 0.15.0", - "futures-preview", + "frame-system-rpc-runtime-api", + "futures 0.3.4", + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", "log", - "parking_lot 0.9.0", + "parity-scale-codec", + "sc-client-api", + "sc-rpc-api", "serde", - "sr-primitives", - "substrate-primitives", + "sp-api", + "sp-block-builder", + "sp-blockchain", + "sp-core", + "sp-runtime", + "sp-transaction-pool", ] [[package]] -name = "substrate-transaction-pool" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "substrate-prometheus-endpoint" +version = "0.8.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "derive_more 0.15.0", - "futures 0.3.4", + "async-std", + "derive_more", + "futures-util", + "hyper 0.13.7", "log", - "parity-scale-codec", - "parking_lot 0.9.0", - "sr-primitives", - "substrate-client", - "substrate-primitives", - "substrate-transaction-graph", + "prometheus", + "tokio 0.2.22", ] [[package]] -name = "substrate-trie" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" +name = "substrate-test-client" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ + "futures 0.3.4", "hash-db", - "memory-db", "parity-scale-codec", - "sr-std", - "substrate-primitives", - "trie-db", - "trie-root", + "sc-client-api", + "sc-client-db", + "sc-consensus", + "sc-executor", + "sc-light", + "sc-service", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-keyring", + "sp-runtime", + "sp-state-machine", ] [[package]] -name = "substrate-versioned-store" -version = "1.0.1" +name = "substrate-test-runtime" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "hex-literal 0.1.4", + "cfg-if", + "frame-executive", + "frame-support", + "frame-system", + "frame-system-rpc-runtime-api", + "log", + "memory-db", + "pallet-babe", + "pallet-timestamp", "parity-scale-codec", - "quote 0.6.13", + "parity-util-mem", + "sc-service", "serde", - "serde_derive", - "sr-io", - "sr-primitives", - "sr-std", - "srml-balances", - "srml-support", - "srml-support-procedural", - "srml-system", - "srml-timestamp", - "substrate-primitives", + "sp-api", + "sp-application-crypto", + "sp-block-builder", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-core", + "sp-finality-grandpa", + "sp-inherents", + "sp-io", + "sp-keyring", + "sp-offchain", + "sp-runtime", + "sp-runtime-interface", + "sp-session", + "sp-std", + "sp-transaction-pool", + "sp-trie", + "sp-version", + "substrate-wasm-builder-runner", + "trie-db", ] [[package]] -name = "substrate-versioned-store-permissions-module" -version = "1.0.1" +name = "substrate-test-runtime-client" +version = "2.0.0-rc4" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" dependencies = [ - "hex-literal 0.1.4", + "futures 0.3.4", "parity-scale-codec", - "quote 0.6.13", - "serde", - "serde_derive", - "sr-io", - "sr-primitives", - "sr-std", - "srml-support", - "srml-support-procedural", - "srml-system", - "srml-timestamp", - "substrate-primitives", - "substrate-versioned-store", + "sc-block-builder", + "sc-client-api", + "sc-consensus", + "sc-light", + "sc-service", + "sp-api", + "sp-blockchain", + "sp-consensus", + "sp-core", + "sp-runtime", + "substrate-test-client", + "substrate-test-runtime", ] [[package]] name = "substrate-wasm-builder-runner" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e30c70de7e7d5fd404fe26db1e7a4d6b553e2760b1ac490f249c04a960c483b8" - -[[package]] -name = "substrate-wasm-interface" -version = "2.0.0" -source = "git+https://github.com/paritytech/substrate.git?rev=c37bb08535c49a12320af7facfd555ce05cce2e8#c37bb08535c49a12320af7facfd555ce05cce2e8" -dependencies = [ - "wasmi", -] +version = "1.0.6" +source = "git+https://github.com/paritytech/substrate.git?rev=00768a1f21a579c478fe5d4f51e1fa71f7db9fd4#00768a1f21a579c478fe5d4f51e1fa71f7db9fd4" [[package]] name = "subtle" @@ -5582,13 +7022,13 @@ checksum = "7c65d530b10ccaeac294f349038a597e435b18fb456aadd0840a623f83b9e941" [[package]] name = "syn" -version = "0.15.44" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +checksum = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" dependencies = [ - "proc-macro2 0.4.30", - "quote 0.6.13", - "unicode-xid 0.1.0", + "quote 0.3.15", + "synom", + "unicode-xid 0.0.4", ] [[package]] @@ -5597,32 +7037,54 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro2", + "quote 1.0.7", "unicode-xid 0.2.0", ] +[[package]] +name = "syn-mid" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a" +dependencies = [ + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", +] + +[[package]] +name = "synom" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" +dependencies = [ + "unicode-xid 0.0.4", +] + [[package]] name = "synstructure" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", "unicode-xid 0.2.0", ] [[package]] name = "sysinfo" -version = "0.9.6" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f4b2468c629cffba39c0a4425849ab3cdb03d9dfacba69684609aea04d08ff9" +checksum = "1cac193374347e7c263c5f547524f36ff8ec6702d56c8799c8331d26dffe8c1e" dependencies = [ "cfg-if", "doc-comment", "libc", + "ntapi", + "once_cell", "rayon", "winapi 0.3.8", ] @@ -5633,12 +7095,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" -[[package]] -name = "target_info" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c63f48baada5c52e65a29eef93ab4f8982681b67f9e8d29c7b05abcfec2b9ffe" - [[package]] name = "tempfile" version = "3.1.0" @@ -5672,12 +7128,23 @@ dependencies = [ ] [[package]] -name = "thread_local" -version = "0.3.6" +name = "thiserror" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b" +checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08" dependencies = [ - "lazy_static", + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793" +dependencies = [ + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", ] [[package]] @@ -5691,9 +7158,9 @@ dependencies = [ [[package]] name = "threadpool" -version = "1.7.1" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" dependencies = [ "num_cpus", ] @@ -5711,24 +7178,25 @@ dependencies = [ [[package]] name = "tiny-bip39" -version = "0.6.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1c5676413eaeb1ea35300a0224416f57abc3bd251657e0fafc12c47ff98c060" +checksum = "b0165e045cc2ae1660270ca65e1676dbaab60feb0f91b10f7d0665e9b47e31f2" dependencies = [ "failure", - "hashbrown 0.1.8", "hmac", - "once_cell 0.1.8", + "once_cell", "pbkdf2", - "rand 0.6.5", - "sha2", + "rand 0.7.3", + "rustc-hash", + "sha2 0.8.1", + "unicode-normalization", ] [[package]] name = "tiny-keccak" -version = "1.5.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d8a021c69bb74a44ccedb824a046447e2c84a01df9e5c20779750acb38e11b2" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ "crunchy", ] @@ -5745,11 +7213,11 @@ dependencies = [ "num_cpus", "tokio-codec", "tokio-current-thread", - "tokio-executor", + "tokio-executor 0.1.10", "tokio-fs", "tokio-io", "tokio-reactor", - "tokio-sync", + "tokio-sync 0.1.8", "tokio-tcp", "tokio-threadpool", "tokio-timer", @@ -5757,6 +7225,28 @@ dependencies = [ "tokio-uds", ] +[[package]] +name = "tokio" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d34ca54d84bf2b5b4d7d31e901a8464f7b60ac145a284fba25ceb801f2ddccd" +dependencies = [ + "bytes 0.5.6", + "fnv", + "futures-core", + "iovec", + "lazy_static", + "libc", + "memchr", + "mio", + "mio-uds", + "num_cpus", + "pin-project-lite", + "signal-hook-registry", + "slab", + "winapi 0.3.8", +] + [[package]] name = "tokio-buf" version = "0.1.1" @@ -5786,29 +7276,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1de0e32a83f131e002238d7ccde18211c0a5397f60cbfffcb112868c2e0e20e" dependencies = [ "futures 0.1.29", - "tokio-executor", + "tokio-executor 0.1.10", ] [[package]] -name = "tokio-dns-unofficial" -version = "0.4.0" +name = "tokio-executor" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c65483db54eb91b4ef3a9389a3364558590faf30ce473141707c0e16fda975" +checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" dependencies = [ + "crossbeam-utils", "futures 0.1.29", - "futures-cpupool", - "lazy_static", - "tokio", ] [[package]] name = "tokio-executor" -version = "0.1.10" +version = "0.2.0-alpha.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671" +checksum = "9ee9ceecf69145923834ea73f32ba40c790fd877b74a7817dd0b089f1eb9c7c8" dependencies = [ - "crossbeam-utils 0.7.2", - "futures 0.1.29", + "futures-util-preview", + "lazy_static", + "tokio-sync 0.2.0-alpha.6", ] [[package]] @@ -5833,13 +7322,26 @@ dependencies = [ "log", ] +[[package]] +name = "tokio-named-pipes" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d282d483052288b2308ba5ee795f5673b159c9bdf63c385a05609da782a5eae" +dependencies = [ + "bytes 0.4.12", + "futures 0.1.29", + "mio", + "mio-named-pipes", + "tokio 0.1.22", +] + [[package]] name = "tokio-reactor" version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351" dependencies = [ - "crossbeam-utils 0.7.2", + "crossbeam-utils", "futures 0.1.29", "lazy_static", "log", @@ -5847,25 +7349,32 @@ dependencies = [ "num_cpus", "parking_lot 0.9.0", "slab", - "tokio-executor", + "tokio-executor 0.1.10", "tokio-io", - "tokio-sync", + "tokio-sync 0.1.8", ] [[package]] name = "tokio-rustls" -version = "0.10.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d7cf08f990090abd6c6a73cab46fed62f85e8aef8b99e4b918a9f4a637f0676" +checksum = "15cb62a0d2770787abc96e99c1cd98fcf17f94959f3af63ca85bdfb203f051b4" dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", - "iovec", + "futures-core", "rustls", - "tokio-io", + "tokio 0.2.22", "webpki", ] +[[package]] +name = "tokio-service" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24da22d077e0f15f55162bdbdc661228c1581892f52074fb242678d015b45162" +dependencies = [ + "futures 0.1.29", +] + [[package]] name = "tokio-sync" version = "0.1.8" @@ -5876,6 +7385,17 @@ dependencies = [ "futures 0.1.29", ] +[[package]] +name = "tokio-sync" +version = "0.2.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f1aaeb685540f7407ea0e27f1c9757d258c7c6bf4e3eb19da6fc59b747239d2" +dependencies = [ + "fnv", + "futures-core-preview", + "futures-util-preview", +] + [[package]] name = "tokio-tcp" version = "0.1.4" @@ -5898,13 +7418,13 @@ checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" dependencies = [ "crossbeam-deque", "crossbeam-queue", - "crossbeam-utils 0.7.2", + "crossbeam-utils", "futures 0.1.29", "lazy_static", "log", "num_cpus", "slab", - "tokio-executor", + "tokio-executor 0.1.10", ] [[package]] @@ -5913,10 +7433,10 @@ version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93044f2d313c95ff1cb7809ce9a7a05735b012288a888b62d4434fd58c94f296" dependencies = [ - "crossbeam-utils 0.7.2", + "crossbeam-utils", "futures 0.1.29", "slab", - "tokio-executor", + "tokio-executor 0.1.10", ] [[package]] @@ -5936,9 +7456,9 @@ dependencies = [ [[package]] name = "tokio-uds" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5076db410d6fdc6523df7595447629099a1fdc47b3d9f896220780fa48faf798" +checksum = "ab57a4ac4111c8c9dbcf70779f6fc8bc35ae4b2454809febac840ad19bd7e4e0" dependencies = [ "bytes 0.4.12", "futures 0.1.29", @@ -5952,6 +7472,20 @@ dependencies = [ "tokio-reactor", ] +[[package]] +name = "tokio-util" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" +dependencies = [ + "bytes 0.5.6", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio 0.2.22", +] + [[package]] name = "toml" version = "0.5.6" @@ -5961,6 +7495,44 @@ dependencies = [ "serde", ] +[[package]] +name = "tower-service" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" + +[[package]] +name = "tracing" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e2a2de6b0d5cbb13fc21193a2296888eaab62b6044479aafb3c54c01c29fcd" +dependencies = [ + "cfg-if", + "log", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0693bf8d6f2bf22c690fc61a9d21ac69efdbb894a17ed596b9af0f01e64b84b" +dependencies = [ + "proc-macro2", + "quote 1.0.7", + "syn 1.0.17", +] + +[[package]] +name = "tracing-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94ae75f0d28ae10786f3b1895c55fe72e79928fd5ccdebb5438c75e93fec178f" +dependencies = [ + "lazy_static", +] + [[package]] name = "treeline" version = "0.1.0" @@ -5969,42 +7541,31 @@ checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" [[package]] name = "trie-db" -version = "0.15.2" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0b62d27e8aa1c07414549ac872480ac82380bab39e730242ab08d82d7cc098a" +checksum = "cb230c24c741993b04cfccbabb45acff6f6480c5f00d3ed8794ea43db3a9d727" dependencies = [ - "elastic-array", "hash-db", "hashbrown 0.6.3", "log", - "rand 0.6.5", + "rustc-hex", + "smallvec 1.4.1", ] [[package]] name = "trie-root" -version = "0.15.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b779f7c1c8fe9276365d9d5be5c4b5adeacf545117bb3f64c974305789c5c0b" +checksum = "652931506d2c1244d7217a70b99f56718a7b4161b37f04e7cd868072a99f68cd" dependencies = [ "hash-db", ] [[package]] name = "try-lock" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" - -[[package]] -name = "twofish" -version = "0.2.0" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712d261e83e727c8e2dbb75dacac67c36e35db36a958ee504f2164fc052434e1" -dependencies = [ - "block-cipher-trait", - "byteorder 1.3.4", - "opaque-debug", -] +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "twox-hash" @@ -6023,11 +7584,11 @@ checksum = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" [[package]] name = "uint" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75a4cdd7b87b28840dba13c483b9a88ee6bbf16ba5c951ee1ecfcf723078e0d" +checksum = "173cd16430c206dc1a430af8a89a0e9c076cf15cb42b4aedb10e8cc8fee73681" dependencies = [ - "byteorder 1.3.4", + "byteorder", "crunchy", "rustc-hex", "static_assertions", @@ -6039,7 +7600,7 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ - "version_check 0.9.1", + "version_check", ] [[package]] @@ -6057,7 +7618,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" dependencies = [ - "smallvec 1.2.0", + "smallvec 1.4.1", ] [[package]] @@ -6068,15 +7629,15 @@ checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" [[package]] name = "unicode-width" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" [[package]] name = "unicode-xid" -version = "0.1.0" +version = "0.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +checksum = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" [[package]] name = "unicode-xid" @@ -6084,27 +7645,43 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +[[package]] +name = "universal-hash" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" +dependencies = [ + "generic-array 0.14.3", + "subtle 2.2.2", +] + [[package]] name = "unsigned-varint" -version = "0.2.3" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7f0023a96687fe169081e8adce3f65e3874426b7886e9234d490af2dc077959" +checksum = "f67332660eb59a6f1eb24ff1220c9e8d01738a8503c6002e30bcfe4bd9f2b4a9" dependencies = [ - "bytes 0.4.12", - "tokio-codec", + "bytes 0.5.6", + "futures-io", + "futures-util", + "futures_codec 0.3.4", ] [[package]] name = "unsigned-varint" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38e01ad4b98f042e166c1bf9a13f9873a99d79eaa171ce7ca81e6dd0f895d8a" +checksum = "669d776983b692a906c881fcd0cfb34271a48e197e4d6cb8df32b05bfc3d3fa5" +dependencies = [ + "bytes 0.5.6", + "futures_codec 0.4.0", +] [[package]] name = "untrusted" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60369ef7a31de49bcb3f6ca728d4ba7300d9a1658f94c727d4cab8c8d9f4aece" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "url" @@ -6130,37 +7707,21 @@ dependencies = [ [[package]] name = "vcpkg" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" +checksum = "6454029bf181f092ad1b853286f23e2c507d8e8194d01d92da4a55c274a5508c" [[package]] name = "vec_map" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" - -[[package]] -name = "vergen" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ce50d8996df1f85af15f2cd8d33daae6e479575123ef4314a51a70a230739cb" -dependencies = [ - "bitflags", - "chrono", -] - -[[package]] -name = "version_check" -version = "0.1.5" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" [[package]] name = "void" @@ -6179,6 +7740,16 @@ dependencies = [ "try-lock", ] +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -6204,20 +7775,19 @@ dependencies = [ "bumpalo", "lazy_static", "log", - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.3.27" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83420b37346c311b9ed822af41ec2e82839bfe99867ec6c54e2da43b7538771c" +checksum = "7add542ea1ac7fdaa9dc25e031a6af33b7d63376292bd24140c637d00d1c312a" dependencies = [ "cfg-if", - "futures 0.1.29", "js-sys", "wasm-bindgen", "web-sys", @@ -6229,7 +7799,7 @@ version = "0.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bd151b63e1ea881bb742cd20e1d6127cef28399558f3b5d415289bc41eee3a4" dependencies = [ - "quote 1.0.3", + "quote 1.0.7", "wasm-bindgen-macro-support", ] @@ -6239,8 +7809,8 @@ version = "0.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d68a5b36eef1be7868f668632863292e37739656a80fc4b9acec7b0bd35a4931" dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", "wasm-bindgen-backend", "wasm-bindgen-shared", @@ -6254,37 +7824,39 @@ checksum = "daf76fe7d25ac79748a37538b7daeed1c7a6867c92d3245c12c6222e4a20d639" [[package]] name = "wasm-timer" -version = "0.1.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa3e01d234bb71760e685cfafa5e2c96f8ad877c161a721646356651069e26ac" +checksum = "324c5e65a08699c9c4334ba136597ab22b85dccd4b65dd1e36ccf8f723a95b54" dependencies = [ - "futures 0.1.29", + "futures 0.3.4", "js-sys", - "send_wrapper", - "tokio-timer", + "parking_lot 0.9.0", + "pin-utils", + "send_wrapper 0.2.0", "wasm-bindgen", + "wasm-bindgen-futures", "web-sys", ] [[package]] name = "wasmi" -version = "0.5.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31d26deb2d9a37e6cfed420edce3ed604eab49735ba89035e13c98f9a528313" +checksum = "bf617d864d25af3587aa745529f7aaa541066c876d57e050c0d0c85c61c92aff" dependencies = [ "libc", "memory_units", "num-rational", - "num-traits", + "num-traits 0.2.11", "parity-wasm", "wasmi-validation", ] [[package]] name = "wasmi-validation" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bc0356e3df56e639fc7f7d8a99741915531e27ed735d911ed83d7e1339c8188" +checksum = "ea78c597064ba73596099281e2f4cfc019075122a65cdda3205af94f0b264d93" dependencies = [ "parity-wasm", ] @@ -6301,9 +7873,9 @@ dependencies = [ [[package]] name = "webpki" -version = "0.21.2" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f50e1972865d6b1adb54167d1c8ed48606004c2c9d0ea5f1eeb34d95e863ef" +checksum = "ab146130f5f790d45f82aeeb09e55a256573373ec64409fc19a6fb82fb1032ae" dependencies = [ "ring", "untrusted", @@ -6311,29 +7883,28 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a262ae37dd9d60f60dd473d1158f9fbebf110ba7b6a5051c8160460f6043718b" +checksum = "91cd5736df7f12a964a5067a12c62fa38e1bd8080aff1f80bc29be7c80d19ab4" dependencies = [ "webpki", ] [[package]] name = "webpki-roots" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cd5736df7f12a964a5067a12c62fa38e1bd8080aff1f80bc29be7c80d19ab4" +checksum = "f8eff4b7516a57307f9349c64bf34caa34b940b66fed4b2fb3136cb7386e5739" dependencies = [ "webpki", ] [[package]] name = "which" -version = "2.0.1" +version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164" +checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" dependencies = [ - "failure", "libc", ] @@ -6367,9 +7938,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa515c5163a99cc82bab70fd3bfdd36d827be85de63737b40fcef2ce084a436e" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ "winapi 0.3.8", ] @@ -6386,7 +7957,7 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c51a2c47b5798ccc774ffb93ff536aec7c4275d722fd9c740c83cdd1af1f2d94" dependencies = [ - "byteorder 1.3.4", + "byteorder", "bytes 0.4.12", "httparse", "log", @@ -6410,50 +7981,29 @@ dependencies = [ [[package]] name = "x25519-dalek" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee1585dc1484373cbc1cee7aafda26634665cf449436fd6e24bfd1fad230538" +checksum = "637ff90c9540fa3073bb577e65033069e4bae7c79d49d74aa3ffdf5342a53217" dependencies = [ - "clear_on_drop", - "curve25519-dalek 1.2.3", - "rand_core 0.3.1", + "curve25519-dalek", + "rand_core 0.5.1", + "zeroize", ] -[[package]] -name = "xdg" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d089681aa106a86fade1b0128fb5daf07d5867a509ab036d99988dec80429a57" - [[package]] name = "yamux" -version = "0.2.2" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2758f29014c1cb7a6e74c1b1160ac8c8203be342d35b73462fc6a13cc6385423" +checksum = "cd37e58a1256a0b328ce9c67d8b62ecdd02f4803ba443df478835cb1a41a637c" dependencies = [ - "bytes 0.4.12", - "futures 0.1.29", + "futures 0.3.4", "log", "nohash-hasher", - "parking_lot 0.9.0", - "quick-error", + "parking_lot 0.10.2", "rand 0.7.3", - "tokio-codec", - "tokio-io", + "static_assertions", ] -[[package]] -name = "zeroize" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45af6a010d13e4cf5b54c94ba5a2b2eba5596b9e46bf5875612d332a1f2b3f86" - -[[package]] -name = "zeroize" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4090487fa66630f7b166fba2bbb525e247a5449f41c468cc1d98f8ae6ac03120" - [[package]] name = "zeroize" version = "1.1.0" @@ -6469,8 +8019,8 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de251eec69fc7c1bc3923403d18ececb929380e016afe103da75f396704f8ca2" dependencies = [ - "proc-macro2 1.0.10", - "quote 1.0.3", + "proc-macro2", + "quote 1.0.7", "syn 1.0.17", "synstructure", ] diff --git a/Cargo.toml b/Cargo.toml index 9651f9333e..8ff7a63adf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,17 +12,18 @@ members = [ "runtime-modules/membership", "runtime-modules/memo", "runtime-modules/recurring-reward", - "runtime-modules/roles", "runtime-modules/service-discovery", "runtime-modules/stake", "runtime-modules/storage", "runtime-modules/token-minting", "runtime-modules/versioned-store", "runtime-modules/versioned-store-permissions", + "runtime-modules/working-group", + "runtime-modules/content-directory", "node", "utils/chain-spec-builder/" ] [profile.release] # Substrate runtime requires unwinding. -panic = "unwind" \ No newline at end of file +panic = "unwind" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..53d1f3d018 --- /dev/null +++ b/LICENSE @@ -0,0 +1,675 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + diff --git a/README.md b/README.md index b2128b62f9..0c84e79807 100644 --- a/README.md +++ b/README.md @@ -1,164 +1,142 @@ # Joystream [![Build Status](https://travis-ci.org/Joystream/joystream.svg?branch=master)](https://travis-ci.org/Joystream/joystream) -This is the main code reposity for all joystream software. It will house the substrate chain project, the full node and runtime and all reusable substrate runtime modules that make up the joystream runtime. In addition to all front-end apps and infrastructure servers necessary for operating the network. - -The repository is currently just a cargo workspace, but eventually will also contain yarn workspaces, and possibly other project type workspaces. - -## Build Status - -Development [![Development Branch Build Status](https://travis-ci.org/Joystream/joystream.svg?branch=development)](https://travis-ci.org/Joystream/joystream) - -More detailed build history on [Travis CI](https://travis-ci.org/github/Joystream/joystream/builds) +This is the main code repository for all Joystream software. In this mono-repo you will find all the software required to run a Joystream network: The Joystream full node, runtime and all reusable substrate runtime modules that make up the Joystream runtime. In addition to all front-end apps and infrastructure servers necessary for operating the network. ## Overview The Joystream network builds on a pre-release version of [substrate v2.0](https://substrate.dev/) and adds additional functionality to support the [various roles](https://www.joystream.org/roles) that can be entered into on the platform. +## Build Status -## Validator -![ Nodes for Joystream](./node/validator-node-banner.svg) - -Joystream node is the main server application that connects to the network, synchronizes the blockchain with other nodes and produces blocks if configured as a validator node. - -To setup a full node and validator review the [advanced guide from the helpdesk](https://github.com/Joystream/helpdesk/tree/master/roles/validators). - - -### Pre-built Binaries - -The latest pre-built binaries can be downloaded from the [releases](https://github.com/Joystream/joystream/releases) page. +Development [![Development Branch Build Status](https://travis-ci.org/Joystream/joystream.svg?branch=development)](https://travis-ci.org/Joystream/joystream) - build history on [Travis](https://travis-ci.org/github/Joystream/joystream/builds) +## Development Tools -### Building from source +The following tools are required for building, testing and contributing to this repo: -Clone the repository and install build tools: +- [Rust](https://www.rust-lang.org/tools/install) toolchain - _required_ +- [nodejs](https://nodejs.org/) v12.x - _required_ +- [yarn classic](https://classic.yarnpkg.com/en/docs/install) package manager v1.22.x- _required_ +- [docker](https://www.docker.com/get-started) - _optional_ +- [ansible](https://www.ansible.com/) - _optional_ -```bash -git clone https://github.com/Joystream/joystream.git +If you use VSCode as your code editor we recommend using the workspace [settings](devops/vscode/settings.json) for recommend eslint plugin to function properly. -cd joystream/ +After cloning the repo run the following initialization scripts: +```sh +# Install rust toolchain ./setup.sh -``` -### Building +# Install npm package dependencies +# Also good habit to run this when switching between branches +yarn install -```bash -cargo build --release +# run some tests +yarn cargo-checks ``` -### Running a public node on the Rome testnet - -Run the node and connect to the public testnet. +## Software -```bash -cargo run --release -- --chain ./rome-tesnet.json -``` +**Substrate blockchain** -The `rome-testnet.json` chain file can be obtained from the [releases page](https://github.com/Joystream/joystream/releases/tag/v6.8.0) +- [joystream-node](./node) +- [runtime](./runtime) +- [runtime modules](./runtime-modules) +**Server Applications - infrastructure** -### Installing a release build -This will install the executable `joystream-node` to your `~/.cargo/bin` folder, which you would normally have in your `$PATH` environment. +- [Storage Node](./storage-node) - Media Storage Infrastructure +- [Query Node](https://github.com/Joystream/joystream/tree/query_node/query-node) - _under development_ +- [Discovery Node](https://github.com/Joystream/joystream/tree/init_discovery_node/discovery_node) - _under development_ -```bash -cargo install joystream-node --path node/ -``` +**Front-end Applications** -Now you can run +- [Pioneer](./pioneer) - Main UI for accessing all Joystream features +- [Atlas](https://github.com/Joystream/joystream/tree/init_atlas/atlas) - Media Player- _under development_ -```bash -joystream-node --chain rome-testnet.json -``` +**Tools and CLI** -### Local development +- [joystream-cli](./cli) - CLI for community and governance activities -This will build and run a fresh new local development chain purging existing one: +**Testing infrastructure** -```bash -./scripts/run-dev-chain.sh -``` +- [Network integration](./tests/network-tests) - Joystream network integration testing framework -### Unit tests +## Exploring the network with Pioneer -```bash -cargo test -``` - -### Network tests +Pioneer is currently the main web interface to interact with the network: -```bash -./scripts/run-test-chain.sh -yarn test -``` +Currently hosted on: https://testnet.joystream.org -To run the integration tests with a different chain, you can omit step running the local development chain and set the node URL using `NODE_URL` environment variable. -Proposal grace periods should be set to 0, otherwise proposal network tests will fail. +You may have to disable some privacy/ad-blocker extensions in your browser for proper functionality, especially when browsing media. -### Rome-Constantinople migration network test +You can also run a local development instance: -Ensure Rome node is up and running, and node URL is set using `NODE_URL` environment variable (default value is `localhost:9944`). +The HEAD of the master branch should always be used for the correct version of the applications to connect to the current testnet: -```bash -yarn test-migration +```sh +git checkout master +yarn install +yarn workspace pioneer start ``` -## Joystream Runtime +This runs a local development web server on port 3000. -![Joystream Runtime](./runtime/runtime-banner.svg) +Use the link below to browse the network using the publicly hosted endpoint: +http://localhost:3000/?rpc=wss://rome-rpc-endpoint.joystream.org:9944/ +## Running a local full node -The runtime is the code that defines the consensus rules of the Joystream protocol. -It is compiled to WASM and lives on chain. -Joystream node execute the code's logic to validate transactions and blocks on the blockchain. +You can also run your our own joystream-node: -When building joystream-node as described abot with `cargo build --release`, in addition to the joystream-node binary being built the WASM blob artifact is produced in: - -`target/release/wbuild/joystream-node-runtime/joystream_node_runtime.compact.wasm` - - -### Deployment +```sh +git checkout master +WASM_BUILD_TOOLCHAIN=nightly-2020-05-23 cargo build --release +./target/release/joystream-node -- --pruning archive --chain testnets/rome.json +``` -Deploying the compiled runtime on a live system can be done in one of two ways: +Wait for the node to sync to the latest block, then change pioneer settings "remote node" option to "Local Node", or follow the link below: -1. Joystream runtime upgrade proposals which will be voted on by the council. When the Joystream platform is live, this will be the only way to upgrade the chain's runtime code. +http://localhost:3000/?rpc=ws://localhost:9944/ -2. During development and testnet phases, we can send an extrinsic (transaction signed with the sudo key) invoking `system::setCode()`. This can be done either from the UI/extrinsics app, or directly with an admin script. +Learn more about [joystream-node](node/README.md). -### Versioning the runtime +A step by step guide to setup a full node and validator on the Joystream testnet, can be found [here](https://github.com/Joystream/helpdesk/tree/master/roles/validators). -Versioning of the runtime is set in `runtime/src/lib.rs` -For detailed information about how to set correct version numbers when developing a new runtime, [see this](https://github.com/Joystream/joystream/issues/1) +### Contributing +We have lots of good first [issues](https://github.com/Joystream/joystream/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) open to help you get started on contributing code. If you are not a developer you can still make valuable contributions by testing our software and providing feedback and opening new issues. -## Coding style +A description of our [branching model](https://github.com/Joystream/joystream/issues/638) will help you to understand where work on different software components happens, and consequently where to direct your pull requests. -We use `cargo-fmt` to format the source code for consistency. +We rely on `eslint` for code quality of our JavaScript and TypeScript code and `prettier` for consistent formatting. For Rust we rely on `rustfmt` and `clippy`. -It should be available on your machine if you ran the `setup.sh` script, otherwise install it with rustup: +The [husky](https://www.npmjs.com/package/husky#ci-servers) npm package is used to manage the project git-hooks. This is automatically installed and setup when you run `yarn install`. -```bash -rustup component add rustfmt -``` +When you `git commit` and `git push` some scripts will run automatically to ensure committed code passes lint, tests, and code-style checks. -Applying code formatting on all source files recursing subfolders: +During a rebase/merge you may want to skip all hooks, you can use `HUSKY_SKIP_HOOKS` environment variable. ``` -cargo-fmt +HUSKY_SKIP_HOOKS=1 git rebase ... ``` -## Contributing +## RLS Extension in VScode or Atom Editors + +If you use RLS extension in your IDE, start your editor with the `BUILD_DUMMY_WASM_BINARY=1` environment set to workaround a build issue that occurs in the IDE only. -Please see our [contributing guidlines](https://github.com/Joystream/joystream#contribute) for details on our code of conduct, and the process for submitting pull requests to us. +`BUILD_DUMMY_WASM_BINARY=1 code ./joystream` ## Authors -See also the list of [CONTRIBUTORS](./CONTRIBUTORS) who participated in this project. +See the list of [contributors](https://github.com/Joystream/joystream/graphs/contributors) who participated in this project. ## License -This project is licensed under the GPLv3 License - see the [LICENSE](LICENSE) file for details +All software under this project is licensed as [GPLv3](./LICENSE) unless otherwise indicated. ## Acknowledgments -Thanks to the whole [Parity Tech](https://www.parity.io/) team for making substrate and helping on riot chat with tips, suggestions, tutorials and answering all our questions during development. +Thanks to the whole [Parity Tech](https://www.parity.io/) team for making substrate and helping in chat with tips, suggestions, tutorials and answering all our questions during development. diff --git a/cli/.editorconfig b/cli/.editorconfig deleted file mode 100644 index c3f635323a..0000000000 --- a/cli/.editorconfig +++ /dev/null @@ -1,11 +0,0 @@ -root = true - -[*] -indent_style = space -indent_size = 4 -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false diff --git a/cli/.eslintrc b/cli/.eslintrc deleted file mode 100644 index 7b846193cc..0000000000 --- a/cli/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": [ - "oclif", - "oclif-typescript" - ] -} diff --git a/cli/.eslintrc.js b/cli/.eslintrc.js new file mode 100644 index 0000000000..5ef4baaeed --- /dev/null +++ b/cli/.eslintrc.js @@ -0,0 +1,17 @@ +module.exports = { + env: { + mocha: true, + }, + extends: [ + // The oclif rules have some code-style/formatting rules which may conflict with + // our prettier global settings. Disabling for now + // I suggest to only add essential rules absolutely required to make the cli work with oclif + // at the end of this file. + // "oclif", + // "oclif-typescript", + ], + rules: { + "no-unused-vars": "off", // Required by the typescript rule below + "@typescript-eslint/no-unused-vars": ["error"] + } +} diff --git a/cli/.prettierignore b/cli/.prettierignore new file mode 100644 index 0000000000..90379ecbbe --- /dev/null +++ b/cli/.prettierignore @@ -0,0 +1,2 @@ +/lib/ +.nyc_output diff --git a/cli/README.md b/cli/README.md index 591a949854..fe3253f905 100644 --- a/cli/README.md +++ b/cli/README.md @@ -1,16 +1,17 @@ -joystream-cli +@joystream/cli ============= Command Line Interface for Joystream community and governance activities [![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io) -[![Version](https://img.shields.io/npm/v/joystream-cli.svg)](https://npmjs.org/package/joystream-cli) -[![Downloads/week](https://img.shields.io/npm/dw/joystream-cli.svg)](https://npmjs.org/package/joystream-cli) -[![License](https://img.shields.io/npm/l/joystream-cli.svg)](https://github.com/Joystream/cli/blob/master/package.json) +[![Version](https://img.shields.io/npm/v/@joystream/cli.svg)](https://npmjs.org/package/@joystream/cli) +[![Downloads/week](https://img.shields.io/npm/dw/@joystream/cli.svg)](https://npmjs.org/package/@joystream/cli) +[![License](https://img.shields.io/npm/l/@joystream/cli.svg)](https://github.com/Joystream/joystream/blob/master/cli/package.json) * [Development](#development) * [Usage](#usage) +* [First steps](#first-steps) * [Commands](#commands) @@ -19,19 +20,17 @@ Command Line Interface for Joystream community and governance activities To run a command in developemnt environment (without installing the package): 1. Navigate into the CLI root directory -1. Either execute any command like this: +1. Execute any command like this: ``` $ ./bin/run COMMAND ``` - Or use: +Alternatively: - ``` - $ npm link - ``` - - And then execute any command like this: +1. Navigate into the CLI root directory +1. Execute `yarn link` (if that doesn't work, consider `sudo yarn link`) +1. Execute command from any location like this: ``` $ joystream-cli COMMAND @@ -41,17 +40,29 @@ To run a command in developemnt environment (without installing the package): # Usage ```sh-session -$ npm install -g joystream-cli +$ npm install -g @joystream/cli $ joystream-cli COMMAND running command... $ joystream-cli (-v|--version|version) -joystream-cli/0.0.0 linux-x64 node-v13.12.0 +@joystream/cli/0.1.0 linux-x64 node-v13.12.0 $ joystream-cli --help [COMMAND] USAGE $ joystream-cli COMMAND ... ``` + +# First steps + +When using the CLI for the first time there are a few common steps you might want to take in order to configure the CLI: + +1. Set the correct node endpoint. You can do this by executing `api:setUri` or any command that requires an api connection. To verify the current endpoint you can execute `api:getUri`. +1. In order to use the accounts/keys that you may already have access to within Pioneer, you need to dowload the backup json file(s) ([https://testnet.joystream.org/#/accounts](https://testnet.joystream.org/#/accounts)) and import them into the CLI by executing `account:import /path/to/backup.json`. +1. By executing `account:choose` you can choose one of the imported accounts, that will then serve as context for the next commands (you can check currently selected account using `account:info`). If you just want to use the development _Alice_ or _Bob_ account, you can access them without importing by providing an additional flag: `account:choose --showSpecial`. +1. The context should now be fully set up! Feel free to use the `--help` flag to investigate the available commands or take a look at the sections below. +1. You may also find it useful to get the first part of the command (before the colon) autocompleted when you press `[Tab]` while typing the name in the console. Executing `autocomplete` command will provide the instructions on how to set this up (see documentation below). + + # Commands * [`joystream-cli account:choose`](#joystream-cli-accountchoose) @@ -63,9 +74,27 @@ USAGE * [`joystream-cli account:transferTokens RECIPIENT AMOUNT`](#joystream-cli-accounttransfertokens-recipient-amount) * [`joystream-cli api:getUri`](#joystream-cli-apigeturi) * [`joystream-cli api:inspect`](#joystream-cli-apiinspect) -* [`joystream-cli api:setUri URI`](#joystream-cli-apiseturi-uri) +* [`joystream-cli api:setUri [URI]`](#joystream-cli-apiseturi-uri) +* [`joystream-cli autocomplete [SHELL]`](#joystream-cli-autocomplete-shell) * [`joystream-cli council:info`](#joystream-cli-councilinfo) * [`joystream-cli help [COMMAND]`](#joystream-cli-help-command) +* [`joystream-cli working-groups:application WGAPPLICATIONID`](#joystream-cli-working-groupsapplication-wgapplicationid) +* [`joystream-cli working-groups:createOpening`](#joystream-cli-working-groupscreateopening) +* [`joystream-cli working-groups:decreaseWorkerStake WORKERID`](#joystream-cli-working-groupsdecreaseworkerstake-workerid) +* [`joystream-cli working-groups:evictWorker WORKERID`](#joystream-cli-working-groupsevictworker-workerid) +* [`joystream-cli working-groups:fillOpening WGOPENINGID`](#joystream-cli-working-groupsfillopening-wgopeningid) +* [`joystream-cli working-groups:increaseStake`](#joystream-cli-working-groupsincreasestake) +* [`joystream-cli working-groups:leaveRole`](#joystream-cli-working-groupsleaverole) +* [`joystream-cli working-groups:opening WGOPENINGID`](#joystream-cli-working-groupsopening-wgopeningid) +* [`joystream-cli working-groups:openings`](#joystream-cli-working-groupsopenings) +* [`joystream-cli working-groups:overview`](#joystream-cli-working-groupsoverview) +* [`joystream-cli working-groups:slashWorker WORKERID`](#joystream-cli-working-groupsslashworker-workerid) +* [`joystream-cli working-groups:startAcceptingApplications WGOPENINGID`](#joystream-cli-working-groupsstartacceptingapplications-wgopeningid) +* [`joystream-cli working-groups:startReviewPeriod WGOPENINGID`](#joystream-cli-working-groupsstartreviewperiod-wgopeningid) +* [`joystream-cli working-groups:terminateApplication WGAPPLICATIONID`](#joystream-cli-working-groupsterminateapplication-wgapplicationid) +* [`joystream-cli working-groups:updateRewardAccount [ACCOUNTADDRESS]`](#joystream-cli-working-groupsupdaterewardaccount-accountaddress) +* [`joystream-cli working-groups:updateRoleAccount [ACCOUNTADDRESS]`](#joystream-cli-working-groupsupdateroleaccount-accountaddress) +* [`joystream-cli working-groups:updateWorkerReward WORKERID`](#joystream-cli-working-groupsupdateworkerreward-workerid) ## `joystream-cli account:choose` @@ -74,9 +103,12 @@ Choose default account to use in the CLI ``` USAGE $ joystream-cli account:choose + +OPTIONS + --showSpecial Whether to show special (DEV chain) accounts ``` -_See code: [src/commands/account/choose.ts](https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli/src/commands/account/choose.ts)_ +_See code: [src/commands/account/choose.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/account/choose.ts)_ ## `joystream-cli account:create NAME` @@ -90,7 +122,7 @@ ARGUMENTS NAME Account name ``` -_See code: [src/commands/account/create.ts](https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli/src/commands/account/create.ts)_ +_See code: [src/commands/account/create.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/account/create.ts)_ ## `joystream-cli account:current` @@ -105,7 +137,7 @@ ALIASES $ joystream-cli account:default ``` -_See code: [src/commands/account/current.ts](https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli/src/commands/account/current.ts)_ +_See code: [src/commands/account/current.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/account/current.ts)_ ## `joystream-cli account:export PATH` @@ -122,7 +154,7 @@ OPTIONS -a, --all If provided, exports all existing accounts into "exported_accounts" folder inside given path ``` -_See code: [src/commands/account/export.ts](https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli/src/commands/account/export.ts)_ +_See code: [src/commands/account/export.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/account/export.ts)_ ## `joystream-cli account:forget` @@ -133,7 +165,7 @@ USAGE $ joystream-cli account:forget ``` -_See code: [src/commands/account/forget.ts](https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli/src/commands/account/forget.ts)_ +_See code: [src/commands/account/forget.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/account/forget.ts)_ ## `joystream-cli account:import BACKUPFILEPATH` @@ -147,7 +179,7 @@ ARGUMENTS BACKUPFILEPATH Path to account backup JSON file ``` -_See code: [src/commands/account/import.ts](https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli/src/commands/account/import.ts)_ +_See code: [src/commands/account/import.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/account/import.ts)_ ## `joystream-cli account:transferTokens RECIPIENT AMOUNT` @@ -162,7 +194,7 @@ ARGUMENTS AMOUNT Amount of tokens to transfer ``` -_See code: [src/commands/account/transferTokens.ts](https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli/src/commands/account/transferTokens.ts)_ +_See code: [src/commands/account/transferTokens.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/account/transferTokens.ts)_ ## `joystream-cli api:getUri` @@ -173,7 +205,7 @@ USAGE $ joystream-cli api:getUri ``` -_See code: [src/commands/api/getUri.ts](https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli/src/commands/api/getUri.ts)_ +_See code: [src/commands/api/getUri.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/api/getUri.ts)_ ## `joystream-cli api:inspect` @@ -212,26 +244,49 @@ EXAMPLES $ api:inspect $ api:inspect -t=query $ api:inspect -t=query -M=members - $ api:inspect -t=query -M=members -m=memberProfile - $ api:inspect -t=query -M=members -m=memberProfile -e - $ api:inspect -t=query -M=members -m=memberProfile -e -a=1 + $ api:inspect -t=query -M=members -m=membershipById + $ api:inspect -t=query -M=members -m=membershipById -e + $ api:inspect -t=query -M=members -m=membershipById -e -a=1 ``` -_See code: [src/commands/api/inspect.ts](https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli/src/commands/api/inspect.ts)_ +_See code: [src/commands/api/inspect.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/api/inspect.ts)_ -## `joystream-cli api:setUri URI` +## `joystream-cli api:setUri [URI]` Set api WS provider uri ``` USAGE - $ joystream-cli api:setUri URI + $ joystream-cli api:setUri [URI] + +ARGUMENTS + URI Uri of the node api WS provider (if skipped, a prompt will be displayed) +``` + +_See code: [src/commands/api/setUri.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/api/setUri.ts)_ + +## `joystream-cli autocomplete [SHELL]` + +display autocomplete installation instructions + +``` +USAGE + $ joystream-cli autocomplete [SHELL] ARGUMENTS - URI Uri of the node api WS provider + SHELL shell type + +OPTIONS + -r, --refresh-cache Refresh cache (ignores displaying instructions) + +EXAMPLES + $ joystream-cli autocomplete + $ joystream-cli autocomplete bash + $ joystream-cli autocomplete zsh + $ joystream-cli autocomplete --refresh-cache ``` -_See code: [src/commands/api/setUri.ts](https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli/src/commands/api/setUri.ts)_ +_See code: [@oclif/plugin-autocomplete](https://github.com/oclif/plugin-autocomplete/blob/v0.2.0/src/commands/autocomplete/index.ts)_ ## `joystream-cli council:info` @@ -242,7 +297,7 @@ USAGE $ joystream-cli council:info ``` -_See code: [src/commands/council/info.ts](https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli/src/commands/council/info.ts)_ +_See code: [src/commands/council/info.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/council/info.ts)_ ## `joystream-cli help [COMMAND]` @@ -260,4 +315,322 @@ OPTIONS ``` _See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v2.2.3/src/commands/help.ts)_ + +## `joystream-cli working-groups:application WGAPPLICATIONID` + +Shows an overview of given application by Working Group Application ID + +``` +USAGE + $ joystream-cli working-groups:application WGAPPLICATIONID + +ARGUMENTS + WGAPPLICATIONID Working Group Application ID + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/application.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/application.ts)_ + +## `joystream-cli working-groups:createOpening` + +Create working group opening (requires lead access) + +``` +USAGE + $ joystream-cli working-groups:createOpening + +OPTIONS + -c, --createDraftOnly If provided - the extrinsic will not be executed. Use this flag if you only want to create + a draft. + + -d, --useDraft Whether to create the opening from existing draft. + If provided without --draftName - the list of choices will be displayed. + + -g, --group=group (required) [default: storageProviders] The working group context in which the command + should be executed + Available values are: storageProviders. + + -n, --draftName=draftName Name of the draft to create the opening from. + + -s, --skipPrompts Whether to skip all prompts when adding from draft (will use all default values) +``` + +_See code: [src/commands/working-groups/createOpening.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/createOpening.ts)_ + +## `joystream-cli working-groups:decreaseWorkerStake WORKERID` + +Decreases given worker stake by an amount that will be returned to the worker role account. Requires lead access. + +``` +USAGE + $ joystream-cli working-groups:decreaseWorkerStake WORKERID + +ARGUMENTS + WORKERID Worker ID + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/decreaseWorkerStake.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/decreaseWorkerStake.ts)_ + +## `joystream-cli working-groups:evictWorker WORKERID` + +Evicts given worker. Requires lead access. + +``` +USAGE + $ joystream-cli working-groups:evictWorker WORKERID + +ARGUMENTS + WORKERID Worker ID + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/evictWorker.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/evictWorker.ts)_ + +## `joystream-cli working-groups:fillOpening WGOPENINGID` + +Allows filling working group opening that's currently in review. Requires lead access. + +``` +USAGE + $ joystream-cli working-groups:fillOpening WGOPENINGID + +ARGUMENTS + WGOPENINGID Working Group Opening ID + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/fillOpening.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/fillOpening.ts)_ + +## `joystream-cli working-groups:increaseStake` + +Increases current role (lead/worker) stake. Requires active role account to be selected. + +``` +USAGE + $ joystream-cli working-groups:increaseStake + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/increaseStake.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/increaseStake.ts)_ + +## `joystream-cli working-groups:leaveRole` + +Leave the worker or lead role associated with currently selected account. + +``` +USAGE + $ joystream-cli working-groups:leaveRole + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/leaveRole.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/leaveRole.ts)_ + +## `joystream-cli working-groups:opening WGOPENINGID` + +Shows an overview of given working group opening by Working Group Opening ID + +``` +USAGE + $ joystream-cli working-groups:opening WGOPENINGID + +ARGUMENTS + WGOPENINGID Working Group Opening ID + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/opening.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/opening.ts)_ + +## `joystream-cli working-groups:openings` + +Shows an overview of given working group openings + +``` +USAGE + $ joystream-cli working-groups:openings + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/openings.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/openings.ts)_ + +## `joystream-cli working-groups:overview` + +Shows an overview of given working group (current lead and workers) + +``` +USAGE + $ joystream-cli working-groups:overview + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/overview.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/overview.ts)_ + +## `joystream-cli working-groups:slashWorker WORKERID` + +Slashes given worker stake. Requires lead access. + +``` +USAGE + $ joystream-cli working-groups:slashWorker WORKERID + +ARGUMENTS + WORKERID Worker ID + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/slashWorker.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/slashWorker.ts)_ + +## `joystream-cli working-groups:startAcceptingApplications WGOPENINGID` + +Changes the status of pending opening to "Accepting applications". Requires lead access. + +``` +USAGE + $ joystream-cli working-groups:startAcceptingApplications WGOPENINGID + +ARGUMENTS + WGOPENINGID Working Group Opening ID + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/startAcceptingApplications.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/startAcceptingApplications.ts)_ + +## `joystream-cli working-groups:startReviewPeriod WGOPENINGID` + +Changes the status of active opening to "In review". Requires lead access. + +``` +USAGE + $ joystream-cli working-groups:startReviewPeriod WGOPENINGID + +ARGUMENTS + WGOPENINGID Working Group Opening ID + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/startReviewPeriod.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/startReviewPeriod.ts)_ + +## `joystream-cli working-groups:terminateApplication WGAPPLICATIONID` + +Terminates given working group application. Requires lead access. + +``` +USAGE + $ joystream-cli working-groups:terminateApplication WGAPPLICATIONID + +ARGUMENTS + WGAPPLICATIONID Working Group Application ID + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/terminateApplication.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/terminateApplication.ts)_ + +## `joystream-cli working-groups:updateRewardAccount [ACCOUNTADDRESS]` + +Updates the worker/lead reward account (requires current role account to be selected) + +``` +USAGE + $ joystream-cli working-groups:updateRewardAccount [ACCOUNTADDRESS] + +ARGUMENTS + ACCOUNTADDRESS New reward account address (if omitted, one of the existing CLI accounts can be selected) + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/updateRewardAccount.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/updateRewardAccount.ts)_ + +## `joystream-cli working-groups:updateRoleAccount [ACCOUNTADDRESS]` + +Updates the worker/lead role account. Requires member controller account to be selected + +``` +USAGE + $ joystream-cli working-groups:updateRoleAccount [ACCOUNTADDRESS] + +ARGUMENTS + ACCOUNTADDRESS New role account address (if omitted, one of the existing CLI accounts can be selected) + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/updateRoleAccount.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/updateRoleAccount.ts)_ + +## `joystream-cli working-groups:updateWorkerReward WORKERID` + +Change given worker's reward (amount only). Requires lead access. + +``` +USAGE + $ joystream-cli working-groups:updateWorkerReward WORKERID + +ARGUMENTS + WORKERID Worker ID + +OPTIONS + -g, --group=group (required) [default: storageProviders] The working group context in which the command should be + executed + Available values are: storageProviders. +``` + +_See code: [src/commands/working-groups/updateWorkerReward.ts](https://github.com/Joystream/joystream/blob/master/cli/src/commands/working-groups/updateWorkerReward.ts)_ diff --git a/cli/package-lock.json b/cli/package-lock.json deleted file mode 100644 index 5ff94a14a9..0000000000 --- a/cli/package-lock.json +++ /dev/null @@ -1,4671 +0,0 @@ -{ - "name": "joystream-cli", - "version": "0.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/generator": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.4.tgz", - "integrity": "sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==", - "dev": true, - "requires": { - "@babel/types": "^7.9.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", - "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", - "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", - "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/traverse": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.0.tgz", - "integrity": "sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.9.0", - "@babel/types": "^7.9.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.0.tgz", - "integrity": "sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.9.0", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@joystream/types": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@joystream/types/-/types-0.6.0.tgz", - "integrity": "sha512-b+6U36GHJLlBPxVqMVQRTZzVxu7BGsjqlC/XJfl/vdx8TOy3P8TIB/3olLU64EPB3cVNadg2p9jqYSsvh9XVAQ==", - "requires": { - "@polkadot/types": "^0.96.1", - "@types/vfile": "^4.0.0", - "ajv": "^6.11.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" - } - }, - "@oclif/command": { - "version": "1.5.19", - "resolved": "https://registry.npmjs.org/@oclif/command/-/command-1.5.19.tgz", - "integrity": "sha512-6+iaCMh/JXJaB2QWikqvGE9//wLEVYYwZd5sud8aLoLKog1Q75naZh2vlGVtg5Mq/NqpqGQvdIjJb3Bm+64AUQ==", - "requires": { - "@oclif/config": "^1", - "@oclif/errors": "^1.2.2", - "@oclif/parser": "^3.8.3", - "@oclif/plugin-help": "^2", - "debug": "^4.1.1", - "semver": "^5.6.0" - } - }, - "@oclif/config": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@oclif/config/-/config-1.14.0.tgz", - "integrity": "sha512-KsOP/mx9lzTah+EtGqLUXN3PDL0J3zb9/dTneFyiUK2K6T7vFEGhV6OasmqTh4uMZHGYTGrNPV8x/Yw6qZNL6A==", - "requires": { - "@oclif/errors": "^1.0.0", - "@oclif/parser": "^3.8.0", - "debug": "^4.1.1", - "tslib": "^1.9.3" - } - }, - "@oclif/dev-cli": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/@oclif/dev-cli/-/dev-cli-1.22.2.tgz", - "integrity": "sha512-c7633R37RxrQIpwqPKxjNRm6/jb1yuG8fd16hmNz9Nw+/MUhEtQtKHSCe9ScH8n5M06l6LEo4ldk9LEGtpaWwA==", - "dev": true, - "requires": { - "@oclif/command": "^1.5.13", - "@oclif/config": "^1.12.12", - "@oclif/errors": "^1.2.2", - "@oclif/plugin-help": "^2.1.6", - "cli-ux": "^5.2.1", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "github-slugger": "^1.2.1", - "lodash": "^4.17.11", - "normalize-package-data": "^2.5.0", - "qqjs": "^0.3.10", - "tslib": "^1.9.3" - } - }, - "@oclif/errors": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.2.2.tgz", - "integrity": "sha512-Eq8BFuJUQcbAPVofDxwdE0bL14inIiwt5EaKRVY9ZDIG11jwdXZqiQEECJx0VfnLyUZdYfRd/znDI/MytdJoKg==", - "requires": { - "clean-stack": "^1.3.0", - "fs-extra": "^7.0.0", - "indent-string": "^3.2.0", - "strip-ansi": "^5.0.0", - "wrap-ansi": "^4.0.0" - } - }, - "@oclif/linewrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz", - "integrity": "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==" - }, - "@oclif/parser": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.4.tgz", - "integrity": "sha512-cyP1at3l42kQHZtqDS3KfTeyMvxITGwXwH1qk9ktBYvqgMp5h4vHT+cOD74ld3RqJUOZY/+Zi9lb4Tbza3BtuA==", - "requires": { - "@oclif/linewrap": "^1.0.0", - "chalk": "^2.4.2", - "tslib": "^1.9.3" - } - }, - "@oclif/plugin-help": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-2.2.3.tgz", - "integrity": "sha512-bGHUdo5e7DjPJ0vTeRBMIrfqTRDBfyR5w0MP41u0n3r7YG5p14lvMmiCXxi6WDaP2Hw5nqx3PnkAIntCKZZN7g==", - "requires": { - "@oclif/command": "^1.5.13", - "chalk": "^2.4.1", - "indent-string": "^4.0.0", - "lodash.template": "^4.4.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0", - "widest-line": "^2.0.1", - "wrap-ansi": "^4.0.0" - }, - "dependencies": { - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "@oclif/screen": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@oclif/screen/-/screen-1.0.4.tgz", - "integrity": "sha512-60CHpq+eqnTxLZQ4PGHYNwUX572hgpMHGPtTWMjdTMsAvlm69lZV/4ly6O3sAYkomo4NggGcomrDpBe34rxUqw==" - }, - "@oclif/test": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@oclif/test/-/test-1.2.5.tgz", - "integrity": "sha512-8Y+Ix4A3Zhm87aL0ldVonDK7vFWyLfnFHzP3goYaLyIeh/60KL37lMxfmbp/kBN6/Y0Ru17iR1pdDi/hTDClLQ==", - "dev": true, - "requires": { - "fancy-test": "^1.4.3" - } - }, - "@polkadot/api": { - "version": "0.96.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-0.96.1.tgz", - "integrity": "sha512-FeYyMfJL0NACJBIuG7C7mp7f9J/WOGUERF/hUP3RlIz4Ld2X0vRjEoOgiG0VIS89I4K31XaNmSjIchH244WtHg==", - "requires": { - "@babel/runtime": "^7.7.1", - "@polkadot/api-derive": "^0.96.1", - "@polkadot/api-metadata": "^0.96.1", - "@polkadot/keyring": "^1.7.0-beta.5", - "@polkadot/rpc-core": "^0.96.1", - "@polkadot/rpc-provider": "^0.96.1", - "@polkadot/types": "^0.96.1", - "@polkadot/util-crypto": "^1.7.0-beta.5" - } - }, - "@polkadot/api-derive": { - "version": "0.96.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-0.96.1.tgz", - "integrity": "sha512-PGWdUvlD2acUKOgaJcYWuMTfSuQKUpwgwjer5SomHLFn4ZPOz8iDa7mYtrgmxQctRv1zsuck2X01uhxdEdtJZw==", - "requires": { - "@babel/runtime": "^7.7.1", - "@polkadot/api": "^0.96.1", - "@polkadot/types": "^0.96.1" - } - }, - "@polkadot/api-metadata": { - "version": "0.96.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-metadata/-/api-metadata-0.96.1.tgz", - "integrity": "sha512-I9F3twpSCgx4ny25a3moGrhf2vHKFnjooO3W9NaAxIj/us4q4Gqo4+czQajqt8vaJqrNMq/PE7lzVz1NhYDrZQ==", - "requires": { - "@babel/runtime": "^7.7.1", - "@polkadot/types": "^0.96.1", - "@polkadot/util": "^1.7.0-beta.5", - "@polkadot/util-crypto": "^1.7.0-beta.5" - } - }, - "@polkadot/jsonrpc": { - "version": "0.96.1", - "resolved": "https://registry.npmjs.org/@polkadot/jsonrpc/-/jsonrpc-0.96.1.tgz", - "integrity": "sha512-UHpcUGIvkG4dJ5gUhDyfJ1xfr/VcBlJ5lIlGamGsnNacMuIVmmEsftgxtPlJLWHuoA1EBEHY4cbPSv9CUJ0IFw==", - "requires": { - "@babel/runtime": "^7.7.1" - } - }, - "@polkadot/keyring": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-1.8.1.tgz", - "integrity": "sha512-KeDbfP8biY3bXEhMv1ANp9d3kCuXj2oxseuDK0jvxRo7CehVME9UwAMGQK3Y9NCUuYWd+xTO2To0ZOqR7hdmuQ==", - "requires": { - "@babel/runtime": "^7.7.7", - "@polkadot/util": "^1.8.1", - "@polkadot/util-crypto": "^1.8.1" - } - }, - "@polkadot/rpc-core": { - "version": "0.96.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-0.96.1.tgz", - "integrity": "sha512-ygSaJpz/QPEq1p35wYRzONuP2PCtkAJ9eS8swQqUIezTo2ZPUOyBhmnJ3nxj11R8YnQClq4Id0QdsJmH1ClYgw==", - "requires": { - "@babel/runtime": "^7.7.1", - "@polkadot/jsonrpc": "^0.96.1", - "@polkadot/rpc-provider": "^0.96.1", - "@polkadot/types": "^0.96.1", - "@polkadot/util": "^1.7.0-beta.5", - "rxjs": "^6.5.3" - } - }, - "@polkadot/rpc-provider": { - "version": "0.96.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-0.96.1.tgz", - "integrity": "sha512-cUhp8FMCYHrXrBTbxZrok/hPIgtOXEUhIXn5/zrffg1Qpbzju/y/bXx7c1Kxl1JF7Bg0vSBRZEGJTn/x0irWRQ==", - "requires": { - "@babel/runtime": "^7.7.1", - "@polkadot/api-metadata": "^0.96.1", - "@polkadot/util": "^1.7.0-beta.5", - "@polkadot/util-crypto": "^1.7.0-beta.5", - "eventemitter3": "^4.0.0", - "isomorphic-fetch": "^2.2.1", - "websocket": "^1.0.30" - } - }, - "@polkadot/ts": { - "version": "0.1.91", - "resolved": "https://registry.npmjs.org/@polkadot/ts/-/ts-0.1.91.tgz", - "integrity": "sha512-UB8zOFZXb/ih03izzAQ1r1DRpiUXBofxAlXjcx4530jopfiNsiU1LZ2J/uS3dVV1QXaGRhkgm8SIJDLsSMRYIQ==", - "dev": true, - "requires": { - "@types/chrome": "^0.0.92" - } - }, - "@polkadot/types": { - "version": "0.96.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-0.96.1.tgz", - "integrity": "sha512-b8AZBNmMjB0+34Oxue3AYc0gIjDHYCdVGtDpel0omHkLMcEquSvrCniLm+p7g4cfArICiZPFmS9In/OWWdRUVA==", - "requires": { - "@babel/runtime": "^7.7.1", - "@polkadot/util": "^1.7.0-beta.5", - "@polkadot/util-crypto": "^1.7.0-beta.5", - "@types/memoizee": "^0.4.3", - "memoizee": "^0.4.14" - } - }, - "@polkadot/util": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-1.8.1.tgz", - "integrity": "sha512-sFpr+JLCG9d+epjboXsmJ1qcKa96r8ZYzXmVo8+aPzI/9jKKyez6Unox/dnfnpKppZB2nJuLcsxQm6nocp2Caw==", - "requires": { - "@babel/runtime": "^7.7.7", - "@types/bn.js": "^4.11.6", - "bn.js": "^4.11.8", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "ip-regex": "^4.1.0", - "moment": "^2.24.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@polkadot/util-crypto": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-1.8.1.tgz", - "integrity": "sha512-ypUs10hV1HPvYc0ZsEu+LTGSEh0rkr0as/FUh7+Z9v3Bxibn3aO+EOxJPQuDbZZ59FSMRmc9SeOSa0wn9ddrnw==", - "requires": { - "@babel/runtime": "^7.7.7", - "@polkadot/util": "^1.8.1", - "@polkadot/wasm-crypto": "^0.14.1", - "@types/bip39": "^2.4.2", - "@types/bs58": "^4.0.0", - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^3.5.0", - "@types/xxhashjs": "^0.2.1", - "base-x": "3.0.5", - "bip39": "^2.5.0", - "blakejs": "^1.1.0", - "bs58": "^4.0.1", - "js-sha3": "^0.8.0", - "secp256k1": "^3.8.0", - "tweetnacl": "^1.0.1", - "xxhashjs": "^0.2.2" - } - }, - "@polkadot/wasm-crypto": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-0.14.1.tgz", - "integrity": "sha512-Xng7L2Z8TNZa/5g6pot4O06Jf0ohQRZdvfl8eQL+E/L2mcqJYC1IjkMxJBSBuQEV7hisWzh9mHOy5WCcgPk29Q==" - }, - "@types/bip39": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/bip39/-/bip39-2.4.2.tgz", - "integrity": "sha512-Vo9lqOIRq8uoIzEVrV87ZvcIM0PN9t0K3oYZ/CS61fIYKCBdOIM7mlWzXuRvSXrDtVa1uUO2w1cdfufxTC0bzg==", - "requires": { - "@types/node": "*" - } - }, - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "@types/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-yfAgiWgVLjFCmRv8zAcOIHywYATEwiTVccTLnRp6UxTNavT55M9d/uhK3T03St/+8/z/wW+CRjGKUNmEqoHHCA==", - "requires": { - "base-x": "^3.0.6" - }, - "dependencies": { - "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "requires": { - "safe-buffer": "^5.0.1" - } - } - } - }, - "@types/chai": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", - "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==", - "dev": true - }, - "@types/chrome": { - "version": "0.0.92", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.0.92.tgz", - "integrity": "sha512-bTv1EljZ03bexRJwS5FwSZmrudtw+QNbzwUY2sxVtXWgtxk752G4I2owhZ+Mlzbf3VKvG+rBYSw/FnvzuZ4xOA==", - "dev": true, - "requires": { - "@types/filesystem": "*" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/filesystem": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/filesystem/-/filesystem-0.0.29.tgz", - "integrity": "sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw==", - "dev": true, - "requires": { - "@types/filewriter": "*" - } - }, - "@types/filewriter": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/@types/filewriter/-/filewriter-0.0.28.tgz", - "integrity": "sha1-wFTor02d11205jq8dviFFocU1LM=", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/inquirer": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-6.5.0.tgz", - "integrity": "sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==", - "requires": { - "@types/through": "*", - "rxjs": "^6.4.0" - } - }, - "@types/json-schema": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", - "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.149", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", - "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==", - "dev": true - }, - "@types/memoizee": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@types/memoizee/-/memoizee-0.4.3.tgz", - "integrity": "sha512-N6QT0c9ZbEKl33n1wyoTxZs4cpN+YXjs0Aqy5Qim8ipd9PBNIPqOh/p5Pixc4601tqr5GErsdxUbfqviDfubNw==" - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", - "dev": true - }, - "@types/node": { - "version": "10.17.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.18.tgz", - "integrity": "sha512-DQ2hl/Jl3g33KuAUOcMrcAOtsbzb+y/ufakzAdeK9z/H/xsvkpbETZZbPNMIiQuk24f5ZRMCcZIViAwyFIiKmg==" - }, - "@types/pbkdf2": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.0.0.tgz", - "integrity": "sha512-6J6MHaAlBJC/eVMy9jOwj9oHaprfutukfW/Dyt0NEnpQ/6HN6YQrpvLwzWdWDeWZIdenjGHlbYDzyEODO5Z+2Q==", - "requires": { - "@types/node": "*" - } - }, - "@types/proper-lockfile": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@types/proper-lockfile/-/proper-lockfile-4.1.1.tgz", - "integrity": "sha512-HAjVfDa73pFgivViHyDu8HHHcds+W4MgOuZZAdyFJrHS8ngtCXmhl4hc2YXqSOwO6Bsa+iF2Sgxb2+gv874VOQ==", - "requires": { - "@types/retry": "*" - } - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "@types/secp256k1": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-3.5.3.tgz", - "integrity": "sha512-NGcsPDR0P+Q71O63e2ayshmiZGAwCOa/cLJzOIuhOiDvmbvrCIiVtEpqdCJGogG92Bnr6tw/6lqVBsRMEl15OQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/sinon": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.0.tgz", - "integrity": "sha512-v2TkYHkts4VXshMkcmot/H+ERZ2SevKa10saGaJPGCJ8vh3lKrC4u663zYEeRZxep+VbG6YRDtQ6gVqw9dYzPA==", - "dev": true, - "requires": { - "@types/sinonjs__fake-timers": "*" - } - }, - "@types/sinonjs__fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.1.tgz", - "integrity": "sha512-yYezQwGWty8ziyYLdZjwxyMb0CZR49h8JALHGrxjQHWlqGgc8kLdHEgWrgL0uZ29DMvEVBDnHU2Wg36zKSIUtA==", - "dev": true - }, - "@types/slug": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@types/slug/-/slug-0.9.1.tgz", - "integrity": "sha512-zR/u8WFQ4/6uCIikjI00a5uB084XjgEGNRAvM4a1BL39Bw9yEiDQFiPS2DgJ8lPDkR2Qd/vZ26dCR9XqlKbDqQ==" - }, - "@types/through": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", - "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", - "requires": { - "@types/node": "*" - } - }, - "@types/unist": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", - "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" - }, - "@types/vfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-4.0.0.tgz", - "integrity": "sha512-eleP0/Cz8uVWxARDLi3Axq2+fDdN4ibAXoC6Pv8p6s7znXaUL7XvhgeIhjCiNMnvlLNP+tmCLd+RuCryGgmtEg==", - "requires": { - "vfile": "*" - } - }, - "@types/xxhashjs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@types/xxhashjs/-/xxhashjs-0.2.1.tgz", - "integrity": "sha512-Akm13wkwsQylVnBokl/aiKLtSxndSjfgTjdvmSxXNehYy4NymwdfdJHwGhpV54wcYfmOByOp3ak8AGdUlvp0sA==", - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.26.0.tgz", - "integrity": "sha512-4yUnLv40bzfzsXcTAtZyTjbiGUXMrcIJcIMioI22tSOyAxpdXiZ4r7YQUU8Jj6XXrLz9d5aMHPQf5JFR7h27Nw==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "2.26.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - }, - "dependencies": { - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.26.0.tgz", - "integrity": "sha512-RELVoH5EYd+JlGprEyojUv9HeKcZqF7nZUGSblyAw1FwOGNnmQIU8kxJ69fttQvEwCsX5D6ECJT8GTozxrDKVQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.26.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", - "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - } - } - }, - "@typescript-eslint/parser": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.26.0.tgz", - "integrity": "sha512-+Xj5fucDtdKEVGSh9353wcnseMRkPpEAOY96EEenN7kJVrLqy/EVwtIh3mxcUz8lsFXW1mT5nN5vvEam/a5HiQ==", - "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.26.0", - "@typescript-eslint/typescript-estree": "2.26.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.26.0.tgz", - "integrity": "sha512-3x4SyZCLB4zsKsjuhxDLeVJN6W29VwBnYpCsZ7vIdPel9ZqLfIZJgJXO47MNUkurGpQuIBALdPQKtsSnWpE1Yg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^6.3.0", - "tsutils": "^3.17.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", - "dev": true - }, - "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansicolors": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=" - }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base-x": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", - "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bip39": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.6.0.tgz", - "integrity": "sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg==", - "requires": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" - } - }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "bl": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", - "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "blakejs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz", - "integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U=" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "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": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "^3.0.2" - } - }, - "buffer": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.5.0.tgz", - "integrity": "sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "caching-transform": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", - "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^2.0.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.4.2" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "cardinal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", - "requires": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - } - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "clean-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "clean-stack": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-1.3.0.tgz", - "integrity": "sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=" - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-progress": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.6.1.tgz", - "integrity": "sha512-OVRgcyeI0viJW47MnyS10Jw/0RTpk7wwNbrCOPyXT0TVi2o3Q/u+Os8vQUFYhvkdXSbguSdFvMv1ia+UuwgIQQ==", - "requires": { - "colors": "^1.1.2", - "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "cli-ux": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/cli-ux/-/cli-ux-5.4.5.tgz", - "integrity": "sha512-5A6FuU0wPUlfCWUjtizUvNIbXElp6jN9QUJsDibs6F9cVX1kTgaMR3m6KT0R3iriEXpMrmPKV6yYS8XICNuQ6Q==", - "requires": { - "@oclif/command": "^1.5.1", - "@oclif/errors": "^1.2.1", - "@oclif/linewrap": "^1.0.0", - "@oclif/screen": "^1.0.3", - "ansi-escapes": "^3.1.0", - "ansi-styles": "^3.2.1", - "cardinal": "^2.1.1", - "chalk": "^2.4.1", - "clean-stack": "^2.0.0", - "cli-progress": "^3.4.0", - "extract-stack": "^1.0.0", - "fs-extra": "^7.0.1", - "hyperlinker": "^1.0.0", - "indent-string": "^4.0.0", - "is-wsl": "^1.1.0", - "js-yaml": "^3.13.1", - "lodash": "^4.17.11", - "natural-orderby": "^2.0.1", - "password-prompt": "^1.1.2", - "semver": "^5.6.0", - "string-width": "^3.1.0", - "strip-ansi": "^5.1.0", - "supports-color": "^5.5.0", - "supports-hyperlinks": "^1.0.1", - "treeify": "^1.1.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "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": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "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": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "detect-indent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", - "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "requires": { - "browserify-aes": "^1.0.6", - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4" - } - }, - "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - }, - "dependencies": { - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - } - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "eslint-ast-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz", - "integrity": "sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==", - "dev": true, - "requires": { - "lodash.get": "^4.4.2", - "lodash.zip": "^4.2.0" - } - }, - "eslint-config-oclif": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-oclif/-/eslint-config-oclif-3.1.0.tgz", - "integrity": "sha512-Tqgy43cNXsSdhTLWW4RuDYGFhV240sC4ISSv/ZiUEg/zFxExSEUpRE6J+AGnkKY9dYwIW4C9b2YSUVv8z/miMA==", - "dev": true, - "requires": { - "eslint-config-xo-space": "^0.20.0", - "eslint-plugin-mocha": "^5.2.0", - "eslint-plugin-node": "^7.0.1", - "eslint-plugin-unicorn": "^6.0.1" - } - }, - "eslint-config-oclif-typescript": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-oclif-typescript/-/eslint-config-oclif-typescript-0.1.0.tgz", - "integrity": "sha512-BjXNJcH2F02MdaSFml9vJskviUFVkLHbTPGM5tinIt98H6klFNKP7/lQ+fB/Goc2wB45usEuuw6+l/fwAv9i7g==", - "dev": true, - "requires": { - "@typescript-eslint/eslint-plugin": "^2.6.1", - "@typescript-eslint/parser": "^2.6.1", - "eslint-config-oclif": "^3.1.0", - "eslint-config-xo-space": "^0.20.0", - "eslint-plugin-mocha": "^5.2.0", - "eslint-plugin-node": "^7.0.1", - "eslint-plugin-unicorn": "^6.0.1" - } - }, - "eslint-config-xo": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.24.2.tgz", - "integrity": "sha512-ivQ7qISScW6gfBp+p31nQntz1rg34UCybd3uvlngcxt5Utsf4PMMi9QoAluLFcPUM5Tvqk4JGraR9qu3msKPKQ==", - "dev": true - }, - "eslint-config-xo-space": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/eslint-config-xo-space/-/eslint-config-xo-space-0.20.0.tgz", - "integrity": "sha512-bOsoZA8M6v1HviDUIGVq1fLVnSu3mMZzn85m2tqKb73tSzu4GKD4Jd2Py4ZKjCgvCbRRByEB5HPC3fTMnnJ1uw==", - "dev": true, - "requires": { - "eslint-config-xo": "^0.24.0" - } - }, - "eslint-plugin-es": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz", - "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==", - "dev": true, - "requires": { - "eslint-utils": "^1.4.2", - "regexpp": "^2.0.1" - } - }, - "eslint-plugin-mocha": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-5.3.0.tgz", - "integrity": "sha512-3uwlJVLijjEmBeNyH60nzqgA1gacUWLUmcKV8PIGNvj1kwP/CTgAWQHn2ayyJVwziX+KETkr9opNwT1qD/RZ5A==", - "dev": true, - "requires": { - "ramda": "^0.26.1" - } - }, - "eslint-plugin-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz", - "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==", - "dev": true, - "requires": { - "eslint-plugin-es": "^1.3.1", - "eslint-utils": "^1.3.1", - "ignore": "^4.0.2", - "minimatch": "^3.0.4", - "resolve": "^1.8.1", - "semver": "^5.5.0" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "eslint-plugin-unicorn": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-6.0.1.tgz", - "integrity": "sha512-hjy9LhTdtL7pz8WTrzS0CGXRkWK3VAPLDjihofj8JC+uxQLfXm0WwZPPPB7xKmcjRyoH+jruPHOCrHNEINpG/Q==", - "dev": true, - "requires": { - "clean-regexp": "^1.0.0", - "eslint-ast-utils": "^1.0.0", - "import-modules": "^1.1.0", - "lodash.camelcase": "^4.1.1", - "lodash.kebabcase": "^4.0.1", - "lodash.snakecase": "^4.0.1", - "lodash.upperfirst": "^4.2.0", - "safe-regex": "^1.1.0" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.2.0.tgz", - "integrity": "sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==", - "dev": true, - "requires": { - "estraverse": "^5.0.0" - }, - "dependencies": { - "estraverse": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.0.0.tgz", - "integrity": "sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==" - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - } - } - }, - "extract-stack": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-1.0.0.tgz", - "integrity": "sha1-uXrK+UQe6iMyUpYktzL8WhyBZfo=" - }, - "fancy-test": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/fancy-test/-/fancy-test-1.4.7.tgz", - "integrity": "sha512-drgNrpNbvXXbPAz0rn7jvzjoEihDKpm1fFF+aZ+FVLatjE3jZSc6WwfgC5x7N/+nhmentMx4TXPQ0OkS0SElVQ==", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/lodash": "*", - "@types/mocha": "*", - "@types/node": "*", - "@types/sinon": "*", - "lodash": "^4.17.13", - "mock-stdin": "^0.3.1", - "stdout-stderr": "^0.1.9" - } - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" - }, - "fast-glob": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", - "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", - "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "foreground-child": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - } - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "github-slugger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", - "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", - "dev": true, - "requires": { - "emoji-regex": ">=6.0.0 <=6.1.1" - }, - "dependencies": { - "emoji-regex": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", - "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", - "dev": true - } - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hasha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-call": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz", - "integrity": "sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==", - "dev": true, - "requires": { - "content-type": "^1.0.4", - "debug": "^4.1.1", - "is-retry-allowed": "^1.1.0", - "is-stream": "^2.0.0", - "parse-json": "^4.0.0", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - } - } - }, - "hyperlinker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz", - "integrity": "sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-1.1.0.tgz", - "integrity": "sha1-dI23nFzEK7lwHvq0JPiU5yYA6dw=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "inquirer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", - "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "requires": { - "type-fest": "^0.11.0" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" - } - } - }, - "ip-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.1.0.tgz", - "integrity": "sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - } - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=", - "dev": true - }, - "lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=", - "dev": true - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha1-E2Xt9DFIBIHvDRxolXpe2Z1J984=", - "dev": true - }, - "lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "requires": { - "es5-ext": "~0.10.2" - } - }, - "make-dir": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz", - "integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", - "requires": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", - "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" - } - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mkdirp-classic": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", - "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==", - "dev": true - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "mock-stdin": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/mock-stdin/-/mock-stdin-0.3.1.tgz", - "integrity": "sha1-xlfZZC2QeGQ1xkyl6Zu9TQm9fdM=", - "dev": true - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "natural-orderby": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", - "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==" - }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", - "dev": true - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nyc": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", - "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "caching-transform": "^3.0.2", - "convert-source-map": "^1.6.0", - "cp-file": "^6.2.0", - "find-cache-dir": "^2.1.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.3", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.2.3", - "uuid": "^3.3.2", - "yargs": "^13.2.2", - "yargs-parser": "^13.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", - "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "password-prompt": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.2.tgz", - "integrity": "sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==", - "requires": { - "ansi-escapes": "^3.1.0", - "cross-spawn": "^6.0.5" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "proper-lockfile": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.1.tgz", - "integrity": "sha512-1w6rxXodisVpn7QYvLk706mzprPTAPCYAqxMvctmPN3ekuRk/kuGkGc82pangZiAt4R3lwSuUzheTTn0/Yb7Zg==", - "requires": { - "graceful-fs": "^4.1.11", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qqjs": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/qqjs/-/qqjs-0.3.11.tgz", - "integrity": "sha512-pB2X5AduTl78J+xRSxQiEmga1jQV0j43jOPs/MTgTLApGFEOn6NgdE2dEjp7nvDtjkIOZbvFIojAiYUx6ep3zg==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "debug": "^4.1.1", - "execa": "^0.10.0", - "fs-extra": "^6.0.1", - "get-stream": "^5.1.0", - "glob": "^7.1.2", - "globby": "^10.0.1", - "http-call": "^5.1.2", - "load-json-file": "^6.2.0", - "pkg-dir": "^4.2.0", - "tar-fs": "^2.0.0", - "tmp": "^0.1.0", - "write-json-file": "^4.1.1" - }, - "dependencies": { - "fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "ramda": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", - "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "redeyed": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", - "requires": { - "esprima": "~4.0.0" - } - }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-async": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", - "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", - "requires": { - "is-promise": "^2.1.0" - } - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, - "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "secp256k1": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", - "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", - "requires": { - "bindings": "^1.5.0", - "bip66": "^1.1.5", - "bn.js": "^4.11.8", - "create-hash": "^1.2.0", - "drbg.js": "^1.0.1", - "elliptic": "^6.5.2", - "nan": "^2.14.0", - "safe-buffer": "^5.1.2" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "slug": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/slug/-/slug-2.1.1.tgz", - "integrity": "sha512-yNGhDdS0DR0JyxnPC84qIx/Vd01RHVY4guJeBqBNdBoOLNWnzw5zkWJvxVSmsuUb92bikdnQFnw3PfGY8uZ82g==", - "requires": { - "unicode": ">= 0.3.1" - } - }, - "sort-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.0.0.tgz", - "integrity": "sha512-hlJLzrn/VN49uyNkZ8+9b+0q9DjmmYcYOnbMQtpkLrYpPwRApDPZfmqbUfJnAA3sb/nRib+nDot7Zi/1ER1fuA==", - "dev": true, - "requires": { - "is-plain-obj": "^2.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "spawn-wrap": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", - "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "stdout-stderr": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/stdout-stderr/-/stdout-stderr-0.1.13.tgz", - "integrity": "sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz", - "integrity": "sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==", - "requires": { - "has-flag": "^2.0.0", - "supports-color": "^5.0.0" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" - } - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "tar-fs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", - "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - }, - "tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", - "dev": true, - "requires": { - "bl": "^4.0.1", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dev": true, - "requires": { - "rimraf": "^2.6.3" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" - }, - "ts-node": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.8.2.tgz", - "integrity": "sha512-duVj6BpSpUpD/oM4MfhO98ozgkp3Gt9qIp3jGxwU2DFvl/3IRaEAvbLa8G60uS7C77457e/m5TMowjedeRxI1Q==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", - "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", - "dev": true - }, - "unicode": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/unicode/-/unicode-12.1.0.tgz", - "integrity": "sha512-Ty6+Ew21DiYTWLYtd05RF/X4c1ekOvOgANyHbBj0h3MaXpfaGr2Rdmc0hMFuGQLyPLb9cU4ArNxl0bTF5HSzXw==" - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unorm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", - "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vfile": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.1.0.tgz", - "integrity": "sha512-BaTPalregj++64xbGK6uIlsurN3BCRNM/P2Pg8HezlGzKd1O9PrwIac6bd9Pdx2uTb0QHoioZ+rXKolbVXEgJg==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "websocket": { - "version": "1.0.31", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.31.tgz", - "integrity": "sha512-VAouplvGKPiKFDTeCCO65vYHsyay8DqoBSlzIO3fayrfOgU94lQN5a1uWVnFrMLceTJw/+fQXR5PGbUVRaHshQ==", - "requires": { - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "nan": "^2.14.0", - "typedarray-to-buffer": "^3.1.5", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "requires": { - "string-width": "^2.1.1" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-4.0.0.tgz", - "integrity": "sha512-uMTsj9rDb0/7kk1PbcbCcwvHUxp60fGDB/NNXpVa0Q+ic/e7y5+BwTxKfQ33VYgDppSwi/FBzpetYzo8s6tfbg==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "write-json-file": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", - "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", - "dev": true, - "requires": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" - } - }, - "xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "requires": { - "cuint": "^0.2.2" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} diff --git a/cli/package.json b/cli/package.json index 733c6da0ef..95947544a6 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,21 +1,25 @@ { - "name": "joystream-cli", + "name": "@joystream/cli", "description": "Command Line Interface for Joystream community and governance activities", - "version": "0.0.0", + "version": "0.2.0", "author": "Leszek Wiesner", "bin": { "joystream-cli": "./bin/run" }, - "bugs": "https://github.com/Joystream/substrate-runtime-joystream/issues", + "bugs": "https://github.com/Joystream/joystream/issues", "dependencies": { - "@joystream/types": "^0.10.0", + "@joystream/types": "^0.13.0", "@oclif/command": "^1.5.19", "@oclif/config": "^1.14.0", + "@oclif/plugin-autocomplete": "^0.2.0", "@oclif/plugin-help": "^2.2.3", - "@polkadot/api": "^0.96.1", + "@oclif/plugin-not-found": "^1.2.4", + "@oclif/plugin-warn-if-update-available": "^1.7.0", + "@polkadot/api": "1.26.1", "@types/inquirer": "^6.5.0", "@types/proper-lockfile": "^4.1.1", "@types/slug": "^0.9.1", + "ajv": "^6.11.0", "cli-ux": "^5.4.5", "inquirer": "^7.1.0", "moment": "^2.24.0", @@ -26,22 +30,27 @@ "devDependencies": { "@oclif/dev-cli": "^1.22.2", "@oclif/test": "^1.2.5", + "@polkadot/ts": "^0.1.56", "@types/chai": "^4.2.11", "@types/mocha": "^5.2.7", "@types/node": "^10.17.18", "chai": "^4.2.0", - "eslint": "^5.16.0", + "eslint": "^7.6.0", "eslint-config-oclif": "^3.1.0", "eslint-config-oclif-typescript": "^0.1.0", "globby": "^10.0.2", "mocha": "^5.2.0", "nyc": "^14.1.1", "ts-node": "^8.8.2", - "typescript": "^3.8.3", - "@polkadot/ts": "^0.1.56" + "typescript": "^3.8.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=12.18.0", + "yarn": "^1.22.0" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" }, "files": [ "/bin", @@ -49,18 +58,21 @@ "/npm-shrinkwrap.json", "/oclif.manifest.json" ], - "homepage": "https://github.com/Joystream/substrate-runtime-joystream/blob/master/cli", + "homepage": "https://github.com/Joystream/joystream/blob/master/cli", "keywords": [ "oclif" ], - "license": "MIT", + "license": "GPL-3.0-only", "main": "lib/index.js", "oclif": { "repositoryPrefix": "<%- repo %>/blob/master/cli/<%- commandPath %>", "commands": "./lib/commands", "bin": "joystream-cli", "plugins": [ - "@oclif/plugin-help" + "@oclif/plugin-help", + "@oclif/plugin-autocomplete", + "@oclif/plugin-not-found", + "@oclif/plugin-warn-if-update-available" ], "topics": { "council": { @@ -71,20 +83,27 @@ }, "api": { "description": "Inspect the substrate node api, perform lower-level api calls or change the current api provider uri" + }, + "working-groups": { + "description": "Working group lead and worker actions" } } }, "repository": { "type": "git", - "url": "https://github.com/Joystream/substrate-runtime-joystream", + "url": "https://github.com/Joystream/joystream", "directory": "cli" }, "scripts": { "postpack": "rm -f oclif.manifest.json", - "posttest": "eslint . --ext .ts --config .eslintrc", + "posttest": "yarn lint", "prepack": "rm -rf lib && tsc -b && oclif-dev manifest && oclif-dev readme", "test": "nyc --extension .ts mocha --forbid-only \"test/**/*.test.ts\"", - "version": "oclif-dev readme && git add README.md" + "build": "tsc --build tsconfig.json", + "version": "oclif-dev readme && git add README.md", + "lint": "eslint ./ --quiet --ext .ts", + "checks": "yarn lint && tsc --noEmit --pretty && prettier ./ --check", + "format": "prettier ./ --write" }, "types": "lib/index.d.ts" } diff --git a/cli/src/Api.ts b/cli/src/Api.ts index 948a411a71..22cbf13e69 100644 --- a/cli/src/Api.ts +++ b/cli/src/Api.ts @@ -1,114 +1,476 @@ -import BN from 'bn.js'; -import { registerJoystreamTypes } from '@joystream/types/'; -import { ApiPromise, WsProvider } from '@polkadot/api'; -import { QueryableStorageMultiArg } from '@polkadot/api/types'; -import { formatBalance } from '@polkadot/util'; -import { Hash } from '@polkadot/types/interfaces'; -import { KeyringPair } from '@polkadot/keyring/types'; -import { Codec } from '@polkadot/types/types'; -import { AccountSummary, CouncilInfoObj, CouncilInfoTuple, createCouncilInfoObj } from './Types'; -import { DerivedFees, DerivedBalances } from '@polkadot/api-derive/types'; -import { CLIError } from '@oclif/errors'; -import ExitCodes from './ExitCodes'; - -export const DEFAULT_API_URI = 'wss://rome-rpc-endpoint.joystream.org:9944/'; -export const TOKEN_SYMBOL = 'JOY'; +import BN from 'bn.js' +import { types } from '@joystream/types/' +import { ApiPromise, WsProvider } from '@polkadot/api' +import { QueryableStorageMultiArg, SubmittableExtrinsic, QueryableStorageEntry } from '@polkadot/api/types' +import { formatBalance } from '@polkadot/util' +import { Balance, Moment, BlockNumber } from '@polkadot/types/interfaces' +import { KeyringPair } from '@polkadot/keyring/types' +import { Codec, CodecArg } from '@polkadot/types/types' +import { Option, Vec, UInt } from '@polkadot/types' +import { + AccountSummary, + CouncilInfoObj, + CouncilInfoTuple, + createCouncilInfoObj, + WorkingGroups, + Reward, + GroupMember, + OpeningStatus, + GroupOpeningStage, + GroupOpening, + GroupApplication, + openingPolicyUnstakingPeriodsKeys, + UnstakingPeriods, + StakingPolicyUnstakingPeriodKey, +} from './Types' +import { DeriveBalancesAll } from '@polkadot/api-derive/types' +import { CLIError } from '@oclif/errors' +import ExitCodes from './ExitCodes' +import { + Worker, + WorkerId, + RoleStakeProfile, + Opening as WGOpening, + Application as WGApplication, +} from '@joystream/types/working-group' +import { + Opening, + Application, + OpeningStage, + ApplicationStageKeys, + ApplicationId, + OpeningId, + StakingPolicy, +} from '@joystream/types/hiring' +import { MemberId, Membership } from '@joystream/types/members' +import { RewardRelationship, RewardRelationshipId } from '@joystream/types/recurring-rewards' +import { Stake, StakeId } from '@joystream/types/stake' -// Api wrapper for handling most common api calls and allowing easy API implementation switch in the future +import { InputValidationLengthConstraint } from '@joystream/types/common' + +export const DEFAULT_API_URI = 'ws://localhost:9944/' +const DEFAULT_DECIMALS = new BN(12) +// Mapping of working group to api module +export const apiModuleByGroup: { [key in WorkingGroups]: string } = { + [WorkingGroups.StorageProviders]: 'storageWorkingGroup', +} + +// Api wrapper for handling most common api calls and allowing easy API implementation switch in the future export default class Api { - private _api: ApiPromise; + private _api: ApiPromise + + private constructor(originalApi: ApiPromise) { + this._api = originalApi + } + + public getOriginalApi(): ApiPromise { + return this._api + } + + private static async initApi(apiUri: string = DEFAULT_API_URI): Promise { + const wsProvider: WsProvider = new WsProvider(apiUri) + const api = await ApiPromise.create({ provider: wsProvider, types }) + + // Initializing some api params based on pioneer/packages/react-api/Api.tsx + const [properties] = await Promise.all([api.rpc.system.properties()]) + + const tokenSymbol = properties.tokenSymbol.unwrapOr('DEV').toString() + const tokenDecimals = properties.tokenDecimals.unwrapOr(DEFAULT_DECIMALS).toNumber() + + // formatBlanace config + formatBalance.setDefaults({ + decimals: tokenDecimals, + unit: tokenSymbol, + }) + + return api + } + + static async create(apiUri: string = DEFAULT_API_URI): Promise { + const originalApi: ApiPromise = await Api.initApi(apiUri) + return new Api(originalApi) + } + + private queryMultiOnce(queries: Parameters[0]): Promise { + return new Promise((resolve, reject) => { + let unsub: () => void + this._api + .queryMulti(queries, (res) => { + // unsub should already be set at this point + if (!unsub) { + reject(new CLIError('API queryMulti issue - unsub method not set!', { exit: ExitCodes.ApiError })) + } + unsub() + resolve(res) + }) + .then((unsubscribe) => (unsub = unsubscribe)) + .catch((e) => reject(e)) + }) + } + + async getAccountsBalancesInfo(accountAddresses: string[]): Promise { + const accountsBalances: DeriveBalancesAll[] = await Promise.all( + accountAddresses.map((addr) => this._api.derive.balances.all(addr)) + ) + + return accountsBalances + } + + // Get on-chain data related to given account. + // For now it's just account balances + async getAccountSummary(accountAddresses: string): Promise { + const balances: DeriveBalancesAll = (await this.getAccountsBalancesInfo([accountAddresses]))[0] + // TODO: Some more information can be fetched here in the future + + return { balances } + } - private constructor(originalApi:ApiPromise) { - this._api = originalApi; + async getCouncilInfo(): Promise { + const queries: { [P in keyof CouncilInfoObj]: QueryableStorageMultiArg<'promise'> } = { + activeCouncil: this._api.query.council.activeCouncil, + termEndsAt: this._api.query.council.termEndsAt, + autoStart: this._api.query.councilElection.autoStart, + newTermDuration: this._api.query.councilElection.newTermDuration, + candidacyLimit: this._api.query.councilElection.candidacyLimit, + councilSize: this._api.query.councilElection.councilSize, + minCouncilStake: this._api.query.councilElection.minCouncilStake, + minVotingStake: this._api.query.councilElection.minVotingStake, + announcingPeriod: this._api.query.councilElection.announcingPeriod, + votingPeriod: this._api.query.councilElection.votingPeriod, + revealingPeriod: this._api.query.councilElection.revealingPeriod, + round: this._api.query.councilElection.round, + stage: this._api.query.councilElection.stage, } + const results: CouncilInfoTuple = (await this.queryMultiOnce(Object.values(queries))) as CouncilInfoTuple - public getOriginalApi(): ApiPromise { - return this._api; + return createCouncilInfoObj(...results) + } + + async estimateFee(account: KeyringPair, tx: SubmittableExtrinsic<'promise'>): Promise { + const paymentInfo = await tx.paymentInfo(account) + return paymentInfo.partialFee + } + + createTransferTx(recipient: string, amount: BN) { + return this._api.tx.balances.transfer(recipient, amount) + } + + // Working groups + // TODO: This is a lot of repeated logic from "/pioneer/joy-utils/transport" + // It will be refactored to "joystream-js" soon + async entriesByIds( + apiMethod: QueryableStorageEntry<'promise'>, + firstKey?: CodecArg // First key in case of double maps + ): Promise<[IDType, ValueType][]> { + const entries: [IDType, ValueType][] = (await apiMethod.entries(firstKey)).map(([storageKey, value]) => [ + // If double-map (first key is provided), we map entries by second key + storageKey.args[firstKey !== undefined ? 1 : 0] as IDType, + value, + ]) + + return entries.sort((a, b) => a[0].toNumber() - b[0].toNumber()) + } + + protected async blockHash(height: number): Promise { + const blockHash = await this._api.rpc.chain.getBlockHash(height) + + return blockHash.toString() + } + + protected async blockTimestamp(height: number): Promise { + const blockTime = (await this._api.query.timestamp.now.at(await this.blockHash(height))) as Moment + + return new Date(blockTime.toNumber()) + } + + protected workingGroupApiQuery(group: WorkingGroups) { + const module = apiModuleByGroup[group] + return this._api.query[module] + } + + protected async membershipById(memberId: MemberId): Promise { + const profile = (await this._api.query.members.membershipById(memberId)) as Membership + + // Can't just use profile.isEmpty because profile.suspended is Bool (which isEmpty method always returns false) + return profile.handle.isEmpty ? null : profile + } + + async groupLead(group: WorkingGroups): Promise { + const optLeadId = (await this.workingGroupApiQuery(group).currentLead()) as Option + + if (!optLeadId.isSome) { + return null } - private static async initApi(apiUri: string = DEFAULT_API_URI): Promise { - formatBalance.setDefaults({ unit: TOKEN_SYMBOL }); - const wsProvider:WsProvider = new WsProvider(apiUri); - registerJoystreamTypes(); + const leadWorkerId = optLeadId.unwrap() + const leadWorker = await this.workerByWorkerId(group, leadWorkerId.toNumber()) + + return await this.parseGroupMember(leadWorkerId, leadWorker) + } - return await ApiPromise.create({ provider: wsProvider }); + protected async stakeValue(stakeId: StakeId): Promise { + const stake = await this._api.query.stake.stakes(stakeId) + return stake.value + } + + protected async workerStake(stakeProfile: RoleStakeProfile): Promise { + return this.stakeValue(stakeProfile.stake_id) + } + + protected async workerReward(relationshipId: RewardRelationshipId): Promise { + const rewardRelationship = await this._api.query.recurringRewards.rewardRelationships( + relationshipId + ) + + return { + totalRecieved: rewardRelationship.total_reward_received, + value: rewardRelationship.amount_per_payout, + interval: rewardRelationship.payout_interval.unwrapOr(undefined)?.toNumber(), + nextPaymentBlock: rewardRelationship.next_payment_at_block.unwrapOr(new BN(0)).toNumber(), } + } + + protected async parseGroupMember(id: WorkerId, worker: Worker): Promise { + const roleAccount = worker.role_account_id + const memberId = worker.member_id - static async create(apiUri: string = DEFAULT_API_URI): Promise { - const originalApi: ApiPromise = await Api.initApi(apiUri); - return new Api(originalApi); + const profile = await this.membershipById(memberId) + + if (!profile) { + throw new Error(`Group member profile not found! (member id: ${memberId.toNumber()})`) } - private async queryMultiOnce(queries: Parameters[0]): Promise { - let results: Codec[] = []; + let stake: Balance | undefined + if (worker.role_stake_profile && worker.role_stake_profile.isSome) { + stake = await this.workerStake(worker.role_stake_profile.unwrap()) + } - const unsub = await this._api.queryMulti( - queries, - (res) => { results = res } - ); - unsub(); + let reward: Reward | undefined + if (worker.reward_relationship && worker.reward_relationship.isSome) { + reward = await this.workerReward(worker.reward_relationship.unwrap()) + } + + return { + workerId: id, + roleAccount, + memberId, + profile, + stake, + reward, + } + } - if (!results.length || results.length !== queries.length) { - throw new CLIError('API querying issue', { exit: ExitCodes.ApiError }); - } + async workerByWorkerId(group: WorkingGroups, workerId: number): Promise { + const nextId = await this.workingGroupApiQuery(group).nextWorkerId() - return results; + // This is chain specfic, but if next id is still 0, it means no workers have been added yet + if (workerId < 0 || workerId >= nextId.toNumber()) { + throw new CLIError('Invalid worker id!') } - async getAccountsBalancesInfo(accountAddresses:string[]): Promise { - let accountsBalances: DerivedBalances[] = await this._api.derive.balances.votingBalances(accountAddresses); + const worker = await this.workingGroupApiQuery(group).workerById(workerId) - return accountsBalances; + if (worker.isEmpty) { + throw new CLIError('This worker is not active anymore') } - // Get on-chain data related to given account. - // For now it's just account balances - async getAccountSummary(accountAddresses:string): Promise { - const balances: DerivedBalances = (await this.getAccountsBalancesInfo([accountAddresses]))[0]; - // TODO: Some more information can be fetched here in the future + return worker + } + + async groupMember(group: WorkingGroups, workerId: number) { + const worker = await this.workerByWorkerId(group, workerId) + return await this.parseGroupMember(this._api.createType('WorkerId', workerId), worker) + } + + async groupMembers(group: WorkingGroups): Promise { + const workerEntries = await this.entriesByIds(this.workingGroupApiQuery(group).workerById) + + const groupMembers: GroupMember[] = await Promise.all( + workerEntries.map(([id, worker]) => this.parseGroupMember(id, worker)) + ) + + return groupMembers.reverse() // Sort by newest + } - return { balances }; + async openingsByGroup(group: WorkingGroups): Promise { + let openings: GroupOpening[] = [] + const nextId = await this.workingGroupApiQuery(group).nextOpeningId() + + // This is chain specfic, but if next id is still 0, it means no openings have been added yet + if (!nextId.eq(0)) { + const ids = Array.from(Array(nextId.toNumber()).keys()).reverse() // Sort by newest + openings = await Promise.all(ids.map((id) => this.groupOpening(group, id))) } - async getCouncilInfo(): Promise { - const queries: { [P in keyof CouncilInfoObj]: QueryableStorageMultiArg<"promise"> } = { - activeCouncil: this._api.query.council.activeCouncil, - termEndsAt: this._api.query.council.termEndsAt, - autoStart: this._api.query.councilElection.autoStart, - newTermDuration: this._api.query.councilElection.newTermDuration, - candidacyLimit: this._api.query.councilElection.candidacyLimit, - councilSize: this._api.query.councilElection.councilSize, - minCouncilStake: this._api.query.councilElection.minCouncilStake, - minVotingStake: this._api.query.councilElection.minVotingStake, - announcingPeriod: this._api.query.councilElection.announcingPeriod, - votingPeriod: this._api.query.councilElection.votingPeriod, - revealingPeriod: this._api.query.councilElection.revealingPeriod, - round: this._api.query.councilElection.round, - stage: this._api.query.councilElection.stage - } - const results: CouncilInfoTuple = await this.queryMultiOnce(Object.values(queries)); + return openings + } + + protected async hiringOpeningById(id: number | OpeningId): Promise { + const result = await this._api.query.hiring.openingById(id) + return result + } + + protected async hiringApplicationById(id: number | ApplicationId): Promise { + const result = await this._api.query.hiring.applicationById(id) + return result + } - return createCouncilInfoObj(...results); + async wgApplicationById(group: WorkingGroups, wgApplicationId: number): Promise { + const nextAppId = await this.workingGroupApiQuery(group).nextApplicationId() + + if (wgApplicationId < 0 || wgApplicationId >= nextAppId.toNumber()) { + throw new CLIError('Invalid working group application ID!') } - // TODO: This formula is probably not too good, so some better implementation will be required in the future - async estimateFee(account: KeyringPair, recipientAddr: string, amount: BN): Promise { - const transfer = this._api.tx.balances.transfer(recipientAddr, amount); - const signature = account.sign(transfer.toU8a()); - const transactionByteSize:BN = new BN(transfer.encodedLength + signature.length); + const result = await this.workingGroupApiQuery(group).applicationById(wgApplicationId) + return result + } - const fees: DerivedFees = await this._api.derive.balances.fees(); + protected async parseApplication(wgApplicationId: number, wgApplication: WGApplication): Promise { + const appId = wgApplication.application_id + const application = await this.hiringApplicationById(appId) - const estimatedFee = fees.transactionBaseFee.add(fees.transactionByteFee.mul(transactionByteSize)); + const { active_role_staking_id: roleStakingId, active_application_staking_id: appStakingId } = application - return estimatedFee; + return { + wgApplicationId, + applicationId: appId.toNumber(), + wgOpeningId: wgApplication.opening_id.toNumber(), + member: await this.membershipById(wgApplication.member_id), + roleAccout: wgApplication.role_account_id, + stakes: { + application: appStakingId.isSome ? (await this.stakeValue(appStakingId.unwrap())).toNumber() : 0, + role: roleStakingId.isSome ? (await this.stakeValue(roleStakingId.unwrap())).toNumber() : 0, + }, + humanReadableText: application.human_readable_text.toString(), + stage: application.stage.type as ApplicationStageKeys, } + } + + async groupApplication(group: WorkingGroups, wgApplicationId: number): Promise { + const wgApplication = await this.wgApplicationById(group, wgApplicationId) + return await this.parseApplication(wgApplicationId, wgApplication) + } - async transfer(account: KeyringPair, recipientAddr: string, amount: BN): Promise { - const txHash = await this._api.tx.balances - .transfer(recipientAddr, amount) - .signAndSend(account); - return txHash; + protected async groupOpeningApplications(group: WorkingGroups, wgOpeningId: number): Promise { + const wgApplicationEntries = await this.entriesByIds( + this.workingGroupApiQuery(group).applicationById + ) + + return Promise.all( + wgApplicationEntries + .filter(([, /* id */ wgApplication]) => wgApplication.opening_id.eqn(wgOpeningId)) + .map(([id, wgApplication]) => this.parseApplication(id.toNumber(), wgApplication)) + ) + } + + async groupOpening(group: WorkingGroups, wgOpeningId: number): Promise { + const nextId = ((await this.workingGroupApiQuery(group).nextOpeningId()) as OpeningId).toNumber() + + if (wgOpeningId < 0 || wgOpeningId >= nextId) { + throw new CLIError('Invalid working group opening ID!') } + + const groupOpening = await this.workingGroupApiQuery(group).openingById(wgOpeningId) + + const openingId = groupOpening.hiring_opening_id.toNumber() + const opening = await this.hiringOpeningById(openingId) + const applications = await this.groupOpeningApplications(group, wgOpeningId) + const stage = await this.parseOpeningStage(opening.stage) + const type = groupOpening.opening_type + const { application_staking_policy: applSP, role_staking_policy: roleSP } = opening + const stakes = { + application: applSP.unwrapOr(undefined), + role: roleSP.unwrapOr(undefined), + } + + const unstakingPeriod = (period: Option) => period.unwrapOr(new BN(0)).toNumber() + const spUnstakingPeriod = (sp: Option, key: StakingPolicyUnstakingPeriodKey) => + sp.isSome ? unstakingPeriod(sp.unwrap()[key]) : 0 + + const unstakingPeriods: Partial = { + 'review_period_expired_application_stake_unstaking_period_length': spUnstakingPeriod( + applSP, + 'review_period_expired_unstaking_period_length' + ), + 'crowded_out_application_stake_unstaking_period_length': spUnstakingPeriod( + applSP, + 'crowded_out_unstaking_period_length' + ), + 'review_period_expired_role_stake_unstaking_period_length': spUnstakingPeriod( + roleSP, + 'review_period_expired_unstaking_period_length' + ), + 'crowded_out_role_stake_unstaking_period_length': spUnstakingPeriod( + roleSP, + 'crowded_out_unstaking_period_length' + ), + } + + openingPolicyUnstakingPeriodsKeys.forEach((key) => { + unstakingPeriods[key] = unstakingPeriod(groupOpening.policy_commitment[key]) + }) + + return { + wgOpeningId, + openingId, + opening, + stage, + stakes, + applications, + type, + unstakingPeriods: unstakingPeriods as UnstakingPeriods, + } + } + + async parseOpeningStage(stage: OpeningStage): Promise { + let status: OpeningStatus | undefined, stageBlock: number | undefined, stageDate: Date | undefined + + if (stage.isOfType('WaitingToBegin')) { + const stageData = stage.asType('WaitingToBegin') + const currentBlockNumber = (await this._api.derive.chain.bestNumber()).toNumber() + const expectedBlockTime = (this._api.consts.babe.expectedBlockTime as Moment).toNumber() + status = OpeningStatus.WaitingToBegin + stageBlock = stageData.begins_at_block.toNumber() + stageDate = new Date(Date.now() + (stageBlock - currentBlockNumber) * expectedBlockTime) + } + + if (stage.isOfType('Active')) { + const stageData = stage.asType('Active') + const substage = stageData.stage + if (substage.isOfType('AcceptingApplications')) { + status = OpeningStatus.AcceptingApplications + stageBlock = substage.asType('AcceptingApplications').started_accepting_applicants_at_block.toNumber() + } + if (substage.isOfType('ReviewPeriod')) { + status = OpeningStatus.InReview + stageBlock = substage.asType('ReviewPeriod').started_review_period_at_block.toNumber() + } + if (substage.isOfType('Deactivated')) { + status = substage.asType('Deactivated').cause.isOfType('Filled') + ? OpeningStatus.Complete + : OpeningStatus.Cancelled + stageBlock = substage.asType('Deactivated').deactivated_at_block.toNumber() + } + if (stageBlock) { + stageDate = new Date(await this.blockTimestamp(stageBlock)) + } + } + + return { + status: status || OpeningStatus.Unknown, + block: stageBlock, + date: stageDate, + } + } + + async getMemberIdsByControllerAccount(address: string): Promise { + const ids = await this._api.query.members.memberIdsByControllerAccountId>(address) + return ids.toArray() + } + + async workerExitRationaleConstraint(group: WorkingGroups): Promise { + return await this.workingGroupApiQuery(group).workerExitRationaleText() + } } diff --git a/cli/src/ExitCodes.ts b/cli/src/ExitCodes.ts index 124e76965a..c7846b266d 100644 --- a/cli/src/ExitCodes.ts +++ b/cli/src/ExitCodes.ts @@ -1,14 +1,15 @@ enum ExitCodes { - OK = 0, + OK = 0, - InvalidInput = 400, - FileNotFound = 401, - InvalidFile = 402, - NoAccountFound = 403, - NoAccountSelected = 404, + InvalidInput = 400, + FileNotFound = 401, + InvalidFile = 402, + NoAccountFound = 403, + NoAccountSelected = 404, + AccessDenied = 405, - UnexpectedException = 500, - FsOperationFailed = 501, - ApiError = 502, + UnexpectedException = 500, + FsOperationFailed = 501, + ApiError = 502, } -export = ExitCodes; +export = ExitCodes diff --git a/cli/src/Types.ts b/cli/src/Types.ts index 1ada9d4dfe..5f9b1bfa30 100644 --- a/cli/src/Types.ts +++ b/cli/src/Types.ts @@ -1,63 +1,389 @@ -import BN from 'bn.js'; -import { ElectionStage, Seat } from '@joystream/types/'; -import { Option } from '@polkadot/types'; -import { BlockNumber, Balance } from '@polkadot/types/interfaces'; -import { DerivedBalances } from '@polkadot/api-derive/types'; -import { KeyringPair } from '@polkadot/keyring/types'; +import BN from 'bn.js' +import { ElectionStage, Seat } from '@joystream/types/council' +import { Option, Text } from '@polkadot/types' +import { Constructor, Codec } from '@polkadot/types/types' +import { Struct, Vec } from '@polkadot/types/codec' +import { u32 } from '@polkadot/types/primitive' +import { BlockNumber, Balance, AccountId } from '@polkadot/types/interfaces' +import { DeriveBalancesAll } from '@polkadot/api-derive/types' +import { KeyringPair } from '@polkadot/keyring/types' +import { WorkerId, OpeningType } from '@joystream/types/working-group' +import { Membership, MemberId } from '@joystream/types/members' +import { + GenericJoyStreamRoleSchema, + JobSpecifics, + ApplicationDetails, + QuestionSections, + QuestionSection, + QuestionsFields, + QuestionField, + EntryInMembershipModuke, + HiringProcess, + AdditionalRolehiringProcessDetails, + CreatorDetails, +} from '@joystream/types/hiring/schemas/role.schema.typings' +import ajv from 'ajv' +import { Opening, StakingPolicy, ApplicationStageKeys } from '@joystream/types/hiring' +import { Validator } from 'inquirer' +import { JoyStructCustom } from '@joystream/types/common' // KeyringPair type extended with mandatory "meta.name" // It's used for accounts/keys management within CLI. // If not provided in the account json file, the meta.name value is set to "Unnamed Account" export type NamedKeyringPair = KeyringPair & { - meta: { - name: string - } + meta: { + name: string + } } // Summary of the account information fetched from the api for "account:current" purposes (currently just balances) export type AccountSummary = { - balances: DerivedBalances + balances: DeriveBalancesAll } -// Object/Tuple containing council/councilElection information (council:info). -// The tuple is useful, because that's how api.queryMulti returns the results. -export type CouncilInfoTuple = Parameters; -export type CouncilInfoObj = ReturnType; // This function allows us to easily transform the tuple into the object -// and simplifies the creation of consitent Object and Tuple types (seen above). +// and simplifies the creation of consitent Object and Tuple types (seen below). export function createCouncilInfoObj( - activeCouncil: Seat[], - termEndsAt: BlockNumber, - autoStart: Boolean, - newTermDuration: BN, - candidacyLimit: BN, - councilSize: BN, - minCouncilStake: Balance, - minVotingStake: Balance, - announcingPeriod: BlockNumber, - votingPeriod: BlockNumber, - revealingPeriod: BlockNumber, - round: BN, - stage: Option + activeCouncil: Seat[], + termEndsAt: BlockNumber, + autoStart: boolean, + newTermDuration: BN, + candidacyLimit: BN, + councilSize: BN, + minCouncilStake: Balance, + minVotingStake: Balance, + announcingPeriod: BlockNumber, + votingPeriod: BlockNumber, + revealingPeriod: BlockNumber, + round: BN, + stage: Option ) { - return { - activeCouncil, - termEndsAt, - autoStart, - newTermDuration, - candidacyLimit, - councilSize, - minCouncilStake, - minVotingStake, - announcingPeriod, - votingPeriod, - revealingPeriod, - round, - stage - }; + return { + activeCouncil, + termEndsAt, + autoStart, + newTermDuration, + candidacyLimit, + councilSize, + minCouncilStake, + minVotingStake, + announcingPeriod, + votingPeriod, + revealingPeriod, + round, + stage, + } } +// Object/Tuple containing council/councilElection information (council:info). +// The tuple is useful, because that's how api.queryMulti returns the results. +export type CouncilInfoTuple = Parameters +export type CouncilInfoObj = ReturnType // Object with "name" and "value" properties, used for rendering simple CLI tables like: // Total balance: 100 JOY // Free calance: 50 JOY -export type NameValueObj = { name: string, value: string }; +export type NameValueObj = { name: string; value: string } + +// Working groups related types +export enum WorkingGroups { + StorageProviders = 'storageProviders', +} + +// In contrast to Pioneer, currently only StorageProviders group is available in CLI +export const AvailableGroups: readonly WorkingGroups[] = [WorkingGroups.StorageProviders] as const + +export type Reward = { + totalRecieved: Balance + value: Balance + interval?: number + nextPaymentBlock: number // 0 = no incoming payment +} + +// Compound working group types +export type GroupMember = { + workerId: WorkerId + memberId: MemberId + roleAccount: AccountId + profile: Membership + stake?: Balance + reward?: Reward +} + +export type GroupApplication = { + wgApplicationId: number + applicationId: number + wgOpeningId: number + member: Membership | null + roleAccout: AccountId + stakes: { + application: number + role: number + } + humanReadableText: string + stage: ApplicationStageKeys +} + +export enum OpeningStatus { + WaitingToBegin = 'WaitingToBegin', + AcceptingApplications = 'AcceptingApplications', + InReview = 'InReview', + Complete = 'Complete', + Cancelled = 'Cancelled', + Unknown = 'Unknown', +} + +export type GroupOpeningStage = { + status: OpeningStatus + block?: number + date?: Date +} + +export type GroupOpeningStakes = { + application?: StakingPolicy + role?: StakingPolicy +} + +export const stakingPolicyUnstakingPeriodKeys = [ + 'crowded_out_unstaking_period_length', + 'review_period_expired_unstaking_period_length', +] as const + +export type StakingPolicyUnstakingPeriodKey = typeof stakingPolicyUnstakingPeriodKeys[number] + +export const openingPolicyUnstakingPeriodsKeys = [ + 'fill_opening_failed_applicant_application_stake_unstaking_period', + 'fill_opening_failed_applicant_role_stake_unstaking_period', + 'fill_opening_successful_applicant_application_stake_unstaking_period', + 'terminate_application_stake_unstaking_period', + 'terminate_role_stake_unstaking_period', + 'exit_role_application_stake_unstaking_period', + 'exit_role_stake_unstaking_period', +] as const + +export type OpeningPolicyUnstakingPeriodsKey = typeof openingPolicyUnstakingPeriodsKeys[number] +export type UnstakingPeriodsKey = + | OpeningPolicyUnstakingPeriodsKey + | 'crowded_out_application_stake_unstaking_period_length' + | 'crowded_out_role_stake_unstaking_period_length' + | 'review_period_expired_application_stake_unstaking_period_length' + | 'review_period_expired_role_stake_unstaking_period_length' + +export type UnstakingPeriods = { + [k in UnstakingPeriodsKey]: number +} + +export type GroupOpening = { + wgOpeningId: number + openingId: number + stage: GroupOpeningStage + opening: Opening + stakes: GroupOpeningStakes + applications: GroupApplication[] + type: OpeningType + unstakingPeriods: UnstakingPeriods +} + +// Some helper structs for generating human_readable_text in working group opening extrinsic +// Note those types are not part of the runtime etc., we just use them to simplify prompting for values +// (since there exists functionality that handles that for substrate types like: Struct, Vec etc.) +interface WithJSONable { + toJSONObj: () => T +} +export class HRTJobSpecificsStruct + extends JoyStructCustom({ + title: Text, + description: Text, + }) + implements WithJSONable { + get title(): string { + return this.getField('title').toString() + } + + get description(): string { + return this.getField('description').toString() + } + + toJSONObj(): JobSpecifics { + const { title, description } = this + return { title, description } + } +} +export class HRTEntryInMembershipModukeStruct + extends JoyStructCustom({ + handle: Text, + }) + implements WithJSONable { + get handle(): string { + return this.getField('handle').toString() + } + + toJSONObj(): EntryInMembershipModuke { + const { handle } = this + return { handle } + } +} +export class HRTCreatorDetailsStruct + extends JoyStructCustom({ + membership: HRTEntryInMembershipModukeStruct, + }) + implements WithJSONable { + get membership(): EntryInMembershipModuke { + return this.getField('membership').toJSONObj() + } + + toJSONObj(): CreatorDetails { + const { membership } = this + return { membership } + } +} +export class HRTHiringProcessStruct + extends JoyStructCustom({ + details: Vec.with(Text), + }) + implements WithJSONable { + get details(): AdditionalRolehiringProcessDetails { + return this.getField('details') + .toArray() + .map((v) => v.toString()) + } + + toJSONObj(): HiringProcess { + const { details } = this + return { details } + } +} +export class HRTQuestionFieldStruct + extends JoyStructCustom({ + title: Text, + type: Text, + }) + implements WithJSONable { + get title(): string { + return this.getField('title').toString() + } + + get type(): string { + return this.getField('type').toString() + } + + toJSONObj(): QuestionField { + const { title, type } = this + return { title, type } + } +} +class HRTQuestionsFieldsVec extends Vec.with(HRTQuestionFieldStruct) implements WithJSONable { + toJSONObj(): QuestionsFields { + return this.toArray().map((v) => v.toJSONObj()) + } +} +export class HRTQuestionSectionStruct + extends JoyStructCustom({ + title: Text, + questions: HRTQuestionsFieldsVec, + }) + implements WithJSONable { + get title(): string { + return this.getField('title').toString() + } + + get questions(): QuestionsFields { + return this.getField('questions').toJSONObj() + } + + toJSONObj(): QuestionSection { + const { title, questions } = this + return { title, questions } + } +} +export class HRTQuestionSectionsVec extends Vec.with(HRTQuestionSectionStruct) + implements WithJSONable { + toJSONObj(): QuestionSections { + return this.toArray().map((v) => v.toJSONObj()) + } +} +export class HRTApplicationDetailsStruct + extends JoyStructCustom({ + sections: HRTQuestionSectionsVec, + }) + implements WithJSONable { + get sections(): QuestionSections { + return this.getField('sections').toJSONObj() + } + + toJSONObj(): ApplicationDetails { + const { sections } = this + return { sections } + } +} +export class HRTStruct + extends JoyStructCustom({ + version: u32, + headline: Text, + job: HRTJobSpecificsStruct, + application: HRTApplicationDetailsStruct, + reward: Text, + creator: HRTCreatorDetailsStruct, + process: HRTHiringProcessStruct, + }) + implements WithJSONable { + get version(): number { + return this.getField('version').toNumber() + } + + get headline(): string { + return this.getField('headline').toString() + } + + get job(): JobSpecifics { + return this.getField('job').toJSONObj() + } + + get application(): ApplicationDetails { + return this.getField('application').toJSONObj() + } + + get reward(): string { + return this.getField('reward').toString() + } + + get creator(): CreatorDetails { + return this.getField('creator').toJSONObj() + } + + get process(): HiringProcess { + return this.getField('process').toJSONObj() + } + + toJSONObj(): GenericJoyStreamRoleSchema { + const { version, headline, job, application, reward, creator, process } = this + return { version, headline, job, application, reward, creator, process } + } +} + +// Api-related + +// Additional options that can be passed to ApiCommandBase.promptForParam in order to override +// its default behaviour, change param name, add validation etc. +export type ApiParamOptions = { + forcedName?: string + value?: { + default: ParamType + locked?: boolean + } + jsonSchema?: { + struct: Constructor + schemaValidator: ajv.ValidateFunction + } + validator?: Validator + nestedOptions?: ApiParamsOptions // For more complex params, like structs +} +export type ApiParamsOptions = { + [paramName: string]: ApiParamOptions +} + +export type ApiMethodArg = Codec +export type ApiMethodNamedArg = { + name: string + value: ApiMethodArg +} +export type ApiMethodNamedArgs = ApiMethodNamedArg[] diff --git a/cli/src/base/AccountsCommandBase.ts b/cli/src/base/AccountsCommandBase.ts index 5f676cc9e4..72b30e027f 100644 --- a/cli/src/base/AccountsCommandBase.ts +++ b/cli/src/base/AccountsCommandBase.ts @@ -1,217 +1,236 @@ -import fs from 'fs'; -import path from 'path'; -import slug from 'slug'; -import inquirer from 'inquirer'; -import ExitCodes from '../ExitCodes'; -import { CLIError } from '@oclif/errors'; -import ApiCommandBase from './ApiCommandBase'; -import { Keyring } from '@polkadot/api'; -import { formatBalance } from '@polkadot/util'; -import { NamedKeyringPair } from '../Types'; -import { DerivedBalances } from '@polkadot/api-derive/types'; -import { toFixedLength } from '../helpers/display'; - -const ACCOUNTS_DIRNAME = '/accounts'; +import fs from 'fs' +import path from 'path' +import slug from 'slug' +import inquirer from 'inquirer' +import ExitCodes from '../ExitCodes' +import { CLIError } from '@oclif/errors' +import ApiCommandBase from './ApiCommandBase' +import { Keyring } from '@polkadot/api' +import { formatBalance } from '@polkadot/util' +import { NamedKeyringPair } from '../Types' +import { DeriveBalancesAll } from '@polkadot/api-derive/types' +import { toFixedLength } from '../helpers/display' + +const ACCOUNTS_DIRNAME = 'accounts' +const SPECIAL_ACCOUNT_POSTFIX = '__DEV' /** * Abstract base class for account-related commands. * * All the accounts available in the CLI are stored in the form of json backup files inside: - * { this.config.dataDir }/{ ACCOUNTS_DIRNAME } (ie. ~/.local/share/joystream-cli/accounts on Ubuntu) - * Where: this.config.dataDir is provided by oclif and ACCOUNTS_DIRNAME is a const (see above). + * { APP_DATA_PATH }/{ ACCOUNTS_DIRNAME } (ie. ~/.local/share/joystream-cli/accounts on Ubuntu) + * Where: APP_DATA_PATH is provided by StateAwareCommandBase and ACCOUNTS_DIRNAME is a const (see above). */ export default abstract class AccountsCommandBase extends ApiCommandBase { - getAccountsDirPath(): string { - return path.join(this.config.dataDir, ACCOUNTS_DIRNAME); - } - - getAccountFilePath(account: NamedKeyringPair): string { - return path.join(this.getAccountsDirPath(), this.generateAccountFilename(account)); - } - - generateAccountFilename(account: NamedKeyringPair): string { - return `${ slug(account.meta.name, '_') }__${ account.address }.json`; - } - - private initAccountsFs(): void { - if (!fs.existsSync(this.getAccountsDirPath())) { - fs.mkdirSync(this.getAccountsDirPath()); - } - } - - saveAccount(account: NamedKeyringPair, password: string): void { - try { - fs.writeFileSync(this.getAccountFilePath(account), JSON.stringify(account.toJson(password))); - } catch(e) { - throw this.createDataWriteError(); - } - } - - fetchAccountFromJsonFile(jsonBackupFilePath: string): NamedKeyringPair { - if (!fs.existsSync(jsonBackupFilePath)) { - throw new CLIError('Input file does not exist!', { exit: ExitCodes.FileNotFound }); - } - if (path.extname(jsonBackupFilePath) !== '.json') { - throw new CLIError('Invalid input file: File extension should be .json', { exit: ExitCodes.InvalidFile }); - } - let accountJsonObj: any; - try { - accountJsonObj = require(jsonBackupFilePath); - } catch (e) { - throw new CLIError('Provided backup file is not valid or cannot be accessed', { exit: ExitCodes.InvalidFile }); - } - if (typeof accountJsonObj !== 'object' || accountJsonObj === null) { - throw new CLIError('Provided backup file is not valid', { exit: ExitCodes.InvalidFile }); - } - - // Force some default account name if none is provided in the original backup - if (!accountJsonObj.meta) accountJsonObj.meta = {}; - if (!accountJsonObj.meta.name) accountJsonObj.meta.name = 'Unnamed Account'; - - let keyring = new Keyring(); - let account:NamedKeyringPair; - try { - // Try adding and retrieving the keys in order to validate that the backup file is correct - keyring.addFromJson(accountJsonObj); - account = keyring.getPair(accountJsonObj.address); // We can be sure it's named, because we forced it before - } catch (e) { - throw new CLIError('Provided backup file is not valid', { exit: ExitCodes.InvalidFile }); - } - - return account; - } - - private fetchAccountOrNullFromFile(jsonFilePath: string): NamedKeyringPair | null { - try { - return this.fetchAccountFromJsonFile(jsonFilePath); - } catch (e) { - // Here in case of a typical CLIError we just return null (otherwise we throw) - if (!(e instanceof CLIError)) throw e; - return null; - } - } - - fetchAccounts(): NamedKeyringPair[] { - let files: string[] = []; - const accountDir = this.getAccountsDirPath(); - try { - files = fs.readdirSync(accountDir); - } - catch(e) { - } - - // We have to assert the type, because TS is not aware that we're filtering out the nulls at the end - return files - .map(fileName => { - const filePath = path.join(accountDir, fileName); - return this.fetchAccountOrNullFromFile(filePath); - }) - .filter(accObj => accObj !== null); - } - - getSelectedAccountFilename(): string { - return this.getPreservedState().selectedAccountFilename; - } - - getSelectedAccount(): NamedKeyringPair | null { - const selectedAccountFilename = this.getSelectedAccountFilename(); - - if (!selectedAccountFilename) { - return null; - } - - const account = this.fetchAccountOrNullFromFile( - path.join(this.getAccountsDirPath(), selectedAccountFilename) - ); - - return account; - } - - // Use when account usage is required in given command - async getRequiredSelectedAccount(promptIfMissing: boolean = true): Promise { - let selectedAccount: NamedKeyringPair | null = this.getSelectedAccount(); - if (!selectedAccount) { - this.warn('No default account selected! Use account:choose to set the default account!'); - if (!promptIfMissing) this.exit(ExitCodes.NoAccountSelected); - const accounts: NamedKeyringPair[] = this.fetchAccounts(); - if (!accounts.length) { - this.error('There are no accounts available!', { exit: ExitCodes.NoAccountFound }); - } - - selectedAccount = await this.promptForAccount(accounts); - } - - return selectedAccount; - } - - async setSelectedAccount(account: NamedKeyringPair): Promise { - await this.setPreservedState({ selectedAccountFilename: this.generateAccountFilename(account) }); - } - - async promptForPassword(message:string = 'Your account\'s password') { - const { password } = await inquirer.prompt([ - { name: 'password', type: 'password', message } - ]); - - return password; - } - - async requireConfirmation(message: string = 'Are you sure you want to execute this action?'): Promise { - const { confirmed } = await inquirer.prompt([ - { type: 'confirm', name: 'confirmed', message, default: false } - ]); - if (!confirmed) this.exit(ExitCodes.OK); - } - - async promptForAccount( - accounts: NamedKeyringPair[], - defaultAccount: NamedKeyringPair | null = null, - message: string = 'Select an account', - showBalances: boolean = true - ): Promise { - let balances: DerivedBalances[]; - if (showBalances) { - balances = await this.getApi().getAccountsBalancesInfo(accounts.map(acc => acc.address)); - } - const longestAccNameLength: number = accounts.reduce((prev, curr) => Math.max(curr.meta.name.length, prev), 0); - const accNameColLength: number = Math.min(longestAccNameLength + 1, 20); - const { chosenAccountFilename } = await inquirer.prompt([{ - name: 'chosenAccountFilename', - message, - type: 'list', - choices: accounts.map((account: NamedKeyringPair, i) => ({ - name: ( - `${ toFixedLength(account.meta.name, accNameColLength) } | `+ - `${ account.address } | ` + - ((showBalances || '') && ( - `${ formatBalance(balances[i].availableBalance) } / `+ - `${ formatBalance(balances[i].votingBalance) }` - )) - ), - value: this.generateAccountFilename(account), - short: `${ account.meta.name } (${ account.address })` - })), - default: defaultAccount && this.generateAccountFilename(defaultAccount) - }]); - - return accounts.find(acc => this.generateAccountFilename(acc) === chosenAccountFilename); - } - - async requestAccountDecoding(account: NamedKeyringPair): Promise { - const password: string = await this.promptForPassword(); - try { - account.decodePkcs8(password); - } catch (e) { - this.error('Invalid password!', { exit: ExitCodes.InvalidInput }); - } - } - - async init() { - await super.init(); - try { - this.initAccountsFs(); - } catch (e) { - throw this.createDataDirInitError(); - } - } + getAccountsDirPath(): string { + return path.join(this.getAppDataPath(), ACCOUNTS_DIRNAME) + } + + getAccountFilePath(account: NamedKeyringPair, isSpecial = false): string { + return path.join(this.getAccountsDirPath(), this.generateAccountFilename(account, isSpecial)) + } + + generateAccountFilename(account: NamedKeyringPair, isSpecial = false): string { + return `${slug(account.meta.name, '_')}__${account.address}${isSpecial ? SPECIAL_ACCOUNT_POSTFIX : ''}.json` + } + + private initAccountsFs(): void { + if (!fs.existsSync(this.getAccountsDirPath())) { + fs.mkdirSync(this.getAccountsDirPath()) + } + } + + saveAccount(account: NamedKeyringPair, password: string, isSpecial = false): void { + try { + const destPath = this.getAccountFilePath(account, isSpecial) + fs.writeFileSync(destPath, JSON.stringify(account.toJson(password))) + } catch (e) { + throw this.createDataWriteError() + } + } + + // Add dev "Alice" and "Bob" accounts + initSpecialAccounts() { + const keyring = new Keyring({ type: 'sr25519' }) + keyring.addFromUri('//Alice', { name: 'Alice' }) + keyring.addFromUri('//Bob', { name: 'Bob' }) + keyring + .getPairs() + .forEach((pair) => this.saveAccount({ ...pair, meta: { name: pair.meta.name as string } }, '', true)) + } + + fetchAccountFromJsonFile(jsonBackupFilePath: string): NamedKeyringPair { + if (!fs.existsSync(jsonBackupFilePath)) { + throw new CLIError('Input file does not exist!', { exit: ExitCodes.FileNotFound }) + } + if (path.extname(jsonBackupFilePath) !== '.json') { + throw new CLIError('Invalid input file: File extension should be .json', { exit: ExitCodes.InvalidFile }) + } + let accountJsonObj: any + try { + accountJsonObj = require(jsonBackupFilePath) + } catch (e) { + throw new CLIError('Provided backup file is not valid or cannot be accessed', { exit: ExitCodes.InvalidFile }) + } + if (typeof accountJsonObj !== 'object' || accountJsonObj === null) { + throw new CLIError('Provided backup file is not valid', { exit: ExitCodes.InvalidFile }) + } + + // Force some default account name if none is provided in the original backup + if (!accountJsonObj.meta) accountJsonObj.meta = {} + if (!accountJsonObj.meta.name) accountJsonObj.meta.name = 'Unnamed Account' + + const keyring = new Keyring() + let account: NamedKeyringPair + try { + // Try adding and retrieving the keys in order to validate that the backup file is correct + keyring.addFromJson(accountJsonObj) + account = keyring.getPair(accountJsonObj.address) as NamedKeyringPair // We can be sure it's named, because we forced it before + } catch (e) { + throw new CLIError('Provided backup file is not valid', { exit: ExitCodes.InvalidFile }) + } + + return account + } + + private fetchAccountOrNullFromFile(jsonFilePath: string): NamedKeyringPair | null { + try { + return this.fetchAccountFromJsonFile(jsonFilePath) + } catch (e) { + // Here in case of a typical CLIError we just return null (otherwise we throw) + if (!(e instanceof CLIError)) throw e + return null + } + } + + fetchAccounts(includeSpecial = false): NamedKeyringPair[] { + let files: string[] = [] + const accountDir = this.getAccountsDirPath() + try { + files = fs.readdirSync(accountDir) + } catch (e) { + // Do nothing + } + + // We have to assert the type, because TS is not aware that we're filtering out the nulls at the end + return files + .map((fileName) => { + const filePath = path.join(accountDir, fileName) + if (!includeSpecial && filePath.includes(SPECIAL_ACCOUNT_POSTFIX + '.')) return null + return this.fetchAccountOrNullFromFile(filePath) + }) + .filter((accObj) => accObj !== null) as NamedKeyringPair[] + } + + getSelectedAccountFilename(): string { + return this.getPreservedState().selectedAccountFilename + } + + getSelectedAccount(): NamedKeyringPair | null { + const selectedAccountFilename = this.getSelectedAccountFilename() + + if (!selectedAccountFilename) { + return null + } + + const account = this.fetchAccountOrNullFromFile(path.join(this.getAccountsDirPath(), selectedAccountFilename)) + + return account + } + + // Use when account usage is required in given command + async getRequiredSelectedAccount(promptIfMissing = true): Promise { + let selectedAccount: NamedKeyringPair | null = this.getSelectedAccount() + if (!selectedAccount) { + if (!promptIfMissing) { + this.error('No default account selected! Use account:choose to set the default account.', { + exit: ExitCodes.NoAccountSelected, + }) + } + + const accounts: NamedKeyringPair[] = this.fetchAccounts() + if (!accounts.length) { + this.error('No accounts available! Use account:import in order to import accounts into the CLI.', { + exit: ExitCodes.NoAccountFound, + }) + } + + this.warn('No default account selected!') + selectedAccount = await this.promptForAccount(accounts) + await this.setSelectedAccount(selectedAccount) + } + + return selectedAccount + } + + async setSelectedAccount(account: NamedKeyringPair): Promise { + const accountFilename = fs.existsSync(this.getAccountFilePath(account, true)) + ? this.generateAccountFilename(account, true) + : this.generateAccountFilename(account) + + await this.setPreservedState({ selectedAccountFilename: accountFilename }) + } + + async promptForPassword(message = "Your account's password") { + const { password } = await inquirer.prompt([{ name: 'password', type: 'password', message }]) + + return password + } + + async requireConfirmation(message = 'Are you sure you want to execute this action?'): Promise { + const { confirmed } = await inquirer.prompt([{ type: 'confirm', name: 'confirmed', message, default: false }]) + if (!confirmed) this.exit(ExitCodes.OK) + } + + async promptForAccount( + accounts: NamedKeyringPair[], + defaultAccount: NamedKeyringPair | null = null, + message = 'Select an account', + showBalances = true + ): Promise { + let balances: DeriveBalancesAll[] + if (showBalances) { + balances = await this.getApi().getAccountsBalancesInfo(accounts.map((acc) => acc.address)) + } + const longestAccNameLength: number = accounts.reduce((prev, curr) => Math.max(curr.meta.name.length, prev), 0) + const accNameColLength: number = Math.min(longestAccNameLength + 1, 20) + const { chosenAccountFilename } = await inquirer.prompt([ + { + name: 'chosenAccountFilename', + message, + type: 'list', + choices: accounts.map((account: NamedKeyringPair, i) => ({ + name: + `${toFixedLength(account.meta.name, accNameColLength)} | ` + + `${account.address} | ` + + ((showBalances || '') && + `${formatBalance(balances[i].availableBalance)} / ` + `${formatBalance(balances[i].votingBalance)}`), + value: this.generateAccountFilename(account), + short: `${account.meta.name} (${account.address})`, + })), + default: defaultAccount && this.generateAccountFilename(defaultAccount), + }, + ]) + + return accounts.find((acc) => this.generateAccountFilename(acc) === chosenAccountFilename) as NamedKeyringPair + } + + async requestAccountDecoding(account: NamedKeyringPair): Promise { + const password: string = await this.promptForPassword() + try { + account.decodePkcs8(password) + } catch (e) { + this.error('Invalid password!', { exit: ExitCodes.InvalidInput }) + } + } + + async init() { + await super.init() + try { + this.initAccountsFs() + this.initSpecialAccounts() + } catch (e) { + throw this.createDataDirInitError() + } + } } diff --git a/cli/src/base/ApiCommandBase.ts b/cli/src/base/ApiCommandBase.ts index 017810b9af..5333369d60 100644 --- a/cli/src/base/ApiCommandBase.ts +++ b/cli/src/base/ApiCommandBase.ts @@ -1,28 +1,477 @@ -import ExitCodes from '../ExitCodes'; -import { CLIError } from '@oclif/errors'; -import StateAwareCommandBase from './StateAwareCommandBase'; -import Api from '../Api'; -import { ApiPromise } from '@polkadot/api' +import ExitCodes from '../ExitCodes' +import { CLIError } from '@oclif/errors' +import StateAwareCommandBase from './StateAwareCommandBase' +import Api from '../Api' +import { getTypeDef, Option, Tuple, Bytes } from '@polkadot/types' +import { Registry, Codec, CodecArg, TypeDef, TypeDefInfo, Constructor } from '@polkadot/types/types' + +import { Vec, Struct, Enum } from '@polkadot/types/codec' +import { ApiPromise, WsProvider } from '@polkadot/api' +import { KeyringPair } from '@polkadot/keyring/types' +import chalk from 'chalk' +import { InterfaceTypes } from '@polkadot/types/types/registry' +import ajv from 'ajv' +import { ApiMethodArg, ApiMethodNamedArgs, ApiParamsOptions, ApiParamOptions } from '../Types' +import { createParamOptions } from '../helpers/promptOptions' + +class ExtrinsicFailedError extends Error {} /** * Abstract base class for commands that require access to the API. */ export default abstract class ApiCommandBase extends StateAwareCommandBase { - private api: Api | null = null; + private api: Api | null = null + forceSkipApiUriPrompt = false + + getApi(): Api { + if (!this.api) throw new CLIError('Tried to get API before initialization.', { exit: ExitCodes.ApiError }) + return this.api + } + + // Get original api for lower-level api calls + getOriginalApi(): ApiPromise { + return this.getApi().getOriginalApi() + } + + getTypesRegistry(): Registry { + return this.getOriginalApi().registry + } + + createType(typeName: K, value?: unknown): InterfaceTypes[K] { + return this.getOriginalApi().createType(typeName, value) + } + + async init() { + await super.init() + let apiUri: string = this.getPreservedState().apiUri + if (!apiUri) { + this.warn("You haven't provided a node/endpoint for the CLI to connect to yet!") + apiUri = await this.promptForApiUri() + } + this.api = await Api.create(apiUri) + } + + async promptForApiUri(): Promise { + let selectedNodeUri = await this.simplePrompt({ + type: 'list', + message: 'Choose a node/endpoint:', + choices: [ + { + name: 'Local node (ws://localhost:9944)', + value: 'ws://localhost:9944', + }, + { + name: 'Current Testnet official Joystream node (wss://rome-rpc-endpoint.joystream.org:9944/)', + value: 'wss://rome-rpc-endpoint.joystream.org:9944/', + }, + { + name: 'Custom endpoint', + value: '', + }, + ], + }) + + if (!selectedNodeUri) { + do { + selectedNodeUri = await this.simplePrompt({ + type: 'input', + message: 'Provide a WS endpoint uri', + }) + if (!this.isApiUriValid(selectedNodeUri)) { + this.warn('Provided uri seems incorrect! Please try again...') + } + } while (!this.isApiUriValid(selectedNodeUri)) + } + + await this.setPreservedState({ apiUri: selectedNodeUri }) + + return selectedNodeUri + } + + isApiUriValid(uri: string) { + try { + // eslint-disable-next-line no-new + new WsProvider(uri) + } catch (e) { + return false + } + return true + } + + // This is needed to correctly handle some structs, enums etc. + // Where the main typeDef doesn't provide enough information + protected getRawTypeDef(type: keyof InterfaceTypes) { + const instance = this.createType(type) + return getTypeDef(instance.toRawType()) + } + + // Prettifier for type names which are actually JSON strings + protected prettifyJsonTypeName(json: string) { + const obj = JSON.parse(json) as { [key: string]: string } + return ( + '{\n' + + Object.keys(obj) + .map((prop) => ` ${prop}${chalk.white(':' + obj[prop])}`) + .join('\n') + + '\n}' + ) + } + + // Get param name based on TypeDef object + protected paramName(typeDef: TypeDef) { + return chalk.green( + typeDef.displayName || + typeDef.name || + (typeDef.type.startsWith('{') ? this.prettifyJsonTypeName(typeDef.type) : typeDef.type) + ) + } + + // Prompt for simple/plain value (provided as string) of given type + async promptForSimple(typeDef: TypeDef, paramOptions?: ApiParamOptions): Promise { + // If no default provided - get default value resulting from providing empty string + const defaultValueString = + paramOptions?.value?.default?.toString() || this.createType(typeDef.type as any, '').toString() + const providedValue = await this.simplePrompt({ + message: `Provide value for ${this.paramName(typeDef)}`, + type: 'input', + // We want to avoid showing default value like '0x', because it falsely suggests + // that user needs to provide the value as hex + default: (defaultValueString === '0x' ? '' : defaultValueString) || undefined, + validate: paramOptions?.validator, + }) + return this.createType(typeDef.type as any, providedValue) + } + + // Prompt for Option value + async promptForOption(typeDef: TypeDef, paramOptions?: ApiParamOptions): Promise> { + const subtype = typeDef.sub as TypeDef // We assume that Opion always has a single subtype + const defaultValue = paramOptions?.value?.default as Option | undefined + const confirmed = await this.simplePrompt({ + message: `Do you want to provide the optional ${this.paramName(typeDef)} parameter?`, + type: 'confirm', + default: defaultValue ? defaultValue.isSome : false, + }) + + if (confirmed) { + this.openIndentGroup() + const value = await this.promptForParam( + subtype.type, + createParamOptions(subtype.name, defaultValue?.unwrapOr(undefined)) + ) + this.closeIndentGroup() + return this.createType(`Option<${subtype.type}>` as any, value) + } + + return this.createType(`Option<${subtype.type}>` as any, null) + } + + // Prompt for Tuple + // TODO: Not well tested yet + async promptForTuple(typeDef: TypeDef, paramOptions?: ApiParamOptions): Promise { + console.log(chalk.grey(`Providing values for ${this.paramName(typeDef)} tuple:`)) + + this.openIndentGroup() + const result: ApiMethodArg[] = [] + // We assume that for Tuple there is always at least 1 subtype (pethaps it's even always an array?) + const subtypes: TypeDef[] = Array.isArray(typeDef.sub) ? typeDef.sub! : [typeDef.sub!] + const defaultValue = paramOptions?.value?.default as Tuple | undefined + + for (const [index, subtype] of Object.entries(subtypes)) { + const entryDefaultVal = defaultValue && defaultValue[parseInt(index)] + const inputParam = await this.promptForParam(subtype.type, createParamOptions(subtype.name, entryDefaultVal)) + result.push(inputParam) + } + this.closeIndentGroup() + + return new Tuple(this.getTypesRegistry(), subtypes.map((subtype) => subtype.type) as any, result) + } + + // Prompt for Struct + async promptForStruct(typeDef: TypeDef, paramOptions?: ApiParamOptions): Promise { + console.log(chalk.grey(`Providing values for ${this.paramName(typeDef)} struct:`)) + + this.openIndentGroup() + const structType = typeDef.type + const rawTypeDef = this.getRawTypeDef(structType as keyof InterfaceTypes) + // We assume struct typeDef always has array of typeDefs inside ".sub" + const structSubtypes = rawTypeDef.sub as TypeDef[] + const structDefault = paramOptions?.value?.default as Struct | undefined + + const structValues: { [key: string]: ApiMethodArg } = {} + for (const subtype of structSubtypes) { + const fieldOptions = paramOptions?.nestedOptions && paramOptions.nestedOptions[subtype.name!] + const fieldDefaultValue = fieldOptions?.value?.default || (structDefault && structDefault.get(subtype.name!)) + const finalFieldOptions: ApiParamOptions = { + forcedName: subtype.name, + ...fieldOptions, // "forcedName" above should be overriden with "fieldOptions.forcedName" if available + value: fieldDefaultValue && { ...fieldOptions?.value, default: fieldDefaultValue }, + } + structValues[subtype.name!] = await this.promptForParam(subtype.type, finalFieldOptions) + } + this.closeIndentGroup() + + return this.createType(structType as any, structValues) + } - getApi(): Api { - if (!this.api) throw new CLIError('Tried to get API before initialization.', { exit: ExitCodes.ApiError }); - return this.api; + // Prompt for Vec + async promptForVec(typeDef: TypeDef, paramOptions?: ApiParamOptions): Promise> { + console.log(chalk.grey(`Providing values for ${this.paramName(typeDef)} vector:`)) + + this.openIndentGroup() + // We assume Vec always has one TypeDef as ".sub" + const subtype = typeDef.sub as TypeDef + const defaultValue = paramOptions?.value?.default as Vec | undefined + const entries: Codec[] = [] + let addAnother = false + do { + addAnother = await this.simplePrompt({ + message: `Do you want to add another entry to ${this.paramName(typeDef)} vector (currently: ${ + entries.length + })?`, + type: 'confirm', + default: defaultValue ? entries.length < defaultValue.length : false, + }) + const defaultEntryValue = defaultValue && defaultValue[entries.length] + if (addAnother) { + entries.push(await this.promptForParam(subtype.type, createParamOptions(subtype.name, defaultEntryValue))) + } + } while (addAnother) + this.closeIndentGroup() + + return this.createType(`Vec<${subtype.type}>` as any, entries) + } + + // Prompt for Enum + async promptForEnum(typeDef: TypeDef, paramOptions?: ApiParamOptions): Promise { + const enumType = typeDef.type as keyof InterfaceTypes + const rawTypeDef = this.getRawTypeDef(enumType) + // We assume enum always has array on TypeDefs inside ".sub" + const enumSubtypes = rawTypeDef.sub as TypeDef[] + const defaultValue = paramOptions?.value?.default as Enum | undefined + + const enumSubtypeName = await this.simplePrompt({ + message: `Choose value for ${this.paramName(typeDef)}:`, + type: 'list', + choices: enumSubtypes.map((subtype) => ({ + name: subtype.name, + value: subtype.name, + })), + default: defaultValue?.type, + }) + + const enumSubtype = enumSubtypes.find((st) => st.name === enumSubtypeName)! + + if (enumSubtype.type !== 'Null') { + const subtypeOptions = createParamOptions(enumSubtype.name, defaultValue?.value) + return this.createType(enumType as any, { + [enumSubtype.name!]: await this.promptForParam(enumSubtype.type, subtypeOptions), + }) } - // Get original api for lower-level api calls - getOriginalApi(): ApiPromise { - return this.getApi().getOriginalApi(); + return this.createType(enumType as any, enumSubtype.name) + } + + // Prompt for param based on "paramType" string (ie. Option) + // TODO: This may not yet work for all possible types + async promptForParam( + paramType: string, + paramOptions?: ApiParamOptions // TODO: This is not fully implemented for all types yet + ): Promise { + const typeDef = getTypeDef(paramType) + const rawTypeDef = this.getRawTypeDef(paramType as keyof InterfaceTypes) + + if (paramOptions?.forcedName) { + typeDef.name = paramOptions.forcedName } - async init() { - await super.init(); - const apiUri: string = this.getPreservedState().apiUri; - this.api = await Api.create(apiUri); + if (paramOptions?.value?.locked) { + return paramOptions.value.default } + + if (paramOptions?.jsonSchema) { + const { struct, schemaValidator } = paramOptions.jsonSchema + return await this.promptForJsonBytes( + struct, + typeDef.name, + paramOptions.value?.default as Bytes | undefined, + schemaValidator + ) + } + + if (rawTypeDef.info === TypeDefInfo.Option) { + return await this.promptForOption(typeDef, paramOptions) + } else if (rawTypeDef.info === TypeDefInfo.Tuple) { + return await this.promptForTuple(typeDef, paramOptions) + } else if (rawTypeDef.info === TypeDefInfo.Struct) { + return await this.promptForStruct(typeDef, paramOptions) + } else if (rawTypeDef.info === TypeDefInfo.Enum) { + return await this.promptForEnum(typeDef, paramOptions) + } else if (rawTypeDef.info === TypeDefInfo.Vec) { + return await this.promptForVec(typeDef, paramOptions) + } else { + return await this.promptForSimple(typeDef, paramOptions) + } + } + + async promptForJsonBytes( + jsonStruct: Constructor, + argName?: string, + defaultValue?: Bytes, + schemaValidator?: ajv.ValidateFunction + ) { + const JsonStructObject = jsonStruct + const rawType = new JsonStructObject(this.getTypesRegistry()).toRawType() + const typeDef = getTypeDef(rawType) + + const defaultStruct = + defaultValue && + new JsonStructObject( + this.getTypesRegistry(), + JSON.parse(Buffer.from(defaultValue.toHex().replace('0x', ''), 'hex').toString()) + ) + + if (argName) { + typeDef.name = argName + } + + let isValid = true + let jsonText: string + do { + const structVal = await this.promptForStruct(typeDef, createParamOptions(typeDef.name, defaultStruct)) + jsonText = JSON.stringify(structVal.toJSON()) + if (schemaValidator) { + isValid = Boolean(schemaValidator(JSON.parse(jsonText))) + if (!isValid) { + this.log('\n') + this.warn( + 'Schema validation failed with:\n' + + schemaValidator.errors?.map((e) => chalk.red(`${chalk.bold(e.dataPath)}: ${e.message}`)).join('\n') + + '\nTry again...' + ) + this.log('\n') + } + } + } while (!isValid) + + return this.createType('Bytes', '0x' + Buffer.from(jsonText, 'ascii').toString('hex')) + } + + async promptForExtrinsicParams( + module: string, + method: string, + paramsOptions?: ApiParamsOptions + ): Promise { + const extrinsicMethod = this.getOriginalApi().tx[module][method] + const values: ApiMethodArg[] = [] + + this.openIndentGroup() + for (const arg of extrinsicMethod.meta.args.toArray()) { + const argName = arg.name.toString() + const argType = arg.type.toString() + let argOptions = paramsOptions && paramsOptions[argName] + if (!argOptions?.forcedName) { + argOptions = { ...argOptions, forcedName: argName } + } + values.push(await this.promptForParam(argType, argOptions)) + } + this.closeIndentGroup() + + return values + } + + sendExtrinsic(account: KeyringPair, module: string, method: string, params: CodecArg[]) { + return new Promise((resolve, reject) => { + const extrinsicMethod = this.getOriginalApi().tx[module][method] + let unsubscribe: () => void + extrinsicMethod(...params) + .signAndSend(account, {}, (result) => { + // Implementation loosely based on /pioneer/packages/react-signer/src/Modal.tsx + if (!result || !result.status) { + return + } + + if (result.status.isInBlock) { + unsubscribe() + result.events + .filter(({ event: { section } }): boolean => section === 'system') + .forEach(({ event: { method } }): void => { + if (method === 'ExtrinsicFailed') { + reject(new ExtrinsicFailedError('Extrinsic execution error!')) + } else if (method === 'ExtrinsicSuccess') { + resolve() + } + }) + } else if (result.isError) { + reject(new ExtrinsicFailedError('Extrinsic execution error!')) + } + }) + .then((unsubFunc) => (unsubscribe = unsubFunc)) + .catch((e) => + reject(new ExtrinsicFailedError(`Cannot send the extrinsic: ${e.message ? e.message : JSON.stringify(e)}`)) + ) + }) + } + + async sendAndFollowExtrinsic( + account: KeyringPair, + module: string, + method: string, + params: CodecArg[], + warnOnly = false // If specified - only warning will be displayed (instead of error beeing thrown) + ) { + try { + this.log(chalk.white(`\nSending ${module}.${method} extrinsic...`)) + await this.sendExtrinsic(account, module, method, params) + this.log(chalk.green(`Extrinsic successful!`)) + } catch (e) { + if (e instanceof ExtrinsicFailedError && warnOnly) { + this.warn(`${module}.${method} extrinsic failed! ${e.message}`) + } else if (e instanceof ExtrinsicFailedError) { + throw new CLIError(`${module}.${method} extrinsic failed! ${e.message}`, { exit: ExitCodes.ApiError }) + } else { + throw e + } + } + } + + async buildAndSendExtrinsic( + account: KeyringPair, + module: string, + method: string, + paramsOptions: ApiParamsOptions, + warnOnly = false // If specified - only warning will be displayed (instead of error beeing thrown) + ): Promise { + const params = await this.promptForExtrinsicParams(module, method, paramsOptions) + await this.sendAndFollowExtrinsic(account, module, method, params, warnOnly) + + return params + } + + extrinsicArgsFromDraft(module: string, method: string, draftFilePath: string): ApiMethodNamedArgs { + let draftJSONObj + const parsedArgs: ApiMethodNamedArgs = [] + const extrinsicMethod = this.getOriginalApi().tx[module][method] + try { + // eslint-disable-next-line @typescript-eslint/no-var-requires + draftJSONObj = require(draftFilePath) + } catch (e) { + throw new CLIError(`Could not load draft from: ${draftFilePath}`, { exit: ExitCodes.InvalidFile }) + } + if (!draftJSONObj || !Array.isArray(draftJSONObj) || draftJSONObj.length !== extrinsicMethod.meta.args.length) { + throw new CLIError(`The draft file at ${draftFilePath} is invalid!`, { exit: ExitCodes.InvalidFile }) + } + for (const [index, arg] of Object.entries(extrinsicMethod.meta.args.toArray())) { + const argName = arg.name.toString() + const argType = arg.type.toString() + try { + parsedArgs.push({ name: argName, value: this.createType(argType as any, draftJSONObj[parseInt(index)]) }) + } catch (e) { + throw new CLIError(`Couldn't parse ${argName} value from draft at ${draftFilePath}!`, { + exit: ExitCodes.InvalidFile, + }) + } + } + + return parsedArgs + } } diff --git a/cli/src/base/DefaultCommandBase.ts b/cli/src/base/DefaultCommandBase.ts index 24985e1446..36dfab4b7c 100644 --- a/cli/src/base/DefaultCommandBase.ts +++ b/cli/src/base/DefaultCommandBase.ts @@ -1,15 +1,106 @@ -import ExitCodes from '../ExitCodes'; -import Command from '@oclif/command'; +import ExitCodes from '../ExitCodes' +import Command from '@oclif/command' +import inquirer, { DistinctQuestion } from 'inquirer' +import chalk from 'chalk' /** * Abstract base class for pretty much all commands * (prevents console.log from hanging the process and unifies the default exit code) */ export default abstract class DefaultCommandBase extends Command { - async finally(err: any) { - // called after run and catch regardless of whether or not the command errored - // We'll force exit here, in case there is no error, to prevent console.log from hanging the process - if (!err) this.exit(ExitCodes.OK); - super.finally(err); + protected indentGroupsOpened = 0 + protected jsonPrettyIdent = '' + + openIndentGroup() { + console.group() + ++this.indentGroupsOpened + } + + closeIndentGroup() { + console.groupEnd() + --this.indentGroupsOpened + } + + async simplePrompt(question: DistinctQuestion) { + const { result } = await inquirer.prompt([ + { + ...question, + name: 'result', + // prefix = 2 spaces for each group - 1 (because 1 is always added by default) + prefix: Array.from(new Array(this.indentGroupsOpened)) + .map(() => ' ') + .join('') + .slice(1), + }, + ]) + + return result + } + + private jsonPrettyIndented(line: string) { + return `${this.jsonPrettyIdent}${line}` + } + + private jsonPrettyOpen(char: '{' | '[') { + this.jsonPrettyIdent += ' ' + return chalk.gray(char) + '\n' + } + + private jsonPrettyClose(char: '}' | ']') { + this.jsonPrettyIdent = this.jsonPrettyIdent.slice(0, -4) + return this.jsonPrettyIndented(chalk.gray(char)) + } + + private jsonPrettyKeyVal(key: string, val: any): string { + return this.jsonPrettyIndented(chalk.white(`${key}: ${this.jsonPrettyAny(val)}`)) + } + + private jsonPrettyObj(obj: { [key: string]: any }): string { + return ( + this.jsonPrettyOpen('{') + + Object.keys(obj) + .map((k) => this.jsonPrettyKeyVal(k, obj[k])) + .join(',\n') + + '\n' + + this.jsonPrettyClose('}') + ) + } + + private jsonPrettyArr(arr: any[]): string { + return ( + this.jsonPrettyOpen('[') + + arr.map((v) => this.jsonPrettyIndented(this.jsonPrettyAny(v))).join(',\n') + + '\n' + + this.jsonPrettyClose(']') + ) + } + + private jsonPrettyAny(val: any): string { + if (Array.isArray(val)) { + return this.jsonPrettyArr(val) + } else if (typeof val === 'object' && val !== null) { + return this.jsonPrettyObj(val) + } else if (typeof val === 'string') { + return chalk.green(`"${val}"`) } + + // Number, boolean etc. + return chalk.cyan(val) + } + + jsonPrettyPrint(json: string) { + try { + const parsed = JSON.parse(json) + console.log(this.jsonPrettyAny(parsed)) + } catch (e) { + console.log(this.jsonPrettyAny(json)) + } + } + + async finally(err: any) { + // called after run and catch regardless of whether or not the command errored + // We'll force exit here, in case there is no error, to prevent console.log from hanging the process + if (!err) this.exit(ExitCodes.OK) + super.finally(err) + } } diff --git a/cli/src/base/StateAwareCommandBase.ts b/cli/src/base/StateAwareCommandBase.ts index 5c5f924994..b8d18729cd 100644 --- a/cli/src/base/StateAwareCommandBase.ts +++ b/cli/src/base/StateAwareCommandBase.ts @@ -1,115 +1,131 @@ -import fs from 'fs'; -import path from 'path'; -import ExitCodes from '../ExitCodes'; -import { CLIError } from '@oclif/errors'; -import { DEFAULT_API_URI } from '../Api'; -import lockFile from 'proper-lockfile'; -import DefaultCommandBase from './DefaultCommandBase'; +import fs from 'fs' +import path from 'path' +import ExitCodes from '../ExitCodes' +import { CLIError } from '@oclif/errors' +import lockFile from 'proper-lockfile' +import DefaultCommandBase from './DefaultCommandBase' +import os from 'os' +import _ from 'lodash' // Type for the state object (which is preserved as json in the state file) type StateObject = { - selectedAccountFilename: string, - apiUri: string -}; + selectedAccountFilename: string + apiUri: string +} // State object default values const DEFAULT_STATE: StateObject = { - selectedAccountFilename: '', - apiUri: DEFAULT_API_URI + selectedAccountFilename: '', + apiUri: '', } -// State file path (relative to this.config.dataDir) -const STATE_FILE = '/state.json'; +// State file path (relative to getAppDataPath()) +const STATE_FILE = '/state.json' // Possible data directory access errors enum DataDirErrorType { - Init = 0, - Read = 1, - Write = 2, + Init = 0, + Read = 1, + Write = 2, } /** * Abstract base class for commands that need to work with the preserved state. * - * The preserved state is kept in a json file inside the data directory (this.config.dataDir, supplied by oclif). + * The preserved state is kept in a json file inside the data directory. * The state object contains all the information that needs to be preserved across sessions, ie. the default account * choosen by the user after executing account:choose command etc. (see "StateObject" type above). */ export default abstract class StateAwareCommandBase extends DefaultCommandBase { - getStateFilePath(): string { - return path.join(this.config.dataDir, STATE_FILE); + getAppDataPath(): string { + const systemAppDataPath = + process.env.APPDATA || + (process.platform === 'darwin' + ? path.join(os.homedir(), '/Library/Application Support') + : path.join(os.homedir(), '/.local/share')) + // eslint-disable-next-line @typescript-eslint/no-var-requires + const packageJson: { name?: string } = require('../../package.json') + if (!packageJson || !packageJson.name) { + throw new CLIError('Cannot get package name from package.json!') } + return path.join(systemAppDataPath, _.kebabCase(packageJson.name)) + } - private createDataDirFsError(errorType: DataDirErrorType, specificPath: string = '') { - const actionStrs: { [x in DataDirErrorType]: string } = { - [DataDirErrorType.Init]: 'initialize', - [DataDirErrorType.Read]: 'read from', - [DataDirErrorType.Write]: 'write into' - }; - - const errorMsg = - `Unexpected error while trying to ${ actionStrs[errorType] } the data directory.`+ - `(${ path.join(this.config.dataDir, specificPath) })! Permissions issue?`; + getStateFilePath(): string { + return path.join(this.getAppDataPath(), STATE_FILE) + } - return new CLIError(errorMsg, { exit: ExitCodes.FsOperationFailed }); + private createDataDirFsError(errorType: DataDirErrorType, specificPath = '') { + const actionStrs: { [x in DataDirErrorType]: string } = { + [DataDirErrorType.Init]: 'initialize', + [DataDirErrorType.Read]: 'read from', + [DataDirErrorType.Write]: 'write into', } - createDataReadError(specificPath: string = ''): CLIError { - return this.createDataDirFsError(DataDirErrorType.Read, specificPath); - } + const errorMsg = + `Unexpected error while trying to ${actionStrs[errorType]} the data directory.` + + `(${path.join(this.getAppDataPath(), specificPath)})! Permissions issue?` - createDataWriteError(specificPath: string = ''): CLIError { - return this.createDataDirFsError(DataDirErrorType.Write, specificPath); - } + return new CLIError(errorMsg, { exit: ExitCodes.FsOperationFailed }) + } - createDataDirInitError(specificPath: string = ''): CLIError { - return this.createDataDirFsError(DataDirErrorType.Init, specificPath); - } + createDataReadError(specificPath = ''): CLIError { + return this.createDataDirFsError(DataDirErrorType.Read, specificPath) + } + + createDataWriteError(specificPath = ''): CLIError { + return this.createDataDirFsError(DataDirErrorType.Write, specificPath) + } - private initStateFs(): void { - if (!fs.existsSync(this.config.dataDir)) { - fs.mkdirSync(this.config.dataDir); - } - if (!fs.existsSync(this.getStateFilePath())) { - fs.writeFileSync(this.getStateFilePath(), JSON.stringify(DEFAULT_STATE)); - } + createDataDirInitError(specificPath = ''): CLIError { + return this.createDataDirFsError(DataDirErrorType.Init, specificPath) + } + + private initStateFs(): void { + if (!fs.existsSync(this.getAppDataPath())) { + fs.mkdirSync(this.getAppDataPath()) + } + if (!fs.existsSync(this.getStateFilePath())) { + fs.writeFileSync(this.getStateFilePath(), JSON.stringify(DEFAULT_STATE)) } + } - getPreservedState(): StateObject { - let preservedState: StateObject; - try { - preservedState = require(this.getStateFilePath()); - } catch(e) { - throw this.createDataReadError(); - } - // The state preserved in a file may be missing some required values ie. - // if the user previously used the older version of the software. - // That's why we combine it with default state before returing. - return { ...DEFAULT_STATE, ...preservedState }; + getPreservedState(): StateObject { + let preservedState: StateObject + try { + // Use readFileSync instead of "require" in order to always get a "fresh" state + preservedState = JSON.parse(fs.readFileSync(this.getStateFilePath()).toString()) as StateObject + } catch (e) { + throw this.createDataReadError() } + // The state preserved in a file may be missing some required values ie. + // if the user previously used the older version of the software. + // That's why we combine it with default state before returing. + return { ...DEFAULT_STATE, ...preservedState } + } - // Modifies preserved state. Uses file lock in order to avoid updating an older state. - // (which could potentialy change between read and write operation) - async setPreservedState(modifiedState: Partial): Promise { - const stateFilePath = this.getStateFilePath(); - const unlock = await lockFile.lock(stateFilePath); - let oldState: StateObject = this.getPreservedState(); - let newState: StateObject = { ...oldState, ...modifiedState }; - try { - fs.writeFileSync(stateFilePath, JSON.stringify(newState)); - } catch(e) { - await unlock(); - throw this.createDataWriteError(); - } - await unlock(); + // Modifies preserved state. Uses file lock in order to avoid updating an older state. + // (which could potentialy change between read and write operation) + async setPreservedState(modifiedState: Partial): Promise { + const stateFilePath = this.getStateFilePath() + const unlock = await lockFile.lock(stateFilePath) + const oldState: StateObject = this.getPreservedState() + const newState: StateObject = { ...oldState, ...modifiedState } + try { + fs.writeFileSync(stateFilePath, JSON.stringify(newState)) + } catch (e) { + await unlock() + throw this.createDataWriteError() } + await unlock() + } - async init() { - await super.init(); - try { - await this.initStateFs(); - } catch (e) { - throw this.createDataDirInitError(); - } + async init() { + await super.init() + try { + await this.initStateFs() + } catch (e) { + throw this.createDataDirInitError() } + } } diff --git a/cli/src/base/WorkingGroupsCommandBase.ts b/cli/src/base/WorkingGroupsCommandBase.ts new file mode 100644 index 0000000000..4e993341f3 --- /dev/null +++ b/cli/src/base/WorkingGroupsCommandBase.ts @@ -0,0 +1,274 @@ +import ExitCodes from '../ExitCodes' +import AccountsCommandBase from './AccountsCommandBase' +import { flags } from '@oclif/command' +import { + WorkingGroups, + AvailableGroups, + NamedKeyringPair, + GroupMember, + GroupOpening, + ApiMethodArg, + ApiMethodNamedArgs, + OpeningStatus, + GroupApplication, +} from '../Types' +import { apiModuleByGroup } from '../Api' +import { CLIError } from '@oclif/errors' +import fs from 'fs' +import path from 'path' +import _ from 'lodash' +import { ApplicationStageKeys } from '@joystream/types/hiring' +import chalk from 'chalk' + +const DEFAULT_GROUP = WorkingGroups.StorageProviders +const DRAFTS_FOLDER = 'opening-drafts' + +/** + * Abstract base class for commands related to working groups + */ +export default abstract class WorkingGroupsCommandBase extends AccountsCommandBase { + group: WorkingGroups = DEFAULT_GROUP + + static flags = { + group: flags.string({ + char: 'g', + description: + 'The working group context in which the command should be executed\n' + + `Available values are: ${AvailableGroups.join(', ')}.`, + required: true, + default: DEFAULT_GROUP, + }), + } + + // Use when lead access is required in given command + async getRequiredLead(): Promise { + const selectedAccount: NamedKeyringPair = await this.getRequiredSelectedAccount() + const lead = await this.getApi().groupLead(this.group) + + if (!lead || lead.roleAccount.toString() !== selectedAccount.address) { + this.error('Lead access required for this command!', { exit: ExitCodes.AccessDenied }) + } + + return lead + } + + // Use when worker access is required in given command + async getRequiredWorker(): Promise { + const selectedAccount: NamedKeyringPair = await this.getRequiredSelectedAccount() + const groupMembers = await this.getApi().groupMembers(this.group) + const groupMembersByAccount = groupMembers.filter((m) => m.roleAccount.toString() === selectedAccount.address) + + if (!groupMembersByAccount.length) { + this.error('Worker access required for this command!', { exit: ExitCodes.AccessDenied }) + } else if (groupMembersByAccount.length === 1) { + return groupMembersByAccount[0] + } else { + return await this.promptForWorker(groupMembersByAccount) + } + } + + // Use when member controller access is required, but one of the associated roles is expected to be selected + async getRequiredWorkerByMemberController(): Promise { + const selectedAccount: NamedKeyringPair = await this.getRequiredSelectedAccount() + const memberIds = await this.getApi().getMemberIdsByControllerAccount(selectedAccount.address) + const controlledWorkers = (await this.getApi().groupMembers(this.group)).filter((groupMember) => + memberIds.some((memberId) => groupMember.memberId.eq(memberId)) + ) + + if (!controlledWorkers.length) { + this.error(`Member controller account with some associated ${this.group} group roles needs to be selected!`, { + exit: ExitCodes.AccessDenied, + }) + } else if (controlledWorkers.length === 1) { + return controlledWorkers[0] + } else { + return await this.promptForWorker(controlledWorkers) + } + } + + async promptForWorker(groupMembers: GroupMember[]): Promise { + const chosenWorkerIndex = await this.simplePrompt({ + message: 'Choose the intended worker context:', + type: 'list', + choices: groupMembers.map((groupMember, index) => ({ + name: `Worker ID ${groupMember.workerId.toString()}`, + value: index, + })), + }) + + return groupMembers[chosenWorkerIndex] + } + + async promptForApplicationsToAccept(opening: GroupOpening): Promise { + const acceptableApplications = opening.applications.filter((a) => a.stage === ApplicationStageKeys.Active) + const acceptedApplications = await this.simplePrompt({ + message: 'Select succesful applicants', + type: 'checkbox', + choices: acceptableApplications.map((a) => ({ + name: ` ${a.wgApplicationId}: ${a.member?.handle.toString()}`, + value: a.wgApplicationId, + })), + }) + + return acceptedApplications.sort() // Sort just in case, since runtime expects them to be sorted + } + + async promptForNewOpeningDraftName() { + let draftName = '' + let fileExists = false + let overrideConfirmed = false + + do { + draftName = await this.simplePrompt({ + type: 'input', + message: 'Provide the draft name', + validate: (val) => (typeof val === 'string' && val.length >= 1) || 'Draft name is required!', + }) + + fileExists = fs.existsSync(this.getOpeningDraftPath(draftName)) + if (fileExists) { + overrideConfirmed = await this.simplePrompt({ + type: 'confirm', + message: 'Such draft already exists. Do you wish to override it?', + default: false, + }) + } + } while (fileExists && !overrideConfirmed) + + return draftName + } + + async promptForOpeningDraft() { + let draftFiles: string[] = [] + try { + draftFiles = fs.readdirSync(this.getOpeingDraftsPath()) + } catch (e) { + throw this.createDataReadError(DRAFTS_FOLDER) + } + if (!draftFiles.length) { + throw new CLIError('No drafts available!', { exit: ExitCodes.FileNotFound }) + } + const draftNames = draftFiles.map((fileName) => _.startCase(fileName.replace('.json', ''))) + const selectedDraftName = await this.simplePrompt({ + message: 'Select a draft', + type: 'list', + choices: draftNames, + }) + + return selectedDraftName + } + + async getOpeningForLeadAction(id: number, requiredStatus?: OpeningStatus): Promise { + const opening = await this.getApi().groupOpening(this.group, id) + + if (!opening.type.isOfType('Worker')) { + this.error('A lead can only manage Worker openings!', { exit: ExitCodes.AccessDenied }) + } + + if (requiredStatus && opening.stage.status !== requiredStatus) { + this.error( + `The opening needs to be in "${_.startCase(requiredStatus)}" stage! ` + + `This one is: "${_.startCase(opening.stage.status)}"`, + { exit: ExitCodes.InvalidInput } + ) + } + + return opening + } + + // An alias for better code readibility in case we don't need the actual return value + validateOpeningForLeadAction = this.getOpeningForLeadAction + + async getApplicationForLeadAction(id: number, requiredStatus?: ApplicationStageKeys): Promise { + const application = await this.getApi().groupApplication(this.group, id) + const opening = await this.getApi().groupOpening(this.group, application.wgOpeningId) + + if (!opening.type.isOfType('Worker')) { + this.error('A lead can only manage Worker opening applications!', { exit: ExitCodes.AccessDenied }) + } + + if (requiredStatus && application.stage !== requiredStatus) { + this.error( + `The application needs to have "${_.startCase(requiredStatus)}" status! ` + + `This one has: "${_.startCase(application.stage)}"`, + { exit: ExitCodes.InvalidInput } + ) + } + + return application + } + + async getWorkerForLeadAction(id: number, requireStakeProfile = false) { + const groupMember = await this.getApi().groupMember(this.group, id) + const groupLead = await this.getApi().groupLead(this.group) + + if (groupLead?.workerId.eq(groupMember.workerId)) { + this.error('A lead cannot manage his own role this way!', { exit: ExitCodes.AccessDenied }) + } + + if (requireStakeProfile && !groupMember.stake) { + this.error('This worker has no associated role stake profile!', { exit: ExitCodes.InvalidInput }) + } + + return groupMember + } + + // Helper for better TS handling. + // We could also use some magic with conditional types instead, but those don't seem be very well supported yet. + async getWorkerWithStakeForLeadAction(id: number) { + return (await this.getWorkerForLeadAction(id, true)) as GroupMember & Required> + } + + loadOpeningDraftParams(draftName: string): ApiMethodNamedArgs { + const draftFilePath = this.getOpeningDraftPath(draftName) + const params = this.extrinsicArgsFromDraft(apiModuleByGroup[this.group], 'addOpening', draftFilePath) + + return params + } + + getOpeingDraftsPath() { + return path.join(this.getAppDataPath(), DRAFTS_FOLDER) + } + + getOpeningDraftPath(draftName: string) { + return path.join(this.getOpeingDraftsPath(), _.snakeCase(draftName) + '.json') + } + + saveOpeningDraft(draftName: string, params: ApiMethodArg[]) { + const paramsJson = JSON.stringify( + params.map((p) => p.toJSON()), + null, + 2 + ) + + try { + fs.writeFileSync(this.getOpeningDraftPath(draftName), paramsJson) + } catch (e) { + throw this.createDataWriteError(DRAFTS_FOLDER) + } + } + + private initOpeningDraftsDir(): void { + if (!fs.existsSync(this.getOpeingDraftsPath())) { + fs.mkdirSync(this.getOpeingDraftsPath()) + } + } + + async init() { + await super.init() + try { + this.initOpeningDraftsDir() + } catch (e) { + throw this.createDataDirInitError() + } + const { flags } = this.parse(this.constructor as typeof WorkingGroupsCommandBase) + if (!AvailableGroups.includes(flags.group as any)) { + throw new CLIError(`Invalid group! Available values are: ${AvailableGroups.join(', ')}`, { + exit: ExitCodes.InvalidInput, + }) + } + this.group = flags.group as WorkingGroups + + this.log(chalk.white('Group: ' + flags.group)) + } +} diff --git a/cli/src/commands/account/choose.ts b/cli/src/commands/account/choose.ts index d1db149ae3..9b8cdb97e6 100644 --- a/cli/src/commands/account/choose.ts +++ b/cli/src/commands/account/choose.ts @@ -1,25 +1,33 @@ -import AccountsCommandBase from '../../base/AccountsCommandBase'; -import chalk from 'chalk'; -import ExitCodes from '../../ExitCodes'; +import AccountsCommandBase from '../../base/AccountsCommandBase' +import chalk from 'chalk' +import ExitCodes from '../../ExitCodes' import { NamedKeyringPair } from '../../Types' +import { flags } from '@oclif/command' export default class AccountChoose extends AccountsCommandBase { - static description = 'Choose default account to use in the CLI'; + static description = 'Choose default account to use in the CLI' + static flags = { + showSpecial: flags.boolean({ + description: 'Whether to show special (DEV chain) accounts', + required: false, + }), + } - async run() { - const accounts: NamedKeyringPair[] = this.fetchAccounts(); - const selectedAccount: NamedKeyringPair | null = this.getSelectedAccount(); + async run() { + const { showSpecial } = this.parse(AccountChoose).flags + const accounts: NamedKeyringPair[] = this.fetchAccounts(showSpecial) + const selectedAccount: NamedKeyringPair | null = this.getSelectedAccount() - this.log(chalk.white(`Found ${ accounts.length } existing accounts...\n`)); + this.log(chalk.white(`Found ${accounts.length} existing accounts...\n`)) - if (accounts.length === 0) { - this.warn('No account to choose from. Add accont using account:import or account:create.'); - this.exit(ExitCodes.NoAccountFound); - } + if (accounts.length === 0) { + this.warn('No account to choose from. Add accont using account:import or account:create.') + this.exit(ExitCodes.NoAccountFound) + } - const choosenAccount: NamedKeyringPair = await this.promptForAccount(accounts, selectedAccount); + const choosenAccount: NamedKeyringPair = await this.promptForAccount(accounts, selectedAccount) - await this.setSelectedAccount(choosenAccount); - this.log(chalk.greenBright("\nAccount switched!")); - } + await this.setSelectedAccount(choosenAccount) + this.log(chalk.greenBright('\nAccount switched!')) } +} diff --git a/cli/src/commands/account/create.ts b/cli/src/commands/account/create.ts index eaaf4bf8a0..785f57090f 100644 --- a/cli/src/commands/account/create.ts +++ b/cli/src/commands/account/create.ts @@ -1,47 +1,47 @@ -import chalk from 'chalk'; -import ExitCodes from '../../ExitCodes'; -import AccountsCommandBase from '../../base/AccountsCommandBase'; -import { Keyring } from '@polkadot/api'; +import chalk from 'chalk' +import ExitCodes from '../../ExitCodes' +import AccountsCommandBase from '../../base/AccountsCommandBase' +import { Keyring } from '@polkadot/api' import { mnemonicGenerate } from '@polkadot/util-crypto' -import { NamedKeyringPair } from '../../Types'; +import { NamedKeyringPair } from '../../Types' type AccountCreateArgs = { - name: string -}; + name: string +} export default class AccountCreate extends AccountsCommandBase { - static description = 'Create new account'; - - static args = [ - { - name: 'name', - required: true, - description: 'Account name' - }, - ]; - - validatePass(password: string, password2: string): void { - if (password !== password2) this.error('Passwords are not the same!', { exit: ExitCodes.InvalidInput }); - if (!password) this.error('You didn\'t provide a password', { exit: ExitCodes.InvalidInput }); - } + static description = 'Create new account' + + static args = [ + { + name: 'name', + required: true, + description: 'Account name', + }, + ] + + validatePass(password: string, password2: string): void { + if (password !== password2) this.error('Passwords are not the same!', { exit: ExitCodes.InvalidInput }) + if (!password) this.error("You didn't provide a password", { exit: ExitCodes.InvalidInput }) + } - async run() { - const args: AccountCreateArgs = this.parse(AccountCreate).args; - const keyring: Keyring = new Keyring(); - const mnemonic: string = mnemonicGenerate(); + async run() { + const args: AccountCreateArgs = this.parse(AccountCreate).args as AccountCreateArgs + const keyring: Keyring = new Keyring() + const mnemonic: string = mnemonicGenerate() - keyring.addFromMnemonic(mnemonic, { name: args.name, whenCreated: Date.now() }); - const keys: NamedKeyringPair = keyring.pairs[0]; // We assigned the name above + keyring.addFromMnemonic(mnemonic, { name: args.name, whenCreated: Date.now() }) + const keys: NamedKeyringPair = keyring.pairs[0] as NamedKeyringPair // We assigned the name above - const password = await this.promptForPassword('Set your account\'s password'); - const password2 = await this.promptForPassword('Confirm your password'); + const password = await this.promptForPassword("Set your account's password") + const password2 = await this.promptForPassword('Confirm your password') - this.validatePass(password, password2); + this.validatePass(password, password2) - this.saveAccount(keys, password); + this.saveAccount(keys, password) - this.log(chalk.greenBright(`\nAccount succesfully created!`)); - this.log(chalk.white(`${chalk.bold('Name: ') }${ args.name }`)); - this.log(chalk.white(`${chalk.bold('Address: ') }${ keys.address }`)); - } + this.log(chalk.greenBright(`\nAccount succesfully created!`)) + this.log(chalk.white(`${chalk.bold('Name: ')}${args.name}`)) + this.log(chalk.white(`${chalk.bold('Address: ')}${keys.address}`)) } +} diff --git a/cli/src/commands/account/current.ts b/cli/src/commands/account/current.ts index b820502d0b..2843df0974 100644 --- a/cli/src/commands/account/current.ts +++ b/cli/src/commands/account/current.ts @@ -1,41 +1,40 @@ -import AccountsCommandBase from '../../base/AccountsCommandBase'; -import { AccountSummary, NameValueObj, NamedKeyringPair } from '../../Types'; -import { DerivedBalances } from '@polkadot/api-derive/types'; -import { displayHeader, displayNameValueTable } from '../../helpers/display'; -import { formatBalance } from '@polkadot/util'; -import moment from 'moment'; +import AccountsCommandBase from '../../base/AccountsCommandBase' +import { AccountSummary, NameValueObj, NamedKeyringPair } from '../../Types' +import { displayHeader, displayNameValueTable } from '../../helpers/display' +import { formatBalance } from '@polkadot/util' +import moment from 'moment' export default class AccountCurrent extends AccountsCommandBase { - static description = 'Display information about currently choosen default account'; - static aliases = ['account:info', 'account:default']; + static description = 'Display information about currently choosen default account' + static aliases = ['account:info', 'account:default'] - async run() { - const currentAccount: NamedKeyringPair = await this.getRequiredSelectedAccount(false); - const summary: AccountSummary = await this.getApi().getAccountSummary(currentAccount.address); + async run() { + const currentAccount: NamedKeyringPair = await this.getRequiredSelectedAccount(false) + const summary: AccountSummary = await this.getApi().getAccountSummary(currentAccount.address) - displayHeader('Account information'); - const creationDate: string = currentAccount.meta.whenCreated ? - moment(currentAccount.meta.whenCreated).format('YYYY-MM-DD HH:mm:ss') - : '?'; - const accountRows: NameValueObj[] = [ - { name: 'Account name:', value: currentAccount.meta.name }, - { name: 'Address:', value: currentAccount.address }, - { name: 'Created:', value: creationDate } - ]; - displayNameValueTable(accountRows); + displayHeader('Account information') + const creationDate: string = currentAccount.meta.whenCreated + ? moment(currentAccount.meta.whenCreated as string | number).format('YYYY-MM-DD HH:mm:ss') + : '?' + const accountRows: NameValueObj[] = [ + { name: 'Account name:', value: currentAccount.meta.name }, + { name: 'Address:', value: currentAccount.address }, + { name: 'Created:', value: creationDate }, + ] + displayNameValueTable(accountRows) - displayHeader('Balances'); - const balances: DerivedBalances = summary.balances; - let balancesRows: NameValueObj[] = [ - { name: 'Total balance:', value: formatBalance(balances.votingBalance) }, - { name: 'Transferable balance:', value: formatBalance(balances.availableBalance) } - ]; - if (balances.lockedBalance.gtn(0)) { - balancesRows.push({ name: 'Locked balance:', value: formatBalance(balances.lockedBalance) }); - } - if (balances.reservedBalance.gtn(0)) { - balancesRows.push({ name: 'Reserved balance:', value: formatBalance(balances.reservedBalance) }); - } - displayNameValueTable(balancesRows); + displayHeader('Balances') + const balances = summary.balances + const balancesRows: NameValueObj[] = [ + { name: 'Total balance:', value: formatBalance(balances.votingBalance) }, + { name: 'Transferable balance:', value: formatBalance(balances.availableBalance) }, + ] + if (balances.lockedBalance.gtn(0)) { + balancesRows.push({ name: 'Locked balance:', value: formatBalance(balances.lockedBalance) }) } + if (balances.reservedBalance.gtn(0)) { + balancesRows.push({ name: 'Reserved balance:', value: formatBalance(balances.reservedBalance) }) + } + displayNameValueTable(balancesRows) } +} diff --git a/cli/src/commands/account/export.ts b/cli/src/commands/account/export.ts index 1d71ef51e3..e5546c695d 100644 --- a/cli/src/commands/account/export.ts +++ b/cli/src/commands/account/export.ts @@ -1,73 +1,74 @@ -import fs from 'fs'; -import chalk from 'chalk'; -import path from 'path'; -import ExitCodes from '../../ExitCodes'; -import AccountsCommandBase from '../../base/AccountsCommandBase'; -import { flags } from '@oclif/command'; -import { NamedKeyringPair } from '../../Types'; +import fs from 'fs' +import chalk from 'chalk' +import path from 'path' +import ExitCodes from '../../ExitCodes' +import AccountsCommandBase from '../../base/AccountsCommandBase' +import { flags } from '@oclif/command' +import { NamedKeyringPair } from '../../Types' -type AccountExportFlags = { all: boolean }; -type AccountExportArgs = { path: string }; +type AccountExportFlags = { all: boolean } +type AccountExportArgs = { path: string } export default class AccountExport extends AccountsCommandBase { - static description = 'Export account(s) to given location'; - static MULTI_EXPORT_FOLDER_NAME = 'exported_accounts'; + static description = 'Export account(s) to given location' + static MULTI_EXPORT_FOLDER_NAME = 'exported_accounts' - static args = [ - { - name: 'path', - required: true, - description: 'Path where the exported files should be placed' - } - ]; + static args = [ + { + name: 'path', + required: true, + description: 'Path where the exported files should be placed', + }, + ] - static flags = { - all: flags.boolean({ - char: 'a', - description: `If provided, exports all existing accounts into "${ AccountExport.MULTI_EXPORT_FOLDER_NAME }" folder inside given path`, - }), - }; - - exportAccount(account: NamedKeyringPair, destPath: string): string { - const sourceFilePath: string = this.getAccountFilePath(account); - const destFilePath: string = path.join(destPath, this.generateAccountFilename(account)); - try { - fs.copyFileSync(sourceFilePath, destFilePath); - } - catch (e) { - this.error( - `Error while trying to copy into the export file: (${ destFilePath }). Permissions issue?`, - { exit: ExitCodes.FsOperationFailed } - ); - } + static flags = { + all: flags.boolean({ + char: 'a', + description: `If provided, exports all existing accounts into "${AccountExport.MULTI_EXPORT_FOLDER_NAME}" folder inside given path`, + }), + } - return destFilePath; + exportAccount(account: NamedKeyringPair, destPath: string): string { + const sourceFilePath: string = this.getAccountFilePath(account) + const destFilePath: string = path.join(destPath, this.generateAccountFilename(account)) + try { + fs.copyFileSync(sourceFilePath, destFilePath) + } catch (e) { + this.error(`Error while trying to copy into the export file: (${destFilePath}). Permissions issue?`, { + exit: ExitCodes.FsOperationFailed, + }) } - async run() { - const args: AccountExportArgs = this.parse(AccountExport).args; - const flags: AccountExportFlags = this.parse(AccountExport).flags; - const accounts: NamedKeyringPair[] = this.fetchAccounts(); + return destFilePath + } - if (!accounts.length) { - this.error('No accounts found!', { exit: ExitCodes.NoAccountFound }); - } + async run() { + const args: AccountExportArgs = this.parse(AccountExport).args as AccountExportArgs + const flags: AccountExportFlags = this.parse(AccountExport).flags as AccountExportFlags + const accounts: NamedKeyringPair[] = this.fetchAccounts() + + if (!accounts.length) { + this.error('No accounts found!', { exit: ExitCodes.NoAccountFound }) + } - if (flags.all) { - const destPath: string = path.join(args.path, AccountExport.MULTI_EXPORT_FOLDER_NAME); - try { - if (!fs.existsSync(destPath)) fs.mkdirSync(destPath); - } catch(e) { - this.error(`Failed to create the export folder (${ destPath })`, { exit: ExitCodes.FsOperationFailed }); - } - for (let account of accounts) this.exportAccount(account, destPath); - this.log(chalk.greenBright(`All accounts succesfully exported succesfully to: ${ chalk.white(destPath) }!`)); - } - else { - const destPath: string = args.path; - const choosenAccount: NamedKeyringPair = await this.promptForAccount(accounts, null, 'Select an account to export'); - const exportedFilePath: string = this.exportAccount(choosenAccount, destPath); - this.log(chalk.greenBright(`Account succesfully exported to: ${ chalk.white(exportedFilePath) }`)); - } + if (flags.all) { + const destPath: string = path.join(args.path, AccountExport.MULTI_EXPORT_FOLDER_NAME) + try { + if (!fs.existsSync(destPath)) fs.mkdirSync(destPath) + } catch (e) { + this.error(`Failed to create the export folder (${destPath})`, { exit: ExitCodes.FsOperationFailed }) + } + for (const account of accounts) this.exportAccount(account, destPath) + this.log(chalk.greenBright(`All accounts succesfully exported succesfully to: ${chalk.white(destPath)}!`)) + } else { + const destPath: string = args.path + const choosenAccount: NamedKeyringPair = await this.promptForAccount( + accounts, + null, + 'Select an account to export' + ) + const exportedFilePath: string = this.exportAccount(choosenAccount, destPath) + this.log(chalk.greenBright(`Account succesfully exported to: ${chalk.white(exportedFilePath)}`)) } } +} diff --git a/cli/src/commands/account/forget.ts b/cli/src/commands/account/forget.ts index a10f8e98ab..b9e5c6aa3a 100644 --- a/cli/src/commands/account/forget.ts +++ b/cli/src/commands/account/forget.ts @@ -1,29 +1,31 @@ -import fs from 'fs'; -import chalk from 'chalk'; -import ExitCodes from '../../ExitCodes'; -import AccountsCommandBase from '../../base/AccountsCommandBase'; -import { NamedKeyringPair } from '../../Types'; +import fs from 'fs' +import chalk from 'chalk' +import ExitCodes from '../../ExitCodes' +import AccountsCommandBase from '../../base/AccountsCommandBase' +import { NamedKeyringPair } from '../../Types' export default class AccountForget extends AccountsCommandBase { - static description = 'Forget (remove) account from the list of available accounts'; + static description = 'Forget (remove) account from the list of available accounts' - async run() { - const accounts: NamedKeyringPair[] = this.fetchAccounts(); + async run() { + const accounts: NamedKeyringPair[] = this.fetchAccounts() - if (!accounts.length) { - this.error('No accounts found!', { exit: ExitCodes.NoAccountFound }); - } - - const choosenAccount: NamedKeyringPair = await this.promptForAccount(accounts, null, 'Select an account to forget'); - await this.requireConfirmation('Are you sure you want this account to be forgotten?'); + if (!accounts.length) { + this.error('No accounts found!', { exit: ExitCodes.NoAccountFound }) + } - const accountFilePath: string = this.getAccountFilePath(choosenAccount); - try { - fs.unlinkSync(accountFilePath); - } catch (e) { - this.error(`Could not remove account file (${ accountFilePath }). Permissions issue?`, { exit: ExitCodes.FsOperationFailed }); - } + const choosenAccount: NamedKeyringPair = await this.promptForAccount(accounts, null, 'Select an account to forget') + await this.requireConfirmation('Are you sure you want this account to be forgotten?') - this.log(chalk.greenBright(`\nAccount has been forgotten!`)) + const accountFilePath: string = this.getAccountFilePath(choosenAccount) + try { + fs.unlinkSync(accountFilePath) + } catch (e) { + this.error(`Could not remove account file (${accountFilePath}). Permissions issue?`, { + exit: ExitCodes.FsOperationFailed, + }) } + + this.log(chalk.greenBright(`\nAccount has been forgotten!`)) } +} diff --git a/cli/src/commands/account/import.ts b/cli/src/commands/account/import.ts index 623f0c5e00..f903b15d15 100644 --- a/cli/src/commands/account/import.ts +++ b/cli/src/commands/account/import.ts @@ -1,46 +1,44 @@ -import fs from 'fs'; -import chalk from 'chalk'; -import path from 'path'; -import ExitCodes from '../../ExitCodes'; -import AccountsCommandBase from '../../base/AccountsCommandBase'; -import { NamedKeyringPair } from '../../Types'; +import fs from 'fs' +import chalk from 'chalk' +import path from 'path' +import ExitCodes from '../../ExitCodes' +import AccountsCommandBase from '../../base/AccountsCommandBase' +import { NamedKeyringPair } from '../../Types' type AccountImportArgs = { - backupFilePath: string -}; + backupFilePath: string +} export default class AccountImport extends AccountsCommandBase { - static description = 'Import account using JSON backup file'; + static description = 'Import account using JSON backup file' - static args = [ - { - name: 'backupFilePath', - required: true, - description: 'Path to account backup JSON file' - }, - ]; + static args = [ + { + name: 'backupFilePath', + required: true, + description: 'Path to account backup JSON file', + }, + ] - async run() { - const args: AccountImportArgs = this.parse(AccountImport).args; - const backupAcc: NamedKeyringPair = this.fetchAccountFromJsonFile(args.backupFilePath); - const accountName: string = backupAcc.meta.name; - const accountAddress: string = backupAcc.address; + async run() { + const args: AccountImportArgs = this.parse(AccountImport).args as AccountImportArgs + const backupAcc: NamedKeyringPair = this.fetchAccountFromJsonFile(args.backupFilePath) + const accountName: string = backupAcc.meta.name + const accountAddress: string = backupAcc.address - const sourcePath: string = args.backupFilePath; - const destPath: string = path.join(this.getAccountsDirPath(), this.generateAccountFilename(backupAcc)); + const sourcePath: string = args.backupFilePath + const destPath: string = path.join(this.getAccountsDirPath(), this.generateAccountFilename(backupAcc)) - try { - fs.copyFileSync(sourcePath, destPath); - } - catch (e) { - this.error( - 'Unexpected error while trying to copy input file! Permissions issue?', - { exit: ExitCodes.FsOperationFailed } - ); - } - - this.log(chalk.bold.greenBright(`ACCOUNT IMPORTED SUCCESFULLY!`)); - this.log(chalk.bold.white(`NAME: `), accountName); - this.log(chalk.bold.white(`ADDRESS: `), accountAddress); + try { + fs.copyFileSync(sourcePath, destPath) + } catch (e) { + this.error('Unexpected error while trying to copy input file! Permissions issue?', { + exit: ExitCodes.FsOperationFailed, + }) } + + this.log(chalk.bold.greenBright(`ACCOUNT IMPORTED SUCCESFULLY!`)) + this.log(chalk.bold.white(`NAME: `), accountName) + this.log(chalk.bold.white(`ADDRESS: `), accountAddress) } +} diff --git a/cli/src/commands/account/transferTokens.ts b/cli/src/commands/account/transferTokens.ts index 953acb22d2..30a47a6eb5 100644 --- a/cli/src/commands/account/transferTokens.ts +++ b/cli/src/commands/account/transferTokens.ts @@ -1,68 +1,67 @@ -import BN from 'bn.js'; -import AccountsCommandBase from '../../base/AccountsCommandBase'; -import chalk from 'chalk'; -import ExitCodes from '../../ExitCodes'; -import { formatBalance } from '@polkadot/util'; -import { Hash } from '@polkadot/types/interfaces'; -import { NamedKeyringPair } from '../../Types'; -import { checkBalance, validateAddress } from '../../helpers/validation'; -import { DerivedBalances } from '@polkadot/api-derive/types'; +import BN from 'bn.js' +import AccountsCommandBase from '../../base/AccountsCommandBase' +import chalk from 'chalk' +import ExitCodes from '../../ExitCodes' +import { formatBalance } from '@polkadot/util' +import { Hash } from '@polkadot/types/interfaces' +import { NamedKeyringPair } from '../../Types' +import { checkBalance, validateAddress } from '../../helpers/validation' type AccountTransferArgs = { - recipient: string, - amount: string -}; + recipient: string + amount: string +} export default class AccountTransferTokens extends AccountsCommandBase { - static description = 'Transfer tokens from currently choosen account'; + static description = 'Transfer tokens from currently choosen account' - static args = [ - { - name: 'recipient', - required: true, - description: 'Address of the transfer recipient' - }, - { - name: 'amount', - required: true, - description: 'Amount of tokens to transfer' - }, - ]; + static args = [ + { + name: 'recipient', + required: true, + description: 'Address of the transfer recipient', + }, + { + name: 'amount', + required: true, + description: 'Amount of tokens to transfer', + }, + ] - async run() { - const args: AccountTransferArgs = this.parse(AccountTransferTokens).args; - const selectedAccount: NamedKeyringPair = await this.getRequiredSelectedAccount(); - const amountBN: BN = new BN(args.amount); + async run() { + const args: AccountTransferArgs = this.parse(AccountTransferTokens).args as AccountTransferArgs + const selectedAccount: NamedKeyringPair = await this.getRequiredSelectedAccount() + const amountBN: BN = new BN(args.amount) - // Initial validation - validateAddress(args.recipient, 'Invalid recipient address'); - const accBalances: DerivedBalances = (await this.getApi().getAccountsBalancesInfo([ selectedAccount.address ]))[0]; - checkBalance(accBalances, amountBN); + // Initial validation + validateAddress(args.recipient, 'Invalid recipient address') + const accBalances = (await this.getApi().getAccountsBalancesInfo([selectedAccount.address]))[0] + checkBalance(accBalances, amountBN) - await this.requestAccountDecoding(selectedAccount); + await this.requestAccountDecoding(selectedAccount) - this.log(chalk.white('Estimating fee...')); - let estimatedFee: BN; - try { - estimatedFee = await this.getApi().estimateFee(selectedAccount, args.recipient, amountBN); - } - catch (e) { - this.error('Could not estimate the fee.', { exit: ExitCodes.UnexpectedException }); - } - const totalAmount: BN = amountBN.add(estimatedFee); - this.log(chalk.white('Estimated fee:', formatBalance(estimatedFee))); - this.log(chalk.white('Total transfer amount:', formatBalance(totalAmount))); + this.log(chalk.white('Estimating fee...')) + const tx = await this.getApi().createTransferTx(args.recipient, amountBN) + let estimatedFee: BN + try { + estimatedFee = await this.getApi().estimateFee(selectedAccount, tx) + } catch (e) { + this.error('Could not estimate the fee.', { exit: ExitCodes.UnexpectedException }) + } + const totalAmount: BN = amountBN.add(estimatedFee) + this.log(chalk.white('Estimated fee:', formatBalance(estimatedFee))) + this.log(chalk.white('Total transfer amount:', formatBalance(totalAmount))) - checkBalance(accBalances, totalAmount); + checkBalance(accBalances, totalAmount) - await this.requireConfirmation('Do you confirm the transfer?'); + await this.requireConfirmation('Do you confirm the transfer?') - try { - const txHash: Hash = await this.getApi().transfer(selectedAccount, args.recipient, amountBN); - this.log(chalk.greenBright('Transaction succesfully sent!')); - this.log(chalk.white('Hash:', txHash.toString())); - } catch (e) { - this.error('Could not send the transaction.', { exit: ExitCodes.UnexpectedException }); - } + try { + const txHash: Hash = await tx.signAndSend(selectedAccount) + this.log(chalk.greenBright('Transaction succesfully sent!')) + this.log(chalk.white('Hash:', txHash.toString())) + } catch (e) { + this.error('Could not send the transaction.', { exit: ExitCodes.UnexpectedException }) } } +} diff --git a/cli/src/commands/api/getUri.ts b/cli/src/commands/api/getUri.ts index c404799d84..beaf896649 100644 --- a/cli/src/commands/api/getUri.ts +++ b/cli/src/commands/api/getUri.ts @@ -1,12 +1,11 @@ -import StateAwareCommandBase from '../../base/StateAwareCommandBase'; -import chalk from 'chalk'; - +import StateAwareCommandBase from '../../base/StateAwareCommandBase' +import chalk from 'chalk' export default class ApiGetUri extends StateAwareCommandBase { - static description = 'Get current api WS provider uri'; + static description = 'Get current api WS provider uri' - async run() { - const currentUri:string = this.getPreservedState().apiUri; - this.log(chalk.green(currentUri)); - } + async run() { + const currentUri: string = this.getPreservedState().apiUri + this.log(chalk.green(currentUri)) } +} diff --git a/cli/src/commands/api/inspect.ts b/cli/src/commands/api/inspect.ts index cd309cba42..41243c7970 100644 --- a/cli/src/commands/api/inspect.ts +++ b/cli/src/commands/api/inspect.ts @@ -1,277 +1,231 @@ -import { flags } from '@oclif/command'; -import { CLIError } from '@oclif/errors'; -import { displayNameValueTable } from '../../helpers/display'; -import { ApiPromise } from '@polkadot/api'; -import { getTypeDef } from '@polkadot/types'; -import { Codec, TypeDef, TypeDefInfo } from '@polkadot/types/types'; -import { ConstantCodec } from '@polkadot/api-metadata/consts/types'; -import ExitCodes from '../../ExitCodes'; -import chalk from 'chalk'; -import { NameValueObj } from '../../Types'; -import inquirer from 'inquirer'; -import ApiCommandBase from '../../base/ApiCommandBase'; +import { flags } from '@oclif/command' +import { CLIError } from '@oclif/errors' +import { displayNameValueTable } from '../../helpers/display' +import { ApiPromise } from '@polkadot/api' +import { Codec } from '@polkadot/types/types' +import { ConstantCodec } from '@polkadot/metadata/Decorated/consts/types' +import ExitCodes from '../../ExitCodes' +import chalk from 'chalk' +import { NameValueObj, ApiMethodArg } from '../../Types' +import ApiCommandBase from '../../base/ApiCommandBase' // Command flags type type ApiInspectFlags = { - type: string, - module: string, - method: string, - exec: boolean, - callArgs: string -}; + type: string + module: string + method: string + exec: boolean + callArgs: string +} // Currently "inspectable" api types -const TYPES_AVAILABLE = [ - 'query', - 'consts', -] as const; +const TYPES_AVAILABLE = ['query', 'consts'] as const // String literals type based on TYPES_AVAILABLE const. // It works as if we specified: type ApiType = 'query' | 'consts'...; -type ApiType = typeof TYPES_AVAILABLE[number]; - -// Format of the api input args (as they are specified in the CLI) -type ApiMethodInputSimpleArg = string; -// This recurring type allows the correct handling of nested types like: -// ((Type1, Type2), Option) etc. -type ApiMethodInputArg = ApiMethodInputSimpleArg | ApiMethodInputArg[]; +type ApiType = typeof TYPES_AVAILABLE[number] export default class ApiInspect extends ApiCommandBase { - static description = - 'Lists available node API modules/methods and/or their description(s), '+ - 'or calls one of the API methods (depending on provided arguments and flags)'; - - static examples = [ - '$ api:inspect', - '$ api:inspect -t=query', - '$ api:inspect -t=query -M=members', - '$ api:inspect -t=query -M=members -m=memberProfile', - '$ api:inspect -t=query -M=members -m=memberProfile -e', - '$ api:inspect -t=query -M=members -m=memberProfile -e -a=1', - ]; - - static flags = { - type: flags.string({ - char: 't', - description: - 'Specifies the type/category of the inspected request (ie. "query", "consts" etc.).\n'+ - 'If no "--module" flag is provided then all available modules in that type will be listed.\n'+ - 'If this flag is not provided then all available types will be listed.', - }), - module: flags.string({ - char: 'M', - description: - 'Specifies the api module, ie. "system", "staking" etc.\n'+ - 'If no "--method" flag is provided then all methods in that module will be listed along with the descriptions.', - dependsOn: ['type'], - }), - method: flags.string({ - char: 'm', - description: 'Specifies the api method to call/describe.', - dependsOn: ['module'], - }), - exec: flags.boolean({ - char: 'e', - description: 'Provide this flag if you want to execute the actual call, instead of displaying the method description (which is default)', - dependsOn: ['method'], - }), - callArgs: flags.string({ - char: 'a', - description: - 'Specifies the arguments to use when calling a method. Multiple arguments can be separated with a comma, ie. "-a=arg1,arg2".\n'+ - 'You can omit this flag even if the method requires some aguments.\n'+ - 'In that case you will be promted to provide value for each required argument.\n' + - 'Ommiting this flag is recommended when input parameters are of more complex types (and it\'s hard to specify them as just simple comma-separated strings)', - dependsOn: ['exec'], - }) - }; - - getMethodMeta(apiType: ApiType, apiModule: string, apiMethod: string) { - if (apiType === 'query') { - return this.getOriginalApi().query[apiModule][apiMethod].creator.meta; - } - else { - // Currently the only other optoin is api.consts - const method:ConstantCodec = this.getOriginalApi().consts[apiModule][apiMethod]; - return method.meta; - } + static description = + 'Lists available node API modules/methods and/or their description(s), ' + + 'or calls one of the API methods (depending on provided arguments and flags)' + + static examples = [ + '$ api:inspect', + '$ api:inspect -t=query', + '$ api:inspect -t=query -M=members', + '$ api:inspect -t=query -M=members -m=membershipById', + '$ api:inspect -t=query -M=members -m=membershipById -e', + '$ api:inspect -t=query -M=members -m=membershipById -e -a=1', + ] + + static flags = { + type: flags.string({ + char: 't', + description: + 'Specifies the type/category of the inspected request (ie. "query", "consts" etc.).\n' + + 'If no "--module" flag is provided then all available modules in that type will be listed.\n' + + 'If this flag is not provided then all available types will be listed.', + }), + module: flags.string({ + char: 'M', + description: + 'Specifies the api module, ie. "system", "staking" etc.\n' + + 'If no "--method" flag is provided then all methods in that module will be listed along with the descriptions.', + dependsOn: ['type'], + }), + method: flags.string({ + char: 'm', + description: 'Specifies the api method to call/describe.', + dependsOn: ['module'], + }), + exec: flags.boolean({ + char: 'e', + description: + 'Provide this flag if you want to execute the actual call, instead of displaying the method description (which is default)', + dependsOn: ['method'], + }), + callArgs: flags.string({ + char: 'a', + description: + 'Specifies the arguments to use when calling a method. Multiple arguments can be separated with a comma, ie. "-a=arg1,arg2".\n' + + 'You can omit this flag even if the method requires some aguments.\n' + + 'In that case you will be promted to provide value for each required argument.\n' + + "Ommiting this flag is recommended when input parameters are of more complex types (and it's hard to specify them as just simple comma-separated strings)", + dependsOn: ['exec'], + }), + } + + getMethodMeta(apiType: ApiType, apiModule: string, apiMethod: string) { + if (apiType === 'query') { + return this.getOriginalApi().query[apiModule][apiMethod].creator.meta + } else { + // Currently the only other optoin is api.consts + const method: ConstantCodec = this.getOriginalApi().consts[apiModule][apiMethod] as ConstantCodec + return method.meta } - - getMethodDescription(apiType: ApiType, apiModule: string, apiMethod: string): string { - let description:string = this.getMethodMeta(apiType, apiModule, apiMethod).documentation.join(' '); - return description || 'No description available.'; + } + + getMethodDescription(apiType: ApiType, apiModule: string, apiMethod: string): string { + const description: string = this.getMethodMeta(apiType, apiModule, apiMethod).documentation.join(' ') + return description || 'No description available.' + } + + getQueryMethodParamsTypes(apiModule: string, apiMethod: string): string[] { + const method = this.getOriginalApi().query[apiModule][apiMethod] + const { type } = method.creator.meta + if (type.isDoubleMap) { + return [type.asDoubleMap.key1.toString(), type.asDoubleMap.key2.toString()] } - - getQueryMethodParamsTypes(apiModule: string, apiMethod: string): string[] { - const method = this.getOriginalApi().query[apiModule][apiMethod]; - const { type } = method.creator.meta; - if (type.isDoubleMap) { - return [ type.asDoubleMap.key1.toString(), type.asDoubleMap.key2.toString() ]; - } - if (type.isMap) { - return type.asMap.linked.isTrue ? [ `Option<${type.asMap.key.toString()}>` ] : [ type.asMap.key.toString() ]; - } - return []; + if (type.isMap) { + return [type.asMap.key.toString()] } - - getMethodReturnType(apiType: ApiType, apiModule: string, apiMethod: string): string { - if (apiType === 'query') { - const method = this.getOriginalApi().query[apiModule][apiMethod]; - const { meta: { type, modifier } } = method.creator; - if (type.isDoubleMap) { - return type.asDoubleMap.value.toString(); - } - if (modifier.isOptional) { - return `Option<${type.toString()}>`; - } - } - // Fallback for "query" and default for "consts" - return this.getMethodMeta(apiType, apiModule, apiMethod).type.toString(); + return [] + } + + getMethodReturnType(apiType: ApiType, apiModule: string, apiMethod: string): string { + if (apiType === 'query') { + const method = this.getOriginalApi().query[apiModule][apiMethod] + const { + meta: { type, modifier }, + } = method.creator + let typeName = type.toString() + if (type.isDoubleMap) { + typeName = type.asDoubleMap.value.toString() + } + if (type.isMap) { + typeName = type.asMap.value.toString() + } + + return modifier.isOptional ? `Option<${typeName}>` : typeName } - - // Validate the flags - throws an error if flags.type, flags.module or flags.method is invalid / does not exist in the api. - // Returns type, module and method which validity we can be sure about (notice they may still be "undefined" if weren't provided). - validateFlags(api: ApiPromise, flags: ApiInspectFlags): { apiType: ApiType | undefined, apiModule: string | undefined, apiMethod: string | undefined } { - let apiType: ApiType | undefined = undefined; - const { module: apiModule, method: apiMethod } = flags; - - if (flags.type !== undefined) { - const availableTypes: readonly string[] = TYPES_AVAILABLE; - if (!availableTypes.includes(flags.type)) { - throw new CLIError('Such type is not available', { exit: ExitCodes.InvalidInput }); - } - apiType = flags.type; - if (apiModule !== undefined) { - if (!api[apiType][apiModule]) { - throw new CLIError('Such module was not found', { exit: ExitCodes.InvalidInput }); - } - if (apiMethod !== undefined && !api[apiType][apiModule][apiMethod]) { - throw new CLIError('Such method was not found', { exit: ExitCodes.InvalidInput }); - } - } + // Fallback for "consts" + return this.getMethodMeta(apiType, apiModule, apiMethod).type.toString() + } + + // Validate the flags - throws an error if flags.type, flags.module or flags.method is invalid / does not exist in the api. + // Returns type, module and method which validity we can be sure about (notice they may still be "undefined" if weren't provided). + validateFlags( + api: ApiPromise, + flags: ApiInspectFlags + ): { apiType: ApiType | undefined; apiModule: string | undefined; apiMethod: string | undefined } { + let apiType: ApiType | undefined + const { module: apiModule, method: apiMethod } = flags + + if (flags.type !== undefined) { + const availableTypes: readonly string[] = TYPES_AVAILABLE + if (!availableTypes.includes(flags.type)) { + throw new CLIError('Such type is not available', { exit: ExitCodes.InvalidInput }) + } + apiType = flags.type as ApiType + if (apiModule !== undefined) { + if (!api[apiType][apiModule]) { + throw new CLIError('Such module was not found', { exit: ExitCodes.InvalidInput }) } - - return { apiType, apiModule, apiMethod }; - } - - // Prompt for simple value (string) - async promptForSimple(typeName: string): Promise { - const userInput = await inquirer.prompt([{ - name: 'providedValue', - message: `Provide value for ${ typeName }`, - type: 'input' - } ]) - return userInput.providedValue; - } - - // Prompt for optional value (returns undefined if user refused to provide) - async promptForOption(typeDef: TypeDef): Promise { - const userInput = await inquirer.prompt([{ - name: 'confirmed', - message: `Do you want to provide the optional ${ typeDef.type } parameter?`, - type: 'confirm' - } ]); - - if (userInput.confirmed) { - const subtype = typeDef.sub; // We assume that Opion always has a single subtype - let value = await this.promptForParam(subtype.type); - return value; + if (apiMethod !== undefined && !api[apiType][apiModule][apiMethod]) { + throw new CLIError('Such method was not found', { exit: ExitCodes.InvalidInput }) } + } } - // Prompt for tuple - returns array of values - async promptForTuple(typeDef: TypeDef): Promise<(ApiMethodInputArg)[]> { - let result: ApiMethodInputArg[] = []; - - if (!typeDef.sub) return [ await this.promptForSimple(typeDef.type) ]; + return { apiType, apiModule, apiMethod } + } - const subtypes: TypeDef[] = Array.isArray(typeDef.sub) ? typeDef.sub : [ typeDef.sub ]; + // Request values for params using array of param types (strings) + async requestParamsValues(paramTypes: string[]): Promise { + const result: ApiMethodArg[] = [] + for (const [key, paramType] of Object.entries(paramTypes)) { + this.log(chalk.bold.white(`Parameter no. ${parseInt(key) + 1} (${paramType}):`)) + const paramValue = await this.promptForParam(paramType) + result.push(paramValue) + } - for (let subtype of subtypes) { - let inputParam = await this.promptForParam(subtype.type); - if (inputParam !== undefined) result.push(inputParam); + return result + } + + async run() { + const api: ApiPromise = this.getOriginalApi() + const flags: ApiInspectFlags = this.parse(ApiInspect).flags as ApiInspectFlags + const availableTypes: readonly string[] = TYPES_AVAILABLE + const { apiType, apiModule, apiMethod } = this.validateFlags(api, flags) + + // Executing a call + if (apiType && apiModule && apiMethod && flags.exec) { + let result: Codec + + if (apiType === 'query') { + // Api query - call with (or without) arguments + let args: (string | ApiMethodArg)[] = flags.callArgs ? flags.callArgs.split(',') : [] + const paramsTypes: string[] = this.getQueryMethodParamsTypes(apiModule, apiMethod) + if (args.length < paramsTypes.length) { + this.warn('Some parameters are missing! Please, provide the missing parameters:') + const missingParamsValues = await this.requestParamsValues(paramsTypes.slice(args.length)) + args = args.concat(missingParamsValues) } + result = await api.query[apiModule][apiMethod](...args) + } else { + // Api consts - just assign the value + result = api.consts[apiModule][apiMethod] + } - return result; + this.log(chalk.green(result.toString())) } - - // Prompt for param based on "paramType" string (ie. Option) - async promptForParam(paramType: string): Promise { - const typeDef: TypeDef = getTypeDef(paramType); - if (typeDef.info === TypeDefInfo.Option) return await this.promptForOption(typeDef); - else if (typeDef.info === TypeDefInfo.Tuple) return await this.promptForTuple(typeDef); - else return await this.promptForSimple(typeDef.type); + // Describing a method + else if (apiType && apiModule && apiMethod) { + this.log(chalk.bold.white(`${apiType}.${apiModule}.${apiMethod}`)) + const description: string = this.getMethodDescription(apiType, apiModule, apiMethod) + this.log(`\n${description}\n`) + const typesRows: NameValueObj[] = [] + if (apiType === 'query') { + typesRows.push({ + name: 'Params:', + value: this.getQueryMethodParamsTypes(apiModule, apiMethod).join(', ') || '-', + }) + } + typesRows.push({ name: 'Returns:', value: this.getMethodReturnType(apiType, apiModule, apiMethod) }) + displayNameValueTable(typesRows) } - - // Request values for params using array of param types (strings) - async requestParamsValues(paramTypes: string[]): Promise { - let result: ApiMethodInputArg[] = []; - for (let [key, paramType] of Object.entries(paramTypes)) { - this.log(chalk.bold.white(`Parameter no. ${ parseInt(key)+1 } (${ paramType }):`)); - let paramValue = await this.promptForParam(paramType); - if (paramValue !== undefined) result.push(paramValue); - } - - return result; + // Displaying all available methods + else if (apiType && apiModule) { + const module = api[apiType][apiModule] + const rows: NameValueObj[] = Object.keys(module).map((key: string) => { + return { name: key, value: this.getMethodDescription(apiType, apiModule, key) } + }) + displayNameValueTable(rows) } - - async run() { - const api: ApiPromise = this.getOriginalApi(); - const flags: ApiInspectFlags = this.parse(ApiInspect).flags; - const availableTypes: readonly string[] = TYPES_AVAILABLE; - const { apiType, apiModule, apiMethod } = this.validateFlags(api, flags); - - // Executing a call - if (apiType && apiModule && apiMethod && flags.exec) { - let result: Codec; - - if (apiType === 'query') { - // Api query - call with (or without) arguments - let args: ApiMethodInputArg[] = flags.callArgs ? flags.callArgs.split(',') : []; - const paramsTypes: string[] = this.getQueryMethodParamsTypes(apiModule, apiMethod); - if (args.length < paramsTypes.length) { - this.warn('Some parameters are missing! Please, provide the missing parameters:'); - let missingParamsValues = await this.requestParamsValues(paramsTypes.slice(args.length)); - args = args.concat(missingParamsValues); - } - result = await api.query[apiModule][apiMethod](...args); - } - else { - // Api consts - just assign the value - result = api.consts[apiModule][apiMethod]; - } - - this.log(chalk.green(result.toString())); - } - // Describing a method - else if (apiType && apiModule && apiMethod) { - this.log(chalk.bold.white(`${ apiType }.${ apiModule }.${ apiMethod }`)); - const description: string = this.getMethodDescription(apiType, apiModule, apiMethod); - this.log(`\n${ description }\n`); - let typesRows: NameValueObj[] = []; - if (apiType === 'query') { - typesRows.push({ name: 'Params:', value: this.getQueryMethodParamsTypes(apiModule, apiMethod).join(', ') || '-' }); - } - typesRows.push({ name: 'Returns:', value: this.getMethodReturnType(apiType, apiModule, apiMethod) }); - displayNameValueTable(typesRows); - } - // Displaying all available methods - else if (apiType && apiModule) { - const module = api[apiType][apiModule]; - const rows: NameValueObj[] = Object.keys(module).map((key: string) => { - return { name: key, value: this.getMethodDescription(apiType, apiModule, key) }; - }); - displayNameValueTable(rows); - } - // Displaying all available modules - else if (apiType) { - this.log(chalk.bold.white('Available modules:')); - this.log(Object.keys(api[apiType]).map(key => chalk.white(key)).join('\n')); - } - // Displaying all available types - else { - this.log(chalk.bold.white('Available types:')); - this.log(availableTypes.map(type => chalk.white(type)).join('\n')); - } + // Displaying all available modules + else if (apiType) { + this.log(chalk.bold.white('Available modules:')) + this.log( + Object.keys(api[apiType]) + .map((key) => chalk.white(key)) + .join('\n') + ) + } + // Displaying all available types + else { + this.log(chalk.bold.white('Available types:')) + this.log(availableTypes.map((type) => chalk.white(type)).join('\n')) } + } } diff --git a/cli/src/commands/api/setUri.ts b/cli/src/commands/api/setUri.ts index 591fc12889..b93720e398 100644 --- a/cli/src/commands/api/setUri.ts +++ b/cli/src/commands/api/setUri.ts @@ -1,28 +1,37 @@ -import StateAwareCommandBase from '../../base/StateAwareCommandBase'; -import chalk from 'chalk'; -import { WsProvider } from '@polkadot/api'; -import ExitCodes from '../../ExitCodes'; +import chalk from 'chalk' +import ApiCommandBase from '../../base/ApiCommandBase' +import ExitCodes from '../../ExitCodes' -type ApiSetUriArgs = { uri: string }; +type ApiSetUriArgs = { uri: string } -export default class ApiSetUri extends StateAwareCommandBase { - static description = 'Set api WS provider uri'; - static args = [ - { - name: 'uri', - required: true, - description: 'Uri of the node api WS provider' - } - ]; +export default class ApiSetUri extends ApiCommandBase { + static description = 'Set api WS provider uri' + static args = [ + { + name: 'uri', + required: false, + description: 'Uri of the node api WS provider (if skipped, a prompt will be displayed)', + }, + ] - async run() { - const args: ApiSetUriArgs = this.parse(ApiSetUri).args; - try { - new WsProvider(args.uri); - } catch(e) { - this.error('The WS provider uri seems to be incorrect', { exit: ExitCodes.InvalidInput }); - } - await this.setPreservedState({ apiUri: args.uri }); - this.log(chalk.greenBright('Api uri successfuly changed! New uri: ') + chalk.white(args.uri)) + async init() { + this.forceSkipApiUriPrompt = true + super.init() + } + + async run() { + const args: ApiSetUriArgs = this.parse(ApiSetUri).args as ApiSetUriArgs + let newUri = '' + if (args.uri) { + if (this.isApiUriValid(args.uri)) { + await this.setPreservedState({ apiUri: args.uri }) + newUri = args.uri + } else { + this.error('Provided uri seems to be incorrect!', { exit: ExitCodes.InvalidInput }) + } + } else { + newUri = await this.promptForApiUri() } + this.log(chalk.greenBright('Api uri successfuly changed! New uri: ') + chalk.white(newUri)) } +} diff --git a/cli/src/commands/council/info.ts b/cli/src/commands/council/info.ts index 3bed6b8723..6cf0bfee76 100644 --- a/cli/src/commands/council/info.ts +++ b/cli/src/commands/council/info.ts @@ -1,57 +1,56 @@ -import { ElectionStage } from '@joystream/types/'; -import { formatNumber, formatBalance } from '@polkadot/util'; -import { BlockNumber } from '@polkadot/types/interfaces'; -import { CouncilInfoObj, NameValueObj } from '../../Types'; -import { displayHeader, displayNameValueTable } from '../../helpers/display'; -import ApiCommandBase from '../../base/ApiCommandBase'; +import { ElectionStage } from '@joystream/types/council' +import { formatNumber, formatBalance } from '@polkadot/util' +import { BlockNumber } from '@polkadot/types/interfaces' +import { CouncilInfoObj, NameValueObj } from '../../Types' +import { displayHeader, displayNameValueTable } from '../../helpers/display' +import ApiCommandBase from '../../base/ApiCommandBase' export default class CouncilInfo extends ApiCommandBase { - static description = 'Get current council and council elections information'; + static description = 'Get current council and council elections information' - displayInfo(infoObj: CouncilInfoObj) { - const { activeCouncil = [], round, stage } = infoObj; + displayInfo(infoObj: CouncilInfoObj) { + const { activeCouncil = [], round, stage } = infoObj - displayHeader('Council'); - const councilRows: NameValueObj[] = [ - { name: 'Elected:', value: activeCouncil.length ? 'YES' : 'NO' }, - { name: 'Members:', value: activeCouncil.length.toString() }, - { name: 'Term ends at block:', value: `#${formatNumber(infoObj.termEndsAt) }` }, - ]; - displayNameValueTable(councilRows); + displayHeader('Council') + const councilRows: NameValueObj[] = [ + { name: 'Elected:', value: activeCouncil.length ? 'YES' : 'NO' }, + { name: 'Members:', value: activeCouncil.length.toString() }, + { name: 'Term ends at block:', value: `#${formatNumber(infoObj.termEndsAt)}` }, + ] + displayNameValueTable(councilRows) - - displayHeader('Election'); - let electionTableRows: NameValueObj[] = [ - { name: 'Running:', value: stage && stage.isSome ? 'YES' : 'NO' }, - { name: 'Election round:', value: formatNumber(round) } - ]; - if (stage && stage.isSome) { - const stageValue = stage.value; - const stageName: string = stageValue.type; - const stageEndsAt = stageValue.value; - electionTableRows.push({ name: 'Stage:', value: stageName }); - electionTableRows.push({ name: 'Stage ends at block:', value: `#${stageEndsAt}` }); - } - displayNameValueTable(electionTableRows); - - displayHeader('Configuration'); - const isAutoStart = (infoObj.autoStart || false).valueOf(); - const configTableRows: NameValueObj[] = [ - { name: 'Auto-start elections:', value: isAutoStart ? 'YES' : 'NO' }, - { name: 'New term duration:', value: formatNumber(infoObj.newTermDuration) }, - { name: 'Candidacy limit:', value: formatNumber(infoObj.candidacyLimit) }, - { name: 'Council size:', value: formatNumber(infoObj.councilSize) }, - { name: 'Min. council stake:', value: formatBalance(infoObj.minCouncilStake) }, - { name: 'Min. voting stake:', value: formatBalance(infoObj.minVotingStake) }, - { name: 'Announcing period:', value: `${ formatNumber(infoObj.announcingPeriod) } blocks` }, - { name: 'Voting period:', value: `${ formatNumber(infoObj.votingPeriod) } blocks` }, - { name: 'Revealing period:', value: `${ formatNumber(infoObj.revealingPeriod) } blocks` } - ]; - displayNameValueTable(configTableRows); + displayHeader('Election') + const electionTableRows: NameValueObj[] = [ + { name: 'Running:', value: stage && stage.isSome ? 'YES' : 'NO' }, + { name: 'Election round:', value: formatNumber(round) }, + ] + if (stage && stage.isSome) { + const stageValue = stage.value as ElectionStage + const stageName: string = stageValue.type + const stageEndsAt = stageValue.value as BlockNumber + electionTableRows.push({ name: 'Stage:', value: stageName }) + electionTableRows.push({ name: 'Stage ends at block:', value: `#${stageEndsAt}` }) } + displayNameValueTable(electionTableRows) - async run() { - const infoObj = await this.getApi().getCouncilInfo(); - this.displayInfo(infoObj); - } + displayHeader('Configuration') + const isAutoStart = (infoObj.autoStart || false).valueOf() + const configTableRows: NameValueObj[] = [ + { name: 'Auto-start elections:', value: isAutoStart ? 'YES' : 'NO' }, + { name: 'New term duration:', value: formatNumber(infoObj.newTermDuration) }, + { name: 'Candidacy limit:', value: formatNumber(infoObj.candidacyLimit) }, + { name: 'Council size:', value: formatNumber(infoObj.councilSize) }, + { name: 'Min. council stake:', value: formatBalance(infoObj.minCouncilStake) }, + { name: 'Min. voting stake:', value: formatBalance(infoObj.minVotingStake) }, + { name: 'Announcing period:', value: `${formatNumber(infoObj.announcingPeriod)} blocks` }, + { name: 'Voting period:', value: `${formatNumber(infoObj.votingPeriod)} blocks` }, + { name: 'Revealing period:', value: `${formatNumber(infoObj.revealingPeriod)} blocks` }, + ] + displayNameValueTable(configTableRows) + } + + async run() { + const infoObj = await this.getApi().getCouncilInfo() + this.displayInfo(infoObj) } +} diff --git a/cli/src/commands/working-groups/application.ts b/cli/src/commands/working-groups/application.ts new file mode 100644 index 0000000000..89ffcc75c4 --- /dev/null +++ b/cli/src/commands/working-groups/application.ts @@ -0,0 +1,40 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { displayCollapsedRow, displayHeader } from '../../helpers/display' +import chalk from 'chalk' + +export default class WorkingGroupsApplication extends WorkingGroupsCommandBase { + static description = 'Shows an overview of given application by Working Group Application ID' + static args = [ + { + name: 'wgApplicationId', + required: true, + description: 'Working Group Application ID', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const { args } = this.parse(WorkingGroupsApplication) + + const application = await this.getApi().groupApplication(this.group, parseInt(args.wgApplicationId)) + + displayHeader('Human readable text') + this.jsonPrettyPrint(application.humanReadableText) + + displayHeader(`Details`) + const applicationRow = { + 'WG application ID': application.wgApplicationId, + 'Application ID': application.applicationId, + 'Member handle': application.member?.handle.toString() || chalk.red('NONE'), + 'Role account': application.roleAccout.toString(), + Stage: application.stage, + 'Application stake': application.stakes.application, + 'Role stake': application.stakes.role, + 'Total stake': Object.values(application.stakes).reduce((a, b) => a + b), + } + displayCollapsedRow(applicationRow) + } +} diff --git a/cli/src/commands/working-groups/createOpening.ts b/cli/src/commands/working-groups/createOpening.ts new file mode 100644 index 0000000000..7c5cf43199 --- /dev/null +++ b/cli/src/commands/working-groups/createOpening.ts @@ -0,0 +1,89 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { ApiMethodArg, ApiMethodNamedArgs } from '../../Types' +import chalk from 'chalk' +import { flags } from '@oclif/command' +import { apiModuleByGroup } from '../../Api' +import WorkerOpeningOptions from '../../promptOptions/addWorkerOpening' +import { setDefaults } from '../../helpers/promptOptions' + +export default class WorkingGroupsCreateOpening extends WorkingGroupsCommandBase { + static description = 'Create working group opening (requires lead access)' + static flags = { + ...WorkingGroupsCommandBase.flags, + useDraft: flags.boolean({ + char: 'd', + description: + 'Whether to create the opening from existing draft.\n' + + 'If provided without --draftName - the list of choices will be displayed.', + }), + draftName: flags.string({ + char: 'n', + description: 'Name of the draft to create the opening from.', + dependsOn: ['useDraft'], + }), + createDraftOnly: flags.boolean({ + char: 'c', + description: + 'If provided - the extrinsic will not be executed. Use this flag if you only want to create a draft.', + }), + skipPrompts: flags.boolean({ + char: 's', + description: 'Whether to skip all prompts when adding from draft (will use all default values)', + dependsOn: ['useDraft'], + exclusive: ['createDraftOnly'], + }), + } + + async run() { + const account = await this.getRequiredSelectedAccount() + // lead-only gate + await this.getRequiredLead() + + const { flags } = this.parse(WorkingGroupsCreateOpening) + + const promptOptions = new WorkerOpeningOptions() + let defaultValues: ApiMethodNamedArgs | undefined + if (flags.useDraft) { + const draftName = flags.draftName || (await this.promptForOpeningDraft()) + defaultValues = await this.loadOpeningDraftParams(draftName) + setDefaults(promptOptions, defaultValues) + } + + if (!flags.skipPrompts) { + const module = apiModuleByGroup[this.group] + const method = 'addOpening' + + let saveDraft = false + let params: ApiMethodArg[] + if (flags.createDraftOnly) { + params = await this.promptForExtrinsicParams(module, method, promptOptions) + saveDraft = true + } else { + await this.requestAccountDecoding(account) // Prompt for password + params = await this.buildAndSendExtrinsic(account, module, method, promptOptions, true) + + saveDraft = await this.simplePrompt({ + message: 'Do you wish to save this opening as draft?', + type: 'confirm', + }) + } + + if (saveDraft) { + const draftName = await this.promptForNewOpeningDraftName() + this.saveOpeningDraft(draftName, params) + + this.log(chalk.green(`Opening draft ${chalk.white(draftName)} succesfully saved!`)) + } + } else { + await this.requestAccountDecoding(account) // Prompt for password + this.log(chalk.white('Sending the extrinsic...')) + await this.sendExtrinsic( + account, + apiModuleByGroup[this.group], + 'addOpening', + defaultValues!.map((v) => v.value) + ) + this.log(chalk.green('Opening succesfully created!')) + } + } +} diff --git a/cli/src/commands/working-groups/decreaseWorkerStake.ts b/cli/src/commands/working-groups/decreaseWorkerStake.ts new file mode 100644 index 0000000000..50924bdc50 --- /dev/null +++ b/cli/src/commands/working-groups/decreaseWorkerStake.ts @@ -0,0 +1,54 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { apiModuleByGroup } from '../../Api' +import { Balance } from '@polkadot/types/interfaces' +import { formatBalance } from '@polkadot/util' +import { minMaxInt } from '../../validators/common' +import chalk from 'chalk' +import { createParamOptions } from '../../helpers/promptOptions' + +export default class WorkingGroupsDecreaseWorkerStake extends WorkingGroupsCommandBase { + static description = + 'Decreases given worker stake by an amount that will be returned to the worker role account. ' + + 'Requires lead access.' + + static args = [ + { + name: 'workerId', + required: true, + description: 'Worker ID', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const { args } = this.parse(WorkingGroupsDecreaseWorkerStake) + + const account = await this.getRequiredSelectedAccount() + // Lead-only gate + await this.getRequiredLead() + + const workerId = parseInt(args.workerId) + const groupMember = await this.getWorkerWithStakeForLeadAction(workerId) + + this.log(chalk.white('Current worker stake: ', formatBalance(groupMember.stake))) + const balanceValidator = minMaxInt(1, groupMember.stake.toNumber()) + const balance = (await this.promptForParam( + 'Balance', + createParamOptions('amount', undefined, balanceValidator) + )) as Balance + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'decreaseStake', [workerId, balance]) + + this.log( + chalk.green( + `${chalk.white(formatBalance(balance))} from worker ${chalk.white(workerId)} stake ` + + `has been returned to worker's role account (${chalk.white(groupMember.roleAccount.toString())})!` + ) + ) + } +} diff --git a/cli/src/commands/working-groups/evictWorker.ts b/cli/src/commands/working-groups/evictWorker.ts new file mode 100644 index 0000000000..0b3990310b --- /dev/null +++ b/cli/src/commands/working-groups/evictWorker.ts @@ -0,0 +1,55 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { apiModuleByGroup } from '../../Api' +import { formatBalance } from '@polkadot/util' +import chalk from 'chalk' +import { createParamOptions } from '../../helpers/promptOptions' + +export default class WorkingGroupsEvictWorker extends WorkingGroupsCommandBase { + static description = 'Evicts given worker. Requires lead access.' + static args = [ + { + name: 'workerId', + required: true, + description: 'Worker ID', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const { args } = this.parse(WorkingGroupsEvictWorker) + + const account = await this.getRequiredSelectedAccount() + // Lead-only gate + await this.getRequiredLead() + + const workerId = parseInt(args.workerId) + // This will also make sure the worker is valid + const groupMember = await this.getWorkerForLeadAction(workerId) + + // TODO: Terminate worker text limits? (minMaxStr) + const rationale = await this.promptForParam('Bytes', createParamOptions('rationale')) + const shouldSlash = groupMember.stake + ? await this.simplePrompt({ + message: `Should the worker stake (${formatBalance(groupMember.stake)}) be slashed?`, + type: 'confirm', + default: false, + }) + : false + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'terminateRole', [ + workerId, + rationale, + shouldSlash, + ]) + + this.log(chalk.green(`Worker ${chalk.white(workerId)} has been evicted!`)) + if (shouldSlash) { + this.log(chalk.green(`Worker stake totalling ${chalk.white(formatBalance(groupMember.stake))} has been slashed!`)) + } + } +} diff --git a/cli/src/commands/working-groups/fillOpening.ts b/cli/src/commands/working-groups/fillOpening.ts new file mode 100644 index 0000000000..117c19579b --- /dev/null +++ b/cli/src/commands/working-groups/fillOpening.ts @@ -0,0 +1,48 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { OpeningStatus } from '../../Types' +import { apiModuleByGroup } from '../../Api' +import chalk from 'chalk' +import { createParamOptions } from '../../helpers/promptOptions' + +export default class WorkingGroupsFillOpening extends WorkingGroupsCommandBase { + static description = "Allows filling working group opening that's currently in review. Requires lead access." + static args = [ + { + name: 'wgOpeningId', + required: true, + description: 'Working Group Opening ID', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const { args } = this.parse(WorkingGroupsFillOpening) + + const account = await this.getRequiredSelectedAccount() + // Lead-only gate + await this.getRequiredLead() + + const openingId = parseInt(args.wgOpeningId) + const opening = await this.getOpeningForLeadAction(openingId, OpeningStatus.InReview) + + const applicationIds = await this.promptForApplicationsToAccept(opening) + const rewardPolicyOpt = await this.promptForParam(`Option`, createParamOptions('RewardPolicy')) + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'fillOpening', [ + openingId, + applicationIds, + rewardPolicyOpt, + ]) + + this.log(chalk.green(`Opening ${chalk.white(openingId)} succesfully filled!`)) + this.log( + chalk.green('Accepted working group application IDs: ') + + chalk.white(applicationIds.length ? applicationIds.join(chalk.green(', ')) : 'NONE') + ) + } +} diff --git a/cli/src/commands/working-groups/increaseStake.ts b/cli/src/commands/working-groups/increaseStake.ts new file mode 100644 index 0000000000..e17b3c01a5 --- /dev/null +++ b/cli/src/commands/working-groups/increaseStake.ts @@ -0,0 +1,46 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { apiModuleByGroup } from '../../Api' +import { Balance } from '@polkadot/types/interfaces' +import { formatBalance } from '@polkadot/util' +import { positiveInt } from '../../validators/common' +import chalk from 'chalk' +import ExitCodes from '../../ExitCodes' +import { createParamOptions } from '../../helpers/promptOptions' + +export default class WorkingGroupsIncreaseStake extends WorkingGroupsCommandBase { + static description = 'Increases current role (lead/worker) stake. Requires active role account to be selected.' + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const account = await this.getRequiredSelectedAccount() + // Worker-only gate + const worker = await this.getRequiredWorker() + + if (!worker.stake) { + this.error('Cannot increase stake. No associated role stake profile found!', { exit: ExitCodes.InvalidInput }) + } + + this.log(chalk.white('Current stake: ', formatBalance(worker.stake))) + const balance = (await this.promptForParam( + 'Balance', + createParamOptions('amount', undefined, positiveInt()) + )) as Balance + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'increaseStake', [ + worker.workerId, + balance, + ]) + + this.log( + chalk.green( + `Worker ${chalk.white(worker.workerId.toNumber())} stake has been increased by ${chalk.white( + formatBalance(balance) + )}` + ) + ) + } +} diff --git a/cli/src/commands/working-groups/leaveRole.ts b/cli/src/commands/working-groups/leaveRole.ts new file mode 100644 index 0000000000..865b2addeb --- /dev/null +++ b/cli/src/commands/working-groups/leaveRole.ts @@ -0,0 +1,28 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { apiModuleByGroup } from '../../Api' +import { minMaxStr } from '../../validators/common' +import chalk from 'chalk' +import { createParamOptions } from '../../helpers/promptOptions' + +export default class WorkingGroupsLeaveRole extends WorkingGroupsCommandBase { + static description = 'Leave the worker or lead role associated with currently selected account.' + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const account = await this.getRequiredSelectedAccount() + // Worker-only gate + const worker = await this.getRequiredWorker() + + const constraint = await this.getApi().workerExitRationaleConstraint(this.group) + const rationaleValidator = minMaxStr(constraint.min.toNumber(), constraint.max.toNumber()) + const rationale = await this.promptForParam('Bytes', createParamOptions('rationale', undefined, rationaleValidator)) + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'leaveRole', [worker.workerId, rationale]) + + this.log(chalk.green(`Succesfully left the role! (worker id: ${chalk.white(worker.workerId.toNumber())})`)) + } +} diff --git a/cli/src/commands/working-groups/opening.ts b/cli/src/commands/working-groups/opening.ts new file mode 100644 index 0000000000..9dfe75d01e --- /dev/null +++ b/cli/src/commands/working-groups/opening.ts @@ -0,0 +1,89 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { displayTable, displayCollapsedRow, displayHeader } from '../../helpers/display' +import _ from 'lodash' +import { OpeningStatus, GroupOpeningStage, GroupOpeningStakes, UnstakingPeriodsKey } from '../../Types' +import { StakingAmountLimitModeKeys, StakingPolicy } from '@joystream/types/hiring' +import { formatBalance } from '@polkadot/util' +import chalk from 'chalk' + +export default class WorkingGroupsOpening extends WorkingGroupsCommandBase { + static description = 'Shows an overview of given working group opening by Working Group Opening ID' + static args = [ + { + name: 'wgOpeningId', + required: true, + description: 'Working Group Opening ID', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + stageColumns(stage: GroupOpeningStage) { + const { status, date, block } = stage + const statusTimeHeader = status === OpeningStatus.WaitingToBegin ? 'Starts at' : 'Last status change' + return { + Stage: _.startCase(status), + [statusTimeHeader]: + date && block + ? `~ ${date.toLocaleTimeString()} ${date.toLocaleDateString()} (#${block})` + : (block && `#${block}`) || '?', + } + } + + formatStake(stake: StakingPolicy | undefined) { + if (!stake) return 'NONE' + const { amount, amount_mode: amountMode } = stake + return amountMode.type === StakingAmountLimitModeKeys.AtLeast + ? `>= ${formatBalance(amount)}` + : `== ${formatBalance(amount)}` + } + + stakeColumns(stakes: GroupOpeningStakes) { + const { role, application } = stakes + return { + 'Application stake': this.formatStake(application), + 'Role stake': this.formatStake(role), + } + } + + async run() { + const { args } = this.parse(WorkingGroupsOpening) + + const opening = await this.getApi().groupOpening(this.group, parseInt(args.wgOpeningId)) + + displayHeader('Human readable text') + this.jsonPrettyPrint(opening.opening.human_readable_text.toString()) + + displayHeader('Opening details') + const openingRow = { + 'WG Opening ID': opening.wgOpeningId, + 'Opening ID': opening.openingId, + Type: opening.type.type, + ...this.stageColumns(opening.stage), + ...this.stakeColumns(opening.stakes), + } + displayCollapsedRow(openingRow) + + displayHeader('Unstaking periods') + const periodsRow: { [k: string]: string } = {} + for (const key of Object.keys(opening.unstakingPeriods).sort()) { + const displayKey = _.startCase(key) + ': ' + periodsRow[displayKey] = opening.unstakingPeriods[key as UnstakingPeriodsKey].toLocaleString() + ' blocks' + } + displayCollapsedRow(periodsRow) + + displayHeader(`Applications (${opening.applications.length})`) + const applicationsRows = opening.applications.map((a) => ({ + 'WG appl. ID': a.wgApplicationId, + 'Appl. ID': a.applicationId, + Member: a.member?.handle.toString() || chalk.red('NONE'), + Stage: a.stage, + 'Appl. stake': a.stakes.application, + 'Role stake': a.stakes.role, + 'Total stake': Object.values(a.stakes).reduce((a, b) => a + b), + })) + displayTable(applicationsRows, 5) + } +} diff --git a/cli/src/commands/working-groups/openings.ts b/cli/src/commands/working-groups/openings.ts new file mode 100644 index 0000000000..ccf04960d1 --- /dev/null +++ b/cli/src/commands/working-groups/openings.ts @@ -0,0 +1,22 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { displayTable } from '../../helpers/display' +import _ from 'lodash' + +export default class WorkingGroupsOpenings extends WorkingGroupsCommandBase { + static description = 'Shows an overview of given working group openings' + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const openings = await this.getApi().openingsByGroup(this.group) + + const openingsRows = openings.map((o) => ({ + 'WG Opening ID': o.wgOpeningId, + Type: o.type.type, + Stage: `${_.startCase(o.stage.status)}${o.stage.block ? ` (#${o.stage.block})` : ''}`, + Applications: o.applications.length, + })) + displayTable(openingsRows, 5) + } +} diff --git a/cli/src/commands/working-groups/overview.ts b/cli/src/commands/working-groups/overview.ts new file mode 100644 index 0000000000..e206379c19 --- /dev/null +++ b/cli/src/commands/working-groups/overview.ts @@ -0,0 +1,49 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { displayHeader, displayNameValueTable, displayTable, shortAddress } from '../../helpers/display' +import { formatBalance } from '@polkadot/util' + +import chalk from 'chalk' + +export default class WorkingGroupsOverview extends WorkingGroupsCommandBase { + static description = 'Shows an overview of given working group (current lead and workers)' + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const lead = await this.getApi().groupLead(this.group) + const members = await this.getApi().groupMembers(this.group) + + displayHeader('Group lead') + if (lead) { + displayNameValueTable([ + { name: 'Member id:', value: lead.memberId.toString() }, + { name: 'Member handle:', value: lead.profile.handle.toString() }, + { name: 'Role account:', value: lead.roleAccount.toString() }, + ]) + } else { + this.log(chalk.yellow('No lead assigned!')) + } + + const accounts = this.fetchAccounts() + + displayHeader('Members') + const membersRows = members.map((m) => ({ + 'Worker id': m.workerId.toString(), + 'Member id': m.memberId.toString(), + 'Member handle': m.profile.handle.toString(), + Stake: formatBalance(m.stake), + Earned: formatBalance(m.reward?.totalRecieved), + 'Role account': shortAddress(m.roleAccount), + '': + (lead?.workerId.eq(m.workerId) ? '\u{2B50}' : ' ') + + ' ' + + (accounts.some((a) => a.address === m.roleAccount.toString()) ? '\u{1F511}' : ' '), + })) + displayTable(membersRows, 5) + + displayHeader('Legend') + this.log('\u{2B50} - Leader') + this.log('\u{1F511} - Role key available in CLI') + } +} diff --git a/cli/src/commands/working-groups/slashWorker.ts b/cli/src/commands/working-groups/slashWorker.ts new file mode 100644 index 0000000000..f14e4ed790 --- /dev/null +++ b/cli/src/commands/working-groups/slashWorker.ts @@ -0,0 +1,52 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { apiModuleByGroup } from '../../Api' +import { Balance } from '@polkadot/types/interfaces' +import { formatBalance } from '@polkadot/util' +import { minMaxInt } from '../../validators/common' +import chalk from 'chalk' +import { createParamOptions } from '../../helpers/promptOptions' + +export default class WorkingGroupsSlashWorker extends WorkingGroupsCommandBase { + static description = 'Slashes given worker stake. Requires lead access.' + static args = [ + { + name: 'workerId', + required: true, + description: 'Worker ID', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const { args } = this.parse(WorkingGroupsSlashWorker) + + const account = await this.getRequiredSelectedAccount() + // Lead-only gate + await this.getRequiredLead() + + const workerId = parseInt(args.workerId) + const groupMember = await this.getWorkerWithStakeForLeadAction(workerId) + + this.log(chalk.white('Current worker stake: ', formatBalance(groupMember.stake))) + const balanceValidator = minMaxInt(1, groupMember.stake.toNumber()) + const balance = (await this.promptForParam( + 'Balance', + createParamOptions('amount', undefined, balanceValidator) + )) as Balance + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'slashStake', [workerId, balance]) + + this.log( + chalk.green( + `${chalk.white(formatBalance(balance))} from worker ${chalk.white( + workerId + )} stake has been succesfully slashed!` + ) + ) + } +} diff --git a/cli/src/commands/working-groups/startAcceptingApplications.ts b/cli/src/commands/working-groups/startAcceptingApplications.ts new file mode 100644 index 0000000000..92907c4bbb --- /dev/null +++ b/cli/src/commands/working-groups/startAcceptingApplications.ts @@ -0,0 +1,38 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { OpeningStatus } from '../../Types' +import { apiModuleByGroup } from '../../Api' +import chalk from 'chalk' + +export default class WorkingGroupsStartAcceptingApplications extends WorkingGroupsCommandBase { + static description = 'Changes the status of pending opening to "Accepting applications". Requires lead access.' + static args = [ + { + name: 'wgOpeningId', + required: true, + description: 'Working Group Opening ID', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const { args } = this.parse(WorkingGroupsStartAcceptingApplications) + + const account = await this.getRequiredSelectedAccount() + // Lead-only gate + await this.getRequiredLead() + + const openingId = parseInt(args.wgOpeningId) + await this.validateOpeningForLeadAction(openingId, OpeningStatus.WaitingToBegin) + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'acceptApplications', [openingId]) + + this.log( + chalk.green(`Opening ${chalk.white(openingId)} status changed to: ${chalk.white('Accepting Applications')}`) + ) + } +} diff --git a/cli/src/commands/working-groups/startReviewPeriod.ts b/cli/src/commands/working-groups/startReviewPeriod.ts new file mode 100644 index 0000000000..d92c824578 --- /dev/null +++ b/cli/src/commands/working-groups/startReviewPeriod.ts @@ -0,0 +1,36 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { OpeningStatus } from '../../Types' +import { apiModuleByGroup } from '../../Api' +import chalk from 'chalk' + +export default class WorkingGroupsStartReviewPeriod extends WorkingGroupsCommandBase { + static description = 'Changes the status of active opening to "In review". Requires lead access.' + static args = [ + { + name: 'wgOpeningId', + required: true, + description: 'Working Group Opening ID', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const { args } = this.parse(WorkingGroupsStartReviewPeriod) + + const account = await this.getRequiredSelectedAccount() + // Lead-only gate + await this.getRequiredLead() + + const openingId = parseInt(args.wgOpeningId) + await this.validateOpeningForLeadAction(openingId, OpeningStatus.AcceptingApplications) + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'beginApplicantReview', [openingId]) + + this.log(chalk.green(`Opening ${chalk.white(openingId)} status changed to: ${chalk.white('In Review')}`)) + } +} diff --git a/cli/src/commands/working-groups/terminateApplication.ts b/cli/src/commands/working-groups/terminateApplication.ts new file mode 100644 index 0000000000..683893fd6c --- /dev/null +++ b/cli/src/commands/working-groups/terminateApplication.ts @@ -0,0 +1,37 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { apiModuleByGroup } from '../../Api' +import { ApplicationStageKeys } from '@joystream/types/hiring' +import chalk from 'chalk' + +export default class WorkingGroupsTerminateApplication extends WorkingGroupsCommandBase { + static description = 'Terminates given working group application. Requires lead access.' + static args = [ + { + name: 'wgApplicationId', + required: true, + description: 'Working Group Application ID', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const { args } = this.parse(WorkingGroupsTerminateApplication) + + const account = await this.getRequiredSelectedAccount() + // Lead-only gate + await this.getRequiredLead() + + const applicationId = parseInt(args.wgApplicationId) + // We don't really need the application itself here, so this one is just for validation purposes + await this.getApplicationForLeadAction(applicationId, ApplicationStageKeys.Active) + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'terminateApplication', [applicationId]) + + this.log(chalk.green(`Application ${chalk.white(applicationId)} has been succesfully terminated!`)) + } +} diff --git a/cli/src/commands/working-groups/updateRewardAccount.ts b/cli/src/commands/working-groups/updateRewardAccount.ts new file mode 100644 index 0000000000..cef8fc41e3 --- /dev/null +++ b/cli/src/commands/working-groups/updateRewardAccount.ts @@ -0,0 +1,48 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { apiModuleByGroup } from '../../Api' +import { validateAddress } from '../../helpers/validation' +import chalk from 'chalk' +import ExitCodes from '../../ExitCodes' + +export default class WorkingGroupsUpdateRewardAccount extends WorkingGroupsCommandBase { + static description = 'Updates the worker/lead reward account (requires current role account to be selected)' + static args = [ + { + name: 'accountAddress', + required: false, + description: 'New reward account address (if omitted, one of the existing CLI accounts can be selected)', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const { args } = this.parse(WorkingGroupsUpdateRewardAccount) + + const account = await this.getRequiredSelectedAccount() + // Worker-only gate + const worker = await this.getRequiredWorker() + + if (!worker.reward) { + this.error('There is no reward relationship associated with this role!', { exit: ExitCodes.InvalidInput }) + } + + let newRewardAccount: string = args.accountAddress + if (!newRewardAccount) { + const accounts = await this.fetchAccounts() + newRewardAccount = (await this.promptForAccount(accounts, undefined, 'Choose the new reward account')).address + } + validateAddress(newRewardAccount) + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'updateRewardAccount', [ + worker.workerId, + newRewardAccount, + ]) + + this.log(chalk.green(`Succesfully updated the reward account to: ${chalk.white(newRewardAccount)})`)) + } +} diff --git a/cli/src/commands/working-groups/updateRoleAccount.ts b/cli/src/commands/working-groups/updateRoleAccount.ts new file mode 100644 index 0000000000..38ba8e9edc --- /dev/null +++ b/cli/src/commands/working-groups/updateRoleAccount.ts @@ -0,0 +1,58 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { apiModuleByGroup } from '../../Api' +import { validateAddress } from '../../helpers/validation' +import chalk from 'chalk' + +export default class WorkingGroupsUpdateRoleAccount extends WorkingGroupsCommandBase { + static description = 'Updates the worker/lead role account. Requires member controller account to be selected' + static args = [ + { + name: 'accountAddress', + required: false, + description: 'New role account address (if omitted, one of the existing CLI accounts can be selected)', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + async run() { + const { args } = this.parse(WorkingGroupsUpdateRoleAccount) + + const account = await this.getRequiredSelectedAccount() + const worker = await this.getRequiredWorkerByMemberController() + + const cliAccounts = await this.fetchAccounts() + let newRoleAccount: string = args.accountAddress + if (!newRoleAccount) { + newRoleAccount = (await this.promptForAccount(cliAccounts, undefined, 'Choose the new role account')).address + } + validateAddress(newRoleAccount) + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'updateRoleAccount', [ + worker.workerId, + newRoleAccount, + ]) + + this.log(chalk.green(`Succesfully updated the role account to: ${chalk.white(newRoleAccount)})`)) + + const matchingAccount = cliAccounts.find((account) => account.address === newRoleAccount) + if (matchingAccount) { + const switchAccount = await this.simplePrompt({ + type: 'confirm', + message: 'Do you want to switch the currenly selected CLI account to the new role account?', + default: false, + }) + if (switchAccount) { + await this.setSelectedAccount(matchingAccount) + this.log( + chalk.green('Account switched to: ') + + chalk.white(`${matchingAccount.meta.name} (${matchingAccount.address})`) + ) + } + } + } +} diff --git a/cli/src/commands/working-groups/updateWorkerReward.ts b/cli/src/commands/working-groups/updateWorkerReward.ts new file mode 100644 index 0000000000..ac55892611 --- /dev/null +++ b/cli/src/commands/working-groups/updateWorkerReward.ts @@ -0,0 +1,67 @@ +import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase' +import { apiModuleByGroup } from '../../Api' +import { formatBalance } from '@polkadot/util' +import chalk from 'chalk' +import { Reward } from '../../Types' +import { positiveInt } from '../../validators/common' +import { createParamOptions } from '../../helpers/promptOptions' +import ExitCodes from '../../ExitCodes' + +export default class WorkingGroupsUpdateWorkerReward extends WorkingGroupsCommandBase { + static description = "Change given worker's reward (amount only). Requires lead access." + static args = [ + { + name: 'workerId', + required: true, + description: 'Worker ID', + }, + ] + + static flags = { + ...WorkingGroupsCommandBase.flags, + } + + formatReward(reward?: Reward) { + return reward + ? formatBalance(reward.value) + + (reward.interval && ` / ${reward.interval} block(s)`) + + (reward.nextPaymentBlock && ` (next payment: #${reward.nextPaymentBlock})`) + : 'NONE' + } + + async run() { + const { args } = this.parse(WorkingGroupsUpdateWorkerReward) + + const account = await this.getRequiredSelectedAccount() + // Lead-only gate + await this.getRequiredLead() + + const workerId = parseInt(args.workerId) + // This will also make sure the worker is valid + const groupMember = await this.getWorkerForLeadAction(workerId) + + const { reward } = groupMember + + if (!reward) { + this.error('There is no reward relationship associated with this worker!', { exit: ExitCodes.InvalidInput }) + } + + console.log(chalk.white(`Current worker reward: ${this.formatReward(reward)}`)) + + const newRewardValue = await this.promptForParam( + 'BalanceOfMint', + createParamOptions('new_amount', undefined, positiveInt()) + ) + + await this.requestAccountDecoding(account) + + await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'updateRewardAmount', [ + workerId, + newRewardValue, + ]) + + const updatedGroupMember = await this.getApi().groupMember(this.group, workerId) + this.log(chalk.green(`Worker ${chalk.white(workerId)} reward has been updated!`)) + this.log(chalk.green(`New worker reward: ${chalk.white(this.formatReward(updatedGroupMember.reward))}`)) + } +} diff --git a/cli/src/helpers/display.ts b/cli/src/helpers/display.ts index 13a189c938..2ffb87d67b 100644 --- a/cli/src/helpers/display.ts +++ b/cli/src/helpers/display.ts @@ -1,33 +1,72 @@ -import { cli } from 'cli-ux'; -import chalk from 'chalk'; -import { NameValueObj } from '../Types'; - -export function displayHeader(caption: string, placeholderSign: string = '_', size: number = 50) { - let singsPerSide: number = Math.floor((size - (caption.length + 2)) / 2); - let finalStr: string = ''; - for (let i = 0; i < singsPerSide; ++i) finalStr += placeholderSign; - finalStr += ` ${ caption} `; - while (finalStr.length < size) finalStr += placeholderSign; - - process.stdout.write("\n" + chalk.bold.blueBright(finalStr) + "\n\n"); +import { cli, Table } from 'cli-ux' +import chalk from 'chalk' +import { NameValueObj } from '../Types' +import { AccountId } from '@polkadot/types/interfaces' + +export function displayHeader(caption: string, placeholderSign = '_', size = 50) { + const singsPerSide: number = Math.floor((size - (caption.length + 2)) / 2) + let finalStr = '' + for (let i = 0; i < singsPerSide; ++i) finalStr += placeholderSign + finalStr += ` ${caption} ` + while (finalStr.length < size) finalStr += placeholderSign + + process.stdout.write('\n' + chalk.bold.blueBright(finalStr) + '\n\n') } export function displayNameValueTable(rows: NameValueObj[]) { - cli.table( - rows, - { - name: { minWidth: 30, get: row => chalk.bold.white(row.name) }, - value: { get: row => chalk.white(row.value) } - }, - { 'no-header': true } - ); + cli.table( + rows, + { + name: { minWidth: 30, get: (row) => chalk.bold.white(row.name) }, + value: { get: (row) => chalk.white(row.value) }, + }, + { 'no-header': true } + ) +} + +export function displayCollapsedRow(row: { [k: string]: string | number }) { + const collapsedRow: NameValueObj[] = Object.keys(row).map((name) => ({ + name, + value: typeof row[name] === 'string' ? (row[name] as string) : row[name].toString(), + })) + + displayNameValueTable(collapsedRow) +} + +export function displayCollapsedTable(rows: { [k: string]: string | number }[]) { + for (const row of rows) displayCollapsedRow(row) +} + +export function displayTable(rows: { [k: string]: string | number }[], cellHorizontalPadding = 0) { + if (!rows.length) { + return + } + const maxLength = (columnName: string) => + rows.reduce((maxLength, row) => { + const val = row[columnName] + const valLength = typeof val === 'string' ? val.length : val.toString().length + return Math.max(maxLength, valLength) + }, columnName.length) + const columnDef = (columnName: string) => ({ + get: (row: typeof rows[number]) => chalk.white(`${row[columnName]}`), + minWidth: maxLength(columnName) + cellHorizontalPadding, + }) + const columns: Table.table.Columns<{ [k: string]: string }> = {} + Object.keys(rows[0]).forEach((columnName) => (columns[columnName] = columnDef(columnName))) + cli.table(rows, columns) } export function toFixedLength(text: string, length: number, spacesOnLeft = false): string { - if (text.length > length && length > 3) { - return text.slice(0, length-3) + '...'; - } - while(text.length < length) { spacesOnLeft ? text = ' '+text : text += ' ' }; + if (text.length > length && length > 3) { + return text.slice(0, length - 3) + '...' + } + while (text.length < length) { + spacesOnLeft ? (text = ' ' + text) : (text += ' ') + } + + return text +} - return text; +export function shortAddress(address: AccountId | string): string { + return address.toString().substr(0, 6) + '...' + address.toString().substr(-6) } diff --git a/cli/src/helpers/promptOptions.ts b/cli/src/helpers/promptOptions.ts new file mode 100644 index 0000000000..63041f6dee --- /dev/null +++ b/cli/src/helpers/promptOptions.ts @@ -0,0 +1,30 @@ +import { ApiParamsOptions, ApiMethodNamedArgs, ApiParamOptions, ApiMethodArg } from '../Types' +import { Validator } from 'inquirer' + +export function setDefaults(promptOptions: ApiParamsOptions, defaultValues: ApiMethodNamedArgs) { + for (const defaultValue of defaultValues) { + const { name: paramName, value: paramValue } = defaultValue + const paramOptions = promptOptions[paramName] + if (paramOptions && paramOptions.value) { + paramOptions.value.default = paramValue + } else if (paramOptions) { + promptOptions[paramName].value = { default: paramValue } + } else { + promptOptions[paramName] = { value: { default: paramValue } } + } + } +} + +// Temporary(?) helper for easier creation of common ApiParamOptions +export function createParamOptions( + forcedName?: string, + defaultValue?: ApiMethodArg | undefined, + validator?: Validator +): ApiParamOptions { + const paramOptions: ApiParamOptions = { forcedName, validator } + if (defaultValue) { + paramOptions.value = { default: defaultValue } + } + + return paramOptions +} diff --git a/cli/src/helpers/validation.ts b/cli/src/helpers/validation.ts index cce907b13d..333b9b2c74 100644 --- a/cli/src/helpers/validation.ts +++ b/cli/src/helpers/validation.ts @@ -1,19 +1,19 @@ -import BN from 'bn.js'; -import ExitCodes from '../ExitCodes'; -import { decodeAddress } from '@polkadot/util-crypto'; -import { DerivedBalances } from '@polkadot/api-derive/types'; -import { CLIError } from '@oclif/errors'; +import BN from 'bn.js' +import ExitCodes from '../ExitCodes' +import { decodeAddress } from '@polkadot/util-crypto' +import { DeriveBalancesAll } from '@polkadot/api-derive/types' +import { CLIError } from '@oclif/errors' -export function validateAddress(address: string, errorMessage: string = 'Invalid address'): void { - try { - decodeAddress(address); - } catch (e) { - throw new CLIError(errorMessage, { exit: ExitCodes.InvalidInput }); - } +export function validateAddress(address: string, errorMessage = 'Invalid address'): void { + try { + decodeAddress(address) + } catch (e) { + throw new CLIError(errorMessage, { exit: ExitCodes.InvalidInput }) + } } -export function checkBalance(accBalances: DerivedBalances, requiredBalance: BN): void { - if (requiredBalance.gt(accBalances.availableBalance)) { - throw new CLIError('Not enough balance available', { exit: ExitCodes.InvalidInput }); - } +export function checkBalance(accBalances: DeriveBalancesAll, requiredBalance: BN): void { + if (requiredBalance.gt(accBalances.availableBalance)) { + throw new CLIError('Not enough balance available', { exit: ExitCodes.InvalidInput }) + } } diff --git a/cli/src/index.ts b/cli/src/index.ts index 4caa481eee..088abcf778 100644 --- a/cli/src/index.ts +++ b/cli/src/index.ts @@ -1 +1 @@ -export {run} from '@oclif/command' +export { run } from '@oclif/command' diff --git a/cli/src/promptOptions/addWorkerOpening.ts b/cli/src/promptOptions/addWorkerOpening.ts new file mode 100644 index 0000000000..b6ad3a3b71 --- /dev/null +++ b/cli/src/promptOptions/addWorkerOpening.ts @@ -0,0 +1,59 @@ +import { ApiParamsOptions, ApiParamOptions, HRTStruct } from '../Types' +import { OpeningType, WorkingGroupOpeningPolicyCommitment } from '@joystream/types/working-group' +import { SlashingTerms } from '@joystream/types/common' +import { Bytes } from '@polkadot/types' +import { schemaValidator } from '@joystream/types/hiring' +import { createType } from '@joystream/types' + +class OpeningPolicyCommitmentOptions implements ApiParamsOptions { + [paramName: string]: ApiParamOptions + public role_slashing_terms: ApiParamOptions = { + value: { + default: createType('SlashingTerms', { Unslashable: null }), + locked: true, + }, + } + + // Rename fields containing "curator" (solivg minor UI issue related to flat namespace) + public terminate_curator_application_stake_unstaking_period: ApiParamOptions = { + forcedName: 'terminate_application_stake_unstaking_period', + } + + public terminate_curator_role_stake_unstaking_period: ApiParamOptions = { + forcedName: 'terminate_role_stake_unstaking_period', + } + + public exit_curator_role_application_stake_unstaking_period: ApiParamOptions = { + forcedName: 'exit_role_application_stake_unstaking_period', + } + + public exit_curator_role_stake_unstaking_period: ApiParamOptions = { + forcedName: 'exit_role_stake_unstaking_period', + } +} + +class AddWrokerOpeningOptions implements ApiParamsOptions { + [paramName: string]: ApiParamOptions + // Lock value for opening_type + public opening_type: ApiParamOptions = { + value: { + default: createType('OpeningType', { Worker: null }), + locked: true, + }, + } + + // Json schema for human_readable_text + public human_readable_text: ApiParamOptions = { + jsonSchema: { + schemaValidator, + struct: HRTStruct, + }, + } + + // Lock value for role_slashing_terms + public commitment: ApiParamOptions = { + nestedOptions: new OpeningPolicyCommitmentOptions(), + } +} + +export default AddWrokerOpeningOptions diff --git a/cli/src/validators/common.ts b/cli/src/validators/common.ts new file mode 100644 index 0000000000..acafc33edc --- /dev/null +++ b/cli/src/validators/common.ts @@ -0,0 +1,51 @@ +// +// Validators for console input +// (usable with inquirer package) +// + +type Validator = (value: any) => boolean | string + +export const isInt = (message?: string) => (value: any) => + (typeof value === 'number' && Math.floor(value) === value) || + (typeof value === 'string' && parseInt(value).toString() === value) + ? true + : message || 'The value must be an integer!' + +export const gte = (min: number, message?: string) => (value: any) => + parseFloat(value) >= min + ? true + : message?.replace('{min}', min.toString()) || `The value must be a number greater than or equal ${min}` + +export const lte = (max: number, message?: string) => (value: any) => + parseFloat(value) <= max + ? true + : message?.replace('{max}', max.toString()) || `The value must be less than or equal ${max}` + +export const minLen = (min: number, message?: string) => (value: any) => + typeof value === 'string' && value.length >= min + ? true + : message?.replace('{min}', min.toString()) || `The value should be at least ${min} character(s) long` + +export const maxLen = (max: number, message?: string) => (value: any) => + typeof value === 'string' && value.length <= max + ? true + : message?.replace('{max}', max.toString()) || `The value cannot be more than ${max} character(s) long` + +export const combined = (validators: Validator[], message?: string) => (value: any) => { + for (const validator of validators) { + const result = validator(value) + if (result !== true) { + return message || result + } + } + + return true +} + +export const positiveInt = (message?: string) => combined([isInt(), gte(0)], message) + +export const minMaxInt = (min: number, max: number, message?: string) => + combined([isInt(), gte(min), lte(max)], message?.replace('{min}', min.toString()).replace('{max}', max.toString())) + +export const minMaxStr = (min: number, max: number, message?: string) => + combined([minLen(min), maxLen(max)], message?.replace('{min}', min.toString()).replace('{max}', max.toString())) diff --git a/cli/test/commands/council/info.test.ts b/cli/test/commands/council/info.test.ts index 2d455f9eb6..70bdfe8b8b 100644 --- a/cli/test/commands/council/info.test.ts +++ b/cli/test/commands/council/info.test.ts @@ -1,11 +1,11 @@ -import {expect, test} from '@oclif/test' +import { expect, test } from '@oclif/test' describe('info', () => { test - .stdout() - .command(['council:info']) - .exit(0) - .it('displays "Council" string', ctx => { - expect(ctx.stdout).to.contain('Council') - }) + .stdout() + .command(['council:info']) + .exit(0) + .it('displays "Council" string', (ctx) => { + expect(ctx.stdout).to.contain('Council') + }) }) diff --git a/cli/test/tsconfig.json b/cli/test/tsconfig.json index 95898fcedf..460cf368f7 100644 --- a/cli/test/tsconfig.json +++ b/cli/test/tsconfig.json @@ -3,7 +3,5 @@ "compilerOptions": { "noEmit": true }, - "references": [ - {"path": ".."} - ] + "references": [{ "path": ".." }] } diff --git a/cli/tsconfig.json b/cli/tsconfig.json index c6477fa01e..5d2ca733f1 100644 --- a/cli/tsconfig.json +++ b/cli/tsconfig.json @@ -7,7 +7,13 @@ "rootDir": "src", "strict": true, "target": "es2017", - "esModuleInterop": true + "esModuleInterop": true, + "types" : [ "node" ], + "noUnusedLocals": true, + "baseUrl": ".", + "paths": { + "@polkadot/types/augment": ["../types/augment-codec/augment-types.ts"], + } }, "include": [ "src/**/*" diff --git a/devops/.eslintrc.js b/devops/.eslintrc.js new file mode 100644 index 0000000000..99979c2841 --- /dev/null +++ b/devops/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + env: { + node: true, + }, +} diff --git a/devops/ansible/build-and-run-tests-exported-chainspec-playbook.yml b/devops/ansible/build-and-run-tests-exported-chainspec-playbook.yml new file mode 100644 index 0000000000..d67c6f9d9a --- /dev/null +++ b/devops/ansible/build-and-run-tests-exported-chainspec-playbook.yml @@ -0,0 +1,22 @@ +- hosts: 127.0.0.1 + user: root + become: yes + become_method: sudo + + tasks: + + - name: install dependencies + include_role: + name: install_dependencies + + - name: alter block creation time + include_role: + name: alter_block_creation_time + + - name: build node + include_role: + name: build_docker_image + + - name: run tests + include_role: + name: run_tests_exported_chainspec diff --git a/devops/ansible/build-and-run-tests-single-node-playbook.yml b/devops/ansible/build-and-run-tests-single-node-playbook.yml new file mode 100644 index 0000000000..471580f8e4 --- /dev/null +++ b/devops/ansible/build-and-run-tests-single-node-playbook.yml @@ -0,0 +1,22 @@ +- hosts: 127.0.0.1 + user: root + become: yes + become_method: sudo + + tasks: + + - name: install dependencies + include_role: + name: install_dependencies + + - name: alter block creation time + include_role: + name: alter_block_creation_time + + - name: build node + include_role: + name: build_docker_image + + - name: run tests + include_role: + name: run_tests_single_node diff --git a/devops/ansible/build-and-run-tests-two-nodes-playbook.yml b/devops/ansible/build-and-run-tests-two-nodes-playbook.yml new file mode 100644 index 0000000000..ac2e14f1fc --- /dev/null +++ b/devops/ansible/build-and-run-tests-two-nodes-playbook.yml @@ -0,0 +1,22 @@ +- hosts: 127.0.0.1 + user: root + become: yes + become_method: sudo + + tasks: + + - name: install dependencies + include_role: + name: install_dependencies + + - name: alter block creation time + include_role: + name: alter_block_creation_time + + - name: build node + include_role: + name: build_docker_image + + - name: run tests + include_role: + name: run_tests_two_nodes diff --git a/devops/ansible/build-image-playbook.yml b/devops/ansible/build-image-playbook.yml new file mode 100644 index 0000000000..0177d89f63 --- /dev/null +++ b/devops/ansible/build-image-playbook.yml @@ -0,0 +1,18 @@ +- hosts: 127.0.0.1 + user: root + become: yes + become_method: sudo + + tasks: + + - name: install dependencies + include_role: + name: install_dependencies + + - name: alter block creation time + include_role: + name: alter_block_creation_time + + - name: build node + include_role: + name: build_docker_image diff --git a/devops/ansible/docker-compose.yml b/devops/ansible/docker-compose.yml new file mode 100644 index 0000000000..e1854ea00d --- /dev/null +++ b/devops/ansible/docker-compose.yml @@ -0,0 +1,34 @@ +version: "3" +services: + node_alice: + image: joystream/node-testing + container_name: alice + entrypoint: ./node --dev --alice --validator --unsafe-ws-external --rpc-cors=all + ports: + - "30333:30333" + - "9933:9933" + - "9944:9944" + networks: + testing_net: + ipv4_address: 172.28.1.1 + + node_bob: + image: joystream/node-testing + container_name: bob + entrypoint: ./node --dev --bob --validator --unsafe-ws-external --rpc-cors=all + ports: + - "30335:30333" + - "9935:9933" + - "9945:9944" + links: + - "node_alice:alice" + networks: + testing_net: + ipv4_address: 172.28.1.2 + +networks: + testing_net: + ipam: + driver: default + config: + - subnet: 172.28.0.0/16 diff --git a/devops/ansible/hosts b/devops/ansible/hosts new file mode 100644 index 0000000000..2be9cc2691 --- /dev/null +++ b/devops/ansible/hosts @@ -0,0 +1,2 @@ +[sites] +127.0.0.1 ansible_connection=local \ No newline at end of file diff --git a/devops/ansible/roles/alter_block_creation_time/tasks/main.yml b/devops/ansible/roles/alter_block_creation_time/tasks/main.yml new file mode 100644 index 0000000000..b669c985b9 --- /dev/null +++ b/devops/ansible/roles/alter_block_creation_time/tasks/main.yml @@ -0,0 +1,4 @@ +- name: alter block creation time + shell: ./scripts/alter-block-creation-time.sh + args: + chdir: ../../ diff --git a/devops/ansible/roles/build_docker_image/tasks/main.yml b/devops/ansible/roles/build_docker_image/tasks/main.yml new file mode 100644 index 0000000000..b9a293910f --- /dev/null +++ b/devops/ansible/roles/build_docker_image/tasks/main.yml @@ -0,0 +1,4 @@ +- name: create testing node docker image + shell: ./scripts/build-joystream-node-docker-image.sh + args: + chdir: ../../ diff --git a/devops/ansible/roles/install_dependencies/tasks/main.yml b/devops/ansible/roles/install_dependencies/tasks/main.yml new file mode 100644 index 0000000000..56d12254bc --- /dev/null +++ b/devops/ansible/roles/install_dependencies/tasks/main.yml @@ -0,0 +1,46 @@ +- name: install pip and npm on Debian + block: + - name: create temporary folder + file: + path: ../../.tmp + state: directory + - name: install pip using apt + apt: name=python-pip state=present + - name: install npm using apt + apt: name=npm state=present + when: ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu' + +- name: install pip on Mac + block: + - name: create temporary folder + file: + path: ../../.tmp + state: directory + - name: get pip installer using curl + get_url: + url: https://bootstrap.pypa.io/get-pip.py + dest: ../../.tmp/get-pip.py + - name: install pip + shell: python ../../.tmp/get-pip.py + when: ansible_distribution == 'MacOSX' + always: + - name: remove pip installer script + file: + path: ../../.tmp/get-pip.py + state: absent + +- name: install docker + pip: name=docker + +- name: Install yarn with npm + npm: + name: yarn + global: yes + +- name: Install pyrsistent + pip: + name: pyrsistent==0.16.0 + +- name: Install docker compose + pip: + name: docker-compose==1.26.2 diff --git a/devops/ansible/roles/run_tests_exported_chainspec/tasks/main.yml b/devops/ansible/roles/run_tests_exported_chainspec/tasks/main.yml new file mode 100644 index 0000000000..db1329bdcf --- /dev/null +++ b/devops/ansible/roles/run_tests_exported_chainspec/tasks/main.yml @@ -0,0 +1,38 @@ +- name: run network + block: + - name: yarn install for joystream types + shell: yarn workspace @joystream/types install + + - name: yarn build for joystream types + shell: yarn workspace @joystream/types build + + - name: yarn install for network tests + shell: yarn workspace joystream-testing install + + - name: run docker container + docker_container: + name: "joystream-node" + image: "joystream/node" + ports: + - "9944:9944" + mounts: + - target: /testnet-state + source: "{{ playbook_dir }}/../../testnets/nicaea-exported-state" + type: bind + read_only: yes + entrypoint: ./node --chain ../testnet-state/raw_chain_spec.json --alice --validator --unsafe-ws-external --rpc-cors=all + state: started + + - name: execute network tests + shell: yarn test >> ../../.tmp/tests.log + args: + chdir: ../../tests/network-tests/ + + always: + - name: display tests log + shell: cat ../../.tmp/tests.log + + - name: stop docker container + docker_container: + name: "joystream-node-testing" + state: absent diff --git a/devops/ansible/roles/run_tests_single_node/tasks/main.yml b/devops/ansible/roles/run_tests_single_node/tasks/main.yml new file mode 100644 index 0000000000..545b88a23a --- /dev/null +++ b/devops/ansible/roles/run_tests_single_node/tasks/main.yml @@ -0,0 +1,33 @@ +- name: run network + block: + - name: yarn install for joystream types + shell: yarn workspace @joystream/types install + + - name: yarn build for joystream types + shell: yarn workspace @joystream/types build + + - name: yarn install for network tests + shell: yarn workspace joystream-testing install + + - name: run docker container + docker_container: + name: "joystream-node" + image: "joystream/node" + ports: + - "9944:9944" + entrypoint: ./node --dev --alice --validator --unsafe-ws-external --rpc-cors=all + state: started + + - name: execute network tests + shell: yarn test >> ../../.tmp/tests.log + args: + chdir: ../../tests/network-tests/ + + always: + - name: display tests log + shell: cat ../../.tmp/tests.log + + - name: stop docker container + docker_container: + name: "joystream-node-testing" + state: absent diff --git a/devops/ansible/roles/run_tests_two_nodes/tasks/main.yml b/devops/ansible/roles/run_tests_two_nodes/tasks/main.yml new file mode 100644 index 0000000000..2d757add0b --- /dev/null +++ b/devops/ansible/roles/run_tests_two_nodes/tasks/main.yml @@ -0,0 +1,18 @@ +- name: run network + block: + + - name: run two nodes containerized network + docker_compose: + project_src: ./ + state: present + + - name: execute network tests + shell: yarn test >> ../../.tmp/tests.log + args: + chdir: ../../tests/network-tests/ + + always: + - name: stop containers + docker_compose: + project_src: ./ + state: absent diff --git a/devops/dockerfiles/node-and-runtime/Dockerfile b/devops/dockerfiles/node-and-runtime/Dockerfile index 405d46116f..0fbf99d9fd 100644 --- a/devops/dockerfiles/node-and-runtime/Dockerfile +++ b/devops/dockerfiles/node-and-runtime/Dockerfile @@ -4,7 +4,7 @@ WORKDIR /joystream COPY . /joystream # Build joystream-node and its dependencies - runtime -RUN cargo build --release -p joystream-node +RUN WASM_BUILD_TOOLCHAIN=nightly-2020-05-23 cargo build --release -p joystream-node FROM debian:stretch LABEL description="Joystream node" diff --git a/devops/dockerfiles/rust-builder/Dockerfile b/devops/dockerfiles/rust-builder/Dockerfile index c6e0d9283f..a7975bb27d 100644 --- a/devops/dockerfiles/rust-builder/Dockerfile +++ b/devops/dockerfiles/rust-builder/Dockerfile @@ -1,8 +1,8 @@ -FROM liuchong/rustup:1.43.0 AS builder +FROM liuchong/rustup:1.46.0 AS builder LABEL description="Rust and WASM build environment for joystream and substrate" WORKDIR /setup COPY setup.sh /setup ENV TERM=xterm -RUN ./setup.sh \ No newline at end of file +RUN ./setup.sh diff --git a/devops/eslint-config/index.js b/devops/eslint-config/index.js new file mode 100644 index 0000000000..cd0e0e8cb8 --- /dev/null +++ b/devops/eslint-config/index.js @@ -0,0 +1,78 @@ +// This config is used globally at the root of the repo, so it should be as thin +// as possible with rules that we absolutely require across all projects. +module.exports = { + env: { + es6: true, + }, + globals: { + Atomics: 'readonly', + SharedArrayBuffer: 'readonly', + }, + // We are relying on version that comes with @polkadot/dev + // Newest version is breaking pioneer! + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + ecmaVersion: 2019, + sourceType: 'module', + }, + extends: [ + 'standard', + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react/recommended', + // this is only in newer versions of eslint-plugin-react-hooks + // 'plugin:react-hooks/recommended', + 'plugin:prettier/recommended', + 'prettier/@typescript-eslint', + 'prettier/react', + 'prettier/standard', + ], + settings: { + react: { + version: 'detect', + }, + }, + rules: { + // drop these when using newer versions of eslint-plugin-react-hooks + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + // only cli projects should really have this rule, web apps + // should prefer using 'debug' package at least to allow control of + // output verbosity if logging to console. + 'no-console': 'off', + 'camelcase': 'off', + '@typescript-eslint/class-name-casing': 'off', + "@typescript-eslint/naming-convention": [ + "error", + { + selector: 'default', + format: ['camelCase'], + }, + { + selector: 'variable', + format: ['camelCase', 'UPPER_CASE', 'PascalCase'], + }, + { + selector: 'property', + format: [] // Don't force format of object properties, so they can be ie.: { "Some thing": 123 }, { some_thing: 123 } etc. + }, + { + selector: 'accessor', + format: ['camelCase', 'snake_case'] + }, + { + selector: 'enumMember', + format: ['PascalCase'] + }, + { + selector: 'typeLike', + format: [], + custom: { regex: '^([A-Z][a-z0-9]*_?)+', match: true }, // combined PascalCase and snake_case to allow ie. OpeningType_Worker + } + ], + }, + plugins: ['standard', '@typescript-eslint', 'react', 'react-hooks', 'prettier'], +} diff --git a/devops/eslint-config/package.json b/devops/eslint-config/package.json new file mode 100644 index 0000000000..6d3d79eabe --- /dev/null +++ b/devops/eslint-config/package.json @@ -0,0 +1,35 @@ +{ + "name": "@joystream/eslint-config", + "version": "1.0.0", + "description": "joystream eslint shared config", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/joystream/joystream.git" + }, + "author": "Joystream contributors", + "license": "MIT", + "bugs": { + "url": "https://github.com/joystream/joystream/issues" + }, + "homepage": "https://github.com/joystream/joystream#readme", + "peerDependencies": { + "eslint": "^7.6.0" + }, + "dependencies": { + "@typescript-eslint/eslint-plugin": "3.8.0", + "@typescript-eslint/parser": "3.8.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-prettier": "^3.1.3", + "eslint-plugin-react": "^7.20.5", + "eslint-plugin-react-hooks": "^4.0.8", + "eslint-config-standard": "^14.1.1", + "eslint-plugin-standard": "^4.0.1", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-node": "^11.1.0" + } +} diff --git a/devops/git-hooks/pre-push b/devops/git-hooks/pre-push index 553608c38a..ac5637b50e 100755 --- a/devops/git-hooks/pre-push +++ b/devops/git-hooks/pre-push @@ -1,10 +1,10 @@ #!/bin/sh set -e -echo '+cargo test --release --all' -BUILD_DUMMY_WASM_BINARY=1 cargo test --all - -echo '+cargo clippy --release --all -- -D warnings' -BUILD_DUMMY_WASM_BINARY=1 cargo clippy --all -- -D warnings +export WASM_BUILD_TOOLCHAIN=nightly-2020-05-23 +echo '+cargo clippy --all -- -D warnings' +BUILD_DUMMY_WASM_BINARY=1 cargo clippy --release --all -- -D warnings +echo '+cargo test --all' +cargo test --release --all diff --git a/devops/prettier-config/index.js b/devops/prettier-config/index.js new file mode 100644 index 0000000000..2a4aa73a90 --- /dev/null +++ b/devops/prettier-config/index.js @@ -0,0 +1,9 @@ +module.exports = { + singleQuote: true, + arrowParens: 'always', + useTabs: false, + tabWidth: 2, + semi: false, + trailingComma: 'es5', + quoteProps: 'preserve' +} diff --git a/devops/prettier-config/package.json b/devops/prettier-config/package.json new file mode 100644 index 0000000000..5233dd5fb7 --- /dev/null +++ b/devops/prettier-config/package.json @@ -0,0 +1,22 @@ +{ + "name": "@joystream/prettier-config", + "version": "1.0.0", + "description": "joystream prettier shared config", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/joystream/joystream.git" + }, + "author": "Joystream contributors", + "license": "MIT", + "bugs": { + "url": "https://github.com/joystream/joystream/issues" + }, + "homepage": "https://github.com/joystream/joystream#readme", + "peerDependencies": { + "prettier": ">= 2" + } +} diff --git a/devops/vscode/settings.json b/devops/vscode/settings.json new file mode 100644 index 0000000000..38ac1f6e46 --- /dev/null +++ b/devops/vscode/settings.json @@ -0,0 +1,10 @@ +{ + "eslint.workingDirectories": [ + "./cli", + "./pioneer", + "./tests/network-tests", + "./types", + "./storage-node", + "./atlas" + ] +} diff --git a/devops/vstore/classes.json b/devops/vstore/classes.json new file mode 100644 index 0000000000..ffb54d5347 --- /dev/null +++ b/devops/vstore/classes.json @@ -0,0 +1,766 @@ +[ + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x4d65646961204f626a656374", + "0x436c61737320666f72207265736f6c76696e67206120636f6e74656e7420656e7469747920746f20616e2061637475616c206d656469612066696c65206f72206c696e6b2e", + { + "entity_permissions": { "update": [0, 1, 2], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0, 1, 2], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x4c616e6775616765", + "0x436c61737320666f722073657474696e67206c616e67756167652e", + { + "entity_permissions": { "update": [0], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x436f6e74656e74204c6963656e7365", + "0x436c61737320666f722073706563696679696e6720746865206c6963656e736520756e64657220776869636820636f6e74656e74206973207075626c69736865642e", + { + "entity_permissions": { "update": [0], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x5075626c69636174696f6e20537461747573", + "0x436c61737320666f722073657474696e6720746865207075626c69636174696f6e20737461747573206f66206120636f6e74656e7420656e746974792e", + { + "entity_permissions": { "update": [0], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x4375726174696f6e20537461747573", + "0x436c61737320666f722063757261746f727320746f2073657420746865207075626c69636174696f6e20737461747573206f66206120636f6e74656e7420656e746974792e", + { + "entity_permissions": { "update": [0], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x466561747572656420436f6e74656e74", + "0x436c61737320666f722073657474696e6720666561747572656420636f6e74656e74206f6e2074686520706c6174666f726d2e", + { + "entity_permissions": { "update": [0], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x566964656f", + "0x436c61737320666f722067656e6572616c20766964656f73206e6f742061737369676e61626c6520746f2061206d6f726520737065636966696320766964656f20636f6e74656e7420747970652e", + { + "entity_permissions": { "update": [0, 1, 2], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0, 1, 2], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x566964656f2043617465676f7279", + "0x436c61737320666f722073657474696e67207468652063617465676f727920666f7220766964656f7320696e2074686520566964656f20636c6173732e", + { + "entity_permissions": { "update": [0], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x4d7573696320416c62756d", + "0x416e20616c62756d206973206120636f6c6c656374696f6e206f6620747261636b73206f7220617564696f207265636f7264696e67732e20557375616c6c7920627920612073696e676c6520617274697374206f722067726f75702e", + { + "entity_permissions": { "update": [0, 1, 2], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0, 1, 2], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x4d757369632047656e7265", + "0x436c61737320666f722073657474696e67207468652067656e726520666f72206d757369632e", + { + "entity_permissions": { "update": [0], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x4d75736963204d6f6f64", + "0x436c61737320666f722073657474696e6720746865206d6f6f647320666f72206d757369632e", + { + "entity_permissions": { "update": [0], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x4d75736963205468656d65", + "0x436c61737320666f722073657474696e6720746865207468656d657320666f72206d757369632e", + { + "entity_permissions": { "update": [0], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "createClass", + "args": [ + "0x4d7573696320547261636b", + "0x4120747261636b20697320616e20696e646976696475616c20736f6e67206f7220696e737472756d656e74616c207265636f7264696e672e", + { + "entity_permissions": { "update": [0, 1, 2], "maintainer_has_all_permissions": true }, + "entities_can_be_created": true, + "add_schemas": [0], + "create_entities": [0, 1, 2], + "reference_constraint": { "NoConstraint": null }, + "admins": [0], + "last_permissions_update": 0 + } + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 1, + [], + [ + { + "prop_type": { "Text": 48 }, + "required": true, + "name": "Value", + "description": "ContentId of object in the data directory" + }, + { + "prop_type": { "Uint64": null }, + "required": false, + "name": "Channel Id", + "description": "Id of the channel this media object is published under." + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 2, + [], + [ + { + "prop_type": { "Text": 2 }, + "required": true, + "name": "Value", + "description": "Language code following the ISO 639-1 two letter standard." + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 3, + [], + [ + { + "prop_type": { "Text": 255 }, + "required": true, + "name": "Value", + "description": "The license of which the content is originally published under." + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 4, + [], + [ + { + "prop_type": { "Text": 50 }, + "required": true, + "name": "Value", + "description": "The publication status of the content in the content directory." + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 5, + [], + [ + { + "prop_type": { "Text": 255 }, + "required": true, + "name": "Value", + "description": "The curator publication status of the content in the content directory." + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 6, + [], + [ + { + "prop_type": { "Internal": 7 }, + "required": false, + "name": "Top Video", + "description": "The video that has the most prominent position(s) on the platform." + }, + { + "prop_type": { "InternalVec": [12, 7] }, + "required": false, + "name": "Featured Videos", + "description": "Videos featured in the Video tab." + }, + { + "prop_type": { "InternalVec": [12, 9] }, + "required": false, + "name": "Featured Albums", + "description": "Music albums featured in the Music tab." + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 7, + [], + [ + { + "prop_type": { "Text": 255 }, + "required": true, + "name": "Title", + "description": "The title of the video" + }, + { + "prop_type": { "Text": 255 }, + "required": true, + "name": "Thumbnail", + "description": "URL to video thumbnail: NOTE: Should be an https link to an image of ratio 16:9, ideally 1280 pixels wide by 720 pixels tall, with a minimum width of 640 pixels, in JPEG or PNG format." + }, + { + "prop_type": { "Text": 4000 }, + "required": true, + "name": "Description", + "description": "Information about the video." + }, + { + "prop_type": { "Internal": 2 }, + "required": true, + "name": "Language", + "description": "The main language used in the video." + }, + { + "prop_type": { "Int64": null }, + "required": true, + "name": "First Released", + "description": "When the video was first released" + }, + { + "prop_type": { "Internal": 8 }, + "required": false, + "name": "Category", + "description": "The category of the video." + }, + { + "prop_type": { "TextVec": [5, 255] }, + "required": false, + "name": "Links", + "description": "Links to the creators pages." + }, + { + "prop_type": { "Internal": 1 }, + "required": false, + "name": "Object", + "description": "The entityId of the object in the data directory." + }, + { + "prop_type": { "Internal": 4 }, + "required": true, + "name": "Publication Status", + "description": "The publication status of the video." + }, + { + "prop_type": { "Internal": 5 }, + "required": false, + "name": "Curation Status", + "description": "The publication status of the video set by the a content curator on the platform." + }, + { + "prop_type": { "Bool": null }, + "required": true, + "name": "Explicit", + "description": "Indicates whether the video contains explicit material." + }, + { + "prop_type": { "Internal": 3 }, + "required": true, + "name": "License", + "description": "The license of which the video is released under." + }, + { + "prop_type": { "Text": 255 }, + "required": false, + "name": "Attribution", + "description": "If the License requires attribution, add this here." + }, + { + "prop_type": { "Uint64": null }, + "required": false, + "name": "Channel Id", + "description": "Id of the channel this video is published under." + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 8, + [], + [ + { + "prop_type": { "Text": 255 }, + "required": true, + "name": "Value", + "description": "Categories for videos." + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 9, + [], + [ + { + "prop_type": { "Text": 255 }, + "required": true, + "name": "Title", + "description": "The title of the album" + }, + { + "prop_type": { "Text": 255 }, + "required": true, + "name": "Artist", + "description": "The artist, composer, band or group that published the album." + }, + { + "prop_type": { "Text": 255 }, + "required": true, + "name": "Thumbnail", + "description": "URL to album cover art thumbnail: NOTE: Should be an https link to a square image, between 1400x1400 and 3000x3000 pixels, in JPEG or PNG format." + }, + { + "prop_type": { "Text": 4000 }, + "required": true, + "name": "Description", + "description": "Information about the album and artist." + }, + { + "prop_type": { "Int64": null }, + "required": true, + "name": "First Released", + "description": "When the album was first released" + }, + { + "prop_type": { "InternalVec": [3, 10] }, + "required": false, + "name": "Genre", + "description": "The genre(s) of the album." + }, + { + "prop_type": { "InternalVec": [3, 11] }, + "required": false, + "name": "Mood", + "description": "The mood(s) of the album." + }, + { + "prop_type": { "InternalVec": [3, 12] }, + "required": false, + "name": "Theme", + "description": "The theme(s) of the album." + }, + { + "prop_type": { "InternalVec": [100, 13] }, + "required": false, + "name": "Tracks", + "description": "The tracks of the album." + }, + { + "prop_type": { "Internal": 2 }, + "required": false, + "name": "Language", + "description": "The language of the song lyrics in the album." + }, + { + "prop_type": { "TextVec": [5, 255] }, + "required": false, + "name": "Links", + "description": "Links to the artist or album site, or social media pages." + }, + { + "prop_type": { "Text": 255 }, + "required": false, + "name": "Lyrics", + "description": "Link to the album tracks lyrics." + }, + { + "prop_type": { "Text": 255 }, + "required": false, + "name": "Composer or songwriter", + "description": "The composer(s) and/or songwriter(s) of the album." + }, + { + "prop_type": { "TextVec": [5, 255] }, + "required": false, + "name": "Reviews", + "description": "Links to reviews of the album." + }, + { + "prop_type": { "Internal": 4 }, + "required": true, + "name": "Publication Status", + "description": "The publication status of the album." + }, + { + "prop_type": { "Internal": 5 }, + "required": false, + "name": "Curation Status", + "description": "The publication status of the album set by the a content curator on the platform." + }, + { + "prop_type": { "Bool": null }, + "required": true, + "name": "Explicit", + "description": "Indicates whether the album contains explicit material." + }, + { + "prop_type": { "Internal": 3 }, + "required": true, + "name": "License", + "description": "The license of which the album is released under." + }, + { + "prop_type": { "Text": 255 }, + "required": false, + "name": "Attribution", + "description": "If the License requires attribution, add this here." + }, + { + "prop_type": { "Uint64": null }, + "required": false, + "name": "Channel Id", + "description": "Id of the channel this album is published under." + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 10, + [], + [{ "prop_type": { "Text": 100 }, "required": true, "name": "Value", "description": "Genres for music." }] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 11, + [], + [{ "prop_type": { "Text": 100 }, "required": true, "name": "Value", "description": "Moods for music." }] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 12, + [], + [{ "prop_type": { "Text": 100 }, "required": true, "name": "Value", "description": "Themes for music." }] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "addClassSchema", + "args": [ + 0, + 13, + [], + [ + { + "prop_type": { "Text": 255 }, + "required": true, + "name": "Title", + "description": "The title of the track" + }, + { + "prop_type": { "Text": 255 }, + "required": true, + "name": "Artist", + "description": "The artist, composer, band or group that published the track." + }, + { + "prop_type": { "Text": 255 }, + "required": true, + "name": "Thumbnail", + "description": "URL to track cover art: NOTE: Should be an https link to a square image, between 1400x1400 and 3000x3000 pixels, in JPEG or PNG format." + }, + { + "prop_type": { "Text": 255 }, + "required": false, + "name": "Description", + "description": "Information about the track." + }, + { + "prop_type": { "Internal": 2 }, + "required": false, + "name": "Language", + "description": "The language of the lyrics in the track." + }, + { + "prop_type": { "Int64": null }, + "required": true, + "name": "First Released", + "description": "When the track was first released" + }, + { + "prop_type": { "Internal": 10 }, + "required": false, + "name": "Genre", + "description": "The genre of the track." + }, + { + "prop_type": { "Internal": 11 }, + "required": false, + "name": "Mood", + "description": "The mood of the track." + }, + { + "prop_type": { "Internal": 12 }, + "required": false, + "name": "Theme", + "description": "The theme of the track." + }, + { + "prop_type": { "TextVec": [5, 255] }, + "required": false, + "name": "Links", + "description": "Links to the artist site or social media pages." + }, + { + "prop_type": { "Text": 255 }, + "required": false, + "name": "Composer or songwriter", + "description": "The composer(s) and/or songwriter(s) of the track." + }, + { + "prop_type": { "Text": 255 }, + "required": false, + "name": "Lyrics", + "description": "Link to the track lyrics." + }, + { + "prop_type": { "Internal": 1 }, + "required": false, + "name": "Object", + "description": "The entityId of the object in the data directory." + }, + { + "prop_type": { "Internal": 4 }, + "required": true, + "name": "Publication Status", + "description": "The publication status of the track." + }, + { + "prop_type": { "Internal": 5 }, + "required": false, + "name": "Curation Status", + "description": "The publication status of the track set by the a content curator on the platform." + }, + { + "prop_type": { "Bool": null }, + "required": true, + "name": "Explicit", + "description": "Indicates whether the track contains explicit material." + }, + { + "prop_type": { "Internal": 3 }, + "required": true, + "name": "License", + "description": "The license of which the track is released under." + }, + { + "prop_type": { "Text": 255 }, + "required": false, + "name": "Attribution", + "description": "If the License requires attribution, add this here." + }, + { + "prop_type": { "Uint64": null }, + "required": false, + "name": "Channel Id", + "description": "Id of the channel this track is published under." + } + ] + ] + } +] diff --git a/devops/vstore/entities.json b/devops/vstore/entities.json new file mode 100644 index 0000000000..db326ca633 --- /dev/null +++ b/devops/vstore/entities.json @@ -0,0 +1,12694 @@ +[ + { + "sectionName": "versionedStorePermissions", + "methodName": "transaction", + "args": [ + [ + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 2 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 4 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 4 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 5 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 5 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 5 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 5 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 3 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 3 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 3 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 3 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 0 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "aa" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 1 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ab" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 2 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ae" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 3 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "af" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 4 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ak" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 5 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "am" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 6 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "an" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 7 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ar" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 8 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "as" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 9 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "av" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 10 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ay" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 11 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "az" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 12 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ba" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 13 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "be" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 14 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "bg" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 15 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "bh" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 16 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "bi" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 17 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "bm" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 18 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "bn" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 19 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "bo" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 20 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "br" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 21 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "bs" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 22 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ca" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 23 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ce" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 24 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ch" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 25 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "co" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 26 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "cr" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 27 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "cs" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 28 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "cu" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 29 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "cv" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 30 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "cy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 31 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "da" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 32 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "de" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 33 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "dv" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 34 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "dz" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 35 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ee" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 36 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "el" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 37 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "en" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 38 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "eo" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 39 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "es" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 40 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "et" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 41 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "eu" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 42 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "fa" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 43 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ff" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 44 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "fi" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 45 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "fj" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 46 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "fo" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 47 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "fr" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 48 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "fy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 49 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ga" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 50 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "gd" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 51 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "gl" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 52 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "gn" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 53 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "gu" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 54 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "gv" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 55 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ha" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 56 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "he" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 57 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "hi" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 58 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ho" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 59 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "hr" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 60 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ht" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 61 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "hu" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 62 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "hy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 63 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "hz" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 64 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ia" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 65 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "id" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 66 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ie" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 67 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ig" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 68 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ii" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 69 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ik" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 70 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "io" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 71 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "is" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 72 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "it" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 73 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "iu" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 74 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ja" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 75 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "jv" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 76 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ka" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 77 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "kg" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 78 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ki" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 79 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "kj" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 80 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "kk" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 81 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "kl" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 82 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "km" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 83 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "kn" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 84 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ko" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 85 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "kr" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 86 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ks" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 87 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ku" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 88 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "kv" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 89 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "kw" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 90 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ky" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 91 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "la" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 92 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "lb" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 93 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "lg" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 94 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "li" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 95 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ln" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 96 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "lo" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 97 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "lt" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 98 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "lu" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 99 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "lv" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 100 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "mg" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 101 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "mh" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 102 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "mi" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 103 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "mk" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 104 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ml" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 105 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "mn" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 106 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "mr" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 107 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ms" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 108 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "mt" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 109 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "my" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 110 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "na" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 111 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "nb" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 112 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "nd" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 113 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ne" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 114 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ng" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 115 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "nl" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 116 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "nn" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 117 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "no" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 118 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "nr" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 119 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "nv" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 120 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ny" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 121 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "oc" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 122 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "oj" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 123 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "om" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 124 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "or" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 125 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "os" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 126 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "pa" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 127 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "pi" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 128 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "pl" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 129 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ps" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 130 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "pt" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 131 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "qu" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 132 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "rm" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 133 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "rn" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 134 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ro" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 135 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ru" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 136 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "rw" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 137 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sa" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 138 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sc" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 139 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sd" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 140 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "se" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 141 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sg" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 142 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "si" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 143 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sk" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 144 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sl" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 145 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sm" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 146 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sn" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 147 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "so" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 148 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sq" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 149 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sr" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 150 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ss" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 151 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "st" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 152 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "su" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 153 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sv" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 154 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "sw" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 155 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ta" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 156 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "te" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 157 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "tg" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 158 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "th" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 159 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ti" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 160 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "tk" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 161 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "tl" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 162 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "tn" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 163 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "to" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 164 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "tr" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 165 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ts" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 166 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "tt" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 167 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "tw" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 168 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ty" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 169 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ug" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 170 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "uk" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 171 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ur" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 172 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "uz" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 173 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "ve" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 174 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "vi" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 175 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "vo" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 176 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "wa" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 177 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "wo" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 178 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "xh" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 179 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "yi" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 180 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "yo" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 181 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "za" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 182 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "zh" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 183 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "zu" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 184 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Public" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 185 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Unlisted" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 186 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Edited" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 187 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Updated schema" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 188 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Under review" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 189 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Removed" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 190 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Public Domain" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 191 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Original content" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 192 }, + "schema_id": 0, + "parametrized_property_values": [ + { + "in_class_index": 0, + "value": { "PropertyValue": { "Text": "Creative Commons (attribution required)" } } + } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 193 }, + "schema_id": 0, + "parametrized_property_values": [ + { + "in_class_index": 0, + "value": { "PropertyValue": { "Text": "Fair Use (attribution required)" } } + } + ] + } + } + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "transaction", + "args": [ + [ + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 8 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 0 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Film & Animation" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 1 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Autos & Vehicles" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 2 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Music" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 3 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Pets & Animals" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 4 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sports" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 5 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Travel & Events" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 6 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Gaming" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 7 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "People & Blogs" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 8 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Comedy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 9 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Entertainment" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 10 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "News & Politics" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 11 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Howto & Style" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 12 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Education" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 13 }, + "schema_id": 0, + "parametrized_property_values": [ + { + "in_class_index": 0, + "value": { "PropertyValue": { "Text": "Science & Technology" } } + } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 14 }, + "schema_id": 0, + "parametrized_property_values": [ + { + "in_class_index": 0, + "value": { "PropertyValue": { "Text": "Nonprofits & Activism" } } + } + ] + } + } + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "transaction", + "args": [ + [ + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 10 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 0 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Avant-Garde" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 1 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Blues" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 2 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Children's" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 3 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Classical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 4 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Comedy/Spoken" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 5 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Country" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 6 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Easy Listening" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 7 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Electronic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 8 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Folk" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 9 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Holiday" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 10 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "International" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 11 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Jazz" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 12 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Latin" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 13 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "New Age" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 14 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Pop/Rock" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 15 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "R&B" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 16 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Rap" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 17 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Reggae" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 18 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Religious" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 19 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Stage & Screen" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 20 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Vocal" } } } + ] + } + } + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "transaction", + "args": [ + [ + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 11 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 0 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Acerbic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 1 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Aggressive" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 2 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Agreeable" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 3 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Airy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 4 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Ambitious" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 5 }, + "schema_id": 0, + "parametrized_property_values": [ + { + "in_class_index": 0, + "value": { "PropertyValue": { "Text": "Amiable/Good-Natured" } } + } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 6 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Angry" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 7 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Angst-Ridden" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 8 }, + "schema_id": 0, + "parametrized_property_values": [ + { + "in_class_index": 0, + "value": { "PropertyValue": { "Text": "Anguished/Distraught" } } + } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 9 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Angular" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 10 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Animated" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 11 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Apocalyptic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 12 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Arid" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 13 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Athletic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 14 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Atmospheric" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 15 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Austere" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 16 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Autumnal" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 17 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Belligerent" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 18 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Benevolent" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 19 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Bitter" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 20 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Bittersweet" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 21 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Bleak" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 22 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Boisterous" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 23 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Bombastic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 24 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Brash" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 25 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Brassy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 26 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Bravado" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 27 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Bright" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 28 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Brittle" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 29 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Brooding" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 30 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Calm/Peaceful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 31 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Campy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 32 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Capricious" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 33 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Carefree" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 34 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Cartoonish" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 35 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Cathartic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 36 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Celebratory" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 37 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Cerebral" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 38 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Cheerful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 39 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Child-like" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 40 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Circular" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 41 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Clinical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 42 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Cold" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 43 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Comic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 44 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Complex" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 45 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Concise" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 46 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Confident" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 47 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Confrontational" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 48 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Cosmopolitan" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 49 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Crunchy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 50 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Cynical/Sarcastic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 51 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Dark" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 52 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Declamatory" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 53 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Defiant" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 54 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Delicate" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 55 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Demonic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 56 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Desperate" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 57 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Detached" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 58 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Devotional" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 59 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Difficult" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 60 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Dignified/Noble" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 61 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Dramatic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 62 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Dreamy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 63 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Driving" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 64 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Druggy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 65 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Earnest" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 66 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Earthy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 67 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Ebullient" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 68 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Eccentric" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 69 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Ecstatic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 70 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Eerie" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 71 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Effervescent" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 72 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Elaborate" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 73 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Elegant" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 74 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Elegiac" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 75 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Energetic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 76 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Enigmatic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 77 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Epic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 78 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Erotic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 79 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Ethereal" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 80 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Euphoric" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 81 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Exciting" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 82 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Exotic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 83 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Explosive" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 84 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Extroverted" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 85 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Exuberant" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 86 }, + "schema_id": 0, + "parametrized_property_values": [ + { + "in_class_index": 0, + "value": { "PropertyValue": { "Text": "Fantastic/Fantasy-like" } } + } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 87 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Feral" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 88 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Feverish" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 89 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Fierce" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 90 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Fiery" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 91 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Flashy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 92 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Flowing" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 93 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Fractured" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 94 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Freewheeling" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 95 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Fun" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 96 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Funereal" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 97 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Gentle" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 98 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Giddy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 99 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Gleeful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 100 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Gloomy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 101 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Graceful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 102 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Greasy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 103 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Grim" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 104 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Gritty" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 105 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Gutsy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 106 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Happy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 107 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Harsh" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 108 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Hedonistic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 109 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Heroic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 110 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Hostile" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 111 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Humorous" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 112 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Hungry" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 113 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Hymn-like" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 114 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Hyper" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 115 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Hypnotic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 116 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Improvisatory" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 117 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Indulgent" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 118 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Innocent" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 119 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Insular" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 120 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Intense" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 121 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Intimate" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 122 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Introspective" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 123 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Ironic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 124 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Irreverent" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 125 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Jovial" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 126 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Joyous" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 127 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Kinetic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 128 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Knotty" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 129 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Laid-Back/Mellow" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 130 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Languid" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 131 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Lazy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 132 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Light" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 133 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Literate" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 134 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Lively" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 135 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Lonely" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 136 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Lush" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 137 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Lyrical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 138 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Macabre" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 139 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Magical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 140 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Majestic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 141 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Malevolent" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 142 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Manic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 143 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Marching" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 144 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Martial" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 145 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Meandering" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 146 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Mechanical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 147 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Meditative" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 148 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Melancholy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 149 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Menacing" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 150 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Messy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 151 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Mighty" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 152 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Monastic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 153 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Monumental" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 154 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Motoric" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 155 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Mysterious" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 156 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Mystical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 157 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Naive" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 158 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Narcotic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 159 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Narrative" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 160 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Negative" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 161 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Nervous/Jittery" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 162 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Nihilistic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 163 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Nocturnal" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 164 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Nostalgic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 165 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Ominous" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 166 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Optimistic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 167 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Opulent" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 168 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Organic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 169 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Ornate" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 170 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Outraged" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 171 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Outrageous" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 172 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Paranoid" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 173 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Passionate" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 174 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Pastoral" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 175 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Patriotic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 176 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Perky" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 177 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Philosophical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 178 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Plain" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 179 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Plaintive" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 180 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Playful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 181 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Poignant" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 182 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Positive" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 183 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Powerful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 184 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Precious" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 185 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Provocative" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 186 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Pulsing" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 187 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Pure" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 188 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Quirky" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 189 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Rambunctious" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 190 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Ramshackle" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 191 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Raucous" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 192 }, + "schema_id": 0, + "parametrized_property_values": [ + { + "in_class_index": 0, + "value": { "PropertyValue": { "Text": "Reassuring/Consoling" } } + } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 193 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Rebellious" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 194 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Reckless" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 195 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Refined" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 196 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Reflective" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 197 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Regretful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 198 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Relaxed" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 199 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Reserved" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 200 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Resolute" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 201 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Restrained" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 202 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Reverent" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 203 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Rhapsodic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 204 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Rollicking" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 205 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Romantic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 206 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Rousing" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 207 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Rowdy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 208 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Rustic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 209 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sacred" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 210 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sad" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 211 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sarcastic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 212 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sardonic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 213 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Satirical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 214 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Savage" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 215 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Scary" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 216 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Scattered" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 217 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Searching" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 218 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Self-Conscious" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 219 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sensual" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 220 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sentimental" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 221 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Serious" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 222 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Severe" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 223 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sexual" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 224 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sexy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 225 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Shimmering" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 226 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Silly" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 227 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sleazy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 228 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Slick" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 229 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Smooth" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 230 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Snide" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 231 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Soft/Quiet" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 232 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Somber" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 233 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Soothing" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 234 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sophisticated" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 235 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Spacey" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 236 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sparkling" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 237 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sparse" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 238 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Spicy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 239 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Spiritual" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 240 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Spontaneous" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 241 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Spooky" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 242 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sprawling" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 243 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sprightly" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 244 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Springlike" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 245 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Stately" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 246 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Street-Smart" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 247 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Striding" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 248 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Strong" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 249 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Stylish" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 250 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Suffocating" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 251 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sugary" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 252 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Summery" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 253 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Suspenseful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 254 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Swaggering" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 255 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sweet" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 256 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Swinging" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 257 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Technical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 258 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Tender" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 259 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Tense/Anxious" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 260 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Theatrical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 261 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Thoughtful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 262 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Threatening" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 263 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Thrilling" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 264 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Thuggish" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 265 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Tragic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 266 }, + "schema_id": 0, + "parametrized_property_values": [ + { + "in_class_index": 0, + "value": { "PropertyValue": { "Text": "Transparent/Translucent" } } + } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 267 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Trashy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 268 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Trippy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 269 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Triumphant" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 270 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Tuneful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 271 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Turbulent" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 272 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Uncompromising" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 273 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Understated" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 274 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Unsettling" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 275 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Uplifting" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 276 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Urgent" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 277 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Virile" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 278 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Visceral" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 279 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Volatile" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 280 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Vulgar" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 281 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Warm" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 282 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Weary" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 283 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Whimsical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 284 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Wintry" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 285 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Wistful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 286 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Witty" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 287 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Wry" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 288 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Yearning" } } } + ] + } + } + } + ] + ] + }, + + { + "sectionName": "versionedStorePermissions", + "methodName": "transaction", + "args": [ + [ + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { "CreateEntity": { "class_id": 12 } } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 0 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Adventure" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 1 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Affection/Fondness" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 2 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Affirmation" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 3 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Anger/Hostility" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 4 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Animals" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 5 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Anniversary" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 6 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Argument" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 7 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "At the Beach" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 8 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "At the Office" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 9 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Autumn" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 10 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Award Winners" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 11 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Awareness" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 12 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Background Music" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 13 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Biographical" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 14 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Birth" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 15 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Birthday" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 16 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Breakup" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 17 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Cars" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 18 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Celebration" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 19 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Celebrities" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 20 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Children" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 21 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Christmas" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 22 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Christmas Party" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 23 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "City Life" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 24 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Classy Gatherings" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 25 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Club" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 26 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Comfort" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 27 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Conflict" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 28 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Cool & Cocky" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 29 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Country Life" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 30 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Crime" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 31 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "D-I-V-O-R-C-E" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 32 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Dance Party" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 33 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Day Driving" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 34 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Daydreaming" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 35 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Death" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 36 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Despair" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 37 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Destiny" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 38 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Dinner Ambiance" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 39 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Disappointment" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 40 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Dreaming" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 41 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Drinking" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 42 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Drugs" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 43 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Early Morning" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 44 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Easter" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 45 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Empowering" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 46 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Everyday Life" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 47 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Exercise/Workout" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 48 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Family" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 49 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Family Gatherings" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 50 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Fantasy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 51 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Fear" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 52 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Feeling Blue" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 53 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Flying" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 54 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Food/Eating" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 55 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Forgiveness" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 56 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Fourth of July" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 57 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Freedom" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 58 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Friendship" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 59 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Funeral" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 60 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Girls Night Out" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 61 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Good Times" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 62 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Goodbyes" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 63 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Graduation" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 64 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Guys Night Out" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 65 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Halloween" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 66 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Hanging Out" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 67 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Happiness" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 68 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Healing/Comfort" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 69 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Heartache" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 70 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Heartbreak" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 71 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "High School" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 72 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Historical Events" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 73 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Holidays" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 74 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Home" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 75 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Homecoming" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 76 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Hope" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 77 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Housework" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 78 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Illness" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 79 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "In Love" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 80 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Introspection" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 81 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Jealousy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 82 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Joy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 83 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Late Night" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 84 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Lifecycle" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 85 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Loneliness" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 86 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Long Walk" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 87 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Loss/Grief" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 88 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Lying" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 89 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Magic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 90 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Maverick" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 91 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Meditation" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 92 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Memorial" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 93 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Military" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 94 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Mischievous" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 95 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Monday Morning" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 96 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Money" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 97 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Moon" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 98 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Morning" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 99 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Motivation" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 100 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Music" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 101 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Myths & Legends" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 102 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Nature" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 103 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "New Love" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 104 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Night Driving" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 105 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Nighttime" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 106 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Open Road" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 107 }, + "schema_id": 0, + "parametrized_property_values": [ + { + "in_class_index": 0, + "value": { "PropertyValue": { "Text": "Other Times & Places" } } + } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 108 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Pain" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 109 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Parenthood" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 110 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Partying" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 111 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Passion" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 112 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Patriotism" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 113 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Peace" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 114 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Picnic" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 115 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Playful" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 116 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Poetry" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 117 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Politics/Society" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 118 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Pool Party" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 119 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Prom" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 120 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Promises" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 121 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Protest" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 122 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Rainy Day" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 123 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Reflection" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 124 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Regret" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 125 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Relationships" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 126 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Relaxation" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 127 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Religion" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 128 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Reminiscing" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 129 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Reunion" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 130 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Revolutionary" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 131 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Road Trip" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 132 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Romance" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 133 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Romantic Evening" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 134 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Scary Music" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 135 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "School" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 136 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Science" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 137 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "SciFi" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 138 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Seduction" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 139 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Separation" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 140 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sex" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 141 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Slow Dance" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 142 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Small Gathering" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 143 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Solitude" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 144 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sorrow" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 145 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sports" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 146 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Spring" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 147 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Starry Sky" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 148 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Starting Out" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 149 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Stay in Bed" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 150 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Storms" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 151 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Street Life" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 152 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Summer" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 153 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sun" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 154 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sunday Afternoon" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 155 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Sweet Dreams" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 156 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Teenagers" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 157 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Temptation" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 158 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "TGIF" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 159 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Thanksgiving" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 160 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "The Creative Side" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 161 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "The Great Outdoors" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 162 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Value" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 163 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Tragedy" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 164 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Travel" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 165 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Truth" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 166 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Vacation" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 167 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Victory" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 168 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Violence" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 169 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Visions" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 170 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "War" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 171 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Water" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 172 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Weather" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 173 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Wedding" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 174 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Winter" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 175 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Wisdom" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 176 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Word Play" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 177 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Work" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 178 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "World View" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 179 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Yearning" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 180 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Youth" } } } + ] + } + } + }, + { + "with_credential": 0, + "as_entity_maintainer": true, + "operation_type": { + "AddSchemaSupportToEntity": { + "entity_id": { "InternalEntityJustAdded": 181 }, + "schema_id": 0, + "parametrized_property_values": [ + { "in_class_index": 0, "value": { "PropertyValue": { "Text": "Zeitgeist" } } } + ] + } + } + } + ] + ] + } +] diff --git a/node/Cargo.toml b/node/Cargo.toml index 9ed25a61dd..dbd47a3717 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -1,9 +1,9 @@ [package] -authors = ['Joystream'] +authors = ['Joystream contributors'] build = 'build.rs' edition = '2018' name = 'joystream-node' -version = '2.3.0' +version = '3.1.0' default-run = "joystream-node" [[bin]] @@ -14,143 +14,99 @@ path = 'bin/main.rs' crate-type = ["cdylib", "rlib"] [dependencies] -hex-literal = '0.2.1' -derive_more = '0.14.0' -exit-future = '0.1.4' -futures = '0.1.29' -log = '0.4.8' -parking_lot = '0.9.0' -tokio = '0.1.22' -jsonrpc-core = '13.2.0' -rand = '0.7.2' -structopt = '=0.3.5' +# third-party dependencies +serde = { version = "1.0.102", features = ["derive"] } +futures = { version = "0.3.1", features = ["compat"] } +jsonrpc-core = "14.2.0" +structopt = { version = "0.3.8", optional = true} serde_json = '1.0' -serde = '1.0' -hex = '0.4' -# https://users.rust-lang.org/t/failure-derive-compilation-error/39062 -# quote = '<=1.0.2' - -[dependencies.node-runtime] -package = 'joystream-node-runtime' -path = '../runtime' - -[dependencies.substrate-basic-authorship] -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-basic-authorship' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.babe] -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-consensus-babe' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.babe-primitives] -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-consensus-babe-primitives' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.codec] -package = 'parity-scale-codec' -version = '1.0.0' - -[dependencies.ctrlc] -features = ['termination'] -version = '3.0' - -[dependencies.inherents] -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-inherents' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.network] -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-network' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.primitives] -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-primitives' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.sr-io] -git = 'https://github.com/paritytech/substrate.git' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.substrate-cli] -git = 'https://github.com/paritytech/substrate.git' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.substrate-client] -git = 'https://github.com/paritytech/substrate.git' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.substrate-executor] -git = 'https://github.com/paritytech/substrate.git' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.substrate-service] -git = 'https://github.com/paritytech/substrate.git' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.transaction-pool] -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-transaction-pool' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.substrate-telemetry] -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-telemetry' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.grandpa] -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-finality-grandpa' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.grandpa-primitives] -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-finality-grandpa-primitives' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.im-online] -default_features = false -git = 'https://github.com/paritytech/substrate.git' -package = 'srml-im-online' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.substrate-rpc] -default_features = false -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-rpc' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.authority-discovery] -default_features = false -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-authority-discovery' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.client-db] -default_features = false -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-client-db' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.runtime-primitives] -default_features = false -git = 'https://github.com/paritytech/substrate.git' -package = 'sr-primitives' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.offchain] -default_features = false -git = 'https://github.com/paritytech/substrate.git' -package = 'substrate-offchain' -rev = 'c37bb08535c49a12320af7facfd555ce05cce2e8' - -[dependencies.libp2p] -version = '0.13.2' -default-features = false +codec = { package = "parity-scale-codec", version = "1.3.1" } +hex = { package = "hex", version = "0.4.2" } + +# primitives +sp-authority-discovery = { package = 'sp-authority-discovery', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-consensus-babe = { package = 'sp-consensus-babe', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-finality-grandpa = { package = 'sp-finality-grandpa', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-core = { package = 'sp-core', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-runtime = { package = 'sp-runtime', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-finality-tracker = { package = 'sp-finality-tracker', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-inherents = { package = 'sp-inherents', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-consensus = { package = 'sp-consensus', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-transaction-pool = { package = 'sp-transaction-pool', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-api = { package = 'sp-api', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-blockchain = { package = 'sp-blockchain', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-block-builder = { package = 'sp-block-builder', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } + +# client dependencies +sc-client-api = { package = 'sc-client-api', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-chain-spec = { package = 'sc-chain-spec', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-consensus = { package = 'sc-consensus', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-transaction-pool = { package = 'sc-transaction-pool', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-network = { package = 'sc-network', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-consensus-babe = { package = 'sc-consensus-babe', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4'} +sc-finality-grandpa = { package = 'sc-finality-grandpa', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-basic-authorship = { package = 'sc-basic-authorship', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-service = { package = 'sc-service', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-authority-discovery = { package = 'sc-authority-discovery', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-consensus-epochs = { package = 'sc-consensus-epochs', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-keystore = { package = 'sc-keystore', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-consensus-babe-rpc = { package = 'sc-consensus-babe-rpc', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-finality-grandpa-rpc = { package = 'sc-finality-grandpa-rpc', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-rpc-api = { package = 'sc-rpc-api', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-executor = { package = 'sc-executor', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } + +# frame dependencies +pallet-im-online = { package = 'pallet-im-online', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +pallet-transaction-payment-rpc = { package = 'pallet-transaction-payment-rpc', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +substrate-frame-rpc-system = { package = 'substrate-frame-rpc-system', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +frame-benchmarking = { package = 'frame-benchmarking', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } + +# node-specific dependencies +node-runtime = { package= "joystream-node-runtime", path = "../runtime" } + +# CLI-specific dependencies +sc-cli = { package = 'sc-cli', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4', optional = true } +frame-benchmarking-cli = { package = 'frame-benchmarking-cli', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4', optional = true } +node-inspect = { package = 'node-inspect', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4', optional = true } + +# WASM-specific dependencies +wasm-bindgen = { version = "0.2.57", optional = true } +wasm-bindgen-futures = { version = "0.4.7", optional = true } +browser-utils = { package = 'substrate-browser-utils', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4', optional = true} + +[dev-dependencies] +tempfile = "3.1.0" +sp-timestamp = { package = 'sp-timestamp', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sp-keyring = { package = 'sp-keyring', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +sc-consensus-babe = { git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4', features = ["test-helpers"]} +sc-service-test = { git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +frame-system = { package = 'frame-system', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +pallet-transaction-payment = { package = 'pallet-transaction-payment', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } +pallet-grandpa = { package = 'pallet-grandpa', git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4' } [build-dependencies] -vergen = '3' +structopt = { version = "0.3.8", optional = true } +node-inspect = { git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4', optional = true} +sc-cli = { git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4', optional = true} +frame-benchmarking-cli = { git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4', optional = true } +substrate-build-script-utils = { git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4', optional = true } + +[features] +default = [ "cli" ] +browser = [ + "browser-utils", + "wasm-bindgen", + "wasm-bindgen-futures", +] +cli = [ + "node-inspect", + "sc-cli", + "frame-benchmarking-cli", + "sc-service/db", + "structopt", + "substrate-build-script-utils", +] +runtime-benchmarks = [ + "node-runtime/runtime-benchmarks", + "frame-benchmarking-cli", +] diff --git a/node/README.md b/node/README.md new file mode 100644 index 0000000000..9b37205a52 --- /dev/null +++ b/node/README.md @@ -0,0 +1,98 @@ +## Joystream-Node - full node/validator + +![ Nodes for Joystream](./validator-node-banner.svg) + +The joystream-node is the main server application that connects to the network, synchronizes the blockchain with other nodes and produces blocks if configured as a validator node. + +A step by step guide to setup a full node and validator on the Joystream testnet, can be found [here](https://github.com/Joystream/helpdesk/tree/master/roles/validators). + +### Pre-built binaries + +The latest pre-built binaries can be downloaded from the [releases](https://github.com/Joystream/joystream/releases) page. +Generally these will be built from `master` branch and will pertain to the currently active testnet. + +### Building from source + +Clone the repository and install build tools: + +```bash +git clone https://github.com/Joystream/joystream.git + +cd joystream/ + +./setup.sh +``` + +Compile the node and runtime: + +```bash +WASM_BUILD_TOOLCHAIN=nightly-2020-05-23 cargo build --release +``` + +This produces the binary in `./target/release/joystream-node` + +### Running local development chain + +```bash +./target/release/joystream-node --dev +``` + +If you repeatedly need to restart a new chain, +this script will build and run a fresh new local development chain (purging existing chain data): + +```bash +./scripts/run-dev-chain.sh +``` + +### Joystream Public Testnets + +Use the `--chain` argument, and specify the path to the genesis `chain.json` file for that public network. The JSON "chain spec" files for Joystream public networks can be found in [../testnets/](../testnets/). + +```bash +./target/release/joystream-node --chain testnets/rome.json +``` + +### Tests and code quality + +Running unit tests: + +```bash +cargo test --all +``` + +Running full suite of checks, tests, formatting and linting: + +```bash +yarn cargo-checks +``` + +Always format your rust code with `cargo fmt` before committing: + +```bash +cargo fmt --all +``` + +### Integration tests + +```bash +./scripts/run-test-chain.sh +yarn workspace joystream-testing test +``` + +To run the integration tests with a different chain, you can omit the step of running the local development chain and simply set the node URL using `NODE_URL` environment variable. + +### Installing a release build + +If you are building a tagged release from `master` branch and want to install the executable to your path follow the step below. + +This will install the executable `joystream-node` to your `~/.cargo/bin` folder, which you would normally have in your `$PATH` environment. + +```bash +cargo install joystream-node --path node/ +``` + +Now you can run and connect to the Rome testnet: + +```bash +joystream-node --chain testnets/rome.json +``` diff --git a/node/bin/main.rs b/node/bin/main.rs index 70006bf571..9298282e3a 100644 --- a/node/bin/main.rs +++ b/node/bin/main.rs @@ -14,27 +14,10 @@ // You should have received a copy of the GNU General Public License // along with Joystream node. If not, see . -//! Substrate Node Template CLI library. +//! Joystream Node. #![warn(missing_docs)] -#![warn(unused_extern_crates)] -use joystream_node::cli; -pub use substrate_cli::{error, IntoExit, VersionInfo}; - -fn main() { - let version = VersionInfo { - name: "Joystream Node", - commit: env!("VERGEN_SHA_SHORT"), - version: env!("CARGO_PKG_VERSION"), - executable_name: "joystream-node", - author: "Joystream", - description: "Joystream substrate node", - support_url: "https://www.joystream.org/", - }; - - if let Err(e) = cli::run(::std::env::args(), cli::Exit, version) { - eprintln!("Fatal error: {}\n\n{:?}", e, e); - std::process::exit(1) - } +fn main() -> sc_cli::Result<()> { + joystream_node::command::run() } diff --git a/node/build.rs b/node/build.rs index 9a51c38b81..f148b56c32 100644 --- a/node/build.rs +++ b/node/build.rs @@ -1,27 +1,72 @@ -use std::{env, path::PathBuf}; +// This file is part of Substrate. -use vergen::{generate_cargo_keys, ConstantsFlags}; +// Copyright (C) 2017-2020 Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 -const ERROR_MSG: &str = "Failed to generate metadata files"; +// 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 . fn main() { - generate_cargo_keys(ConstantsFlags::SHA_SHORT).expect(ERROR_MSG); - - let mut manifest_dir = PathBuf::from( - env::var("CARGO_MANIFEST_DIR").expect("`CARGO_MANIFEST_DIR` is always set by cargo."), - ); - - while manifest_dir.parent().is_some() { - if manifest_dir.join(".git/HEAD").exists() { - println!( - "cargo:rerun-if-changed={}", - manifest_dir.join(".git/HEAD").display() - ); - return; - } + #[cfg(feature = "cli")] + cli::main(); +} + +#[cfg(feature = "cli")] +mod cli { + include!("src/cli.rs"); + + use sc_cli::structopt::clap::Shell; + use std::{env, fs, path::Path}; + use substrate_build_script_utils::{generate_cargo_keys, rerun_if_git_head_changed}; + + pub fn main() { + build_shell_completion(); + generate_cargo_keys(); - manifest_dir.pop(); + rerun_if_git_head_changed(); } - println!("cargo:warning=Could not find `.git/HEAD` from manifest dir!"); + /// Build shell completion scripts for all known shells + /// Full list in https://github.com/kbknapp/clap-rs/blob/e9d0562a1dc5dfe731ed7c767e6cee0af08f0cf9/src/app/parser.rs#L123 + fn build_shell_completion() { + for shell in &[ + Shell::Bash, + Shell::Fish, + Shell::Zsh, + Shell::Elvish, + Shell::PowerShell, + ] { + build_completion(shell); + } + } + + /// Build the shell auto-completion for a given Shell + fn build_completion(shell: &Shell) { + let outdir = match env::var_os("OUT_DIR") { + None => return, + Some(dir) => dir, + }; + let path = Path::new(&outdir) + .parent() + .unwrap() + .parent() + .unwrap() + .parent() + .unwrap() + .join("completion-scripts"); + + fs::create_dir(&path).ok(); + + Cli::clap().gen_completions("joystream-node", *shell, &path); + } } diff --git a/node/res/acropolis_members.json b/node/res/acropolis_members.json deleted file mode 100644 index 0912c071ef..0000000000 --- a/node/res/acropolis_members.json +++ /dev/null @@ -1 +0,0 @@ -[{"address":"5DcAKnrUmfes76j5ok8XcFheTdzS72NFsJA56AzVrNz9gVEz","handle":"joystream_storage_member","avatar_uri":"https://assets.website-files.com/5c78435271c31384e942f111/5c78435271c313493442f123_Helmet.svg","about":"Joystream run member account for storage nodes."},{"address":"5DaDUnNVzZPwK9KLwyPFgeSbc9Xeh6G39A2oq36tiV9aEzcx","handle":"bwhm0","avatar_uri":"","about":"I am part of the team building the Joystream network. Feel free to follow me on twitter, or contact me on telegram! @bwhm0 on both."},{"address":"5FnXBHfcDE6nQrwHjZqHYYpnzCLap2b9d3eQHt2Jt9eBG6mv","handle":"tomato","avatar_uri":"","about":""},{"address":"5GLLKE5LqfYtzJyE779jcciT8uM5rjQfGZ65r3sKBvvoUfBZ","handle":"tzdutchcom","avatar_uri":"","about":""},{"address":"5FMrFXCbhtdv4tG5XaPsG3MyS6u36ZfsdCoHZxk4cTGdE56D","handle":"nexusfallout","avatar_uri":"https://www.gravatar.com/avatar/00000000000000000000000000000000","about":"I am Finny, a blockchain enthusiast, been here since the beginning of the new project. Looking forward to be an active member."},{"address":"5CiGc9SzUjaVPZd66HVDnJNSRh5Ld3TK477nGYiwurwHZnZv","handle":"enjoythefood","avatar_uri":"https://cdn.pixabay.com/photo/2016/12/26/17/28/food-1932466__480.jpg","about":"Following this project. Hope the best for it"},{"address":"5GSMNn8Sy8k64mGUWPDafjMZu9bQNX26GujbBQ1LeJpNbrfg","handle":"alex_joystream","avatar_uri":"https://avatars2.githubusercontent.com/u/153928?s=200&v=4","about":"I'm developing this web UI & blockchain modules for [Joystream](https://www.joystream.org/) network.\n\nFollow me on Twitter [@AlexSiman](https://twitter.com/AlexSiman)\n\nSee my GitHub profile: [@siman](https://github.com/siman)"},{"address":"5H8kTuZp2T2geceCuaEQ29Jg8fFjCJkwGQgZjRhhGLxFVMSC","handle":"benholdencrowther","avatar_uri":"https://www.benholdencrowther.com/wp-content/uploads/2019/03/Hanging_Gardens_of_Babylon.jpg","about":"I am an investor, publisher and security researcher."},{"address":"5Gn9n7SDJ7VgHqHQWYzkSA4vX6DCmS5TFWdHxikTXp9b4L32","handle":"mokhtar","avatar_uri":"https://avatars2.githubusercontent.com/u/1621012?s=460&v=4","about":"mokhtar"},{"address":"5EtFzT8ZJN7VPKfcxjsQhtJUhHzuPsUFMaahPLGoaw5odaqj","handle":"staked_podcast","avatar_uri":"https://pbs.twimg.com/profile_images/1100673229310644229/HUbup-M5_bigger.png","about":"staked podcast"},{"address":"5EHCSTmnRVedbVssiWBLbE9LjXsF3MZje961LswgxvKBjPPy","handle":"nexus","avatar_uri":"https://www.gravatar.com/avatar/00000000000000000000000000000000","about":"This is Finny, a Crypto enthusiast and a web dev. (old account no longer validating.)"},{"address":"5GxkVNvkKRWcrMxyNzgiVD42Fiovw3DezC62XKei24sdezaf","handle":"pskyhard","avatar_uri":"","about":"hobby mining,musician,guitarist,music maker,crypto trader"},{"address":"5Dba5neECYe3eyEJ9bdd2mCQzuXwruqaYdrF1UPjE2B9rzAb","handle":"ch3n9lee","avatar_uri":"","about":"GPU/CPU/HDD MINER, musician,guitarist,song writter,music maker.crypto trader"},{"address":"5DPovdRPEPvfRqzAgEB6xpC6teknC8fdDk5HCE6FATnqRARf","handle":"gnossienli","avatar_uri":"https://staker.space/stkrspcLogo.png","about":"Validator trying out joystream"},{"address":"5G7Hzo7eqWQKuNHAG8NN1xEDXsRidFd26rgibw4e3Tw392Bb","handle":"bontoo","avatar_uri":"https://www.google.com/imgres?imgurl=https%3A%2F%2Fklikhijau.com%2Fwp-content%2Fuploads%2F2019%2F01%2Fkokkoci.jpg&imgrefurl=https%3A%2F%2Fklikhijau.com%2Fread%2Fini-fakta-lain-dari-burung-hantu-yang-jarang-diketahui%2F&docid=WUzhl7-2xRPDfM&tbnid=uCPsnOv4tikIbM%3A&vet=10ahUKEwjyrOTI69bhAhU0juYKHZ8CBr4QMwg-KAIwAg..i&w=750&h=432&bih=658&biw=1024&q=burung%20hantu&ved=0ahUKEwjyrOTI69bhAhU0juYKHZ8CBr4QMwg-KAIwAg&iact=mrc&uact=8","about":"testnet for future"},{"address":"5FZQZAFncWciyFeDbbSPuKtFwPovizCdTdA1BHKsNjYtyc7T","handle":"storage_tester","avatar_uri":"","about":"just testing..."},{"address":"5EwRZv5hFb2oy1Ubsvor1nfeFUjV4Ycgk7hjNCfHDBQBcExs","handle":"storage_test_edwards","avatar_uri":"","about":"still testing..."},{"address":"5HUA38wojV9PfMZGsNksMR3PDGskshJgknnBnFUGQBgZRs92","handle":"still_testing_storage","avatar_uri":"","about":"will unreg later..."},{"address":"5CFJhfdE5xbp9KZ4b3kULCYvfAm1PDfjL6SdAmeewMj7roPw","handle":"dolby","avatar_uri":"https://drive.google.com/file/d/1ygXMTeoy16qGBr03GW6MuogdEbtScsev/view?usp","about":"I love this test"},{"address":"5FeamBx9DWjG5aLAMLyvmu3JphwyCFEA9HFoUYWfHRFMGNK1","handle":"periskystorageprovider","avatar_uri":"","about":"storage provider, free music& video content"},{"address":"5En5s2iZ865T9iY59bFdm1p8Hxdb2w3jL1obx3SK1YUDYKf9","handle":"abyanstorage","avatar_uri":"","about":"tes for storage provider"},{"address":"5CMP8SssaKGyPFS4dftDM1UNbo2irDuibNoSggjASwxjHA7B","handle":"naimastorage","avatar_uri":"","about":"testing storage provider"},{"address":"5EC1Wrd15LjMcgdF8MFsner3hwWeKtSaqKigVDLH6Abd7BxC","handle":"storageathens","avatar_uri":"","about":"im naima want to join as a joystream team"},{"address":"5GbivJkHuHs6wxgiH2SS44MyQ9PfDKfTjSgwoyunqrCZ3HEF","handle":"botsawana","avatar_uri":"","about":""},{"address":"5DwUCvgQ99ghQArqLQx3mjbedCdLjzznuVfw8nv2JNK5DaqY","handle":"radithot","avatar_uri":"","about":"newbie testing"},{"address":"5GZkh2yxD2d6c8muJjnM4PE4e3dsRnv8XJ8dk4iwyPcDen3J","handle":"papayadee","avatar_uri":"","about":"testing "},{"address":"5CRBBpNJqoonH6shfJWHJTDqisti36Nxc9P52SHxrTrkmwcc","handle":"meetlica","avatar_uri":"","about":"this is test"},{"address":"5DWp8NhZDgbk7aWs36uT3UjJayBAz7pfhE2mfmbLuUVZGd3p","handle":"storage_debugging","avatar_uri":"","about":""},{"address":"5Do6LSqMybi1MXm47oYhA4Um367Yt6xLqnFybXfSKzU4HicZ","handle":"roarhansen","avatar_uri":"https://upload.wikimedia.org/wikipedia/commons/thumb/4/40/James_Dean_-_publicity_-_early.JPG/220px-James_Dean_-_publicity_-_early.JPG","about":"Scandinavian person interested in cryptocurrency and file sharing."},{"address":"5DLrbgdXYfAJRwXwm7wrkEfgujmwrQMxa39hJeeC7bQwjhhv","handle":"aisyah","avatar_uri":"https://testnet.joystream.org/athens/pioneer/#/members/edit","about":"Gogogo test and moon"},{"address":"5Gj7TbThxL1PiVHd4jJjYeJvDAmvp1j8hdcpPEFtqGoswZLJ","handle":"jamiek","avatar_uri":"https://pbs.twimg.com/profile_images/810014496131428352/if9jywHE_bigger.jpg","about":"Creator of the Make World and STEAL THIS SHOW podcasts."},{"address":"5DzGS4AiDH9vdzMC4rDj1hBnxWmDJD3NjGNsbSxEDYo2Jpdu","handle":"milzam","avatar_uri":"","about":"Hello World im here to joint Joystreeam team"},{"address":"5CNWS2V6RYKZVeqjqg9UqbQhAxGGphWtv9STxKKuuJW9kG3S","handle":"nexus_storage","avatar_uri":"","about":"this is the test storage account of nexus"},{"address":"5GTGsVLz1VWPmD9KbMtdW5wMJjcAwmpt3SjEZHbTJiQycawy","handle":"pskyubuntu","avatar_uri":"","about":"want to become a part Joystream team"},{"address":"5CEw8JxuM1kh34VoocG9bqqjqs98pdA7fG5uaTtPdjzShqFb","handle":"nectar","avatar_uri":"","about":"Validator/Council Member"},{"address":"5FU95CyecEJo3czvTcYfmR6LTNXT7fXTrkkRJFNcbRFuCYXH","handle":"pskysession","avatar_uri":"","about":"awesome joystream node"},{"address":"5HZ4RchQki238Zq4x47bj8fijGvhosaH1bXtAB9z9iAed2BR","handle":"mekienak","avatar_uri":"","about":"gimme joystream token"},{"address":"5Fnkp3p2fgKXN3rEDTTRQNBekfdWE3xEZToRWqHiCrTqsDKC","handle":"hountez","avatar_uri":"","about":""},{"address":"5DeomUpfJiaohdrNoiNd4KTJAmz4SjB5z7ep5JQ8Lwx8Mmvr","handle":"tienee","avatar_uri":"https://testnet.joystream.org/athens/pioneer/#/members/5DeomUpfJiaohdrNoiNd4KTJAmz4SjB5z7ep5JQ8Lwx8Mmvr","about":"My job"},{"address":"5DPjwKLAKqVNMwmHWqX3SwwJ5WraPWRuLx71gFaCCcchcdmc","handle":"arjuna","avatar_uri":"https://drive.google.com/file/d/12iTZzBpdeHrN2tjJz7zIlrzDxpIFugl_/view?usp=drivesdk","about":"Xmr im loved"},{"address":"5DcZjBgXcsDi51etbUvkB9twJL9yUnwTFnmsj75Q6ean7qNb","handle":"bitcatstorage","avatar_uri":"https://s3.amazonaws.com/keybase_processed_uploads/ce9e45f57a027881e69021a12543d905_360_360.jpg","about":"validator service from China team"},{"address":"5GnWANB5HxqbXd5kfhTKDvpeVGuDXH5G4ofEVEndT6CT9jFm","handle":"nickname","avatar_uri":"","about":""},{"address":"5DFJfZePK15RThiZwdwjSDY87J3w94mCvyCve9BGaQqdeqww","handle":"boatman","avatar_uri":"https://lh3.googleusercontent.com/-Wnc3u2TxtWw/ToZ-uQvDmFI/AAAAAAAAUUM/sxs71ntW_5wdMxZTGjdBdr14k9seixVBQCEwYBhgL/w280-h276-p/BoatHead2.JPG","about":"I am existed for this project. I have been using joystream since it was testnet on bitcoin. I would like to be a Storage Provider, and a Validator. "},{"address":"5DoZsgfmppmxm5N2nmWvpE7vk3EiojZoeBYKjfKNnm7dY1CS","handle":"yasin","avatar_uri":"https://testnet.joystream.org/athens/pioneer/#/members/edit","about":"good to try"},{"address":"5GxcUjY3tXYaDnm6LDu3yRdgE9wACXbmqjYVVAg8FwRZYPmF","handle":"sudapl","avatar_uri":"","about":""},{"address":"5G8bFk4TGm5JKhLMj199zf6iQfrHYBrLh9JBuipERF6WLYX7","handle":"shadowmen","avatar_uri":"","about":""},{"address":"5D347Qwfk9Jexfaju3d2iqi8UY1JguKazmz6Zsc2HEzFTnr5","handle":"night_raven","avatar_uri":"","about":""},{"address":"5HDHZQyuBZZiX7yThA2SzPBW2xVKk6v6dgCnQDiRABkqfdpY","handle":"picasso","avatar_uri":"","about":""},{"address":"5HD1jy4hco4SLKU8GkJvHZNWH6kQeiCm3eTssngk5nf85DmA","handle":"mb00g","avatar_uri":"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/48/48657feccbb3bef0dcfc8511ba500a0fdcf687b0_full.jpg","about":""},{"address":"5FVMRqxB3KNVrq6r3yMc4jrDVWwkLxCBwu3pAtRF3HpXZkjd","handle":"alkno12","avatar_uri":"","about":""},{"address":"5ECH7vPtCVTs1Y6U4NonWJYBSPo87gGWYUn3xN9evPvYDyaW","handle":"storage_dude","avatar_uri":"","about":"..."},{"address":"5Hp4rr7YQtjLQ82W4a55cQm3e6aePxZqATWAk23vKMxZ4Qfm","handle":"roar_storage","avatar_uri":"https://image.freepik.com/vector-gratis/fondo-borroso-colores-claros_1159-750.jpg","about":""},{"address":"5F4k8DAGNTgXRtYbSf1pbqpBueP1nQmvmyrRDwVmFqVRFtsu","handle":"rioplata","avatar_uri":"https://i.kym-cdn.com/entries/icons/original/000/026/913/excuse.jpg","about":""},{"address":"5GHQsSq2Cbu2UuMpJExRFNkngrJyf9bvmWjHtoaQTcyZfx7n","handle":"joyousjester","avatar_uri":"","about":""},{"address":"5EWUe17geJfL8YhJKjpnXswWkbMJpMj2AonLYygLptUchDsL","handle":"roar_stor","avatar_uri":"","about":""},{"address":"5HNk1sE1Fwq3teKCJybnDzTaihYoDCCLVtfWVKoUEjs1fppb","handle":"tigernr2","avatar_uri":"","about":""},{"address":"5DU3yCmcKYdhMhx8qwhtREDpB96ALg4n3GZ7KWqD8RYuHf85","handle":"fast_inet_offer","avatar_uri":"","about":"i have no idea if its usefull but have an 500/500 mb/s EU west connection to use"},{"address":"5CJ4DWRdrCCt4qQhWutSiHuEAHVXFcQ8Fsb2UJbFbwzUj4En","handle":"sdjakasampurna","avatar_uri":"","about":"love joystream project"},{"address":"5GT93iCiNmgnKznXrwg7VYfyxgtwYAsejPaVMFiEq35HDFb3","handle":"kampung2","avatar_uri":"","about":"earn xmr with join tesnet Joystream athens project"},{"address":"5GkE2fc3Yh1CeikUjNedPeKAyEUGzJvMRV4vgbawB7nsPNQt","handle":"sedotwc","avatar_uri":"","about":"love joystream team"},{"address":"5HSvkJ3KgBPQYFRVZatjWqim6oSbCDgYgK6pR9JERD9xkmyd","handle":"jolowiprabowo","avatar_uri":"","about":"vote me and let me in :)"},{"address":"5DfbxvnYEnAe18yWX5HKsxt8AaoDAjtmfpUco9rcZBYwqhJi","handle":"jablay","avatar_uri":"","about":"awesome tesnet joystream athens "},{"address":"5DGsFBByiSRTo248vk6Qu9CjQMgvbgyVRjQpix3J6oCHbXoV","handle":"farel","avatar_uri":"https://www.google.com/search?q=avatar+image+gallery&rlz=1C1CHBD_enID841ID841&tbm=isch&source=iu&ictx=1&fir=SX8E-0agQ_pJ3M%253A%252CyCPAa3PT2m-g9M%252C_&vet=1&usg=AI4_-kTAFpffjGlrfWxx6lsz5cP_aHGa8g&sa=X&ved=2ahUKEwj52PDPuoLiAhUPnq0KHeugBqAQ9QEwAnoECAkQCA#imgrc=SX8E-0agQ_pJ3M:","about":"my chance"},{"address":"5CiQy3WMqEhmVgWecgd7PDf4zFYjySsCeSoEPHfwKDX1ZXKH","handle":"gembong","avatar_uri":"https://www.google.com/search?q=avatar+image+gallery&oq=avatar&aqs=chrome.1.69i57j35i39j0l2.2072j0j7&client=ms-android-xiaomi&sourceid=chrome-mobile&ie=UTF-8#imgdii=BSOvfOTZ34aQAM:&imgrc=s5u4OXEq0vKpeM:","about":"Star for all"},{"address":"5HYs84s2wAUkyuP43sm1AvRQ6kYrUDS9KDcXoAHTxFdX5CTF","handle":"memberkonsil1","avatar_uri":"","about":"vote me"},{"address":"5CidUM3X95rizhAkfwx9DjsuBAkytAPv6wxkaHT5kiUz5s2v","handle":"dafaa","avatar_uri":"https://www.google.com/search?q=avatar+image+gallery&oq=avatar&aqs=chrome.1.69i57j35i39j0l2.2282j0j7&client=ms-android-xiaomi&sourceid=chrome-mobile&ie=UTF-8#imgrc=dJaZxO8IQKRD_M:","about":"Join"},{"address":"5GEd1rmfmgxtu2ab9ZwkiWKiu12mnxzSx1YiUHqaAPZpoG4b","handle":"yacobtsige","avatar_uri":"","about":"exploring the blockchain got me here im very curious and easy to understand "},{"address":"5F1X2QM9Y4Zyf2gEEzT45xYx2jXaz62ZRhaXmMoz1u3a9EmR","handle":"awuldor","avatar_uri":"","about":""},{"address":"5Ct589RpqCSXfR9x3nMC2q3kdsXJc57K3o78MJGyn4mQdt9u","handle":"oroor21","avatar_uri":"","about":"cheaters"},{"address":"5HmHHAVsDnbrngfpHrFba1CCyobeVscvM8LS2F8e6BoX3ujc","handle":"boggieman","avatar_uri":"","about":"vote me"},{"address":"5E5QTPqfRua4TNUFby9BwNirf18hjL8BfDixqNxzmHH7AQuw","handle":"sitim","avatar_uri":"https://testnet.joystream.org/faucet?address=5E5QTPqfRua4TNUFby9BwNirf18hjL8BfDixqNxzmHH7AQuw","about":"Everything"},{"address":"5GiSPEa9RkuKwHC8Gsd9Mvz8AuRpLqyCxt6PX2uGMhLBkMt6","handle":"saitama","avatar_uri":"","about":""},{"address":"5CsrS5WKjLMnhz5C44uuqAmzF8hiMCdB3jfPU183pVZCiYic","handle":"stake5labs","avatar_uri":"","about":""},{"address":"5GvnVHdoKpeY3mXKqFKxemZWhp3LHYnP1pjsUxvBsdAQQ1Uj","handle":"bepoo","avatar_uri":"","about":""},{"address":"5Dgkz2T8F7nCHBcCFkkUmVapn128Y7FjoLcAkKn3VKt4HWFa","handle":"sta5l","avatar_uri":"","about":""},{"address":"5EpDFAf1GXbyJA91nWGVMt3nfTcJumdKaZouhkce9vnDkTnu","handle":"aneukayah","avatar_uri":"","about":""},{"address":"5G7hWpjtmWvY6bAVEE9eUbHAakU83BiacgvWpeMwNZounTXc","handle":"sapimin","avatar_uri":"","about":""},{"address":"5CLTmmq9MYHFzFcxdx61ehaTSyH4LXHNuxxxGd4rMbaK2GFa","handle":"arjanz","avatar_uri":"https://pbs.twimg.com/profile_images/1122362089/image_bigger.jpg","about":"Polkascan test"},{"address":"5CtDrkRsqSVrYoWuEuEcMJoMkv3V28qzuVSmxmHZGYDmxotA","handle":"arjan","avatar_uri":"","about":"Test account"},{"address":"5GajxrWgmhCDnKBEdYDX8dEi3hPbYRsCFDrJsFHXeJ1dbESy","handle":"inchain_works","avatar_uri":"https://i.imgur.com/LI85WjO.jpg","about":"inchain.works"},{"address":"5EZbBSiTwmd7V3dn5PhZKWp1LuGXoTCBUk8TJmadXdfVwnWG","handle":"11th_member","avatar_uri":"","about":""},{"address":"5CiuCY1684Kpseg3CtEepqvmEumveoTEgHbkTHgEkZWN463q","handle":"huang","avatar_uri":"","about":""},{"address":"5FEEHAeXbMZRWMRvGFMGN18RUEhjX5nrgonB5YZ4NLahTXGJ","handle":"riyue","avatar_uri":"","about":""},{"address":"5HdGgQKeWvKTmnq6jnNeM6t6gnRSaAExdTg5oK9LFAunEjmf","handle":"rethwe","avatar_uri":"","about":""},{"address":"5Ei3dtaie8WGrJBMrF8mexCi62fjE7EuMPTfQ8midtDH1ssx","handle":"ch3storage","avatar_uri":"","about":"hi im beginer to join joystream storage provider and im still learn about joystream project"},{"address":"5DFKsQKbosQ41mpy4NbWLP8rQApc1bb1gEbxxCCDkToUmzNE","handle":"tryptamine","avatar_uri":"","about":""},{"address":"5CknxEPjaCEXm2e7Xvn7X6ergCewPdfpNSTNYfoNZtkrUB4J","handle":"martintibor40","avatar_uri":"https://lh3.googleusercontent.com/a-/AAuE7mAOxgww3L4uBSuatEvkZkB-TQ3TF1o-raqPy6z4oA=s96","about":"\"Ready to embrace the future'\""},{"address":"5DYFgPoqT27Wf6Pq7sFxdAV2BrshYQZ5qSqeTrXeWbidbW9G","handle":"john_pars","avatar_uri":"","about":""},{"address":"5H12THfoB3U3HQmZDRc5kawbVr1q5SSwWWg1d7p6VwREwSus","handle":"bintang","avatar_uri":"","about":"he im new joystream member"},{"address":"5ER3KmWi2oLkQ3Mwc68UyeEfsL1eX6k9WEnWmouB8JXx1F21","handle":"bintang3","avatar_uri":"","about":"hi joystream team"},{"address":"5GBTtfYboQJYa7Ao6UwGBNKFbp4xMHYsCZtyQa8gjxG9Rpj6","handle":"shamson","avatar_uri":"https://www.google.com/search?q=image+link&rlz=1C1CHBD_enID841ID841&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjVrIn2r7LiAhVEKKwKHe4fBiwQ_AUIDigB&biw=1024&bih=658#imgrc=m-Q34_JjzEmTLM:","about":"try to know"},{"address":"5He1Mn1U8kSE1uwYpQ51R3f1MBb2vcDr3NTLvXUschgFdtuG","handle":"edivalidator","avatar_uri":"","about":"hi vote me :P"},{"address":"5GYQ1kP5RAgNxQqkddLVhFvfYAnDDLVCLSLpUGXhahp1sRTm","handle":"herikeren","avatar_uri":"","about":"newbie in joystream project"},{"address":"5EwPRFkgaj9YqjQ6w3LVf4YewFpEeUZkKoY6hTLbHCHYehDB","handle":"aray12","avatar_uri":"https://www.google.com/search?q=pic+anime&oq=pic+anime&aqs=chrome..69i57j0l3.9562j0j7&client=ms-android-xiaomi&sourceid=chrome-mobile&ie=UTF-8#imgrc=EgAIu6Yli0420M:","about":"Try to know"},{"address":"5H8XFhvFDsiDGrF26ZvgcG9swt34wSAr8AbvRoeq7U5yi7Yd","handle":"nadine","avatar_uri":"https://drive.google.com/file/d/1Gk4ubqBcEvcQpre1r_ePZ7T65ZgHCfrF/view?usp=drivesdk","about":"Wana claim"},{"address":"5HfGdiZ182XX5rwUwrje9rgvae2WX9eDRWDXwJg3sD2DbQHD","handle":"kubil","avatar_uri":"https://www.google.co.id/search?q=image+search&safe=strict&client=ms-android-samsung&prmd=insv&source=lnms&tbm=isch&sa=X&ved=2ahUKEwif-Z-hxbLiAhWRUn0KHRidB2cQ_AUoAXoECAsQAQ&biw=320&bih=452#imgrc=pg35LtBI2OhWgM","about":"Choice me p p p"},{"address":"5C6bM8CJP7X6zkBeDe2pD3LMxomnoQBRsJqB1c9tPYsatftb","handle":"jhuan","avatar_uri":"https://www.google.com/search?q=avatar+image+gallery&oq=avatar&aqs=chrome.1.69i57j35i39j0l2.2282j0j7&client=ms-android-xiaomi&sourceid=chrome-mobile&ie=UTF-8#imgrc=dJaZxO8IQKRD_M:","about":"Easy trial and earn X"},{"address":"5Dy4FpfUcnVCx9A4XtpFXYkWWWoM1dsKoS3K89VskjjMUQj8","handle":"bamsrd","avatar_uri":"https://www.google.com/search?q=gambar+doraemon&oq=gambar&aqs=chrome.3.69i57j0l3.4106j0j4&client=ms-android-vivo&sourceid=chrome-mobile&ie=UTF-8#imgrc=BnOodOeJ6T-hsM:","about":"My friend tell me about this"},{"address":"5DXwzZ6P4QTKS14Wv79Ne9YtvmG6yiN8xEPqwecg42pFH1EX","handle":"raden","avatar_uri":"https://www.google.com/search?q=image+avatar+url&oq=image+avatar&aqs=chrome.1.69i57j0l3.5206j0j4&client=ms-android-samsung&sourceid=chrome-mobile&ie=UTF-8#imgrc=AhCy_cweM6lOWM:","about":"My first time"},{"address":"5Drcpx3M7FhPgexUyxoEJDR9Ltne69r3YVhCkQifBV1b5zGz","handle":"siman","avatar_uri":"","about":""},{"address":"5DUaFPy1eqkQuU7DEBZ9YpTmTGjSuQaCXT6wFpYx4iM489H5","handle":"andyt","avatar_uri":"https://www.google.com/search?q=image+avatar+url&oq=image+avatar&aqs=chrome.1.69i57j0l3.6262j0j4&client=ms-android-samsung-gj-rev1&sourceid=chrome-mobile&ie=UTF-8#imgrc=z-5c98oV9rSuuM:","about":"Newbieeee"},{"address":"5DY2bBaB24Zv8WivThmpQuRH8PAMkJaz8rpLnUtT9RhpdVnQ","handle":"yohanesyuen","avatar_uri":"","about":""},{"address":"5CCrySRCh6Rykmj8hHTeSwgsagvD3tr34Qtv2756SP9CpvWL","handle":"linuxif","avatar_uri":"","about":""},{"address":"5FrXNhhS9RjZsiQH737yHMoz3Kw8pg7Uc5cMtw5PE6Y7HJ6J","handle":"linuxifraw","avatar_uri":"","about":""},{"address":"5CBNQvCiFYaCVsr6A1nFChDwddzmeBboHMydstULtjzQFVXN","handle":"kacung","avatar_uri":"https://www.google.com/search?q=image+Avatar&oq=image+Avatar&aqs=chrome..69i57j0l3.4540j0j9&client=ms-android-xiaomi-rev2&sourceid=chrome-mobile&ie=UTF-8#imgrc=Jjq5a5o5G80fpM:","about":"Mantap"},{"address":"5Dos9CnNqnp5jDxdBXBCsdRFQRDkNHUo6qULEqT6infbRKxi","handle":"arikan","avatar_uri":"https://pbs.twimg.com/profile_images/1110553699636649984/PPjcoiD4_400x400.jpg","about":"machine readable artist"},{"address":"5Fa2QXToUMNHfmgJ4oskA63hLr4RmY7fEMdEEAGwthbgqjPT","handle":"kaizer","avatar_uri":"","about":""},{"address":"5EJK2q7TZ3zBpM86dUNYG36ioDJjWzrzRFqPpKWq4huxSoN1","handle":"rezza","avatar_uri":"https://images.app.goo.gl/dTMUy1Tebpn5rJCV7","about":"Here here"},{"address":"5GFGT91YyMGq9Gob67DKuMHmEm2LYG6tmbRuoKN8kA1x3hCB","handle":"jstar269","avatar_uri":"","about":""},{"address":"5HjMzAgoTqZnAtNbTgHk7eHUvH5dBthEUNmmRqdjHrJRUnWv","handle":"misterjo9","avatar_uri":"","about":""},{"address":"5HYaW898Z3EJBmSaYPFqp2DBgkW13zf6aMWfdbZ44dkLdSpA","handle":"sally","avatar_uri":"","about":""},{"address":"5GPVHW88RPtzxEM2QH6cZMp6JJR4TKX7xTNiwuf81ZDkT2TM","handle":"kagami_san","avatar_uri":"https://i.imgur.com/BwViZJq.png","about":"If elected, I will be an independent, fair counsel member that interacts with the community and represents the community sentiment. Thank you!"},{"address":"5GWH3K3ivLK32kKyLbws2SJpGisLd4CM1kjPeAGwxsB7XJZN","handle":"glenden","avatar_uri":"","about":"I am Glenden"},{"address":"5EDwsMeq5AKo278rgh38TvjkCDSiBZpiKq7LZLQEAbmsxv65","handle":"shmoop","avatar_uri":"https://sites.psu.edu/siowfa16/files/2016/10/YeDYzSR-10apkm4.png","about":""},{"address":"5HEsfa5rjDYALKyDBY7oFX6qYTTUSJgjEB9uACA6kptHQAmD","handle":"zxczxczxczczxc","avatar_uri":"","about":""},{"address":"5HMpE8Z2AuntT6Wow9Zjq74m5dBMViZmoK35byFPKMF2CiAX","handle":"r1sk97","avatar_uri":"https://yt3.ggpht.com/a/AGF-l78nwhTvUtstqRUDD_nIz_y40JSYHFV2yoZ46Q=s900-mo-c-c0xffffffff-rj-k-no","about":"Just a bored guy."},{"address":"5G3jMHcbqgzyqCiiBMZ26LFZoqTPw77XzMqwj8cyrb58ybhE","handle":"ascii","avatar_uri":"","about":""},{"address":"5GfdBhXPK6GHSwSkPHYiYf3KVw5dYsCLUCsTkh2EnHhr16oi","handle":"asdfasdfasdf","avatar_uri":"http://example.org/image.png","about":"asdf"},{"address":"5E7pc4DgSKWbFQNUQsEa6ffHPQQYnvWpRfRGFRthg2pRaBhp","handle":"billl2","avatar_uri":"","about":""},{"address":"5EygRdm7QJ32UA5Hyt18LEyH1QMX3jviRBvk16vzmJw2TjNp","handle":"emmaodia","avatar_uri":"","about":"I'm a JavaScript Back-end (APIs) Engineer."},{"address":"5DwH4PtUdGcQYMqYpUpjzPmwgkakuDMJ1K4zzexd9sxMyej4","handle":"santos","avatar_uri":"https://images.app.goo.gl/vH6eTrNZtzQTQAFn7","about":"Try Try try"},{"address":"5HZoz6XFiWwkJ5kqNSKAeZ52AXJ4t9Va9XgWp8FMop1H5yVL","handle":"leifeng","avatar_uri":"","about":""},{"address":"5G6i4AgpZRuad3cJM16hLEtGFabni6W9YGDdxoDL1r1DweQP","handle":"joyne","avatar_uri":"","about":""},{"address":"5Fu5XLEUvP7GAtb1pfYarDxRH4NcJfRWWNCDYA3uoip4BZ9m","handle":"bwhm0_2","avatar_uri":"","about":""},{"address":"5DnmGqe8qkNipYWgmnqsFDNayNo33dHtpEbjeymAMawfrdkD","handle":"samurai","avatar_uri":"","about":""},{"address":"5Fg79fdT6w51QdN5p7QQhiifbxtnRzGwXR24wsf2d3m5rD1M","handle":"enfipy","avatar_uri":"https://avatars2.githubusercontent.com/u/24860875","about":"👋"},{"address":"5CtULUV5Qw5ydB4FUjkh3Lb2tJJf9qUSdahtLUhfcDDJ4D4v","handle":"john9261","avatar_uri":"","about":""},{"address":"5GwaCBvrGFpTSVdDJPTg1XaYvDaLcz6Dn2Brwf19ehDJpA6W","handle":"royalgarter","avatar_uri":"","about":""},{"address":"5EfiZ76aX4Y3pqW6VBwQmx9NzYVxui1Xeu3KnGW9b9YbUqCH","handle":"inabszentia","avatar_uri":"","about":""},{"address":"5Dihr72NbSTZmKp6JFfGUd5AboRbvqYkVGSAUshNB2Jg8sPh","handle":"anthony","avatar_uri":"","about":""},{"address":"5GyrFrzo8GE4YUTpVyjkJeSneXAFJW7aGWCrreDUvRdCoHp1","handle":"storage_fail_test","avatar_uri":"","about":""},{"address":"5DsomYCpUhWSZkFUPUtNg6iZe3M37gaqwhjDG6CdSTEN6imh","handle":"jjbutton","avatar_uri":"","about":""},{"address":"5FkVkzN712z8CN4oMPbAXqbfP5QzNquy3e1zbMDez6Z1Ea3m","handle":"bithodl","avatar_uri":"","about":""},{"address":"5CJzTaCp5fuqG7NdJQ6oUCwdmFHKichew8w4RZ3zFHM8qSe6","handle":"joystream","avatar_uri":"https://uploads-ssl.webflow.com/5d0395c96d24108d8e5850d1/5d0395c96d241044b5585131_registered.svg","about":"Joystream Project Admins"},{"address":"5GS23g9sF4QGWSu3EG82GPHzomS9gbTS81pj3pCWgXgGSxv6","handle":"dawson","avatar_uri":"https://upload.cc/i1/2019/06/24/QuEl62.png","about":"Polkadot."},{"address":"5Cxpq2xpCKzpDGRgx67j7HzLDTZdAT9J3CUhQXUKp9Q4jarQ","handle":"iceberg","avatar_uri":"","about":""},{"address":"5DScjX1t5LUFzJZ4vz9DuR1DAffPFYnYurkZUe65eRKnoZ9B","handle":"betuha","avatar_uri":"","about":""},{"address":"5GsdqdGXysPVQhWJh3Hxt23F9DvbDn5RrSeLQc3shApodhJd","handle":"betst","avatar_uri":"","about":""},{"address":"5H4vibfYZJrbHqRQydmaSD5dyHo9Y5KhYA8SXy11LsvxFVZy","handle":"betstorage","avatar_uri":"","about":""},{"address":"5GvsGwc58fSqCKgy9xeVJhk7M5dVRatDL9GHCfU7UKDbgZzk","handle":"btstor","avatar_uri":"","about":""},{"address":"5DYE3wP1VF9goXuwDAgTybitatNovYF2fnxdp3hHsMdhhvAv","handle":"acropolisstorage","avatar_uri":"","about":""},{"address":"5D9A659vCJoB36B5R8hUc6rVdRLy8pT22whYb1Aq76HhkCCY","handle":"godofknockers","avatar_uri":"https://i.imgur.com/Vqykyvl.jpg","about":"Gamer who wants to make some monies."},{"address":"5GjMdeajoaC6cuxb48hAkrU2F9DJXeUmsLc5oxN8E71hFLdk","handle":"j_storage","avatar_uri":"","about":""},{"address":"5DFGMS4zGjJRtkM995d3TRWASSw6o47KmtFK5P8i8GNSn8HM","handle":"computt","avatar_uri":"","about":""},{"address":"5FtKBecxCRKdNQ1g4fv82hCkeVnyFKWZ1e6AYYCpMBLPns3c","handle":"storgeali","avatar_uri":"","about":""},{"address":"5HPbJNY5iBcYVUb8Qiw6ZkJFbNFK3QDMAvgF8Q3MPybzaW1b","handle":"stct1","avatar_uri":"https://gravatar.com/avatar/3c04e4d89494648ed4574862da1eb8ce?s=400&d=robohash&r=x","about":""},{"address":"5EeQsimvxSFYAvk19m8xKdjN4efLGKWsYxXTuJ5ukhvfHFEF","handle":"gusar","avatar_uri":"http://static4.depositphotos.com/1001003/351/i/950/depositphotos_3517957-stock-photo-3d-buddhism-symbol-wheel-of.jpg","about":""},{"address":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd","handle":"moderator","avatar_uri":"https://uploads-ssl.webflow.com/5d0395c96d24108d8e5850d1/5d0395c96d241028ce58511b_Communication%20Moderator.svg","about":"I am the sole [communication screener](https://www.joystream.org/roles#Communication-Moderator) for now."},{"address":"5HUoZqRpVwHeEMYLruqL93cJT47FdKgGTWVpwayoD4K6tgyK","handle":"duren","avatar_uri":"","about":""},{"address":"5F8ruq25knuup7jNYoJsTDUep5uKD3n6kooooeyusWJkwa3a","handle":"laurynas","avatar_uri":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTV6Xgt_kvbKNkw2Mb74NXQAp0Xd9p1DqhMu4FpjoPZH6fUvbjx","about":"A pioneer in JoyStream, tester."},{"address":"5D3kkfSTygkxDBjy71YUvHbrrv3gpZ8xhg3LfmrrHXsFU39t","handle":"scarf","avatar_uri":"","about":""},{"address":"5GBonukAQsiG7pr7UFNUYW3BYudduTKWokKCJPy1bMeu7ZhB","handle":"bedeho","avatar_uri":"https://messari.s3.amazonaws.com/images/agora-images/0%3Fe%3D1555545600%26v%3Dbeta%26t%3Dv4BRu5EH-z-7Pa9UGy1ri3ibFxu96uRhflHsJUoZcKQ","about":"Jsgenesis CEO"},{"address":"5Dr8UZRdLrBRcikQR2LQSmNUEwttfgQKeHsVkkzpwoE63tx5","handle":"joystorage","avatar_uri":"","about":""},{"address":"5FGiEbhnGLaBXV3WVuvPCXjjVfJrV7zedwWhsfoAmjeKGSpn","handle":"gavofyork","avatar_uri":"http://gavwood.com/images/gav6.jpg","about":"Gav."},{"address":"5FojUvZkLuTxkQ96Qgxes5FrA9ERHnvuM1EW2u2H9cVN14Cu","handle":"tbaut","avatar_uri":"https://avatars3.githubusercontent.com/u/33178835?s=460&v=4","about":""},{"address":"5CrszqoWaVc2v8ybnN1H6ffw1PziBBM8FGUcB3uMBEsPU9kG","handle":"tady386","avatar_uri":"","about":""},{"address":"5H64HbzJJrc68isVJYwyLiJwo1TQTuomwfejcHE8TfzhQD1u","handle":"marin","avatar_uri":"","about":""},{"address":"5Cb4M1bVtj7GEMuyofCkjMS3HXGa8DdbY5sBGikTxrJVchGd","handle":"marmarak","avatar_uri":"","about":""},{"address":"5DJdjyuRQytD1933L8Fn1gkwux9bi8P6YdqERZoYgpzjzHDH","handle":"enfipy_stash","avatar_uri":"","about":""},{"address":"5ETTzoYcBy8LoMrUGXPWwyc1j8vG3u1nddFiqip9298HBQTY","handle":"yangwao","avatar_uri":"","about":"hypersignal.xyz"},{"address":"5HdAqcBjwsoi2wG8TrD12e4axqVcr4wvLaUUa2o4GzbXvBre","handle":"ffpremium","avatar_uri":"https://scontent.fbkk5-7.fna.fbcdn.net/v/t1.0-9/56384953_2112699748815888_6318736854875111424_n.png?_nc_cat=108&_nc_eui2=AeHmw4rJ8EioQY4Z0L1raH53nL_XTH-JoFbq5otykEbVsXoGCaAfIygyO0WkPTXCb7ur-i_QVOyhS2FxuYkj8cB2pe99BHM9HoJI1GvIqKu2mg&_nc_oc=AQl4u2wMKmMial3ntQP55rbPELcLqv1CjN7flMp7I_tPRV1gfvoqAmwerR4aF6gkz4c&_nc_ht=scontent.fbkk5-7.fna&oh=be9cad220003fc5fcaedb5df56a5bc80&oe=5DBB29A1","about":"Let's join"},{"address":"5FZtYGpRMCN6FpPrHsz7NqGgqKPVsiVpZuYxJh1YXs8Z3BJv","handle":"prayut_chanocha","avatar_uri":"https://pbs.twimg.com/profile_images/1084270206938099712/qR9TdPQD.jpg","about":""},{"address":"5EVJNaHARYERarac7RkiQTakwjSTtt7BVyB9jBr3DbajFGMf","handle":"hkzero_1999st","avatar_uri":"https://keep.line.me/s/XnJquhXTXSEUToHsAgdi0I3D-AQg1HLV4wuDigCmYcI","about":"Who Am I ?"},{"address":"5FsabyqtArsY2GX5sdYvg4ZFZLLdTq6upayjqWrLRS7hK5Ke","handle":"fsaby","avatar_uri":"","about":""},{"address":"5GQaNV1EdnC21cGiwv1pT8nThSEUebHDxRrAWRLdR9LApLum","handle":"ratuaisya","avatar_uri":"https://www.ufreegames.com/?utm=ads&gclid=EAIaIQobChMIrJq5zayQ4gIV2kl9Ch2VkAZOEAEYASAAEgI5MvD_BwE","about":"Deep way"},{"address":"5FnsBRu9FcBBVYKhwdxY8SDaQw4XxcKtardXxpCbYwAiQNTA","handle":"maxibazar","avatar_uri":"","about":""},{"address":"5GZTctfXt5SzzwUSPpZu6Um16HnC9wNfgbK5HWpcJqbgUCs1","handle":"nunzio","avatar_uri":"","about":""},{"address":"5C6k3Ec2LJdViX4mpVigHPhsytEcYxne7VjV13YMN5amKNB9","handle":"aisha","avatar_uri":"https://www.google.com/search?q=image+avatar+url&oq=image&aqs=chrome.2.69i59j69i57j35i39j0.2704j0j4&client=ms-android-xiaomi&sourceid=chrome-mobile&ie=UTF-8#imgrc=z-5c98oV9rSuuM:","about":"Love earn mone"},{"address":"5CmXLs7XWJvYCqPSEiQHKwRuwVyHPYF3S33FnHQ5tkA1S9MK","handle":"lilis","avatar_uri":"https://www.google.com/search?q=image+url&safe=strict&client=ms-android-wiko&prmd=ivn&source=lnms&tbm=isch&sa=X&ved=2ahUKEwi26O7Ggp7jAhUL7XMBHQR6CzcQ_AUoAXoECA4QAQ&biw=360&bih=464#imgrc=fgCBWfP2OZk0NM","about":"Test too"},{"address":"5EkgATaUSuprTPE9eGFc5N7eKMrGNPsRPXnLhRU9u8zSxk9t","handle":"natsuma","avatar_uri":"http://www.neutralbayhealth.com.au/wp-content/uploads/2014/08/Chiropractic.jpg","about":"Natsuma JOY"},{"address":"5DspdxjBxghbqAebXedyqW7scBygx1ip1jX7Utby4rJVmC7H","handle":"being","avatar_uri":"","about":""},{"address":"5FVJHqe3rWRmGRTeEKULMMMmtQEcWVMmAwLgLSzLzbKX7Eng","handle":"bengmia","avatar_uri":"","about":""},{"address":"5HkCHTHAvCbkYLDrKz1GordVD4cE2o3tiLftN5cfQptuMs5x","handle":"gnar1","avatar_uri":"https://imgur.com/a/Kv17O2H","about":""},{"address":"5DAiCGnQ1X7FDgyx18AviJKxZM7vAudrwgTjrPcCxQi3wjfj","handle":"salaeones","avatar_uri":"","about":""},{"address":"5GcbTxhu29yb68wT9dqVBRtY1Mr7rB3HkFkAdQJgxyVgvcGP","handle":"titivoot_tan","avatar_uri":"https://scontent.fbkk6-2.fna.fbcdn.net/v/t1.0-9/14691142_254553524942692_2493479130458757054_n.jpg?_nc_cat=107&_nc_oc=AQmyl2PtT_sATGawf_cefDdGA1aLI-izP1kVFV_JTXy8PGNjTET87DTs1UAaEfLAON4&_nc_ht=scontent.fbkk6-2.fna&oh=220270a64d24bb423d0c9f92d397b28a&oe=5DA7EA14","about":""},{"address":"5Eb2gN4d6d67sgBFGKcoqEthWPDvVhcUgFGj8NPQDmFZWxJg","handle":"storage1","avatar_uri":"","about":""},{"address":"5HCoA8d7WZYQrmAnQS4sY2geQBmiSG2qVxgbCsu1vvHu14ZT","handle":"titivoot_tan1","avatar_uri":"https://scontent-kut2-2.xx.fbcdn.net/v/t1.0-1/p60x60/14691142_254553524942692_2493479130458757054_n.jpg?_nc_cat=107&_nc_eui2=AeGI7NQc6hCLS9qQvIK0uoTJ7W4d4sLuzAtiV0u1Y4uRuUf96yFsmRjKNSdB8qvXkLkjp5c2PsyzzcfgK6DU9Vcn2L1jLp1K1apSZUh45h1xDg&_nc_oc=AQnI9qCP3PD3nQdCCp1S9Ygk1tr7FgaboVLRV_ml4A6fAcVmgensvFLsivHmukZikrg&_nc_ht=scontent-kut2-2.xx&oh=523962ad9f0692aa81c8b0046eff6f93&oe=5DB67A7E","about":""},{"address":"5DDKuMJACDGz7v173Pv7bbXxzbZMtbrkPPxuu7Rjyffm2QRx","handle":"node_network","avatar_uri":"https://scontent.fbkk5-7.fna.fbcdn.net/v/t1.0-1/p80x80/66643505_2268331383283347_2791701654041264128_n.png?_nc_cat=107&_nc_eui2=AeG40_fF4HVvpqpwFR10hJDyB-XdDCU5Ldi_KdYY2iYWoy88fJraSNqKZb6UlKi0FAC12Boq9C4PHBFQAkTyWTllNSPM1Zhb7_5BhWGmHIpToQ&_nc_oc=AQlNkdSUpzKvvAyoDEHH0hbVf5LaP-y2mUFGiT892xUWYIVEvUwhdn0LFJBYDtCdP_8&_nc_ht=scontent.fbkk5-7.fna&oh=60f66775bd9b8d1ee391a58fd4c39f79&oe=5DA5CC69","about":"Node.Network Monetize : https://www.facebook.com/Node.Network/"},{"address":"5Gk4WmQYU52q9cgxUGw8gn9tFzLj4V3RNcfXBwD7AVXiTSTx","handle":"peacenana","avatar_uri":"","about":""},{"address":"5H3YibPf9MKFTc1p42fKfUS4PMtahB6hfod7xQR4hEhGYaJA","handle":"quangteo3391","avatar_uri":"","about":""},{"address":"5EnMHmi4onoW8QDgDXHSQb9b9KfW7CsTPis2iP9KbvLNTP3g","handle":"crypto","avatar_uri":"https://cdn.ccn.com/wp-content/uploads/2018/09/bitcoin-cryptocurrency-exchange.jpg","about":"A cryptocurrency (or crypto currency) is a digital asset designed to work as a medium of exchange that uses strong cryptography to secure financial transactions, control the creation of additional units, and verify the transfer of assets."},{"address":"5CeGo5j7hRvYi1NpthBzKL7TE738PUGRuUrsQzSSBY2t4sgk","handle":"romulus","avatar_uri":"","about":"Hello, I am Romulus."},{"address":"5DQLn2TZT2PPEQtUEpXPuqVM8mrcRmyTasY1oba7xrCymLoY","handle":"joystreamfan","avatar_uri":"https://testnet.joystream.org/acropolis/pioneer/images/logo-joytream.svg","about":"big fan of joystream"},{"address":"5GVqVyPUyQHuBpLn6pHPvtKNvohoY6ehoVfTdCFURMaJwdkz","handle":"_____","avatar_uri":"","about":"Welcome to my page!"},{"address":"5F1qeRM7ejkipw45FuD5Jp7parqQtQLmeo6992ShrdrdVMPV","handle":"fluzzard","avatar_uri":"https://www.mariowiki.com/images/8/8f/FluzzardBird.png","about":"“You flew! You flew! Even Fluzzard looks happy! Happy!”"},{"address":"5H1DtKZAgkXyFacLH9Cb9XGaSN8uZ3AzibdcZVABtLfBBs2p","handle":"axel90","avatar_uri":"https://upload.wikimedia.org/wikipedia/commons/e/e7/EddieMurphy1988.jpg","about":"Blockchain researcher."},{"address":"5CWN7DyfaqrsmSVMnYCPPkjXxsbQWrVbTmWCZMCtQNNiRmUk","handle":"aaaaa","avatar_uri":"http://clipartmag.com/images/a-letter-pictures-12.jpg","about":""},{"address":"5E6Nx1bWXP834WG3cANEFsZN412A3xYaykR8xNVmXYkESVHG","handle":"skvye","avatar_uri":"","about":""},{"address":"5FffRxDHwB8RyRMgumLjeAa6NTjaVzHHFRzATBSyHvHzdc59","handle":"kimmy","avatar_uri":"","about":""},{"address":"5GZRsxF1wUUKQZ8KGLvTyu1MvpRYnH86cVJxVpgJTmLpnFPT","handle":"zeroed","avatar_uri":"","about":""},{"address":"5E4mBK7JqfXFxshqUnWAnj6xPnsNM4S3XfLZYH1bZkKG5S77","handle":"rddewan","avatar_uri":"","about":""},{"address":"5ETuBSbZL22DdquA75jtFe8HeSuKyn7u3KpHzWJBJwkyRi6h","handle":"minami","avatar_uri":"","about":"Research Web3 and Machine Intelligence business models."},{"address":"5DeH9e3kZhiCxT6zDEk7LKuXPGiK8A3QbcW1zXkh78qgmJ2v","handle":"toomuchfomo","avatar_uri":"https://ibb.co/SfppHpZ","about":"Here to stay"},{"address":"5E4fGovW5xwzBvdL2iq6xGc6xUmre97p52cNKLhNFCqJzYwx","handle":"node_network_storage_provider","avatar_uri":"https://scontent.fbkk5-7.fna.fbcdn.net/v/t1.0-1/p320x320/66643505_2268331383283347_2791701654041264128_n.png?_nc_cat=107&_nc_oc=AQncI3XyQ3SGxVc9Yl6UheHkTjmkrIodmN1ytuxmzXY8p9zfjtQbxQYev3qwhBCY8RE&_nc_ht=scontent.fbkk5-7.fna&oh=2fcfeaa70cad645165becf9063cf71eb&oe=5DE30ABD","about":"Node.Network Storage Provider"},{"address":"5Cd2iKhz2Cu6WTyjWexa3nJKNfzFEEtRJaMu2nVT4y6pZbsW","handle":"gugx_13","avatar_uri":"","about":""},{"address":"5DXytFunQPPX6bhWD7GR2kEmQYxDhsEWFoUr2534Lzrn557m","handle":"node_network_storage_provider_key","avatar_uri":"https://scontent.fbkk5-7.fna.fbcdn.net/v/t1.0-1/p320x320/66643505_2268331383283347_2791701654041264128_n.png?_nc_cat=107&_nc_oc=AQncI3XyQ3SGxVc9Yl6UheHkTjmkrIodmN1ytuxmzXY8p9zfjtQbxQYev3qwhBCY8RE&_nc_ht=scontent.fbkk5-7.fna&oh=2fcfeaa70cad645165becf9063cf71eb&oe=5DE30ABD","about":"Node.Network Storage Provider"},{"address":"5GMSWFLuNo45kMxZBALUJopjT2NYD6X7f5AhEggrBh3aA9tM","handle":"titivoot_tan8","avatar_uri":"https://scontent-kut2-2.xx.fbcdn.net/v/t1.0-1/p60x60/14691142_254553524942692_2493479130458757054_n.jpg?_nc_cat=107&_nc_eui2=AeGI7NQc6hCLS9qQvIK0uoTJ7W4d4sLuzAtiV0u1Y4uRuUf96yFsmRjKNSdB8qvXkLkjp5c2PsyzzcfgK6DU9Vcn2L1jLp1K1apSZUh45h1xDg&_nc_oc=AQnI9qCP3PD3nQdCCp1S9Ygk1tr7FgaboVLRV_ml4A6fAcVmgensvFLsivHmukZikrg&_nc_ht=scontent-kut2-2.xx&oh=523962ad9f0692aa81c8b0046eff6f93&oe=5DB67A7E","about":""},{"address":"5G3gAq4orAQ2bBvywQcVFNiUHdbNigf7JEST2YJM6WVA2bjD","handle":"phoenix","avatar_uri":"","about":"New to the blockchain world."},{"address":"5EEqQmeDsxQhNMqYijqTBx2yLkcyqd58TQLxSCycdefnhTxn","handle":"empty","avatar_uri":"","about":""},{"address":"5HqShJ8WLfZibvV4QAHEara49XTQr1apEobrmPPwm8L5dWTx","handle":"cyborg","avatar_uri":"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSyWiC6ll_05KGk-AL1hYzFodlWJtgwbEmq2LJyc2EHaim3M_A","about":""},{"address":"5CRrU6dMbcXNCbyhtthoXKLLRADPzvrBBV2Eaqp8T1xPmx49","handle":"warrior","avatar_uri":"","about":"Hi, Sonu here. I'm a systemadmin/devops guy. I'm new to the blockchain world. Also a tech enthusiast. Reading and learning about blockchain and contributing to it with whatever way I can."},{"address":"5HDvuzdSSPHaq7uZmJze5NzLWmoeD54Y1nqPL7dFXVhtwYu3","handle":"tonefreqhz","avatar_uri":"https://hosting.photobucket.com/albums/qq338/RogerGlyndwrLewis/chapmeme/ghist%20segiovuia.jpg","about":"Web 3 developer and Publisher of Philosophy, Poetry, Literature and Journalism"},{"address":"5CDn5QPqSUyNcSTHTsPAEC2fxkFfRy5kFJiK7JbjCrYj7xhc","handle":"kekmex","avatar_uri":"","about":"Hello everyone! I am a young crypto enthusiast from europe, and im looking to follow joystream and to contribute to the project."},{"address":"5GfoBraUT9FQ3sX6JWRBWGsbnwTZfY97XR2WktADHbyiarh4","handle":"noaccount","avatar_uri":"","about":"welcome"},{"address":"5CE14xG6DHi1DcCNUeHR43UxefhFUkgP8qDL7SnBBSG1emzL","handle":"kongzhi","avatar_uri":"https://pbs.twimg.com/profile_images/378800000706976227/5d781dbcf446d751d82afe1f58048361_400x400.jpeg","about":""},{"address":"5D9PxeiAw43SMZaQAxNgRJ6nr4KXvWnfEare5EMLKE8uZ2sc","handle":"igorsouza","avatar_uri":"https://testnet.joystream.org/acropolis/pioneer/#/accounts","about":"igor souza casado idade 23 anos "},{"address":"5H9CdSu7KZ1Gq8BSNESyGPWzvV9EKWXPVNtuPds5gTwaG1kw","handle":"nin19a","avatar_uri":"https://cdn.pixabay.com/photo/2013/07/21/13/00/rose-165819_1280.jpg","about":""},{"address":"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY","handle":"chevdor","avatar_uri":"","about":"Chevdor"},{"address":"5CG4KgSVAYa4y7RZqVQMpvxFsoxkvpso5gPxXzP5nRey1gdu","handle":"dustan","avatar_uri":"https://www.facebook.com/photo.php?fbid=1444244385897762&set=a.1444244399231094&type=3&theater","about":"I am a student . trying hard to earn some on inernet. "},{"address":"5HeqKdJHhhZQuwerQZLQ6UuSZn9qC2oJffReWQ83qypP1goZ","handle":"jaykpatel304","avatar_uri":"","about":"Hey, I am new here. I am a blockchain developer and highly interested in it."},{"address":"5FktYqVHRWn3dW68Edt16yP3Y99sonTuT6qExTQuCECwWfXg","handle":"kekmex_storage","avatar_uri":"","about":""},{"address":"5H59BoJkTrXhhe2nqUwUj3dL23sduxzkJ9Nc3U7fsdVo8QZg","handle":"kekmex_storage_member","avatar_uri":"","about":""},{"address":"5FrF9xqBNwRk7KvTtNdftfVTacQ1z5RokYS3B5PuihuRbamh","handle":"rodrigograca31","avatar_uri":"","about":""},{"address":"5FUdGogcu6SKS5rCN5wNVJjqMswVrqXXgonrLwwkDhMSEbhK","handle":"keks_storage_member_key_new","avatar_uri":"","about":""},{"address":"5GNUGsD1QWcYDThoN79iWy8axFGfWund4jYxaewYGebbGk68","handle":"aahsiaap","avatar_uri":"","about":"im newbie joystream tesnet "},{"address":"5CCzYScXPWRhiwn1BC2qTdYdry27t17Sow7HfLFyiBTa1dvE","handle":"habibrijik","avatar_uri":"","about":""},{"address":"5GRUk4q13G2MeRPhpvrZUjpvY581cuH8xpzqRLSvKeBprPBf","handle":"echaterapis","avatar_uri":"","about":""},{"address":"5FxWFDN8NaGqFgr6sfyEqQyaeJHckWap3rUawukt7ZMkch8a","handle":"lexitherapis","avatar_uri":"","about":""},{"address":"5H2wrjqnyZJf3nLjstpy1pdVGFHCTUoRRUFjvvmbwP7Cnwt6","handle":"rinduexst","avatar_uri":"","about":""},{"address":"5DEcN8w9iUhxVXbAgRGesZRJcEvZEdtV6NbTBQ7ktH78Sqae","handle":"rereyolan","avatar_uri":"","about":"hi joystream"},{"address":"5EHyifUv9i5ZoBNeWjHGoKJ3iD5TyXafWMNFNNowVk9scvEi","handle":"mnemonic_hash_char","avatar_uri":"","about":""},{"address":"5HAq1PrLiB1jQQ9R7YDRvhuJtoetXWfvTKe9pq7jDS2q57Hc","handle":"bodgeup","avatar_uri":"","about":"IT Freelancer looking for passive income and explorer new Tech."},{"address":"5DFYfuCMCHx2VGjvbN6S98sEvDGfEF9cHVCJbiejV51oW6dQ","handle":"testees","avatar_uri":"","about":""},{"address":"5DpDqfrDqGqEMEuu7kRoFmQtc9nzPBSGaQWVUUhm88Q1aoZN","handle":"mhillajeremy","avatar_uri":"https://files.gamebanana.com/img/ico/sprays/crono_pose.gif","about":""},{"address":"5Ffv2VrCch42yBiGWWUGME5ihyewKYvHKq3TBwHkPQXXFSfS","handle":"arno608rw","avatar_uri":"https://gravatar.com/avatar/32c7535449ae8a992501e283a5879e33?s=400&d=robohash&r=x","about":""},{"address":"5DGr5nH3HXBVFuSG85rxGLejSWHQtFwfwquY8wa1FYLBou9Y","handle":"ali878","avatar_uri":"","about":""},{"address":"5DvM8RLjzqVKTSUCYDJATNjzWBWbTEankbwPpeAJASYwE5LM","handle":"arnone","avatar_uri":"","about":""},{"address":"5FZw3cnkL5RvuERaB2BicpL1gqUv4fRZSNbyPj4cS389eM4E","handle":"keep_it_a_secret","avatar_uri":"","about":""},{"address":"5D9tREUZ8jTB2gJt1BYFeHGCYFFDPkx9MCg8Pa21iY5wmeAD","handle":"ahaa1000","avatar_uri":"","about":"Come on,bch players"},{"address":"5D1AVX6VjfsunLZJHumk6WjkJUiM1g4tk9sTrz2f87XZk73t","handle":"alpser","avatar_uri":"","about":""},{"address":"5FdyqzHPZe71EzDU3pHKBWEPChbUitfoToUgrDtnWoojFtic","handle":"dltmoon1903","avatar_uri":"","about":""},{"address":"5Cwmqmr4sfJnWSehiQChNzb2MKVts6eSu1JSL3ZCFoVpuaMA","handle":"solomon","avatar_uri":"https://image.spreadshirtmedia.com/image-server/v1/compositions/1012773656/views/1,width=650,height=650,appearanceId=1,backgroundColor=d6daf0,version=1565757568/classic-sad-frog.jpg","about":"Lets Goooooooo!"},{"address":"5CVh5qEUPMQZqoBUuFpFCjuqe6tvUcLXnCbGLQnBbxhhkYaN","handle":"lisatai21","avatar_uri":"","about":""},{"address":"5C9TiKjVWRw36nS68V6rKie4GB8btwzFVdvZ2HPXnSJ8kQNo","handle":"kyukyu","avatar_uri":"https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/88207535-9be7-42c6-8aab-8403e025b92d/d9m51f3-d9781858-411a-473b-a217-ce202bbba1e6.png?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7InBhdGgiOiJcL2ZcLzg4MjA3NTM1LTliZTctNDJjNi04YWFiLTg0MDNlMDI1YjkyZFwvZDltNTFmMy1kOTc4MTg1OC00MTFhLTQ3M2ItYTIxNy1jZTIwMmJiYmExZTYucG5nIn1dXSwiYXVkIjpbInVybjpzZXJ2aWNlOmZpbGUuZG93bmxvYWQiXX0.gKzCIo7DowmKz8LewrPuqc2RawT5IG2fWkS3-W0L8i0","about":"Eccentric"},{"address":"5DCuouTw4Fojn8eaQTZFkmLYiu1Qjwf5ZqzfpjpVkwFA5vWP","handle":"lebuissonvert","avatar_uri":"","about":""},{"address":"5DduqUGa6adAjCzctobEYCi7H95zVHmYJz4ABSxVDca2jnyc","handle":"kanye","avatar_uri":"","about":"i like music"},{"address":"5ErJnL5y3ULbpY9ET72jH55463hUgtCizegxHM1z2UAU1QSS","handle":"testuser","avatar_uri":"","about":"Test user tutorial video :)"},{"address":"5FhsNAweHdxpyYFPYrxTd7AUmcUF4BurLLFXod5shFnBnare","handle":"ninja","avatar_uri":"","about":""},{"address":"5HNmE3cF4jsLmH1ncMsFfjizzJ3rN3jqPZsDRrBny2c3ArFJ","handle":"alice31taky29","avatar_uri":"","about":""},{"address":"5Cu8m13XcUzQBWnx2MpW7vv3uqn7AULjfz2oHjnXemz3NRf4","handle":"amins","avatar_uri":"https://www.google.com/search?q=avenger+picture&oq=avenger+picture&aqs=chrome..69i57j0l3.13933j0j4&client=ms-android-oppo&sourceid=chrome-mobile&ie=UTF-8#imgrc=kYgamFxWVWKDJM:","about":"Newbie and i wana try"},{"address":"5DmT8k6yKxvaEsqTQJbnMcmEN5jnHzexrNpAhgv6Av43ujCc","handle":"sameeraio","avatar_uri":"","about":""},{"address":"5FxqY3WjWEXN6NvoQKizX4zKbsDjWSjHhSAGybevsPyK4A7c","handle":"arvydas77","avatar_uri":"https://previews.123rf.com/images/lar01joka/lar01joka1712/lar01joka171200138/90908719-avatar-of-an-elephant.jpg","about":"Freedom is the only form of bright future. Seeking it. "},{"address":"5FPS4Zwnw8wEkeHU1bAQvJdeNi6npFtZ4ZGn7u1jV5RT7TRZ","handle":"axl77","avatar_uri":"","about":"Huge fan of Joy. "},{"address":"5HTnAnbS4pmaphWTbswEzKqiPooZ3nhaz3BXrZcK6xZqFScy","handle":"sameeraiostore","avatar_uri":"","about":""},{"address":"5CGU3jcszVXmVzfYadnbTV7UX8WGFCdhK4747H6nQS9DkANB","handle":"kuzo998","avatar_uri":"https://trinitymargate.co.uk/centre/wp-content/uploads/2018/10/blank-profile-head-hi.png","about":"Looking For a way to enjoy and learn ! , its boring if not to "},{"address":"5GaLH57Uc8Ukcu8K5LyV74cFdT5QBrs4i2fv21cH28zQ1KSn","handle":"gordon_freeman","avatar_uri":"","about":""},{"address":"5Hhigra11Ysa6eToMnq7u1zNdt7jpkDay96GQnEzd51sHSAy","handle":"beesus","avatar_uri":"","about":"freedom! and plants :)"},{"address":"5EU1xYaDfS3soKfsC9KYCFke27MNe72P3ppRmbhL4KPGXqYt","handle":"emcbandit","avatar_uri":"https://www.google.com/url?sa=i&source=images&cd=&cad=rja&uact=8&ved=2ahUKEwij6P7K9YblAhULVH0KHYMvBUcQjRx6BAgBEAQ&url=%2Furl%3Fsa%3Di%26source%3Dimages%26cd%3D%26ved%3D%26url%3Dhttps%253A%252F%252Faminoapps.com%252Fc%252Fanime%252Fpage%252Fitem%252Fdigimon-profile-matt%252FD7tN_ImzRzgX8MpQlxpr36x40dqe3l%26psig%3DAOvVaw2UPb4XiANFJK2VqoS6Ley9%26ust%3D1570426694911622&psig=AOvVaw2UPb4XiANFJK2VqoS6Ley9&ust=1570426694911622","about":"Hello!"},{"address":"5Em2snJcaFUZEfNTd5ptiz8UGMR4afAyuHjkWgTChz7iuCis","handle":"trollzor","avatar_uri":"","about":""},{"address":"5DyadsUvmq8R4gVNaBvmxbTYMSKzY6C7GDu2Cbe8myoc2d25","handle":"smartone","avatar_uri":"","about":""},{"address":"5HAqzEbGjqAogGkB79LAyaykGrVBQzcNbbprXXDLQXEBJ6Hu","handle":"mari987","avatar_uri":"","about":":)"},{"address":"5Gt22BMiRRpCMYmGH7ZPiqvu75dCxRKQi9isTQaP6hQe3rsN","handle":"st342","avatar_uri":"","about":""},{"address":"5G9YYKhvKfQALRaQxcr7xNCnYeHrjtvPzBsAaQNrquxEbPh5","handle":"bowene","avatar_uri":"","about":""},{"address":"5HCm7oxxHz31nLaBa3AaquiUh4YZpVMVPXc8394knQisuuY7","handle":"kiwi7","avatar_uri":"","about":""},{"address":"5ECGdL57kUvZp2wEV2oFCDhHgR2xVkVj94J8QYSHELEMArZ8","handle":"yourheropaul","avatar_uri":"https://yhp.io/img/paul.svg","about":""},{"address":"5DM86nVT4KUjyYoKRxMgHRVzoaxtD7TwBQBH51fCd369sUpY","handle":"bradt","avatar_uri":"","about":""},{"address":"5DfUdK9eDYieRiduVteTiMmvkESZP5e9HY7QGN7KJkKktfbV","handle":"leverett","avatar_uri":"","about":""},{"address":"5Ctiz9ob2cwyNKpW19Z8Lupva3n2TiypP6wNWE96uWoYhyJU","handle":"nonoenee","avatar_uri":"","about":"try to be luck"},{"address":"5FYkKPu31Da34u98dqmLLCbvN2nvEYrgA8nrAijzfPTEwDzt","handle":"almohajer","avatar_uri":"","about":""},{"address":"5ExX4ukX34r776hChUdEyWDgedGn2tQYJ12vR7HknBaJzEWi","handle":"cupton668","avatar_uri":"","about":""},{"address":"5Dz3Q57rSWC7oz9pqCNvSGW2GoqgHT1ALhP317Js567Qcm6V","handle":"fae811","avatar_uri":"","about":""},{"address":"5D2sy535bCjWP2xdsq99Zi8V9AXmxAQATAYghF8UAi8fUPr7","handle":"hotels","avatar_uri":"","about":""},{"address":"5EqNE3qoEU9pFgD4Lxi6JmygSzU2WSNuUsJCW8t7iLFYwRRj","handle":"roversl","avatar_uri":"","about":""},{"address":"5C693F9TvcWbgX6yL16uiaHZViSdH56NeAaPJsx35gNuTTzL","handle":"magickwar","avatar_uri":"","about":"lets play lol"},{"address":"5E1NMAJCN1iVkDVx8AyHYS7bAy1RHYeCGibunENAc5FYPumy","handle":"ulrich0h","avatar_uri":"","about":""},{"address":"5CpLsg7C8GiJoooZxghV1grHzuoQTMwoYu6cMJmwY4eRumHT","handle":"plerrr","avatar_uri":"","about":"love joy stream"},{"address":"5DMzgbnt1DxhDbqVsApXERn6H6kjbVmSszZoKv3jZuZXsgZH","handle":"iced_tea","avatar_uri":"","about":""},{"address":"5FcGZZriqZAyLo4E1AAaSVVMs5pUpkRgErP6V9CexXEL5959","handle":"kekmexs_voting_key","avatar_uri":"","about":"This is kek-mex's voting key for council votes."},{"address":"5FbfGSJwhF86PpELtSR1M72Qk1WnRTqWCtYv5xpeUga3heiS","handle":"muibast","avatar_uri":"https://i.imgur.com/gLSRbRgh.jpg","about":""},{"address":"5Heho3UpURG9SkSegA2Nq5v1L9yb7mNreaq6wzocUdmzP5F9","handle":"arish","avatar_uri":"https://www.google.com/search?q=donald+duck&oq=donald&aqs=chrome.2.69i57j0l3.5668j0j4&client=ms-android-samsung&sourceid=chrome-mobile&ie=UTF-8","about":"Wana try storege for income"},{"address":"5Ebbqp937kZUzZHvrUf41kEhbuZnYmRm4NqPj72NpvHfWgsQ","handle":"kemau","avatar_uri":"https://www.google.com/search?q=gusdur&safe=strict&rlz=1C1CHBD_enID841ID841&sxsrf=ACYBGNRT5qaeCd3-11lyMIY9Qb9N6xUCzw:1574622734210&tbm=isch&source=iu&ictx=1&fir=P8LFFn1mUC7WnM%253A%252CLxe9KeHejaj_SM%252C_&vet=1&usg=AI4_-kQjM3L_hDvC_3FA08hnNkL_gSM6ew&sa=X&ved=2ahUKEwjC_-jlxoPmAhVJzzgGHZ6YCWkQ9QEwA3oECAkQCA#imgrc=P8LFFn1mUC7WnM:","about":"monero"},{"address":"5HXMj9ytiS1ELHrHTrGDoxm89SVFArNoUkteABdmSmrTFGpS","handle":"glebmavi","avatar_uri":"","about":""},{"address":"5Dd3wJwqaaqGdEr3GgpCDBdxCRmuY8dWF3x2mRsaGgK7f4Zi","handle":"some1","avatar_uri":"","about":""},{"address":"5EXJ2BMqBg8yWFkmr2dsQuFacgGKgXYVPN26K8qmSmR7Guee","handle":"lexis","avatar_uri":"https://www.google.com/search?q=image+search+doraemon&tbm=isch&ved=2ahUKEwiB4fDDzZLmAhUGj0sFHWqJAzMQ2-cCegQIABAC&oq=image+search+doraemon&gs_l=mobile-gws-wiz-img.3...14375.23469..24299...0.0..0.648.2664.0j4j1j2j0j2......0....1.........0j0i19j0i5i30i19j0i8i30i19j33i10.Ll4Xsgpc44Y&ei=YrriXYGoCYaertoP6pKOmAM&bih=560&biw=360&client=ms-android-zte&prmd=isbvn&safe=strict","about":"Cayyooh "},{"address":"5Fmym3NKN5pk2UwU8HbcdFz1PeXk2J1tR4ypkToaVAXunVbS","handle":"cbr_storage","avatar_uri":"","about":""},{"address":"5EUaE1WLYj3DtHeabbRJPZDmXbx7KfZhTXyYLgLDCBhK57Kz","handle":"dragan","avatar_uri":"","about":"Storage provider"},{"address":"5GaJcMTkL6DNeCSQWhcS9GLi8MovBVsLTGsiZ7FG2PuZc36x","handle":"joystreamstoragenode","avatar_uri":"","about":""},{"address":"5CE4ryZHQ3aGBq1ThkNXk4W1Tzk5bz3TT864NA69gCJxgbK1","handle":"joystreamnode","avatar_uri":"","about":""},{"address":"5CK86vAwKpJrL57PKJRTnPgAFiUXMGTPPcZRJG74zhkQmRhe","handle":"diegovilla13","avatar_uri":"","about":"Council"},{"address":"5CgrexdDDT1F6HpWEkLuzEYwaWfDQqSPybZ7dVy5tTNsewbN","handle":"arnila","avatar_uri":"https://www.google.com/search?q=image+avatar+url&oq=image&aqs=chrome.1.69i57j35i39l2j0.8131j0j4&client=ms-android-samsung-gj-rev1&sourceid=chrome-mobile&ie=UTF-8#imgrc=AhCy_cweM6lOWM:","about":"Happy tesnet"},{"address":"5H2PzQcdezsby8M18cEJjk4QcTf9NpuUMDxim3zmJu1euu3j","handle":"crazyfrog277","avatar_uri":"","about":""},{"address":"5F3j33mjoyVphsZvBCpgHwveHSfYF52PaiSLAJffKFW2gRJv","handle":"junius","avatar_uri":"http://www.baidu.com","about":"junius membership"},{"address":"5CZ1SFjDJZzCmRjqMwFdmzGVicNvbKhV1GZ8pDEmHdAiuxuT","handle":"samrobin","avatar_uri":"https://c.gitcoin.co/avatars/3089b1bc02c42fdad9fa0d51cbbd94e6/saumyabratadutt.png","about":"Learning and Developing. "},{"address":"5CScvZ4v5at4tpY9aHtqi9Kjy1C4L6ahg8fHnCkRTbBFAGGN","handle":"keydric","avatar_uri":"","about":""},{"address":"5Ch7THcQihNqzvoFbFFV71y2CYxN3ywHk9xJunBoj6rGyCut","handle":"koprik","avatar_uri":"","about":""},{"address":"5DGcoqapJ5abny3y6Q9XeagsGZHBaLuayuPB4XRSZcDGe2h3","handle":"sonali","avatar_uri":"","about":""},{"address":"5GsXEZe3Jxw6AthzyvkSEY7W6ZvEvskqyMdrZ9UvSAojwQUJ","handle":"manny","avatar_uri":"https://upload.wikimedia.org/wikipedia/commons/2/2c/4-Week-Old_Netherlands_Dwarf_Rabbit.JPG","about":""},{"address":"5EWH7S33WdVmKQkoJ8RJZ6uedUwc1qwMMu4KcCNU26Y1MXwn","handle":"_null","avatar_uri":"","about":""},{"address":"5G9jLNPdnfPR6zuLroCgLu25TmcErbCinutRop1KPhnMUmkC","handle":"_f483_","avatar_uri":"http://f483.io/images/profile.jpg","about":""},{"address":"5EHPLjupdq3gTi6Nxtg6mRMn9wYBqqpuf6UPt7ziTXPVcA8u","handle":"salsabila","avatar_uri":"https://www.google.com/search?q=url+image+png&tbm=isch&ved=2ahUKEwjfs-Siz6PnAhUZfCsKHa9bC8oQ2-cCegQIABAC&oq=url+image+&gs_l=mobile-gws-wiz-img.1.1.0i19l4j0i30i19.8649.8649..18289...0.0..0.128.128.0j1......0....1.u5CSJ8rk7Ao&ei=x8EuXp-0KZn4rQGvt63QDA&bih=560&biw=360&client=ms-android-xiaomi&prmd=ivn&safe=strict#imgrc=EP_qHmF-NDWuqM","about":"For Long Time Will be good earn"},{"address":"5Ffi9KR71SzyhwwVwNozQqBzpvQEHnc5q6o2qVMAmNorFBWC","handle":"electrical_engineer","avatar_uri":"","about":""},{"address":"5EBb6rFVb9kJME39EEdK6zZi26GRDSGgCigz8nQPeWFSYkwr","handle":"wpotter1","avatar_uri":"","about":"I have a powerful machine with 1gb bandwith and wanted to test services "},{"address":"5DwSyoVMjxMuVbvKPSUNwVAXZys7WZgdUe4XrNHTafm3CXWt","handle":"yen01","avatar_uri":"","about":""},{"address":"5HaQUGfSDUxY938fAjLJdGHAJo4afVCbjPcYkXyqSkEXw5Dc","handle":"smith","avatar_uri":"","about":""},{"address":"5HaqVdz1p9SktXhJb3fVNwAWW6qj6Lv12zp9bWUTKtRCzkov","handle":"shifu","avatar_uri":"","about":""},{"address":"5HKffEZwoDctLcxXzE5rfNMgN6V2vgSv9dNEdhaw5PycwCDJ","handle":"nether","avatar_uri":"","about":""},{"address":"5DV7kFVGD7cRFtz63NxiGk85r2WX56ARjWkTVHpo3PJnNLmp","handle":"nepal","avatar_uri":"","about":""},{"address":"5GVeC6gWEs9ah2nS73hWM5AJaiBqN8MKJmHTtDcF7mzrtBGw","handle":"medvedev","avatar_uri":"","about":""},{"address":"5Dq6W2ped5vWzjcpDe8gYjfdBw7Do33cZRHBTouKqhiMvNeP","handle":"hamilton","avatar_uri":"","about":""},{"address":"5E7DBzHMpxWsdL3PWzo8YKDgPxwfgcLkwa2z1qJ78cyiwaEm","handle":"einstein","avatar_uri":"","about":""},{"address":"5Hfn7ry83iBCAPUsfWRngQ8VYjnsWfs5BTAX9SmvzUe2aurD","handle":"lambt","avatar_uri":"https://www.google.com/search?q=image+url&safe=strict&client=ms-android-wiko&prmd=ivn&source=lnms&tbm=isch&sa=X&ved=2ahUKEwi26O7Ggp7jAhUL7XMBHQR6CzcQ_AUoAXoECA4QAQ&biw=360&bih=464#imgrc=fgCBWfP2OZk0NM","about":"Try to know"},{"address":"5CVmRyB2FenYx1AHvsB3TcLyTHLP5gS8jF3ExNaBnPoXPT64","handle":"biggie","avatar_uri":"","about":""},{"address":"5E7DVaD1DNaLhFjJ8fuM2p7pkq2Fe5pksD5rvVkciGfcsV5A","handle":"verso","avatar_uri":"","about":""}] diff --git a/node/res/forum_data_acropolis_encoded.json b/node/res/forum_data_acropolis_encoded.json deleted file mode 100644 index 3896d13016..0000000000 --- a/node/res/forum_data_acropolis_encoded.json +++ /dev/null @@ -1 +0,0 @@ -{"categories":[[1,"01000000000000004847656e6572616c2044697363757373696f6e01014865726520796f752063616e206469736375737320616e797468696e6720796f752077616e74210a286a757374206b656570207468696e677320636976696c2901000000000000003814115d000000000000000000000800000000000000000ae55282e669fc55cb9529c0b12b989f2c5bf636d0de7630b5a4850055ed9c30"],[2,"02000000000000003c4a6f7973747265616d20526f6c6573310155736520746869732063617465676f727920746f2064697363757373207468652063757272656e7420616e6420667574757265204a6f7973747265616d206e6574776f726b20726f6c65732e01000000000000008c14115d000000000000050000000100000001000000000ae55282e669fc55cb9529c0b12b989f2c5bf636d0de7630b5a4850055ed9c30"],[3,"03000000000000005c4f66662d746f706963202873686974706f7374696e67295c4a757374206b656570207468696e677320636976696c2101000000000000006c16115d000000000000000000000300000000000000000ae55282e669fc55cb9529c0b12b989f2c5bf636d0de7630b5a4850055ed9c30"],[4,"04000000000000002856616c696461746f727365014865726520796f752063616e206469736375737320616c6c207468696e67732072656c6174656420746f206265696e672061206056616c696461746f7260c2a06f6e20746865204a6f7973747265616d206e6574776f726b2e0100000000000000661b125d000000000000000000000500000000000000010200000000000000000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[5,"05000000000000004453746f726167652050726f76696465727385014865726520796f752063616e206469736375737320616c6c206d61747465727320726567617264696e6720746865206053746f726167652050726f766964657260c2a0726f6c65206f6e20746865204a6f7973747265616d206e6574776f726b2e0100000000000000b41b125d000000000000000000000200000000000000010200000000000000010000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[6,"06000000000000003c436f756e63696c204d656d6265727379014865726520796f752063616e206469736375737320616c6c206d61747465727320726567617264696e67207468652060436f756e63696c204d656d6265726020726f6c65206f6e20746865204a6f7973747265616d206e6574776f726b2e0100000000000000f01b125d000000000000000000000300000000000000010200000000000000020000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[7,"070000000000000060476f7665726e616e636520616e642050726f706f73616c730501546869732069732074686520706c61636520746f206469736375737320676f7665726e616e6365206f6e20746865204a6f7973747265616d204e6574776f726b2e01000000000000008c1c125d000000000100000000000000000000000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[8,"0800000000000000584a6f7973747265616d20436f6d7065746974696f6e738501546869732063617465676f727920636f6e7461696e7320696e666f206f6e20706173742c2063757272656e7420616e642066757475726520636f6d7065746974696f6e7320666f7220746865204a6f7973747265616d20636f6d6d756e6974792e0100000000000000d2b1215d000000000100000000000000000000000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[9,"0900000000000000804469737472696275746f72202842616e6477696474682050726f7669646572293d024865726520796f752063616e206469736375737320616c6c207468696e67732072656c6174656420746f206265696e672061204469737472696275746f72206f6e20746865204a6f7973747265616d206e6574776f726b2e0a0a5468697320726f6c652077696c6c206265636f6d652061637469766174656420666f7220746865206e65787420746573746e6574210100000000000000d8032a5d000000000000000000000100000000000000010200000000000000030000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[10,"0a00000000000000484a6f7973747265616d20426f756e746965735101412063617465676f727920666f722070726f706f73696e672c20706f7374696e6720616e64206576616c756174696e6720626f756e7469657320666f7220746865204a6f7973747265616d2070726f6a6563742e010000000000000080b7825d000000000000000000000500000000000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[11,"0b00000000000000684275696c6465727320616e6420427567205265706f7274657273150148656c70206f7574204a6f7973747265616d206279207265706f7274696e672062756773206f7220636f6e747269627574696e6720746f206f757220736f6674776172652e0100000000000000f082835d000000000000000000000200000000000000010200000000000000040000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"]],"posts":[[1,"01000000000000000100000000000000010000004d01506c6561736520666f6c6c6f77206f7572207465726d73206f6620736572766963652c20616e642067656e6572616c2072756c657320616e642067756964656c696e657320666f722074686520666f72756d2e00000100000000000000082c115d0000000042be11a654ef34dbbfba9aa252ed093ef0890e874091b66e4193913ee2913953"],[2,"02000000000000000200000000000000010000007c5768617420646f20796f7520657870656374206d6520746f2077726974653f00000100000000000000de2e115d0000000007cd1fb09a58aff8bf48eba12fc659d37822a74b81270b85a1fb5baf3aa591cf"],[3,"0300000000000000030000000000000001000000fd0157696c6c20626520706f7374696e6720616c6c2074686520696e666f206865726520756e74696c207468656e200a476f20686572652068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f68656c706465736b2f747265652f6d61737465722f726f6c65732f73746f726167652d70726f76696465727300000100000000000000202f115d0000000007cd1fb09a58aff8bf48eba12fc659d37822a74b81270b85a1fb5baf3aa591cf"],[4,"04000000000000000200000000000000020000009c54686973206973207468652076657279206669727374207265706c79206f6e207468726561642e00000100000000000000eabe115d000000001ca65332ed98721f9d53e8b19da9c2a786c80bb9b71b66e756bb90f9f003a7c9"],[5,"0500000000000000020000000000000003000000d44a7573742063616d6520746f20736179207468697320697320746865207475726420706f737420696e2074686520746872656164210000010000000000000032da115d0000000042be11a654ef34dbbfba9aa252ed093ef0890e874091b66e4193913ee2913953"],[6,"0600000000000000020000000000000004000000e8225768617420646f20796f7520657870656374206d6520746f2077726974653f220a4174206c6561737420616e20656e74697265206e6f76656c000001000000000000006cee115d00000000b032b7392bd29cd9389d56891d38495ea2b1bafa9793ae3d26a2477669b8eb6e"],[7,"07000000000000000400000000000000010000007101416e792074686f75676874732061626f757420686f77207468697320726f6c65206d6967687420776f726b3f0a68747470733a2f2f7777772e6a6f7973747265616d2e6f72672f726f6c657323436f6e74656e742d43757261746f7200000100000000000000c41a125d00000000b032b7392bd29cd9389d56891d38495ea2b1bafa9793ae3d26a2477669b8eb6e"],[8,"0800000000000000050000000000000001000000d45768696368206f6e657320646f20796f75207468696e6b2077696c6c207374696c6c2062652061726f756e6420627920323033303f000001000000000000003cba125d00000000e042ed3c9093904acaf6f10dd118215ce3366e32c03047937d5cf04d70d51908"],[9,"090000000000000005000000000000000200000030584d52204d617962652e2e2e000001000000000000004efc125d0000000007cd1fb09a58aff8bf48eba12fc659d37822a74b81270b85a1fb5baf3aa591cf"],[10,"0a000000000000000600000000000000010000008d054a7573742074686f75676874204920776f756c64206c65617665206120717569636b20696e74726f20686572652e0a0a4d79206e616d652069732042656465686f204d656e6465722c204920616d2043454f206174204a7367656e657369732c2074686520636f6d70616e792063757272656e746c79206275696c64696e67204a6f7973747265616d2e204d6f7374206f66206d792074696d65206973207370656e7420646f696e6720646576656c6f706d656e742c20526e442c20746563686e6963616c2f70726f647563742064657369676e20616e6420686972696e672e200a0a4d792063757272656e7420666f63757320697320746f20706c616e20666f72206f7572206e65787420746573746e65742c2077686963682077652068617665206e6f742079657420616e6e6f756e6365642e0a0a496620796f752061736b2061207175657374696f6e2c20492077696c6c2074727920746f20616e7377657221000001000000000000004460135d00000000b65ba19cbb7786445ab30af15a1c3636f11a3227b8102d0389ee5d4ade93159f"],[11,"0b000000000000000700000000000000010000002d03576520686176656e277420686164207468652074696d6520746f206d616b6520616e20657069736f646520696e2061207768696c652c20627574207765276c6c2074727920616e64206d616b65206f6e65206e657874207765656b2e20416e7920696e746572657374696e67206e657773206f7220746f706963732077652073686f756c6420636f7665723f0a0a24313020626f756e747920666f722061206c696e6b20746f20612074776565742f61727469636c6520746861742067657473206d656e74696f6e65642100000100000000000000a0d1155d000000007cbd2c992945e5fc83d937a180e402ff32699718c1fc753f7a0214492e3ff035"],[12,"0c00000000000000070000000000000002000000c501726563656e742068697420746f20636f696e6465736b207768656e20636c6f7564666c6172652077656e7420646f776e2e0a68747470733a2f2f747769747465722e636f6d2f636f696e6465736b2f7374617475732f313134363035363837343938383634323330363f733d31390a0a0a000001000000000000007c791c5d000000000d93f52ebfebeaef5adaeb0b0f0db97977ff3dc139d4279869f283bc2155388a"],[13,"0d000000000000000200000000000000050000001501492077697368204920636f756c6420746970207468697320736f7274206f66207374756666212049747320746f6f20696e636f6e76656e69656e74207269676874206e6f7700000100000000000000ceae1c5d00000000b65ba19cbb7786445ab30af15a1c3636f11a3227b8102d0389ee5d4ade93159f"],[14,"0e00000000000000080000000000000001000000990323205768617420776f756c6420796f75206669783f0a0a4920776f756c64206164640a0a312e2041636375726174652073756263617465676f727920616e642074687265616420636f756e7473212049747320636f6e667573696e672c20616e64206861726420746f20747261636b206e657720706f7374732e0a322e20486f772063616e2077652073757266616365206e657720706f737473206265747465723f0a322e20536f6d6520736f7274206f662074616767696e67206f662075736572732c2077697468206e6f74696669636174696f6e73202849206b6e6f772068617264290a000001000000000000006aaf1c5d00000000b65ba19cbb7786445ab30af15a1c3636f11a3227b8102d0389ee5d4ade93159f"],[15,"0f00000000000000080000000000000002000000e10e536f6d652073756767657374696f6e733a0a2a20546f206164642074686520646174652f74696d6520746865206c61737420706f737420776173206d6164652066726f6d20666f72756d206f7665727669657720616e64206c696e6b20746f2064697265637420706f7374202b20746872656164207469746c650a2a20546f206164642074686520646174652f74696d65206f6620616c6c20706f73747320696e2065616368207468726561640a2a20546f206164642061207365706172617465206669656c642066726f6d207469746c6520746861742063616e2062652066696c6c6564207769746820616e20656d6f6a6920746f20676976652074687265616473206120626974206f662076697375616c20666c6172652028656d6f6a69277320636f756c642062652063757420646f776e20746f206120736d616c6c2073657420726174686572207468616e20616c6c206f66207468656d290a2a20546f2061646420746865206162696c69747920746f20646f20616e206175746f6d6174696320696e2d6c696e652071756f746520746f2070726576696f757320706f7374732074686174206164647320612071756f7465202b206c696e6b20746f2074686520706f73742074686520706572736f6e206973207265706c79696e6720746f2028746872656164656420726573706f6e736573290a2a20546f20616464207265616374696f6e7320746f20706f73747320287468756d62732075702f66756e6e7929206f7220612077617920746f20766f746520706f7374732f74687265616473206173206265696e6720676f6f642f6261640a2a20546f20616464207461677320666f7220746872656164732028227465636820737570706f72742220226f726967696e616c20636f6e74656e7422202264656269616e206e6f64652229202b206d61796265207365617263682066756e6374696f6e616c69747920696e20746865206675747572650a2a20546f2061646420706f7374206e756d626572202b206c696e6b20746f20616e63686f72206f6620706f7374206e756d62657220696e2065616368207468726561642e20536f20796f752063616e20656173696c792073656e642061206c696e6b20746f20706f73742023313220746f206f746865722070656f706c65206f72206c696e6b2066726f6d20616e6f74686572207468726561642e0a2a20546f206164642061206d656e7520666f722073696d706c65207465787420666f726d617474696e67206c696b6520626f6c642c206974616c69632c20696e73657274207069637475726520000001000000000000002e021e5d00000000b032b7392bd29cd9389d56891d38495ea2b1bafa9793ae3d26a2477669b8eb6e"],[16,"10000000000000000800000000000000030000006906546869732069732061207265616c6c79206772656174206c6973742c207468616e6b73210a0a49207468696e6b2077652063616e20646f2061206c6f74206f66207468697320776974686f757420612072756e74696d6520757067726164652c207768696368206973206e6963652e2057652061726520676f696e6720746f20696e76657374206d6f726520696e746f2074686520666f72756d2c20736f207765206e65656420746f206d616b652069742065617369657220746f207573652e0a0a596f75206469646e277420746f75636820736f206d756368206f6e20746865206973737565206f6620737572666163696e67206e657720636f6e74656e742c20616e792074697073206f6e20746861743f0a0a49206861766520612076657279207665727920686172642074696d65206669677572696e67206f75742061207768657265206e65772061637469766974792069732074616b696e6720706c616365207768656e20492068697420746865206d61696e20666f72756d20706167652c206f72206576656e2073756263617465676f726965732e00000100000000000000ca3b245d00000000b65ba19cbb7786445ab30af15a1c3636f11a3227b8102d0389ee5d4ade93159f"],[17,"11000000000000000800000000000000040000006503466f72206e657720636f6e74656e7473207765206e6565642061206e6f74696669636174696f6e2073797374656d206c696b652c2061206e6f74696669636174696f6e20636f756e746572207768656e20736f6d656f6e65207265706c69657320746f206f757220706f7374206f72207468726561642e53686f772061206e6f74696669636174696f6e20636f756e746572207769746820736d616c6c2064657461696c206f6e2074686520746f70207269676874202e20497420776f756c64206265206e69636520616e6420766572792075736566756c2e0000010000000000000072cf245d000000000d93f52ebfebeaef5adaeb0b0f0db97977ff3dc139d4279869f283bc2155388a"],[18,"1200000000000000070000000000000003000000690168747470733a2f2f7777772e636f696e6465736b2e636f6d2f7468657265732d612d7365636f6e642d746f6b656e2d612d627265616b646f776e2d6f662d66616365626f6f6b732d626c6f636b636861696e2d65636f6e6f6d7900000100000000000000ae22295d00000000e042ed3c9093904acaf6f10dd118215ce3366e32c03047937d5cf04d70d51908"],[19,"1300000000000000080000000000000005000000310349662061206e6f74696669636174696f6e20636f756e74657220697320746f6f20696e747275736976652c20796f7520636f756c64206a75737420686967686c6967687420746872656164732077697468206e657720706f73747320736f6d65686f772e20506572686170732070757420612073746172206e65787420746f2074686520746872656164206f72207075742074686520746872656164207469746c6520696e20626f6c64207768656e207468657265206973206e657720756e7265616420636f6e74656e742e000001000000000000005827295d00000000e042ed3c9093904acaf6f10dd118215ce3366e32c03047937d5cf04d70d51908"],[20,"14000000000000000600000000000000020000002820202020202020202020000001000000000000001828295d00000000e042ed3c9093904acaf6f10dd118215ce3366e32c03047937d5cf04d70d51908"],[21,"1500000000000000080000000000000006000000d101416e6f746865722066656174757265206964656120776f756c6420626520746f20686176652022656469746564222073686f776e206e65787420746f20706f73747320746861742068617665206265656e206564697465642061667465722074686579277665206265656e207772697474656e2e0000010000000000000018df295d00000000e042ed3c9093904acaf6f10dd118215ce3366e32c03047937d5cf04d70d51908"],[22,"160000000000000009000000000000000100000069014865726520796f752063616e206469736375737320616c6c207468696e67732072656c6174656420746f206265696e67206120604469737472696275746f7260206f6e20746865204a6f7973747265616d206e6574776f726b2e00000100000000000000e8022a5d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[23,"17000000000000000a000000000000000100000009044c6574206d65206b6e6f7720696620796f7520776f756c64206c696b6520746f20736565206d6f7265206f662074686573652e2049276d2061206269742062757379207269676874206e6f772c206275742069662070656f706c65206e6565642068656c702067657474696e67207365742075702c2049276c6c2070726f6261626c79206d616b6520736f6d65206d6f72652e0a0a68747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f6163726f706f6c69732f70696f6e6565722f232f6d656469612f706c61792f354554505868557135516e43665a397963646142337063453138473464556d47417454574435506d544d63627862775000000100000000000000d8122a5d00000000e042ed3c9093904acaf6f10dd118215ce3366e32c03047937d5cf04d70d51908"],[24,"18000000000000000800000000000000070000004102576f726b696e67206f6e2061205b6769746875622069737375655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f6a6f7973747265616d2f6973737565732f38302920666f722074686973210a0a4665656c206672656520746f206368696d6520696e2e2e2e0a0a2a45646974656420746f2073656520696620697427732073686f776e2e00000100000000000000f2532c5d0000000042be11a654ef34dbbfba9aa252ed093ef0890e874091b66e4193913ee2913953"],[25,"19000000000000000a000000000000000200000055054865792042656e2c0a0a5468697320697320776f6e64657266756c20737475666621200a0a536f6d652074696d652074686973207765656b2c2049276c6c2074727920746f206f7267616e697a652074686520666f72756d2070726f7065726c7920666f7220736f6d657468696e67207765206861766520696e206d696e6420666f72206c617465722e20436f6d7065746974696f6e732c20616e64206120636f6d6d756e6974792066756e6420636f6e74726f6c6c65642062792074686520636f756e63696c2e0a0a5765206d6179206a757374206f666665722022726567756c617222205b626f756e746965735d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732920666f72206d6f7265206f6620746865736520696e73746561642e204665656c206672656520746f2070726f706f7365206f6e6520796f757273656c6621000001000000000000009ca32c5d0000000042be11a654ef34dbbfba9aa252ed093ef0890e874091b66e4193913ee2913953"],[26,"1a000000000000000a00000000000000030000004d0147726561742c207468616e6b73204d617274696e210a0a436f6d7065746974696f6e7320616e6420636f6d6d756e6974792066756e6420626f746820736f756e64207665727920696e746572657374696e672e0000010000000000000002b92c5d00000000e042ed3c9093904acaf6f10dd118215ce3366e32c03047937d5cf04d70d51908"],[27,"1b000000000000000200000000000000060000004061207465737420666f6f207265706c79000001000000000000009285785d000000009e159eb998037d425124c10666d50e207d769bd5e993ffa82a9b32c8d645f6f5"],[28,"1c000000000000000400000000000000020000005101576527726520696e74726f647563696e6720697420696e2074686520526f6d6520746573746e65742c20736f20686f706566756c6c79206974276c6c206265636f6d65206170706172656e74207468656e203a2900000100000000000000e66b7d5d00000000e042ed3c9093904acaf6f10dd118215ce3366e32c03047937d5cf04d70d51908"],[29,"1d000000000000000b00000000000000010000007d0c23204f766572766965770a5468697320666f72756d2063617465676f727920616e6420746865205b6f726967696e616c207265706f5d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732f2920617265207768657265207765207075626c6973682c20747261636b20616e6420646f63756d656e742074686520626f756e74792073797374656d20666f7220746865204a6f7973747265616d20706c6174666f726d2e20416e796f6e65206973206672656520746f206d616b652061205b70726f706f73616c5d282370726f706f73616c732920666f72206120626f756e74792c20616e6420616e796f6e65206973206672656520746f20636f6d7065746520666f72207468656d2e0a0a43757272656e746c792c20616c6c20626f756e746965732077696c6c206265206d6164652060616374697665602c2066756e6465642c20616e642077696c6c206265206576616c7561746564206279205b4a7367656e657369735d2868747470733a2f2f626c6f672e6a6f7973747265616d2e6f72672f6a7367656e657369732f292e20496e20746865206675747572652c206f757220696e74656e74696f6e20697320746f206772616475616c6c7920696e766f6c76652074686520706c6174666f726d20676f7665726e616e63652073797374656d20696e20746865206465636973696f6e206d616b696e672e0a0a546865207061796f7574732077696c6c206265206d61646520696e205b6d6f6e65726f5d2868747470733a2f2f7765622e6765746d6f6e65726f2e6f72672f2920756e6c657373206e6f746564206f74686572776973652e204f75722063686f696365206f66207573696e67206d6f6e65726f20617320746865206d6574686f64206f66207061796d656e742069732074686174206974277320626f746820612077656c6c2065737461626c697368656420616e6420726570757461626c652070726f6a6563742c20616e64206172677561626c7920686173206265747465722070726976616379206665617475726573207468616e20736f6d65206f6620746865206f74686572206f7074696f6e732e00000100000000000000aab7825d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[30,"1e000000000000000c00000000000000010000003d0720232323232050726f626c656d0a417320746865206e6f6e2d636f6465207265706f732061726520757064617465642c206974277320646966666963756c7420746f2061766f696420696e74726f647563696e672062726f6b656e206c696e6b732c206572726f7273207769746820696d616765732c206772616d6d6172206d697374616b65732c20666f726d617474696e67206572726f72732c206574632e2054686973206d616b657320697420646966666963756c7420746f206e617669676174652c20616e642061646473206672696374696f6e20666f7220726561646572732e200a4e6f746520746861742074686973206170706c69657320746f20414c4c2074686520524541444d452e6d642066696c65732c206e6f74206a7573742074686520746f70206c6576656c206f6e652e0a0a2323232320476f616c730a496d70726f7665207175616c69747920616e64206163636573736962696c697479206f66206f7572207265706f732e0a0a2323232320526577617264730a2432207065722066697820746861742067657473206d65726765642e0a0a205f5375627374616e7469616c20696d70726f76656d656e7473206d61792062652072657761726465642065787472612e5f00000100000000000000c2b7825d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[31,"1f000000000000000d00000000000000010000007d03232323205f416c74686f756768207468697320626f756e7479206973207374696c6c206f70656e2c20626520617761726520746861742077652068617665206265656e20696e20636f6e746163742077697468206f6e65206170706c6963616e7420746861742063616d65207570207769746820736f6d65206164646974696f6e616c20696465617320616e642072657365617263682e205468697320706572736f6e20686173206265656e20676976656e202432353020746f20636f6e74696e7565206c6f6f6b696e6720696e746f206d6f72652064657461696c732e5f00000100000000000000e6b7825d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[32,"20000000000000000e0000000000000001000000310e23232050726f626c656d0a5765206861766520666f756e642061206c6f74206f662074686520636f6d6d6f6e206d656469612066696c652074797065732077696c6c206e6f7420706c617920696e205b70696f6e6565725d28687474703a2f2f746573746e65742e6a6f7973747265616d2e6f72672f292c20776974686f757420646f776e6c6f6164696e67207468652066696c652e0a0a232320476f616c730a496d70726f7665207468652055582c206279206b6e6f77696e672065786163746c7920776861742066696c6520747970657320776f726b732c20616e6420696e2077686963682062726f777365727320286368726f6d652f6368726f6d69756d2c2066697265666f7820616e6420736166617269292e0a0a232320526577617264730a4f75722066697273742070726f706f73616c206973202435302c2062757420696620616e206170706c6963616e742070726f6475636573206120676f6f64207465737420706c616e2c202869652e206c69737420616c6c20657874656e73696f6e732c2062726f777365727320616e64204f53277320746865792063616e2f77696c6c2074657374292c20746869732063616e206265206e65676f7469617465642e0a0a23232053636f7065206f6620576f726b20262044656c6976657261626c65730a55706c6f616420636f6e74656e7420696e20616c6c20227374616e646172642220666f726d6174732c20616e642070726f6475636520612066756c6c206c697374206f66207768617420776f726b7320696e2077686963682062726f77736572732f4f5327732e0a0a232320436f6e73747261696e74730a416c6c20636f6e74656e742075706c6f61646564206d75737420626520696e206c696e652077697468206f7572205b546f535d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f6163726f706f6c69732f70696f6e6565722f232f70616765732f746f73292e0a0a232320426f756e747920666f726d61740a546865206170706c69636174696f6e287329206d75737420626520617070726f766564206265666f726520616e7920776f726b2077696c6c2062652072657761726465642e0a0a232320446561646c696e650a546865206170706c69636174696f6e20646561646c696e65206973207468652030382e30372e31392c2031353030474d542b322e0a0a285468697320626f756e7479206973206e6f206c6f6e676572206f70656e2900000100000000000000feb7825d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[33,"21000000000000000f0000000000000001000000550223232050726f626c656d0a5765206e65656420736f7572636573206f66206672656520616e6420617661696c61626c65206d6564696120636f6e74656e742c20696e20766172696f757320666f726d6174732c20696e2074686520666f6c6c6f77696e6720746f70206c6576656c2063617465676f726965733a0a0a2a20766964656f0a2a20617564696f0a2a20652d626f6f6b730000010000000000000028b8825d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[34,"2200000000000000100000000000000001000000350523204f766572766965770a0a54686973207061676520636f6e7461696e7320616c6c20696e666f726d6174696f6e206f6e20686f7720746f20736574757020796f7572206e6f646520616e64206265636f6d696e672061206056616c696461746f7260206f6e20746865204a6f7973747265616d20546573746e6574732e2049742077696c6c206265207570646174656420666f7220696d70726f76656d656e74732c20616e64207768656e20736f6d657468696e67206368616e67657320666f72206e657720746573746e6574732e0a0a496620796f752077616e7420746f206561726e206d6f726520604a6f796020746f6b656e732c2062757420666f7220736f6d6520726561736f6e2063616e2774206f7220776f6e2774206265636f6d652061206056616c696461746f72602c20796f752063616e20604e6f6d696e6174656020696e73746561642e000001000000000000008e81835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[35,"2300000000000000110000000000000001000000350523204f766572766965770a0a54686973207061676520636f6e7461696e7320616c6c20696e666f726d6174696f6e206f6e20686f7720746f20736574757020796f7572206e6f646520616e64206265636f6d696e672061206056616c696461746f7260206f6e20746865204a6f7973747265616d20546573746e6574732e2049742077696c6c206265207570646174656420666f7220696d70726f76656d656e74732c20616e64207768656e20736f6d657468696e67206368616e67657320666f72206e657720746573746e6574732e0a0a496620796f752077616e7420746f206561726e206d6f726520604a6f796020746f6b656e732c2062757420666f7220736f6d6520726561736f6e2063616e2774206f7220776f6e2774206265636f6d652061206056616c696461746f72602c20796f752063616e20604e6f6d696e6174656020696e73746561642e00000100000000000000ac81835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[36,"2400000000000000120000000000000001000000350523204f766572766965770a0a54686973207061676520636f6e7461696e7320616c6c20696e666f726d6174696f6e206f6e20686f7720746f20736574757020796f7572206e6f646520616e64206265636f6d696e672061206056616c696461746f7260206f6e20746865204a6f7973747265616d20546573746e6574732e2049742077696c6c206265207570646174656420666f7220696d70726f76656d656e74732c20616e64207768656e20736f6d657468696e67206368616e67657320666f72206e657720746573746e6574732e0a0a496620796f752077616e7420746f206561726e206d6f726520604a6f796020746f6b656e732c2062757420666f7220736f6d6520726561736f6e2063616e2774206f7220776f6e2774206265636f6d652061206056616c696461746f72602c20796f752063616e20604e6f6d696e6174656020696e73746561642e00000100000000000000ca81835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[37,"2500000000000000130000000000000001000000e90d0a23232052756e206173206120736572766963650a0a496620796f75206172652072756e6e696e6720796f7572206e6f6465206f6e2061205b6c696e75785d28236c696e75782920616e642077616e7420746f2072756e2069742061732061205b736572766963655d2868747470733a2f2f77696b692e64656269616e2e6f72672f73797374656d642f5365727669636573292c20796f752063616e207365742069742075702074686973207761792e0a4e6f7465207468617420796f752073686f756c642061766f6964207468697320756e6c65737320796f75206b6e6f77207768617420796f752061726520646f696e672c206172652072756e6e696e6720796f7572206e6f6465206f6e202a2a796f7572206f776e205650532a2a206f7220612073696e676c6520626f61726420636f6d70757465722e205769746820677265617420287375646f292070726976696c656765732c20636f6d657320677265617420726573706f6e736962696c6974696573210a0a496620796f752061726520616c72656164792072756e6e696e672061732061206076616c696461746f72602c20636f6e7369646572205b756e7374616b696e675d2823756e7374616b696e67292066697273742c20617320796f75206d617920657870657269656e636520736f6d6520646f776e74696d6520696620796f75206d616b6520616e79206d697374616b657320696e207468652073657475702e0a0a2323232320436f6e6669677572652074686520736572766963650a0a45697468657220617320726f6f742c206f72206120757365722077697468207375646f2070726976696c656765732e20496620746865206c61747465722c2061646420607375646f60206265666f726520636f6d6d616e64732e0a0a6060600a24206364202f6574632f73797374656d642f73797374656d0a2320796f752063616e2063686f6f7365207768617465766572206e616d6520796f75206c696b652c2062757420746865206e616d652068617320746f20656e642077697468202e736572766963650a2420746f756368206a6f7973747265616d2d6e6f64652e736572766963650a23206f70656e207468652066696c65207769746820796f7572206661766f7269746520656469746f7220284920757365206e616e6f2062656c6f77290a24206e616e6f206a6f7973747265616d2d6e6f64652e736572766963650a606060000001000000000000005482835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[38,"26000000000000001400000000000000010000005d0123232054726f75626c6573686f6f74696e670a496620796f752068616420616e79206973737565732073657474696e672069742075702c20796f75206d61792066696e6420796f757220616e737765722068657265210a000001000000000000007882835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[39,"27000000000000001500000000000000010000004d0223204f766572766965770a0a54686973207468726561642077696c6c20636f6e7461696e20616c6c20696e666f726d6174696f6e206f6e20686f7720746f20736574757020796f75722073746f72616765206e6f646520616e64206265636f6d696e672061206053746f726167652050726f766964657260206f6e20746865204a6f7973747265616d20546573746e6574732e000001000000000000008083835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[40,"28000000000000001600000000000000010000005501232054726f75626c6573686f6f74696e670a496620796f752068616420616e79206973737565732073657474696e672069742075702c20796f75206d61792066696e6420796f757220616e73776572206865726521000001000000000000009883835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[41,"2900000000000000170000000000000001000000dd03232047657420537461727465640a546f20676574207374617274656420616e64207061727469636970617465206f6e20746865204a6f7973747265616d20746573746e6574732c20796f75206d7573742066697273742067656e657261746520604b6579287329602c20616e64207369676e20757020666f72206120604d656d62657273686970602e2054686973207265717569726573206e6f20736f667477617265206f7220646f776e6c6f6164732c20616e642063616e20626520646f6e6520696e20796f75722062726f77736572205b686572655d28687474703a2f2f746573746e65742e6a6f7973747265616d2e6f7267292e00000100000000000000ca84835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[42,"2a00000000000000180000000000000001000000510223204f766572766965770a0a54686973207061676520636f6e7461696e7320612064657461696c65642067756964652061626f757420686f772074686520676f7665726e616e63652073797374656d20776f726b73206f6e207468652063757272656e74204a6f7973747265616d20746573746e65742c20616e6420686f7720796f752063616e2070617274696369706174652e00000100000000000000e284835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[43,"2b000000000000001900000000000000010000003504576520686176656e277420726563656976656420616e79207265706f727473206f662070726f626c656d732077697468207468697320726f6c652c20736f20746869732074726f75626c6573686f6f74696e672074687265616420697320626c616e6b20666f72206e6f772e204c6574207573206b6e6f7720696620796f7520617265207374727567676c696e67207769746820616e797468696e67206f6e205b4769744875625d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f68656c706465736b2f292c206f7220696e206f7572205b54656c656772616d2047726f75705d2868747470733a2f2f742e6d652f4a6f7953747265616d4f6666696369616c292e00000100000000000000f484835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[44,"2c000000000000001a0000000000000001000000e904232320427567205265706f72746572730a4173207769746820616c6c20736f6674776172652c20616e6420657370656369616c6c7920746865206561726c792076657273696f6e732c2074686572652077696c6c20626520706c656e7479206f6620627567732c206d697373696e6720666561747572657320616e6420656e68616e63656d656e74732072657175697265642e20426f746820746f20696d70726f766520617320776520676f2c20616e6420746f2022747261696e2220612067726f7570206f66207465737465727320616e6420646576656c6f7065727320666f72206f7572206175746f6e6f6d6f757320706c6174666f726d2c2077652077616e74205f6f75747369646572735f20746f20737461727420636f6e747269627574696e6720617320736f6f6e20617320706f737369626c652e000001000000000000003085835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[45,"2d000000000000001b0000000000000001000000cd0823232320496e737472756374696f6e730a417320616e206f70656e2d736f757263652070726f6a6563742c2077652074727920746f20666f6c6c6f7720746865207374616e6461726420636f6e76656e74696f6e7320616e6420776f726b666c6f772e0a0a496620796f752066696e642061206275672c206f722077616e7420746f20696d70726f7665206f722061646420736f6d657468696e6720696e2074686520636f64652c20646f63756d656e746174696f6e73206f72206775696465732c206c6f636174652074686520636f7272656374207265706f2066726f6d20746865206f7267616e697a6174696f6e205b696e6465785d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f6a6f7973747265616d237265706f7369746f72792d696e646578292e20466f726b20746865207265706f2c206d616b6520746865206368616e67657320796f752077616e7420746f20616464726573732c20616e64206372656174652061206050756c6c2072657175657374602e20466f72206f7572206d757475616c20636f6e76656e69656e63652c20697420776f756c64206265206e69636520696620796f752072616973656420616e206049737375656020666972737420736f2077652063616e206167726565206f6e207468652073636f70652c207468652073697a65206f662074686520626f756e747920616e64206d616b652073757265207468697320697320736f6d657468696e672077652077616e742f6e6565642e000001000000000000008485835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[46,"2e000000000000000c00000000000000020000005d06232323232053636f7065206f6620576f726b20262044656c6976657261626c65730a466f726b20746865207265706f2c20616e642066697820776861742069732062726f6b656e2e205468656e206d616b65206120505220696e20746865206170706c696361626c65207265706f2c20616e6420726566657220746f2069742061207265706c7920616e7377657220696e207468697320746872656164206f7220746865204769744875622069737375652e0a0a4170706c696361626c65207265706f73206172653a0a0a2a2068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f6a6f7973747265616d0a2a2068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f68656c706465736b0a2a2068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f636f6d6d756e69636174696f6e730a2a2068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965730a2a2068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f64657369676e000001000000000000007001855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[47,"2f000000000000000c0000000000000003000000fd0e2323232320436f6e73747261696e74730a312e20416c74686f7567682073756767657374696f6e7320666f7220636c6172696669636174696f6e732c20696d70726f76656d656e74732c206574632e2061726520616c776179732077656c636f6d652c20706c6561736520616464207468656d20617320636f6d6d656e747320696e7374656164206f6620696e636c7564696e67207468656d20696e2074686520505220697473656c662c20746f206d616b65207468652050522065617369657220746f207265766965772e2049662074686520726576696577657220616772656573207769746820796f75722073756767657374696f6e2c20796f752063616e206164642061206e657720636f6d6d697420746f207468652050522e0a322e20416c6c206c696e6b732077697468696e207468652073616d65207265706f206d7573742062652072656c617469766520696e7374656164206f66206162736f6c7574652e204578616d706c653a0a0a6060600a232046726f6d2068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f6a6f7973747265616d2f747265652f6d61737465722f746573746e6574732f6163726f706f6c69730a2320596f752077616e7420746f206c696e6b20746f3a2068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f6a6f7973747265616d2f747265652f6d61737465722f6d656574696e67732f6163726f706f6c6973236c61756e63682d6d656574696e670a2320446f20746869733a0a5b6c696e6b5d282e2e2f2e2e2f6d656574696e67732f6163726f706f6c69732f236c61756e63682d6d656574696e67290a23204e6f7420746869733a0a5b6c696e6b5d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f6a6f7973747265616d2f747265652f6d61737465722f6d656574696e67732f6163726f706f6c6973236c61756e63682d6d656574696e67290a6060600a0a332e205768656e20796f7520737461727420776f726b696e672c206665656c206672656520746f206d616b65206120647261667420505220746f2073686f7720796f757220696e74656e742c206275742070726566657261626c7920636865636b2074686520656e74697265207265706f206265666f72650a50726566657261626c7920676f207468726f756768205f616c6c5f20746865206c696e6b73206265666f7265206d61726b696e6720697420726561647920666f72207265766965772c20616e642061737369676e696e6720736f6d656f6e6520746f2072657669657720796f75722e000001000000000000008801855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[48,"30000000000000000c0000000000000004000000090a5f557064617465202d2030352e30382e31395f0a0a342e20506c656173652075736520555320456e676c697368207370656c6c696e6720666f7220636f6e73697374656e6379206163726f737320746865206f7267616e697a6174696f6e2e0a352e20496465616c6c792c20757365205b61746f6d5d2868747470733a2f2f61746f6d2e696f2f2920617320796f757220656469746f722c20616e64206164642074686520666f6c6c6f77696e6720706c7567696e733a0a0a2a205b6d61726b646f776e2d707265766965772d656e68616e6365645d2868747470733a2f2f61746f6d2e696f2f7061636b616765732f6d61726b646f776e2d707265766965772d656e68616e636564290a2a205b6d61726b646f776e2d746f632d6175746f5d2868747470733a2f2f61746f6d2e696f2f7061636b616765732f6d61726b646f776e2d746f632d6175746f290a0a546f20656e737572652069742072656e6465727320636f72726563746c792e0a0a2323232320426f756e747920666f726d61740a466972737420636f6d652066697273742073657276652e20506179206f7574206f6e2064656c69766572792e0a466f72206f757220636f6e76656e69656e63652c20616464206120636f6d6d656e7420616e64206c696e6b20746f2074686520505220696e20746869732069737375652c2077697468206e756d626572206f6620666978657320616e64206578706563746564207061796f7574732e0a0a2323232320446561646c696e650a57696c6c206d6f7374206c696b656c79206265206b657074206f70656e20666f722079656172732e2057696c6c20686f6e6f7220636f6e747269627574696f6e732034386820616674657220636c6f73696e672e00000100000000000000c401855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[49,"31000000000000000c00000000000000050000008902232320546f20736565206675727468657220636f6e766572736174696f6e732061626f7574207468697320626f756e747920616e6420746f20706f737420796f757220636f6e747269627574696f6e732c20706c6561736520766973697420746865205b4769744875622069737375655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732f6973737565732f33292e000001000000000000005402855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[50,"32000000000000000b000000000000000200000059044a7367656e6573697320697320616c736f206d616b696e67207765656b6c79207061796f75747320666f722070617274696369706174696f6e206f6e20746865205b4a6f7973747265616d20746573746e6574735d28687474703a2f2f746573746e65742e6a6f7973747265616d2e6f72672f292e204d6f726520696e666f726d6174696f6e2061626f757420746865207768617420796f752063616e2c207768617420796f752063616e206d616b652c20616e642077687920776527726520646f696e6720746869732063616e20626520666f756e6420696e206f7572205b68656c706465736b207265706f5d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f68656c706465736b292e000001000000000000000203855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[51,"33000000000000000b000000000000000300000029022a2a4b65657020696e206d696e642074686174206f757220626f756e74792073797374656d2069732061205749502c20616e642069742073686f756c642062652065787065637465642074686174206368616e67657320746f207468652070726f636573732077696c6c206265206d616465206173207468652070726f6a6563742067726f77732e2a2a000001000000000000002003855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[52,"34000000000000000b000000000000000400000029070a23232053756d6d617279206f6620426f756e746965730a0a7c204c6173742055706461746564207c20426f756e7469657320436f6e636c75646564207c204f6e676f696e6720426f756e74696573207c204f6666696369616c6c792050616964207c204f6c64205061796f757473602a6020207c0a7c3a2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c0a7c2031372e30372e313920202020207c20202020202020203020202020202020202020207c2020202020202020203320202020202020207c202020202a2a243632362a2a20202020207c20202020202a2a243231342a2a202020207c0a0a602a602044656e6f74657320626f756e746965732070616964206f7574206265666f72652074686520226f6666696369616c22207265706f207761732075702e20536f6d65206f6620746865736520626f756e746965732063616e20626520666f756e6420696e206f74686572207265706f732c20736f6d6520776572652073696d706c7920706f73746564206f6e2054656c656772616d2e000001000000000000004a03855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[53,"35000000000000000b00000000000000050000001d0923232053756d6d617279206f6620546573746e65742050617274696369706174696f6e205061796f7574730a0a23232320546f74616c0a0a7c204c6173742055706461746564207c2056616c696461746f7273207c20436f756e63696c204d656d62657273207c2053746f726167652050726f7669646572737c20546f74616c20202020202020202020207c0a7c3a2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c0a7c2030322e30382e313920202020207c2020202024383537202020207c20202020202024393337202020202020207c2020202020243338333920202020202020207c2020202a2a24353633332a2a20202020207c0a0a0a232323204163726f706f6c69730a0a7c204c6173742055706461746564207c2056616c696461746f7273207c20436f756e63696c204d656d62657273207c2053746f726167652050726f7669646572737c20546f74616c20202020202020202020207c0a7c3a2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c0a7c2030322e30382e313920202020207c2020202024343833202020207c20202020202024353130202020202020207c2020202020202433303634202020202020207c202020202a2a24343035372a2a202020207c0a000001000000000000006803855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[54,"36000000000000000b0000000000000006000000790723232320417468656e730a0a7c204c6173742055706461746564207c2056616c696461746f7273207c20436f756e63696c204d656d62657273207c2053746f726167652050726f7669646572737c20546f74616c20202020202020202020207c0a7c3a2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c0a7c2032342e30362e313920202020207c2020202020243236332020207c20202020202020243237322020202020207c2020202020202437373520202020202020207c2020202a2a24313331302a2a20202020207c0a0a0a232323205370617274610a0a7c204c6173742055706461746564207c2056616c696461746f7273207c20436f756e63696c204d656d62657273207c2020202020546f74616c202020202020207c0a7c3a2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c3a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3a7c0a7c2030312e30342e313920202020207c2020202020243131312020207c20202020202024313535202020202020207c20202020202a2a243236362a2a202020207c000001000000000000007a03855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[55,"37000000000000000b00000000000000070000000d07232320426f756e746965730a0a2d202a2a4e756d6265722a2a0a20202d205768656e206120626f756e7479206265636f6d65732060616374697665602c2069742077696c6c2062652061737369676e65642061206e756d626572206261736564206f6e20697473206368726f6e6f6c6f676963616c206f726465722e0a0a2d202a2a5469746c652a2a0a20202d20412062726965662c206465736372697074697665207469746c650a0a2d202a2a4c696e6b2a2a0a20202d204c696e6b20746f20746865205b69737375655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732f6973737565732920776974682064657461696c732e0a0a2d202a2a43617465676f72792a2a0a286e6f6e2d65786861757374697665290a20202d206042756720666978600a20202d206054657374696e67600a20202d2060446f63756d656e746174696f6e600a20202d2060496d70726f76656d656e7473600a20202d20604d61726b6574696e67600a20202d2060476f7665726e616e6365600a20202d20604e65772066656174757265600a20202d206050726f6a656374206d616e6167656d656e74600a20202d206048656c7060000001000000000000009e03855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[56,"38000000000000000b0000000000000008000000d5082d202a2a537461727420446174652a2a0a20202d2054686520646174652074686520626f756e747920626563616d652060616374697665600a0a2d202a2a41737369676e65652873292a2a0a20202d20496620616e206170706c6963616e7420686173206265656e20617070726f76656420746f20737461727420776f726b2c2074686520706572736f6e2773204769744875622060557365726e616d65602077696c6c206265206c69737465642e0a20202d20496e20736f6d652063697263756d7374616e6365732c2069742063616e2062652061636365707461626c6520746f206a757374207374617465206041737369676e6564602e0a0a2d202a2a5374617475732a2a0a20202d2041637469766520426f756e746965730a202020202d20604f70656e600a202020202d206041737369676e6564600a202020202d2060556e64657220726576696577600a202020202d20604f6e20486f6c64600a20202d20436f6e636c7564656420426f756e746965730a202020202d2060436f6d706c65746564600a202020202d206045787069726564600a202020202d206041626f72746564600a20202d204d6f72652064657461696c73206f6e20746865207374617475732063616e20626520666f756e6420627920666f6c6c6f77696e6720746865206c696e6b20666f72207468652070726f706f73616c206f6620696e7465726573742e0a0a2d202a2a506169642a2a0a20202d2054686520616d6f756e742070616964206f75742074687573206661722e00000100000000000000aa03855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[57,"39000000000000000b0000000000000009000000b1072d202a2a426f756e74792a2a0a20202d2041637469766520426f756e746965730a202020202d205468652076616c7565206f662074686520626f756e74792e0a20202d20436f6e636c7564656420426f756e746965730a202020202d2054686520746f74616c20616d6f756e742070616964206f75742e0a20202d2049662074686520616d6f756e7420697320666f6c6c6f77656420627920602a602c20636f6e73756c7420746865206c696e6b6564205b69737375655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732f6973737565732920666f72206d6f726520696e666f726d6174696f6e2e0a0a2d202a2a456e6420446174652a2a0a20202d2054686520646174652074686520626f756e7479207761732060636f6e636c75646564600a0a2d202a2a436c61696d616e742873292a2a0a20202d2049662074686520626f756e747920776173207375636365737366756c6c7920636c61696d65642c2074686520706572736f6e2773204769744875622060557365726e616d65602077696c6c206265206c69737465642e0a20202d20496e20736f6d652063697263756d7374616e6365732c2069742063616e2062652061636365707461626c6520746f206a7573742073746174652060436c61696d6564602e0a00000100000000000000e603855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[58,"3a000000000000000b000000000000000a000000310523232050726f706f73616c730a0a496e206164646974696f6e20746f20746865204a7367656e65736973207465616d2c20636f6d6d756e697479206d656d626572732c206e657720616e64206f6c642c2073686f756c64206e6f742062652061667261696420746f2070726f706f736520626f756e746965732e20417420736f6d6520706f696e742c20776520686f706520746f2063726561746520612073797374656d206569746865722073696d696c617220746f20746865205b4249505d2868747470733a2f2f6769746875622e636f6d2f626974636f696e2f62697073292070726f6365737320666f7220626974636f696e20616e642f6f7220746f20746865205b4646535d2868747470733a2f2f666f72756d2e6765746d6f6e65726f2e6f72672f392f776f726b2d696e2d70726f6772657373292073797374656d20666f72206d6f6e65726f2e000001000000000000005804855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[59,"3b000000000000000b000000000000000b000000950f232323205374657020627920537465700a0a546869732073656374696f6e206f75746c696e6573207468652073746570732066726f6d20612070726f706f73616c73206973206d6164652c20746f2068617665206974206265636f6d6520616e205b41637469766520426f756e74795d28236163746976652d626f756e74696573292e0a0a312e20496620796f7520617265206e6f742066616d696c6961722077697468207468652070726f6a65637420616e642069747320676f616c732c20636f6e73696465722074686520666f6c6c6f77696e6720736f75726365733a0a20202d205468652070726f6a656374205b6d616e69666573746f5d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f6d616e69666573746f292e0a20202d205468652070726f6a656374205b776869746570617065725d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f77686974657061706572292e0a20202d204f7572206c6f6e67206f722073686f7274207465726d205b4f4b52735d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f6a6f7973747265616d2f747265652f6d61737465722f6f6b7273292e0a596f75722070726f706f73616c2073686f756c642070726566657261626c7920626520696e206c696e6520776974682c206f72206174206c65617374206e6f74206f7274686f676f6e616c20746f20746865736520736f75726365732e20526566657272696e6720746f20616e2069737375652066726f6d206f6e65206f66206f7572206f74686572207265706f732063616e20616c736f206265206120676f6f6420736f757263652e0a0a496620796f75206861766520612070726f706f73616c207468617420646f6573206e6f74207265616c6c792066697420756e64657220616e79206f66207468652061626f76652c206665656c206672656520746f2067617567652074686520696e74657265737420616e642072656c6576616e636520696e2061206d6f726520696e666f726d616c206d616e6e65722c20652e672e20696e206f6e65206f66206f757220636f6d6d756e69636174696f6e206368616e6e656c732c2073756368206173205b54656c656772616d5d2868747470733a2f2f742e6d652f4a6f7953747265616d4f6666696369616c292c206f722074686520666f72756d2c20616674657220697420686173206265656e20696e74726f647563656420696e205b4163726f706f6c69735d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f6a6f7973747265616d2f747265652f6d61737465722f746573746e6574732f6163726f706f6c6973292e000001000000000000006a04855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[60,"3c000000000000000b000000000000000c000000f907322e204d616b6520616e205b69737375655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732f6973737565732920696e2074686520626f756e74696573207265706f2c207374727563747572656420617320666f6c6c6f77733a0a0a0a23232323205469746c650a0a2d202a2a4a43502a2a202d202a2a4465736372697074697665205469746c652a2a0a0a232323232320426f64790a0a2d202a2a50726f626c656d3a2a2a0a50726f766964652061206465736372697074696f6e206f66207468652070726f626c656d206f7220696d70726f76656d656e7420796f75207769736820746f2073656520696d706c656d656e7465642e0a2d202a2a476f616c733a2a2a0a41206272696566206465736372697074696f6e206f662074686520676f616c7320796f7520686f706520746f20616368696576652c20616e6420686f772069742077696c6c2062656e6566697420746865204a6f7973747265616d2050726f6a6563742e0a0a54686573652061726520746865206d696e696d756d20726571756972656d656e74732c2062757420796f752061726520656e636f75726167656420746f206c6f6f6b20617420746865205b626f756e7479207374727563747572655d2823626f64792d312920666f7220616e797468696e6720657874726120746f206164642e000001000000000000008804855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[61,"3d000000000000000b000000000000000d0000003106332e20496620796f7520776973682c20616e6e6f756e636520796f75722070726f706f73616c20696e206f6e65206f66206f757220636f6d6d756e69636174696f6e206368616e6e656c73206d656e74696f6e65642061626f76652e20546869732077696c6c206c696b656c792067656e6572617465206d6f726520666565646261636b2e0a0a342e2041206d656d626572206f6620746865204a7367656e65736973207465616d2077696c6c207265706c7920696e20612074696d656c79206d616e6e65722c2061736b696e6720666f72206d6f726520696e666f726d6174696f6e2c2072656a656374696e67206f7220617070726f76696e6720796f75722070726f706f73616c2e0a0a352e204966206974206765747320617070726f7665642c204a7367656e657369732077696c6c2065697468657220777269746520616e6420616e6e6f756e63652074686520626f756e7479206173206465736372696265642062656c6f772c206f722064656c65676174652074686520726573706f6e736962696c6974792e0a000001000000000000009404855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[62,"3e000000000000000b000000000000000e000000850623232320416e6e6f756e63696e672041637469766520426f756e746965730a0a5768656e2061205b70726f706f73616c5d282370726f706f73616c732920686173206265656e20617070726f7665642c206f72204a7367656e657369732068617665206964656e74696669656420736f6d657468696e67207375697461626c6520666f72206120626f756e74792c2069742077696c6c20626520616e6e6f756e63656420617320616e205b69737375655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732f697373756573292c20616e6420616464656420746f20746865205b41637469766520426f756e746965735d28236163746976652d626f756e7469657329207461626c652e0a0a486f77207468652070726f63657373206c6f6f6b732066726f6d2074686520604163746976656020737461676520746f2060436f6e636c75646564602077696c6c20646570656e64206f6e207468652073636f7065206f6620776f726b2c202a2a43617465676f72792a2a2c207061796f7574207374727563747572652c206574632e00000100000000000000b204855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[63,"3f000000000000000b000000000000000f000000f901232320466f72206d6f726520696e666f726d6174696f6e206f6e20626f756e746965732c20706c6561736520766973697420746865205b6a6f7973747265616d2f626f756e746965735d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732f29207265706f7369746f72792e00000100000000000000ae05855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[64,"40000000000000000d00000000000000020000001d0823232050726f626c656d0a417320646f63756d656e74656420696e205b4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2336385d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2f6973737565732f3638292c205b4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2336395d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2f6973737565732f3639292c2073686f776e20696e205b74656c656d74657472795d2868747470733a2f2f74656c656d657472792e706f6c6b61646f742e696f2f232f4a6f7973747265616d253230546573746e657425323076322920616e64206469736375737365642068656176696c7920696e206f757220636f6d6d756e697479206368616e6e656c732c206b656570696e672061207375737461696e65642068696768207065657220636f756e74206861732070726f76656420646966666963756c742e2052756e6e696e6720746865206e6f646520776974682064656661756c742073657474696e677320616e64206c656176696e6720697420666f722061206c6f6e672074696d652077696c6c206c696b656c7920726573756c7420696e3a00000100000000000000a007855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[65,"41000000000000000d00000000000000030000005908312e204120636f6e74696e756f75732064726f7020696e20706565727320286173207468652022706f6f6c22206f6620323520676574732066696c6c656420776974682066726f7a656e206e6f6465732c20616e64206e6f6465732066726f6d206f74686572206e6574776f726b73292e0a322e20412074656e64656e637920666f7220636c7573746572696e67207065657273202869652e20612067726f7570206f66206e6f646573206f6e6c792f6d6f73746c7920636f6e6e656374656420746f2065616368206f74686572290a332e2048696768206c6174656e63792c206c656176696e67206076616c696461746f72736020746f20676574207761726e696e67732f736c617368696e67732f62616e6e65642064756520746f20616e2022756e666f7274756e61746522206f7264657220696e207468652071756575652e0a342e205468697320616761696e20686173206c65616420746f20666f726b732c20656974686572206265636175736520746865206f6e6520226f75747369646522206e6f646520696e2074686520636c7573746572202872656620322e292068617320676f6e65206f66666c696e652c20616e642f6f72206265636175736520736f6d65206e6f64657320636f6e7369646572207468652070726f706f73656420626c6f636b20746f2062652077697468696e207468652074696d65206c696d69742c20616e64206f7468657273206e6f742e00000100000000000000be07855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[66,"42000000000000000d00000000000000040000001d0a417320612073696465206e6f74652c207468657265206973206120636c7573746572696e67206f66206e6f64657320696e204575726f70652c20627574207468652072657374206f662074686520776f726c64206973206e6f742061732077656c6c20726570726573656e7465642c20696e6372656173696e67206c6174656e637920616e6420616464696e6720746f207468652070726f626c656d2e0a0a417320776520646f6e27742077616e7420746f2072657374617274206f7572206e6574776f726b20616761696e20286173206f75746c696e656420696e205b4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2336395d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2f6973737565732f363929292c2077652068617665206164766973656420757365727320746f3a0a0a2a20696e637265617365207065657220636f756e7420627920616464696e672074686520666c6167730a2020602d2d696e2d7065657273206e202d2d6f7574207065657273206d600a20207768657265206e20616e64206d203e2032352e0a2a2072657374617274207468656972206e6f646520617420726567756c617220696e74657276616c730a0a426f7468206f6620746865736520696d70726f7665732074686520736974756174696f6e2c206275742074686520666f726d657220696e63726561736573206d656d6f72792075736167652c20616e6420746865206c61747465722072657175697265732061206d6f72652068616e6473206f6e20617070726f6163682c206f72206d6f726520616476616e6365642073657474696e67732e0a00000100000000000000d007855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[67,"43000000000000000d0000000000000005000000110d23232050726f706f73616c0a446f2061206d61726b6574696e672063616d706169676e2c207768657265206578697374696e6720636f6d6d756e697479206d656d626572732061726520676976656e20604a6f7973747265616d60206272616e6465642073696e676c6520626f61726420636f6d70757465727320287261737062657272792070692773206f722073696d696c61722920666f7220667265652c20746f2072756e206173206e6f6465732e20546865792077696c6c207265636569766520726567756c6172206d6f6e65726f207061796d656e747320746f20636f76657220656c65637472696369747920616e642074686569722074696d65206966207468656972206e6f64657320686176652073756666696369656e7420757074696d652e20546865792077696c6c206f6620636f757273652067657420746f206b656570207468652052425073206e6f206d617474657220776861742e205468657365206e6f6465732077696c6c206d6179206f72206d6179206e6f74206265207061696420666f72206265696e67206076616c696461746f7273602e0a492062656c6965766520746869732063616e2068656c7020696e2074686520666f6c6c6f77696e6720776179733a0a0a312e20496e63726561736520746865206e6f646520636f756e742c2077686963682077696c6c3a0a2020200a2020202a20696d70726f766520746865206e6574776f726b0a2020202a2070726f6d6f7465206f75722022706f736974696f6e2220696e20746865205b74656c656d74657472795d2868747470733a2f2f74656c656d657472792e706f6c6b61646f742e696f2f232f4a6f7973747265616d253230546573746e6574253230763229206869657261726368790a322e2046757274686572206275696c6420616e6420656e636f75726167652074686520636f6d6d756e6974792e0a332e2048656c7020696d70726f76652074686520746563686e6963616c20736b696c6c73206f662074686520726563656976696e67206d656d626572732028746865792077696c6c206f6620636f757273652067657420737570706f72742c206275742077652077696c6c206e6f74207368697020746865206e6f646573207769746820736f6674776172652900000100000000000000e207855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[68,"44000000000000000d0000000000000006000000810c232320436f73740a41205b7261737062657272792070695d2868747470733a2f2f7777772e616d617a6f6e2e636f6d2f41424f582d5261737062657272792d436f6d706c6574652d4d6f74686572626f6172642d4865617473696e6b2f64702f423037443856585752592f7265663d73725f315f31373f637269643d31385153535758575649485059266b6579776f7264733d7261737062657272792b70692b332b62253242267169643d3135353735303930363826733d6761746577617926737072656669783d7261737062657272792b702532436170732532433430392673723d382d313729207769746820616c6c20746865206e65656465642065787472612065717569706d656e7420636f7374732061726f756e64207e38302420772f6f207368697070696e672e2042792073686f7070696e672061726f756e642c20627579696e6720696e2062756c6b2c20616e6420636f6e7369646572206368656170657220626f617264732a2c20612076657279206869676820656e6420657374696d61746520636f6d657320746f202431303020736869707065642e2047657474696e672074686520636f737420646f776e20746f20243530206d6967687420626520706f737369626c652c20627574206120627564676574206f6620243130302f707220626f6172642069732073696d706c6520616e6420636f6e7365727661746976652e0a0a2a63757272656e746c792c20626f617264732061732073696d706c6520617320746865205b6f72616e6765207069207a65726f5d2868747470733a2f2f7777772e616c69657870726573732e636f6d2f6974656d2f4f72616e67652d50692d5a65726f2d48322d517561642d436f72652d4f70656e2d736f757263652d3531324d422d50726f746563746976652d57686974652d436173652d646576656c6f706d656e742d626f6172642d6265796f6e642d5261737062657272792f33323739393131313631312e68746d6c3f73706d3d61326730732e393034323331312e302e302e3165663734633464414778444932292063616e205f63757272656e746c795f2072756e206f6e20746865206e6574776f726b2e00000100000000000000f407855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[69,"45000000000000000d0000000000000007000000910a57652077696c6c20706c616365206120626f756e747920666f7220617272616e67696e67207468652077686f6c65207468696e672c2069652e206465616c696e67207769746820737570706c6965727320666f7220626f6172647320616e64206272616e64696e672c20636f6d70696c696e672061206c697374206f6620726563697069656e74732c20616e6420617272616e67696e6720666f72207368697070696e672e205342437320706f77657220636f6e73756d7074696f6e20697320636c6f736520746f206e65676c696769626c652c20736f20706179696e672024382f6d6f6e7468202d3e20243130302f796561722c20666f7220757074696d65203e393525207365656d7320666169722e0a0a417373756d696e672077652070726f7669646520353020626f617264732c2074686520746f74616c20636f737420617373756d696e672074686520626f617264732061726520706f77657266756c20656e6f75676820746f20737570706f72742074686520696e6372656173696e67206e6574776f726b206c6f616420666f72207e3120796561722e202857652077696c6c206c696b656c79206861766520746f207374617274206e657720636861696e73206f6e6365206f72207477696365207072207965617220616e79776179292e0a0a4974656d0951747909436f73740a426f61726409353009243130300a205061796f757473097e3438302a0924380a426f756e74792a2a093109243235300a2a2a544f54414c2a2a092a2a4e412a2a092a2a24393039302a2a0a2a417373756d696e6720736f6d65206c6f737320616c6f6e6720746865207761792e0a2a2a74686520626f756e747920636f7374207761732063686f73656e20627920612070736575646f2d72616e646f6d206e756d6265722067656e657261746f722e0a000001000000000000001208855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[70,"46000000000000000d0000000000000008000000190823232054686f75676874730a57652068617665207468757320666172206f7074656420666f7220616e20696e74657261637469766520776179206f66206d61726b6574696e6720746f206275696c642074686520636f6d6d756e6974792c20617320776520686f7065207468697320617070726f6163682077696c6c20696d70726f766520746865205f7175616c6974795f20726174686572207468616e206a75737420746865205f7175616e746974795f206f66206f7572206d656d626572732e204d6f7265206f6e20746869732063616e20626520666f756e64205b686572655d2868747470733a2f2f626c6f672e6a6f7973747265616d2e6f72672f7061792d666f722d706c61792f292e20546869732066616c6c7320696e206c696e652077697468207468617420617070726f6163682c20617320697420726571756972657320736f6d65206f66206f7572206c65737320746563686e6963616c20666f6c6c6f7765727320746f206765742066616d696c696172697a65642077697468206c696e757820616e642074686520636f6d6d616e64206c696e652e0a0a496e707574206f6e2074686973206973206d6f7265207468616e2077656c636f6d652e20426f74682066726f6d20746865204a7367656e65736973207465616d2c20636f6e7472696275746f72732c20616e6420636f6d6d756e697479206d656d626572732e000001000000000000003008855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[71,"47000000000000000d00000000000000090000008902232320546f20736565206675727468657220636f6e766572736174696f6e732061626f7574207468697320626f756e747920616e6420746f20706f737420796f757220636f6e747269627574696f6e732c20706c6561736520766973697420746865205b4769744875622069737375655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732f6973737565732f35292e00000100000000000000d808855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[72,"48000000000000000e00000000000000020000008d02232320546f20736565206675727468657220636f6e766572736174696f6e732061626f7574207468697320626f756e747920616e6420746f20706f737420796f757220636f6e747269627574696f6e732c20706c6561736520766973697420746865205b4769744875622069737375655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732f6973737565732f3133292e000001000000000000009809855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[73,"49000000000000000f00000000000000020000001d0b232320476f616c730a54686520676f616c206f66207468697320626f756e74792069732074776f666f6c643a0a0a312e20546f20676574206d6f726520636f6e74656e74206f6e2074686520706c6174666f726d2c20616e6420666f7220737472657373207465737473206f66207468652073746f7261676520616e6420646973747269627574696f6e2073797374656d2c207765206e65656420746f20636f6d70696c652061206c697374206f6620667265656c7920617661696c61626c65206f6e2064656d616e64206d656469612e0a322e2057652061726520747279696e6720746f206275696c6420616e6420616461707461626c6520616e642064796e616d696320636f6e74656e74206469726563746f72792073797374656d20666f72206f7572206e65787420746573746e65742c2060526f6d65602e2054686520737065637320617265207374696c6c2061205749502c20627574207468652067656e6572616c20636f6e6365707420697320646973637573736564205b686572655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f6a6f7973747265616d2f6973737565732f3734292e20466f722074686520696e697469616c20696d706c656d656e746174696f6e2c2077652077616e7420746f206c6561726e206d6f72652061626f75742077686174206d65746164617461206973207479706963616c6c79206173736f636961746564207769746820656163682074797065206f66206d656469612c20616e6420686f77206974277320737472756374757265642e0a0a5573696e6720617564696f20617320616e206578616d706c653a0a576861742061726520746865206d6f737420696d706f7274616e7420616e642072656c6576616e74206d6574616461746120666f723a0a0a2a20536f6e67730a2a20416c62756d730a2a20417564696f626f6f6b730a2a20506f64636173747300000100000000000000880a855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[74,"4a000000000000000f00000000000000030000008d03232320526577617264730a4561636820636f6e747269627574696f6e2077696c6c206265206576616c7561746564206f6e20616e20696e646976696475616c2062617369732c206275742077652077696c6c2061737369676e206120627564676574206f66202432303020666f722074686520626f756e74792e0a0a23232053636f7065206f6620576f726b0a536561726368207468652077656220666f72207369746573206f72206f7468657220706c6174666f726d20636f6e7461696e696e6720667265656c7920617661696c61626c65206d6564696120636f6e74656e742e0a00000100000000000000a60a855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[75,"4b000000000000000f00000000000000040000005d0823232044656c6976657261626c65730a2a2050726f76696465206c696e6b7320746f207765627369746573206f72206f74686572206d6564696120706c6174666f726d20636f6e7461696e696e6720226c617267652220616d6f756e7473206f66206d6564696120636f6e74656e742028766964656f2c20617564696f2c20652d626f6f6b73292e0a2a20496e636c756465206173206d75636820696e666f726d6174696f6e20617320706f737369626c652061626f7574207468653a0a20200a20202a2054797065206f6620636f6e74656e742c206966206170706c696361626c65202865672e20766964656f20646f63756d656e746172696573206f6e6c79290a20202a204c6963656e73696e67207265737472696374696f6e732028696620746865207369746520636f6e7461696e732061206d6978206f6620636f6e74656e74207769746820646966666572656e74207265737472696374696f6e73290a0a416e7920696e666f726d6174696f6e2061626f75742074686520666f6c6c6f77696e672077696c6c206164642076616c75652c20616e64207468757320696e63726561736520746865207265776172642e0a0a2a20486f7720746f20646f776e6c6f6164207468652066696c657320616e64206d6574616461746120696e2062756c6b0a2a20416e79206164646974696f6e616c20696e666f726d6174696f6e2074686174206164647265737365732060322e6000000100000000000000b80a855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[76,"4c000000000000000f00000000000000050000005906232320436f6e73747261696e74730a2a20416c6c207375626d697373696f6e73206d75737420626520696e206c696e652077697468206f7572205b546f535d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f6163726f706f6c69732f70696f6e6565722f232f70616765732f746f732920746f206265206576616c75617465642e0a0a232320426f756e747920666f726d61740a4f70656e20666f7220616c6c2e0a0a232320446561646c696e650a556e6c6573732077652061726520736174697366696564206265666f726520746869732074696d652c20746865207375626d697373696f6e20646561646c696e65206973207468652031387468206f662041756775737420323031392e0a0a496e2063617365206f662074686520666f726d65722c20746869732073656374696f6e2077696c6c20626520757064617465642c20627574206c656176696e67203234687220666f72207374726167676c65727320746f207375626d69742e0a0a285468697320626f756e7479206973206e6f7720636c6f7365642900000100000000000000e20a855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[77,"4d000000000000000f00000000000000060000008d02232320546f20736565206675727468657220636f6e766572736174696f6e732061626f7574207468697320626f756e747920616e6420746f20706f737420796f757220636f6e747269627574696f6e732c20706c6561736520766973697420746865205b4769744875622069737375655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732f6973737565732f3230292e00000100000000000000120b855d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[78,"4e000000000000001500000000000000020000005d0f2320496e737472756374696f6e730a0a54686520696e737472756374696f6e732062656c6f772077696c6c20617373756d6520796f75206172652072756e6e696e672061732060726f6f74602e2054686973206d616b65732074686520696e737472756374696f6e7320736f6d6577686174206561736965722c20627574206c657373207361666520616e6420726f627573742e0a0a4e6f74652074686174207468697320686173206f6e6c79206265656e20746573746564206f6e20667265736820696d61676573206f6620605562756e74752031362e3034204c5453602c20605562756e74752031382e3034204c54536020616e64206044656269616e2038602e0a0a5468652073797374656d206861732073686f776e20746f206265207175697465207265736f7572636520696e74656e736976652c20736f20796f752073686f756c642063686f6f73652061205650532077697468207370656373206571756976616c656e7420746f205b4c696e6f6465203847425d2868747470733a2f2f7777772e6c696e6f64652e636f6d2f70726963696e673f6d73636c6b69643d65616131326530303532393331306534363635633733306436623031623031342675746d5f736f757263653d62696e672675746d5f6d656469756d3d6370632675746d5f63616d706169676e3d4c696e6f64652532302d2532304272616e642532302d2532305365617263682532302d2532304c6f7747656f2675746d5f7465726d3d6c696e6f64652675746d5f636f6e74656e743d4c696e6f646529206f722062657474657220286e6f7420616e20616666696c69617465206c696e6b292e0a0a506c65617365206e6f7465207468617420756e6c6573732074686572652061726520616e79206f70656e2073706f74732028776869636820796f752063616e20636865636b20696e205b50696f6e6565725d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f70696f6e6565722920756e6465722060526f6c657360202d3e2060417661696c61626c6520526f6c657360292c20796f752077696c6c206e6f742062652061626c6520746f206a6f696e2e204e6f746520746861742077652077696c6c20626520717569746520766967696c616e7420696e20626f6f74696e67206e6f6e2d706572666f726d696e67206053746f726167652050726f766964657273602c20736f20696620796f7520686176652065766572797468696e6720736574757020696e20616476616e63652c20796f7520636f756c642062652074686520717569636b65737420746f2074616b65206120736c6f74207768656e206974206f70656e732100000100000000000000ea52865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[79,"4f00000000000000150000000000000003000000ed0c232320496e697469616c2073657475700a4669727374206f6620616c6c2c20796f75206e65656420612066756c6c792073796e636564205b4a6f7973747265616d2066756c6c206e6f64655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2f72656c6561736573292e20466f7220696e737472756374696f6e73206f6e20686f7720746f2073657420746869732075702c20676f205b686572655d282e2e2f76616c696461746f7273292e204e6f7465207468617420796f752063616e2064697372656761726420616c6c207468652070617274732061626f7574206b6579732c20616e64206a75737420696e7374616c6c2074686520736f6674776172652e0a5765207374726f6e676c7920656e636f7572616765207468617420796f752072756e20626f746820746865205b6e6f64655d282e2e2f76616c696461746f72732372756e2d61732d612d736572766963652920616e6420746865206f7468657220736f6674776172652062656c6f77206173206120736572766963652e0a0a46697273742c20796f75206e65656420746f20736574757020606e6f6465602c20606e706d6020616e6420607961726e602e205468697320697320736f6d6574696d652074726f75626c65736f6d6520746f20646f207769746820746865206061707460207061636b616765206d616e616765722e20476f205b686572655d2823696e7374616c6c2d7961726e2d616e642d6e6f64652d776974686f75742d6f6e2d6c696e75782920746f20646f207468697320696620796f7520617265206e6f7420636f6e666964656e7420696e20796f7572206162696c697469657320746f206e617669676174652074686520726f75676820736561732e0a0a4e6f772c2067657420746865206164646974696f6e616c20646570656e64656e636965733a0a6060600a24206170742d67657420757064617465202626206170742d6765742075706772616465202d790a24206170742d67657420696e7374616c6c20676974206275696c642d657373656e7469616c206c6962746f6f6c206175746f6d616b65206175746f636f6e6620707974686f6e0a60606000000100000000000000fc52865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[80,"5000000000000000150000000000000004000000a505232320496e7374616c6c20697066730a546865206e65772073746f72616765206e6f64652075736573205b697066735d2868747470733a2f2f697066732e696f2f29206173206261636b656e642e0a6060600a2420776765742068747470733a2f2f646973742e697066732e696f2f676f2d697066732f76302e342e32312f676f2d697066735f76302e342e32315f6c696e75782d616d6436342e7461722e677a0a2420746172202d76786620676f2d697066735f76302e342e32315f6c696e75782d616d6436342e7461722e677a0a2420636420676f2d697066730a24202e2f6970667320696e6974202d2d70726f66696c65207365727665720a24202e2f696e7374616c6c2e73680a232073746172742069706673206461656d6f6e3a0a242069706673206461656d6f6e0a6060600a496620796f752073656520604461656d6f6e206973207265616479602061742074686520656e642c20796f752061726520676f6f64210a000001000000000000000e53865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[81,"5100000000000000150000000000000005000000b9072323232052756e2069706673206173206120736572766963650a0a546f20656e73757265206869676820757074696d652c2069742773206265737420746f20736574207468652073797374656d2075702061732061206073657276696365602e0a0a4578616d706c652066696c652062656c6f773a0a0a6060600a24206e616e6f202f6574632f73797374656d642f73797374656d2f697066732e736572766963650a2320506173746520696e2065766572797468696e672062656c6f772074686520737461706c6564206c696e650a2d2d2d0a5b556e69745d0a4465736372697074696f6e3d697066730a41667465723d6e6574776f726b2e7461726765740a0a5b536572766963655d0a547970653d73696d706c650a557365723d726f6f740a576f726b696e674469726563746f72793d2f726f6f740a4c696d69744e4f46494c453d383139320a50494446696c653d2f7661722f72756e2f697066732f697066732e7069640a4578656353746172743d2f7573722f6c6f63616c2f62696e2f69706673206461656d6f6e0a526573746172743d6f6e2d6661696c7572650a526573746172745365633d330a53746172744c696d6974496e74657276616c3d3630300a0a5b496e7374616c6c5d0a57616e74656442793d6d756c74692d757365722e7461726765740a606060000001000000000000001a53865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[82,"5200000000000000150000000000000006000000fd065361766520616e6420657869742e20436c6f736520746865206069706673206461656d6f6e602069662069742773207374696c6c2072756e6e696e672c207468656e3a0a6060600a242073797374656d63746c20737461727420697066730a232049662065766572797468696e6720776f726b732c20796f752073686f756c642067657420616e206f75747075742e2056657269667920776974683a0a242073797374656d63746c2073746174757320697066730a2320496620796f752073656520736f6d657468696e6720656c7365207468616e20224461656d6f6e206973207265616479222061742074686520656e642c2074727920616761696e20696e206120636f75706c65206f66207365636f6e64732e0a2320546f20686176652069706673207374617274206175746f6d61746963616c6c79206174207265626f6f743a0a242073797374656d63746c20656e61626c6520697066730a2320496620796f752077616e7420746f2073746f7020697066732c2065697468657220746f2065646974207468652066696c65206f7220736f6d65206f7468657220726561736f6e3a0a242073797374656d63746c2073746f7020697066730a606060000001000000000000002653865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[83,"5300000000000000150000000000000007000000310d232320536574757020486f7374696e670a496e206f7264657220746f20616c6c6f7720666f7220757365727320746f2075706c6f616420616e6420646f776e6c6f61642c20796f75206861766520746f20736574757020686f7374696e672c207769746820616e2061637475616c20646f6d61696e20617320626f7468204368726f6d6520616e642046697265666f78207265717569726573206068747470733a2f2f602e20496620796f7520686176652061202273706172652220646f6d61696e206f7220737562646f6d61696e20796f7520646f6e2774206d696e64207573696e6720666f72207468697320707572706f73652c20676f20746f20796f757220646f6d61696e2072656769737472617220616e6420706f696e7420796f757220646f6d61696e20746f2074686520495020796f752077616e742e20496620796f7520646f6e27742c20796f75206d75737420756e666f7274756e6174656c7920676f207075726368617365206f6e652e0a0a546f20636f6e6669677572652053534c2d63657274696669636174657320746865206561736965737420697320746f20757365205b63616464795d2868747470733a2f2f63616464797365727665722e636f6d2f292c20627574206665656c206672656520746f2074616b65206120646966666572656e7420617070726f6163682e204e6f7465207468617420696620796f7520617265207573696e6720636164647920666f7220636f6d6d65726369616c207573652c20796f75206e65656420746f20616371756972652061206c6963656e73652e20506c6561736520636865636b207468656972207465726d7320616e64206d616b65207375726520796f7520636f6d706c792077697468207768617420697320636f6e7369646572656420706572736f6e616c207573652e0a0a6060600a24206375726c2068747470733a2f2f67657463616464792e636f6d207c2062617368202d7320706572736f6e616c0a2320416c6c6f772063616464792061636365737320746f20726571756972656420706f7274733a0a242073657463617020276361705f6e65745f62696e645f736572766963653d2b657027202f7573722f6c6f63616c2f62696e2f63616464790a2420756c696d6974202d6e20383139320a606060000001000000000000003253865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[84,"54000000000000001500000000000000080000000d09436f6e666967757265206361646479207769746820606e616e6f207e2f436164647966696c656020616e6420706173746520696e2074686520666f6c6c6f77696e673a0a0a6060600a232053746f72616765204e6f6465204150490a68747470733a2f2f3c796f75722e636f6f6c2e75726c3e207b0a2020202070726f7879202f206c6f63616c686f73743a33303030207b0a20202020202020207472616e73706172656e740a202020207d0a20202020686561646572202f207b0a20202020202020204163636573732d436f6e74726f6c2d416c6c6f772d4f726967696e20202a0a20202020202020204163636573732d436f6e74726f6c2d416c6c6f772d4d6574686f647320224745542c205055542c20484541442c204f5054494f4e53220a202020207d0a7d0a6060600a4e6f7720796f752063616e20636865636b20696620796f7520636f6e6669677572656420636f72726563746c792c20776974683a0a6060600a24202f7573722f6c6f63616c2f62696e2f6361646479202d2d76616c6964617465202d2d636f6e66207e2f436164647966696c650a232057686963682073686f756c642072657475726e3a0a436164647966696c652069732076616c69640a0a2320596f752063616e206e6f772072756e20636164647920776974683a0a24202873637265656e29202f7573722f6c6f63616c2f62696e2f6361646479202d2d6167726565202d2d656d61696c203c796f75725f6d61696c40736f6d652e646f6d61696e3e202d2d636f6e66207e2f436164647966696c650a606060000001000000000000004453865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[85,"55000000000000001500000000000000090000002d092323232052756e206361646479206173206120736572766963650a546f20656e73757265206869676820757074696d652c2069742773206265737420746f20736574207468652073797374656d2075702061732061206073657276696365602e0a0a4578616d706c652066696c652062656c6f773a0a0a6060600a24206e616e6f202f6574632f73797374656d642f73797374656d2f63616464792e736572766963650a2320506173746520696e2065766572797468696e672062656c6f772074686520737461706c6564206c696e650a2d2d2d0a5b556e69745d0a4465736372697074696f6e3d526576657273652070726f787920666f722073746f72616765206e6f64650a41667465723d6e6574776f726b2e7461726765740a0a5b536572766963655d0a557365723d726f6f740a576f726b696e674469726563746f72793d2f726f6f740a4c696d69744e4f46494c453d383139320a50494446696c653d2f7661722f72756e2f63616464792f63616464792e7069640a4578656353746172743d2f7573722f6c6f63616c2f62696e2f6361646479202d6167726565202d656d61696c203c796f75725f6d61696c40736f6d652e646f6d61696e3e202d70696466696c65202f7661722f72756e2f63616464792f63616464792e706964202d636f6e66202f726f6f742f436164647966696c650a526573746172743d6f6e2d6661696c7572650a53746172744c696d6974496e74657276616c3d3630300a0a0a5b496e7374616c6c5d0a57616e74656442793d6d756c74692d757365722e7461726765740a606060000001000000000000005653865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[86,"560000000000000015000000000000000a00000061035361766520616e6420657869742e20436c6f736520606361646479602069662069742773207374696c6c2072756e6e696e672c207468656e3a0a6060600a242073797374656d63746c2073746172742063616464790a232049662065766572797468696e6720776f726b732c20796f752073686f756c642067657420616e206f75747075742e2056657269667920776974683a0a242073797374656d63746c207374617475732063616464790a232057686963682073686f756c642070726f6475636520736f6d657468696e67206c696b653a0a6060600a000001000000000000008653865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[87,"570000000000000015000000000000000b000000990d6060600a2d2d2d0ae2978f2063616464792e73657276696365202d20526576657273652070726f787920666f722073746f72616765206e6f64650a2020204c6f616465643a206c6f6164656420282f6574632f73797374656d642f73797374656d2f63616464792e736572766963653b2064697361626c6564290a2020204163746976653a20616374697665202872756e6e696e67292073696e63652054756520323031392d30362d31382031373a31353a3434205554433b2036732061676f0a204d61696e205049443a203536313320286361646479290a2020204347726f75703a202f73797374656d2e736c6963652f63616464792e736572766963650a2020202020202020202020e29494e2948035363133202f7573722f6c6f63616c2f62696e2f6361646479202d616772656520656d61696c203c796f75725f6d61696c40736f6d652e646f6d61696e3e202d70696466696c65202f7661722f72756e2f63616464792f63616464792e706964202d636f6e66202f726f6f742f436164647966696c650a0a4a756e2031382031373a31353a3434206c6f63616c686f73742073797374656d645b315d3a205374617274656420526576657273652070726f787920666f7220686f7374656420617070732e0a4a756e2031382031373a31353a3434206c6f63616c686f73742063616464795b353631335d3a2041637469766174696e6720707269766163792066656174757265732e2e2e20646f6e652e0a4a756e2031382031373a31353a3434206c6f63616c686f73742063616464795b353631335d3a2053657276696e67204854545053206f6e20706f7274203434330a4a756e2031382031373a31353a3434206c6f63616c686f73742063616464795b353631335d3a2068747470733a2f2f3c796f75722e636f6f6c2e75726c3e0a4a756e2031382031373a31353a3434206c6f63616c686f73742063616464795b353631335d3a2068747470733a2f2f3c796f75722e636f6f6c2e75726c3e0a4a756e2031382031373a31353a3434206c6f63616c686f73742063616464795b353631335d3a2053657276696e672048545450206f6e20706f72742038300a4a756e2031382031373a31353a3434206c6f63616c686f73742063616464795b353631335d3a2068747470733a2f2f3c796f75722e636f6f6c2e75726c3e0a2d2d2d0a60606000000100000000000000c853865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[88,"580000000000000015000000000000000c000000c5026060600a2320546f2068617665206361646479207374617274206175746f6d61746963616c6c79206174207265626f6f743a0a242073797374656d63746c20656e61626c652063616464790a2320496620796f752077616e7420746f2073746f702063616464792c2065697468657220746f2065646974207468652066696c65206f7220736f6d65206f7468657220726561736f6e3a0a242073797374656d63746c2073746f702063616464790a60606000000100000000000000da53865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[89,"590000000000000015000000000000000d000000ad07232320496e7374616c6c20616e64205365747570207468652053746f72616765204e6f64650a0a46697273742c20796f75206e65656420746f20636c6f6e6520746865207265706f2e0a0a6060600a242067697420636c6f6e652068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f73746f726167652d6e6f64652d6a6f7973747265616d2e6769740a242063642073746f726167652d6e6f64652d6a6f7973747265616d0a24207961726e0a2320546573742074686174206974277320776f726b696e6720776974683a0a24207961726e2072756e20636f6c6f73737573202d2d68656c700a6060600a596f752063616e2073657420746865205041544820746f2061766f69642074686520607961726e2072756e60207072656669782062793a0a606e616e6f207e2f2e626173685f70726f66696c65600a616e6420617070656e643a0a6060600a2320436f6c6f737375730a616c69617320636f6c6f737375733d222f726f6f742f73746f726167652d6e6f64652d6a6f7973747265616d2f7061636b616765732f636f6c6f737375732f62696e2f636c692e6a73220a6060600a5468656e3a0a602e207e2f2e626173685f70726f66696c65600a4e6f772c20796f752063616e20746573742060636f6c6f73737573202d2d68656c70602e00000100000000000000f253865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[90,"5a0000000000000015000000000000000e000000bd04232323205570646174652053746f72616765204e6f64650a0a496620796f75206e65656420746f2075706461746520796f75722073746f72616765206e6f64652c20796f752077696c6c206669727374206e65656420746f2073746f702074686520736f6674776172652e0a0a6060600a2320496620796f75206172652072756e6e696e6720617320736572766963652028776869636820796f752073686f756c64290a242073797374656d63746c2073746f702073746f726167652d6e6f64650a24206364202f706174682f746f2f73746f726167652d6e6f64652d6a6f7973747265616d0a2320417373756d696e6720796f7520636c6f6e65642061732073686f776e2061626f76650a24206769742070756c6c206f726967696e206d61737465720a24207961726e0a606060000001000000000000000454865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[91,"5b0000000000000015000000000000000f000000d90c2323232047656e6572617465206b65797320616e64206d656d62657273686970730a0a436c69636b205b686572655d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672920746f206f70656e20746865206050696f6e656572206170706020696e20796f75722062726f777365722e205468656e20666f6c6c6f7720696e737472756374696f6e73205b686572655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f68656c706465736b236765742d737461727465642920746f2067656e6572617465206120736574206f6620604b657973602c2067657420746f6b656e732c20616e64207369676e20757020666f72206120604d656d62657273686970602e205468697320606b6579602077696c6c20626520726566657272656420746f2061732074686520606d656d62657260206b65792066726f6d206e6f77206f6e2e204d616b65207375726520746f207361766520746865206035596f75724a6f794d656d626572416464726573732e6a736f6e602066696c652e204e6f7465207468617420796f75206e65656420746f206b656570207468652072657374206f6620796f757220746f6b656e73206173207374616b6520746f206265636f6d652061206053746f726167652050726f7669646572602e0a0a2d2d2d0a0a417373756d696e6720796f75206172652072756e6e696e67207468652073746f72616765206e6f6465206f6e20612056505320766961207373682c206f6e20796f7572206c6f63616c206d616368696e653a0a0a6060600a2320476f20746865206469726563746f727920776865726520796f7520736176656420796f7572203c35596f75724a6f794d656d626572416464726573732e6a736f6e3e3a0a2420736370203c35596f75724a6f794d656d626572416464726573732e6a736f6e3e203c757365723e403c796f75722e7670732e69702e616464726573733e3a2f706174682f746f2f73746f726167652d6e6f64652d6a6f7973747265616d2f0a6060600a596f7572206035596f75724a6f794d656d626572416464726573732e6a736f6e602073686f756c64206e6f7720626520776865726520796f752077616e742069742e000001000000000000001c54865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[92,"5c00000000000000150000000000000010000000210d2323232320536574757020616e6420636f6e666967757265207468652073746f72616765206e6f64650a0a2a2a4d616b65207375726520796f75277265205b4a6f7973747265616d2066756c6c206e6f64655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d292069732066756c6c792073796e636564206265666f726520796f75206d6f766520746f20746865206e6578742073746570287329212a2a0a0a4f6e20746865206d616368696e652f56505320796f752077616e7420746f2072756e20796f75722073746f72616765206e6f64653a0a0a6060600a2320496620796f7520617265206e6f7420616c726561647920696e2074686174206469726563746f72793a0a242063642073746f726167652d6e6f64652d6a6f7973747265616d0a2320496620796f7520636f6e6669677572656420796f7572202e626173685f70726f66696c653a0a2420636f6c6f73737573207369676e7570203c35596f75724a6f794d656d626572416464726573732e6a736f6e3e0a2320496620796f75206469646e277420636f6e66696775726520796f7572202e626173685f70726f66696c653a0a24207961726e2072756e20636f6c6f73737573207369676e7570203c35596f75724a6f794d656d626572416464726573732e6a736f6e3e0a23204e6f74652074686174207468652072657374206f66207468652067756964652077696c6c20617373756d6520796f752064696420696e206661637420636f6e666967757265202e626173685f70726f66696c6520616e6420646f6e2774206e65656420227961726e2072756e220a2320466f6c6c6f772074686520696e737472756374696f6e732061732070726f6d707465642e20466f722065617365206f66207573652c2069742773206265737420746f206e6f742073657420612070617373776f72642e2e2e20496620796f7520646f2c2072656d656d62657220746f206164643a0a23202d2d70617373706872617365203c796f75725f706173737068726173653e20617320616e20617267756d656e742065766572792074696d6520796f752073746172742074686520636f6c6f73737573207365727665722e0a6060600a000001000000000000003454865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[93,"5d00000000000000150000000000000011000000490d546869732070726f64756365732061206e6577206b657920603c35596f757253746f72616765416464726573732e6a736f6e3e602c20616e642070726f6d70747320796f7520746f206f70656e20746865202261707022202850696f6e656572292e204d616b652073757265207468617420796f7520796f75722063757272656e742f64656661756c7420697320746865206035596f75724a6f794d656d6265724164647265737360206b65792e20416674657220796f7520636c69636b20605374616b65602c20796f752077696c6c207365652061206e6f74696669636174696f6e20696e2074686520746f7020726967687420636f726e65722e20496620796f752067657420616e206572726f722c2074686973206d6f7374206c696b656c79206d65616e7320616c6c2074686520736c6f7473206172652066756c6c2e20556e666f7274756e6174656c792c2074686973206d65616e7320796f75206861766520746f20696d706f72742074686520603c35596f757253746f72616765416464726573732e6a736f6e3e6020746f207265636f76657220796f757220746f6b656e732e0a0a4966206974207375636365656465642c2070726f636565642061732073686f776e2062656c6f773a0a0a6060600a2320546f206d616b6520737572652065766572797468696e672069732072756e6e696e6720736d6f6f74686c792c20697420776f756c642062652068656c7066756c20746f2072756e20776974682044454255473a0a242044454255473d2a20636f6c6f7373757320736572766572202d2d6b65792d66696c65203c35596f757253746f72616765416464726573732e6a736f6e3e202d2d7075626c69632d75726c2068747470733a2f2f3c796f75722e636f6f6c2e75726c3e0a2320496620796f75207365742061207061737370687261736520666f72203c35596f757253746f72616765416464726573732e6a736f6e3e3a0a242044454255473d2a20636f6c6f7373757320736572766572202d2d6b65792d66696c65203c35596f757253746f72616765416464726573732e6a736f6e3e202d2d70617373706872617365203c796f75725f706173737068726173653e202d2d7075626c69632d75726c2068747470733a2f2f3c796f75722e636f6f6c2e75726c3e0a606060000001000000000000004054865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[94,"5e000000000000001500000000000000120000005109496620796f7520646f20746869732c20796f752073686f756c642073656520736f6d657468696e67206c696b653a0a0a6060600a646973636f766572793a3a7075626c697368207b206e616d653a2027516d507777733537366e33427945364351557655743364676d6f6b6b32584e32634a67505948576f4d3653535553272c0a646973636f766572793a3a7075626c69736820202076616c75653a20272f697066732f516d6544415747526a62577836664d43787474393559545367546742686874626b317173476b746552586145535427207d202b3339316d730a6060600a596f752063616e206a75737420646f207468697320696e73746561642c206275742069742077696c6c206d616b65206974206d6f726520646966666963756c7420746f2064656275672e2e2e0a6060600a2420636f6c6f7373757320736572766572202d2d6b65792d66696c65203c35596f757253746f72616765416464726573732e6a736f6e3e202d2d7075626c69632d75726c2068747470733a2f2f3c796f75722e636f6f6c2e75726c3e0a6060600a49662065766572797468696e6720697320776f726b696e6720736d6f6f74686c792c20796f752077696c6c206e6f772073746172742073796e63696e67207468652060636f6e74656e74206469726563746f7279600a4e6f7465207468617420756e6c65737320796f752072756e2074686973206973206120736572766963652c20796f75206e6f77206861766520746f206f70656e2061207365636f6e64207465726d696e616c20666f72207468652072656d61696e696e672073746570732e000001000000000000006454865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[95,"5f0000000000000015000000000000001300000069092323232320436865636b207468617420796f75206172652073796e63696e670a496e20796f7572207365636f6e64207465726d696e616c2077696e646f773a0a6060600a24206970667320626974737761702077616e746c6973740a2d2d2d0a23204f75747075742073686f756c642062652061206c6f6e67206c697374206f66206b6579732c2065672e204e6f74652074686174206974206d696768742074616b65206120666577206d696e75746573206265666f7265207468652061637475616c20636f6e74656e742066726f6d20746865204a6f7973747265616d20636f6e74656e74206469726563746f72792073686f77732075702e0a2d2d2d0a516d65737a65426a4245724651726b6951506838516854733368664345474a754b326a4e6f706174486e7073316b0a2e2e2e0a516d664362557359684b426d72646f7033794672657271564b77424a76593574627056316366394378334c314a380a6060600a496620796f7520646964207468697320696d6d6564696174656c79206166746572204649525354207374617274696e6720796f75722073746f72616765206e6f64652c20746865206077616e746c69737460206d6967687420626520656d7074792e20476976652069742061206d696e7574652c20616e642069742073686f756c6420636f6e7461696e206174206c6561737420746865206e756d626572206f66206974656d7320696e2074686520636f6e74656e74206469726563746f72792e20596f752063616e20616c736f20636865636b207768617420636f6e74656e7420796f7520686176652073746f7265642062793a000001000000000000007654865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[96,"600000000000000015000000000000001400000019096060600a697066732072656673206c6f63616c0a2d2d2d0a23204f75747075742073686f756c6420626520616e206576656e206c6f6e676572206c697374206f66206b6579732c2065672e0a2d2d2d0a516d65737a65426a4245724651726b6951506838516854733368664345474a754b326a4e6f706174486e7073316b0a516d657a756d33415764786b6d31417448653335445a475764666854513450566d6d5a61744777444c36385245530a2e2e2e0a516d6643436a43357739777854466f41614a3934377373326f63316a783652326d4d39786a55374363727135354d0a516d664362557359684b426d72646f7033794672657271564b77424a76593574627056316366394378334c314a380a6060600a0a496e20796f7572206669727374207465726d696e616c2028776865726529207468652073746f72616765206e6f64652069732072756e6e696e672c20796f752077696c6c20736f6f6e20656e6f7567682073656520746869733a0a6060600a2e2e2e0a6a6f7973747265616d3a72756e74696d653a62617365205458207374617475733a2046696e616c697a6564202b376d730a6a6f7973747265616d3a72756e74696d653a626173652054582046696e616c697a65642e202b316d730a6a6f7973747265616d3a73796e632073796e632072756e20636f6d706c657465202b306d730a6060600a0a496e20746865207365636f6e64207465726d696e616c3a0a6060600a2420697066732072656673206c6f63616c0a6060600a53686f756c642072657475726e206e6f7468696e672e000001000000000000009454865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[97,"6100000000000000150000000000000015000000690c2323232052756e2073746f72616765206e6f6465206173206120736572766963650a0a546f20656e73757265206869676820757074696d652c2069742773206265737420746f20736574207468652073797374656d2075702061732061206073657276696365602e204e6f7465207468617420746869732077696c6c206e6f7420776f726b20696620796f752073657420612070617373776f726420666f7220796f757220603c35596f757253746f72616765416464726573732e6a736f6e3e20602e0a0a4578616d706c652066696c652062656c6f773a0a0a6060600a24206e616e6f202f6574632f73797374656d642f73797374656d2f73746f726167652d6e6f64652e736572766963650a2320506173746520696e2065766572797468696e672062656c6f772074686520737461706c6564206c696e650a2d2d2d0a5b556e69745d0a4465736372697074696f6e3d4a6f7973747265616d2053746f72616765204e6f64650a41667465723d6e6574776f726b2e74617267657420697066732e73657276696365206a6f7973747265616d2d6e6f64652e736572766963650a0a5b536572766963655d0a557365723d726f6f740a576f726b696e674469726563746f72793d2f726f6f742f73746f726167652d6e6f64652d6a6f7973747265616d0a4c696d69744e4f46494c453d383139320a456e7669726f6e6d656e743d44454255473d2a0a4578656353746172743d2f7573722f6c6f63616c2f6c69622f6e6f64656a732f6e6f64652d7631302e31362e302d6c696e75782d7836342f62696e2f6e6f6465205c0a20202020202020207061636b616765732f636f6c6f737375732f62696e2f636c692e6a73205c0a20202020202020202d2d6b65792d66696c65203c35596f757253746f72616765416464726573732e6a736f6e3e202d2d7075626c69632d75726c2068747470733a2f2f3c796f75722e636f6f6c2e75726c3e0a526573746172743d6f6e2d6661696c7572650a53746172744c696d6974496e74657276616c3d3630300a0a5b496e7374616c6c5d0a57616e74656442793d6d756c74692d757365722e7461726765740a60606000000100000000000000ac54865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[98,"620000000000000015000000000000001600000095085361766520616e6420657869742e20436c6f73652060636f6c6f73737573602069662069742773207374696c6c2072756e6e696e672c207468656e3a0a6060600a242073797374656d63746c2073746172742073746f726167652d6e6f64650a232049662065766572797468696e6720776f726b732c20796f752073686f756c642067657420616e206f75747075742e2056657269667920776974683a0a242073797374656d63746c207374617475732073746f726167652d6e6f64650a232057686963682073686f756c642070726f6475636520736f6d657468696e67206c696b653a0a2d2d2d0ae2978f2073746f726167652d6e6f64652e73657276696365202d204a6f7973747265616d2053746f72616765204e6f64650a2020204c6f616465643a206c6f6164656420282f6574632f73797374656d642f73797374656d2f73746f726167652d6e6f64652e736572766963653b2064697361626c6564290a2020204163746976653a20616374697665202872756e6e696e67292073696e63652054756520323031392d30362d31382031373a32353a3431205554433b20346d696e203139732061676f0a204d61696e205049443a20353635342028636f6c6f73737573290a2020204347726f75703a202f73797374656d2e736c6963652f73746f726167652d6e6f64652e736572766963650a2020202020202020202020e29494e294803536353420636f6c6f737375730a20202020202020202020200a60606000000100000000000000e854865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[99,"6300000000000000150000000000000017000000f10b6060600a0a4a756e2031382031373a32393a3331206c6f63616c686f7374206e6f64655b353635345d3a205475652c203138204a756e20323031392031373a32393a333120474d54206a6f7973747265616d3a7574696c3a72616e676573203d20476f74206368756e6b207769746820627974652072616e6765205b20313535353936382c2031353630303633205d0a4a756e2031382031373a32393a3331206c6f63616c686f7374206e6f64655b353635345d3a205475652c203138204a756e20323031392031373a32393a333120474d54206a6f7973747265616d3a7574696c3a72616e676573203d20476f74206368756e6b207769746820627974652072616e6765205b20313536303036342c2031353634313539205d0a4a756e2031382031373a32393a3331206c6f63616c686f7374206e6f64655b353635345d3a205475652c203138204a756e20323031392031373a32393a333120474d54206a6f7973747265616d3a7574696c3a72616e6765732043757272656e74207265717565737465642072616e6765206973205b2033333732323834382c203434313935393833205d0a4a756e2031382031373a32393a3331206c6f63616c686f7374206e6f64655b353635345d3a205475652c203138204a756e20323031392031373a32393a333120474d54206a6f7973747265616d3a7574696c3a72616e6765732049676e6f72696e67206368756e6b3b206974206973206f7574206f662072616e67652e0a4a756e2031382031373a32393a3331206c6f63616c686f7374206e6f64655b353635345d3a205475652c203138204a756e20323031392031373a32393a333120474d54206a6f7973747265616d3a7574696c3a72616e676573203d20476f74206368756e6b207769746820627974652072616e6765205b20313536343136302c2031353638323535205d0a4a756e2031382031373a32393a3331206c6f63616c686f7374206e6f64655b353635345d3a205475652c203138204a756e20323031392031373a32393a333120474d54200a2d2d2d0a606060000001000000000000001255865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[100,"640000000000000015000000000000001800000079036060600a2320546f206861766520636f6c6f73737573207374617274206175746f6d61746963616c6c79206174207265626f6f743a0a242073797374656d63746c20656e61626c6520636f6c6f737375730a2320496620796f752077616e7420746f2073746f70207468652073746f72616765206e6f64652c2065697468657220746f2065646974207468652073746f726167652d6e6f64652e736572766963652066696c65206f7220736f6d65206f7468657220726561736f6e3a0a242073797374656d63746c2073746f702073746f726167652d6e6f64650a606060000001000000000000003055865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[101,"6500000000000000150000000000000019000000e904232323205665726966792065766572797468696e6720697320776f726b696e670a0a496e20796f75722062726f777365722c2066696e6420636c69636b206f6e20616e2075706c6f61646564206d656469612066696c652e20436f70792074686520603c636f6e74656e742d69643e602c2069652e207768617420636f6d657320616674657220746865206c61737420602f602e0a0a5468656e2070617374652074686520666f6c6c6f77696e6720696e20796f75722062726f777365723a0a0a6068747470733a2f2f3c796f75722e636f6f6c2e75726c3e2f61737365742f76302f3c636f6e74656e742d69643e602e0a0a496620796f7520676574206120626c61636b2073637265656e20776974682061206d6564696120706c617965722c2074686174206d65616e7320796f752061726520676f6f6421000001000000000000004855865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[102,"6600000000000000160000000000000002000000590b232320506f7274206e6f74207365740a0a496620796f75206765742074686973206572726f723a0a6060600a547970654572726f72205b4552525f494e56414c49445f4f50545f56414c55455d3a205468652076616c756520227b20706f72743a20747275652c20686f73743a20273a3a27207d2220697320696e76616c696420666f72206f7074696f6e20226f7074696f6e73220a202020206174205365727665722e6c697374656e20286e65742e6a733a313435303a39290a2020202061742050726f6d69736520282f726f6f742f73746f726167652d6e6f64652d6a6f7973747265616d2f7061636b616765732f636f6c6f737375732f62696e2f636c692e6a733a3132393a3132290a202020206174206e65772050726f6d69736520283c616e6f6e796d6f75733e290a2020202061742073746172745f657870726573735f61707020282f726f6f742f73746f726167652d6e6f64652d6a6f7973747265616d2f7061636b616765732f636f6c6f737375732f62696e2f636c692e6a733a3132303a3130290a2020202061742073746172745f616c6c5f736572766963657320282f726f6f742f73746f726167652d6e6f64652d6a6f7973747265616d2f7061636b616765732f636f6c6f737375732f62696e2f636c692e6a733a3133383a3130290a202020206174204f626a6563742e73657276657220282f726f6f742f73746f726167652d6e6f64652d6a6f7973747265616d2f7061636b616765732f636f6c6f737375732f62696e2f636c692e6a733a3332383a3131290a2020202061742070726f636573732e5f7469636b43616c6c6261636b2028696e7465726e616c2f70726f636573732f6e6578745f7469636b2e6a733a36383a37290a6060600a0a4974206d6f7374206c696b656c79206d65616e7320796f757220706f7274206973206e6f74207365742c2028616c74686f7567682069742073686f756c642064656661756c7420746f2033303030292e000001000000000000007855865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[103,"6700000000000000160000000000000003000000c9066060600a2420636f6c6f73737573202d2d68656c700a232053686f756c64206c69737420746865207061746820746f20796f75722063757272656e7420636f6e6669672066696c652e0a2420636174202f706174682f746f2f2e636f6e6669672f636f6e66696773746f72652f406a6f7973747265616d2f636f6c6f737375732e6a736f6e0a232073686f756c642072657475726e20736f6d657468696e67206c696b653a0a2d2d2d0a7b0a2022706f7274223a20333030302c0a202273796e63506572696f64223a203330303030302c0a20227075626c696355726c223a202268747470733a2f2f3c796f75722e636f6f6c2e75726c3e222c0a20226b657946696c65223a20222f706174682f746f2f3c35596f757253746f72616765416464726573732e6a736f6e3e220a7d0a6060600a4966206022706f7274223a203c6e3e60206973206d697373696e672c206f72206e6f742061206e756d6265722c2070617373207468653a0a602d70203c6e3e206020617267756d656e74206f72206564697420796f757220636f6e6669672066696c652c20776865726520603c6e3e6020636f756c6420626520333030302e000001000000000000008a55865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[104,"68000000000000001600000000000000040000004909232320496e7374616c6c207961726e20616e64206e6f6465206f6e206c696e75780a0a476f205b686572655d2868747470733a2f2f6e6f64656a732e6f72672f656e2f646f776e6c6f61642f2920616e642066696e6420746865206e657765737420284c5453292062696e61727920666f7220796f75722064697374726f2e20546869732067756964652077696c6c20617373756d652036342d626974206c696e75782c20616e6420606e6f64652d7631302e31362e30602e0a0a496620796f752077616e7420746f20696e7374616c6c2061732060726f6f74602c20736f20796f757220757365722063616e2075736520606e706d6020776974686f757420607375646f602070726976696c656765732c20676f205b686572655d2823696e7374616c6c2d61732d726f6f74292e0a0a496620796f752077616e7420746f20696e7374616c6c20617320616e6f74686572207573657220286d757374206861766520607375646f602070726976696c65676573292c20676f205b686572655d2823696e7374616c6c2d61732d757365722d776974682d7375646f2d70726976696c65676573292e0a0a416c7465726e6174697665732073756368206173205b6e766d5d2868747470733a2f2f6769746875622e636f6d2f6e766d2d73682f6e766d29206f72205b6e6f6465736f757263655d2868747470733a2f2f6769746875622e636f6d2f6e6f6465736f757263652f646973747269627574696f6e732f626c6f622f6d61737465722f524541444d452e6d64292061726520616c736f20776f72746820636f6e7369646572696e672e000001000000000000009c55865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[105,"69000000000000001600000000000000050000000d092323232320496e7374616c6c20617320526f6f740a546869732073656374696f6e20617373756d657320796f752061726520696e7374616c6c696e672061732060726f6f74602e20497420616c736f2064656d6f6e7374726174657320686f7720796f752063616e2070726f7669646520616e6f7468657220757365722061636365737320776974686f757420686176696e6720746f2075736520607375646f602e20497420646f65736e2774206d6174746572206966207573657220606a6f7973747265616d602068617320607375646f602070726976696c65676573206f72206e6f742e0a0a6060600a2420776765742068747470733a2f2f6e6f64656a732e6f72672f646973742f7631302e31362e302f6e6f64652d7631302e31362e302d6c696e75782d7836342e7461722e787a0a24206d6b646972202d70202f7573722f6c6f63616c2f6c69622f6e6f64656a730a2420746172202d784a7666206e6f64652d7631302e31362e302d6c696e75782d7836342e7461722e787a202d43202f7573722f6c6f63616c2f6c69622f6e6f64656a730a24206e616e6f207e2f2e626173685f70726f66696c650a2d2d2d0a417070656e642074686520666f6c6c6f77696e67206c696e65733a0a2d2d2d0a23204e6f64656a730a56455253494f4e3d7631302e31362e300a44495354524f3d6c696e75782d7836340a6578706f727420504154483d2f7573722f6c6f63616c2f6c69622f6e6f64656a732f6e6f64652d2456455253494f4e2d2444495354524f2f62696e3a24504154480a60606000000100000000000000c055865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[106,"6a0000000000000016000000000000000600000045045361766520616e6420657869742c207468656e3a0a6060600a2420736f75726365207e2f2e626173685f70726f66696c650a23205665726966792076657273696f6e3a0a24206e6f6465202d760a24206e706d202d760a24206e7078202d760a2320496e7374616c6c207961726e0a24206e706d20696e7374616c6c207961726e202d670a24206e706d2069206e6f64652d67797040352e302e300a232049662065766572797468696e67206c6f6f6b73206f6b2c20616e6420796f752077616e7420746f20616c6c6f772075736572206a6f7973747265616d206163636573733a0a242063686f776e202d52206a6f7973747265616d202f7573722f6c6f63616c2f6c69622f6e6f64656a730a60606000000100000000000000d855865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[107,"6b000000000000001600000000000000070000002d074c6f6720696e20746f206a6f7973747265616d3a0a6060600a24207375206a6f7973747265616d0a242063640a232052657065617420746865202e626173685f70726f66696c6520636f6e6669673a0a24206e616e6f207e2f2e626173685f70726f66696c650a2d2d2d0a417070656e642074686520666f6c6c6f77696e67206c696e65733a0a2d2d2d0a23204e6f64656a730a56455253494f4e3d7631302e31362e300a44495354524f3d6c696e75782d7836340a6578706f727420504154483d2f7573722f6c6f63616c2f6c69622f6e6f64656a732f6e6f64652d2456455253494f4e2d2444495354524f2f62696e3a24504154480a6060600a5361766520616e6420657869742c207468656e3a0a6060600a2420736f75726365207e2f2e626173685f70726f66696c650a2320566572696679207468617420697420776f726b733a0a24206e6f6465202d760a24206e706d202d760a24206e7078202d760a24207961726e202d760a6060600a0a596f752068617665206e6f77207375636365737366756c6c7920696e7374616c6c656420746865206e657765737420284c5453292076657273696f6e73206f6620606e706d602c20606e6f64656020616e6420607961726e602e00000100000000000000e455865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[108,"6c00000000000000160000000000000008000000c90b2323232320496e7374616c6c2061732075736572207769746820607375646f602070726976696c656765730a546869732073656374696f6e20617373756d6573207468652073746570732061726520706572666f726d6564206173207573657220606a6f7973747265616d60207769746820607375646f602070726976696c656765732e0a0a417320606a6f7973747265616d600a6060600a2420776765742068747470733a2f2f6e6f64656a732e6f72672f646973742f7631302e31362e302f6e6f64652d7631302e31362e302d6c696e75782d7836342e7461722e787a0a24207375646f206d6b646972202d70202f7573722f6c6f63616c2f6c69622f6e6f64656a730a24207375646f20746172202d784a7666206e6f64652d7631302e31362e302d6c696e75782d7836342e7461722e787a202d43202f7573722f6c6f63616c2f6c69622f6e6f64656a730a24206e616e6f207e2f2e626173685f70726f66696c650a2d2d2d0a417070656e642074686520666f6c6c6f77696e67206c696e65733a0a2d2d2d0a23204e6f64656a730a56455253494f4e3d7631302e31362e300a44495354524f3d6c696e75782d7836340a6578706f727420504154483d2f7573722f6c6f63616c2f6c69622f6e6f64656a732f6e6f64652d2456455253494f4e2d2444495354524f2f62696e3a24504154480a6060600a5361766520616e6420657869742c207468656e3a0a6060600a2420736f75726365207e2f2e626173685f70726f66696c650a24207375646f2063686f776e202d52206a6f7973747265616d202f7573722f6c6f63616c2f6c69622f6e6f64656a730a2320566572696679207468617420697420776f726b733a0a24206e6f6465202d760a24206e706d202d760a24206e7078202d760a2320496e7374616c6c207961726e0a24206e706d20696e7374616c6c207961726e202d670a2320566572696679207468617420697420776f726b733a0a24207961726e202d760a24206e706d2069206e6f64652d67797040352e302e300a606060000001000000000000000e56865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[109,"6d00000000000000160000000000000009000000f105496620796f752077616e742060726f6f746020746f2062652061626c6520746f2075736520606e706d602061732077656c6c3a0a0a6060600a24207375646f2073750a24206e616e6f207e2f2e626173685f70726f66696c650a2d2d2d0a417070656e642074686520666f6c6c6f77696e67206c696e65733a0a2d2d2d0a23204e6f64656a730a56455253494f4e3d7631302e31362e300a44495354524f3d6c696e75782d7836340a6578706f727420504154483d2f7573722f6c6f63616c2f6c69622f6e6f64656a732f6e6f64652d2456455253494f4e2d2444495354524f2f62696e3a24504154480a6060600a5361766520616e6420657869742c207468656e3a0a0a602420736f75726365207e2f2e626173685f70726f66696c65600a0a596f752068617665206e6f77207375636365737366756c6c7920696e7374616c6c656420746865206e657765737420284c5453292076657273696f6e73206f6620606e706d602c20606e6f64656020616e6420607961726e602e0a000001000000000000002656865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[110,"6e00000000000000170000000000000002000000c90a23232047656e6572617465204b6579730a436c69636b20604d79204b6579736020696e2074686520736964656261722c20616e64207468656e2073656c656374207468652060437265617465204b65797360207461622e205468652063686f6963657320796f75206d616b652066726f6d20686572652c20646570656e64732061206c6974746c65206f6e20686f7720796f752077616e7420746f2070617274696369706174652e20496620796f75206a7573742077616e7420746f20706c61792061726f756e642c20796f752063616e206a75737420666f6c6c6f77207468652064656661756c74732e20496620796f752068617665206120737065636966696320726f6c6520696e206d696e642c20796f75206d696768742077616e7420746f20666f6c6c6f7720746865206c696e6b7320746f2074686520696e737472756374696f6e7320696e20746865206865616465722c206f7220616363657373207468656d20766961205b41637469766520526f6c65735d28236163746976652d726f6c6573292e0a0a496e20616e79206576656e742c2074686520604b657973602077696c6c2062652073746f72656420696e20796f75722062726f7773657220666f7220796f757220636f6e76656e69656e63652c2062757420697427732073616665737420746f207361766520796f757220605261772073656564602028796f75206e65656420697420666f72206365727461696e20726f6c65732920616e64207361766520746865202e6a736f6e2066696c652e2054686520604d6e656d6f6e6963602063616e20616c736f206265207573656420746f20726573746f726520796f757220604b657973602c206275742077696c6c206e6f7420646f20796f7520616e7920676f6f6420696620796f752077616e7420746f206265636f6d652061206056616c696461746f72602e00000100000000000000bc56865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[111,"6f00000000000000170000000000000003000000e10a2323204765742061204d656d626572736869700a546f206265636f6d65206120604d656d62657260206f662074686520706c6174666f726d2c20796f75206e65656420736f6d6520746f6b656e732e2045697468657220636c69636b2074686520604672656520546f6b656e7360206c696e6b2c206f7220636c69636b205b686572655d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f666175636574292e20416674657220796f7520736f6c7665642074686520636170746368612c20796f757220746f6b656e732073686f756c64206265206f6e207468656972207761792e0a0a2a2a4e6f74652a2a0a416c6c207472616e73616374696f6e73202865787472696e736963732920636f73742031204a6f7920746f6b656e2c20736f20796f752073686f756c6420616c77617973206b6565702061206c6974746c6520696e20726573657276652c206173207468697320616c736f206170706c69657320746f207375636820616374696f6e7320617320766f74696e672c20756e7374616b696e672c20616e6420706f7374696e6720696e20746865206e6577205b666f72756d5d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f6163726f706f6c69732f70696f6e6565722f232f666f72756d292e0a0a4e6f772c20636c69636b20604d656d626572736020696e2074686520736964656261722c20616e642073656c656374207468652060526567697374657260207461622e2043686f6f73652061206048616e646c652f6e69636b6e616d65602e204f7074696f6e616c6c792c2070726f766964652061206c696e6b20746f20616e20696d6167652066696c6520666f7220796f7572206176617461722c20616e642066696c6c20696e20746865206d61726b646f776e20656e61626c6564206041626f757460206669656c642e00000100000000000000c856865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[112,"700000000000000018000000000000000200000015082320496e737472756374696f6e730a556e6c696b65206d6f7374206f6620746865206f746865722063757272656e7420616e642066757475726520726f6c6573206f6e20746865204a6f7973747265616d20506c6174666f726d2c206265636f6d696e6720612060436f756e63696c204d656d62657260206f7220766f74696e67206f6e2070726f706f73616c73207265717569726573206e6f20657874726120736f6674776172652e2045766572797468696e672063616e20626520646f6e6520696e207468652062726f777365722c20627920676f696e67205b686572655d28687474703a2f2f746573746e65742e6a6f7973747265616d2e6f7267292e0a0a2a2a4e6f74652a2a0a416674657220696e74726f647563696e6720604d656d62657273686970736020746f2074686520706c6174666f726d2c20776520666f756e6420697420746f20626520636f6e667573696e6720746f2068617665206120636f6e63657074206f6620626f746820604163636f756e74736020616e6420604d656d6265727368697073602e2057652061726520696e207468652070726f63657373206f662072656e616d696e672074686520604163636f756e74736020746f2074686520604b657973602c2062757420746865726520617265207374696c6c20747261636573206f6620604163636f756e7473602073686f77696e672075702e0a000001000000000000000a57865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[113,"71000000000000001800000000000000030000008903232047657420537461727465640a496620796f752077616e7420746f2067657420656c656374656420617320612060436f756e63696c204d656d62657260206f7220766f7465206f6e2074686520706c6174666f726d2c20796f75206e65656420746f206265206120604d656d626572602e20496e737472756374696f6e7320666f7220746869732063616e20626520666f756e64205b686572655d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f6163726f706f6c69732f70696f6e6565722f232f666f72756d2f746872656164732f3233292e0a000001000000000000006457865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[114,"7200000000000000180000000000000004000000d5032320456c656374696f6e204379636c650a54686520656c656374696f6e206379636c6520636f6e736973747320666f7572207374616765732e0a312e2060416e6e6f756e63656d656e7460202d206c6173747320343332303020626c6f636b7320287e373268290a322e2060566f74696e6760202020202020202d206c6173747320313434303020626c6f636b7320287e323468290a332e206052657665616c60202020202020202d206c6173747320313434303020626c6f636b7320287e323468290a342e20605465726d602020202020202020202d206c617374732032303136303020626c6f636b7320287e31346461797329000001000000000000007c57865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[115,"7300000000000000180000000000000005000000810d232320416e6e6f756e63656d656e740a447572696e67207468652060416e6e6f756e63656d656e74602073746167652c20616e796f6e652074686174206973206120604d656d626572602c20616e6420686f6c6473206174206c6561737420756e7374616b65642031303030204a6f79202869652e20696620796f752075736520796f7572206076616c696461746f72602060737461736860206b65792c20796f75206e6565642061206062616c616e636560203e2060626f6e64656460202b2031303030204a6f792920746f6b656e732063616e20616e6e6f756e63652074686569722063616e64696461637920746f206265636f6d6520612060436f756e63696c204d656d626572602e0a0a53656c6563742060436f756e63696c6020696e2074686520736964656261722c20616e6420636c69636b2074686520604170706c6963616e747360207461622e205365742074686520616d6f756e74206f6620746f6b656e7320796f752077616e7420746f2c207374616b652c20616e6420636f6e6669726d2e0a496620796f752077616e7420746f20707574206d6f7265207374616b6520626568696e6420796f75722063616e646964616379206c617465722c20796f752063616e20746f7020757020617420616e7920706f696e7420647572696e67207468652073746167652e2041667465722073656e64696e6720746865207472616e73616374696f6e2c20796f752073686f756c642061707065617220756e64657220224170706c6963616e7473222e20546865206d6178206e756d626572206f66204170706c6963616e747320697320603235602e205768656e2074686520323574682063616e646964617465206170706c6965732c20746865206f6e65207769746820746865206c6f7765737420616d6f756e74207374616b65642077696c6c20626520707573686564206f666620746865206c6973742c20616e6420676574207468656972207374616b652072657475726e65642e20496e20746f74616c2c206031326020436f756e63696c204d656d62657273206d75737420626520656c65637465642e20496620746865726520617265206c657373207468616e203132206170706c6963616e74732c207468652060416e6e6f756e63656d656e74602073746167652077696c6c206265207265737461727465642e00000100000000000000a057865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[116,"74000000000000001800000000000000060000008909232320566f74696e670a417320736f6f6e206173207468652060416e6e6f756e63656d656e746020737461676520636c6f7365732c20796f752063616e20626567696e20766f74696e6720666f72206170706c6963616e74732e20417320776974682065766572797468696e6720656c73652c20796f75206e65656420746f207374616b6520696e206f7264657220746f20646f20736f2e204a6f7973747265616d2069732063757272656e746c7920776f726b696e6720756e6465722074686520224f6e6520546f6b656e202d204f6e6520566f746522207072696e636970616c2e20476f20746f207468652060566f74657360207461622c2073657420796f7572207374616b696e6720616d6f756e742c2073656c65637420796f75722063616e64696461746520616e642067656e65726174652061206052616e646f6d2073616c74602e20546869732077696c6c206265206e656564656420746f2072657665616c20616e642061637475616c6c79202262726f6164636173742220796f757220766f74652e20596f752063616e20766f7465206d6f7265207468616e206f6e63652c20666f7220796f75722073656c662c20616e6420666f72206d6f7265207468616e206f6e65206170706c6963616e742e20416c6c2074686520646174612077696c6c2062652073746f72656420696e20796f75722062726f777365722c20736f206173206c6f6e6720617320796f7520617265207573696e67207468652073616d65206d616368696e652f62726f777365722f636f6f6b6965732c20796f7520646f6e2774206e65656420746f207361766520616e797468696e672e00000100000000000000ac57865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[117,"7500000000000000180000000000000007000000f10323232052657665616c0a417320736f6f6e206173207468652060566f74696e676020737461676520636c6f7365732c207468652052657665616c696e6720737461676520626567696e732e2054686973206973207768656e20796f752063616e2072657665616c20796f757220766f74652e20476f20746f20746865206052657665616c206120766f746560207461622c20746f2061637475616c6c792062726f61646361737420796f757220766f74652e20566f746573207468617420617265206e6f742072657665616c656420696e2074696d652077696c6c206e6f742067657420636f756e74656420696e2074686520656c656374696f6e2e00000100000000000000b857865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[118,"760000000000000018000000000000000800000065052323205465726d0a417320736f6f6e20617320746865206052657665616c6020737461676520636c6f7365732c207468652031322063616e64696461746573207769746820746865206869676865737420746f74616c206261636b696e672c2069652e207468656972206f776e207374616b65202b20766f746572207374616b652c2077696c6c206265636f6d652060436f756e63696c204d656d62657273602e205468656972207465726d2077696c6c2072756e20666f7220313420646179732c2061667465722077686963682061206e65772060436f756e63696c602077696c6c206265656e20656c65637465642e0a0a4e6f7465207468617420746865206e6578742060416e6e6f756e63656d656e74602073746167652077696c6c2073746172742065786163746c792032303136303020626c6f636b7320283134206461797329206166746572207468652070726576696f75732e00000100000000000000c457865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[119,"77000000000000001a0000000000000002000000710723232320496e737472756374696f6e730a496620796f752066696e6420612062756720696e20616e79206f66206f757220736f6674776172652c207265706f7274696e67207468656d20617320604973737565736020696e2074686520636f7272656374205b7265706f5d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f6a6f7973747265616d237265706f7369746f72792d696e646578292077696c6c20616c6c6f7720757320746f206164647265737320746869732e20417320737461746564205b686572655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f68656c706465736b236275696c646572732d616e642d6275672d7265706f7274657273292c206974206d6967687420616c736f207175616c69667920666f72206120626f756e74792e20496620796f752066696e6420616e206572726f722c20736f6d657468696e6720756e636c656172206f72206a757374206d697373696e6720696e207468652067756964657320696e2074686973207265706f2c20746865205b73616d6520636f6e63657074206170706c6965735d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f626f756e746965732f6973737565732f33292e0a00000100000000000000d258865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[120,"78000000000000001a0000000000000003000000d50a417320612067656e6572616c206e6f74652c20696e206164646974696f6e20746f20746865207365766572697479206f6620746865206275672c20746865206d6f72652064657461696c7320796f7520696e636c75646520696e2074686520604973737565602c207468652062696767657220746865207265776172642077696c6c2062652e204578616d706c65206f6620612064657461696c656420604973737565603a0a2a20466f72206e6f64657320616e6420736f6674776172652072616e206f6e20796f757220636f6d70757465720a20202a204c6f677320616e64206372617368207265706f727473202866726f6d206f6e65206f6620746865206e6f646573290a20202a20537465707320746f20726570726f647563650a20202a20596f757220656e7669726f6e6d656e74202865672e206f7065726174696e672073797374656d20616e642076657273696f6e290a20202a206574632e0a2a2049662072656c6174656420746f206f7572206050696f6e65657260205b746573746e65745d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672920617070733a0a20202a20576861742028696620616e7929206572726f72206d6573736167652064696420796f7520736565643f0a20202a2057686174207765726520796f7520747279696e6720746f20646f3f0a20202a205768617420697320796f757220616464726573733f0a20202a205768617420697320796f75722062616c616e63653f0a20202a2057686174206973207468652074797065206f6620606b657960202869652e20605363686e6f72726b656c60206f7220604564776172647360293f0a20202a2041726520796f75206120604d656d626572603f0a20202a2049732074686520606b657960207573656420666f7220616e6f7468657220726f6c653f0a20202a206574632e00000100000000000000de58865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[121,"79000000000000001000000000000000020000008d0c2320496e737472756374696f6e730a0a496620796f752077616e7420746f2062652076697369626c6520696e2074686520706f6c6b61646f742f7375627374726174652074656c656d657472792c20676f205b686572655d2868747470733a2f2f74656c656d657472792e706f6c6b61646f742e696f2f292e204e6f7465207468617420666f722077696e646f777320616e642061726d76372028726173706265727279207069292c20796f75206e65656420746f2061646420612074656c656d6574727920666c616720617420737461727475702028736565206170706c696361626c65207365747570206e6f6465292e0a0a496620796f7572206056616c696461746f72602068617320657870657269656e63656420736f6d65206f6620746865206e6574776f726b696e672069737375657320646573637269626564205b686572655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2f6973737565732f3638292c20636f6e73696465722072657374617274696e6720796f7572206e6f646520617420726567756c617220696e74657276616c732e20496620796f752077616e7420746f206175746f6d61746520746869732070726f636573732c20636f6e73696465722072756e6e696e6720796f7572206e6f64652061732061205b736572766963655d282372756e2d61732d612d73657276696365292e0a0a2a2a4e6f74652a2a0a416674657220696e74726f647563696e6720604d656d62657273686970736020746f2074686520706c6174666f726d2c20776520666f756e6420697420746f20626520636f6e667573696e6720746f2068617665206120636f6e63657074206f6620626f746820604163636f756e74736020616e6420604d656d6265727368697073602e2057652061726520696e207468652070726f63657373206f662072656e616d696e672074686520604163636f756e74736020746f2074686520604b657973602c2062757420746865726520617265207374696c6c20747261636573206f6620604163636f756e74602073686f77696e672075702e00000100000000000000aa59865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[122,"7a00000000000000100000000000000003000000210a23232057696e646f77730a0a2a2045766572792074696d6520736f6d657468696e67206973207772697474656e20696e20603c627261636b6574733e602c206974206d65616e7320796f75206861766520746f207265706c6163652074686973207769746820796f757220696e7075742c20776974686f75742074686520603c3e602e0a2a205768656e20736f6d657468696e67206973207772697474656e20696e206022646f75626c655f71756f74657322602c206974206d65616e7320746865206e756d6265722f646174612077696c6c207661727920646570656e64696e67206f6e20796f7572206e6f6465206f72207468652063757272656e74207374617465206f662074686520626c6f636b636861696e2e0a2a20466f72207465726d696e616c20636f6d6d616e64732c20603e60206d65616e7320796f75206d7573742074797065207768617420636f6d65732061667465722074686174206f6e2077696e646f777320616e64206d616320726573706563746976656c792e20602360204d65616e732069742773206a757374206120636f6d6d656e742f6578706c616e6174696f6e2c20616e64206d757374206e6f742062652074797065642e0a6060600a232054686973206973206a757374206120636f6d6d656e742c20646f6e27742074797065206f7220706173746520697420696e20796f7572207465726d696e616c210a3e20636420433a5c6a6f7973747265616d2d6e6f64652d312e302e302d77696e646f77732d7838365f36340a23204f6e6c7920747970652f7061737465207468652022636420433a5c6a6f7973747265616d2d6e6f64652d77696e646f77732d783634222c206e6f742074686520707265636564696e67203e20210a60606000000100000000000000b659865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[123,"7b00000000000000100000000000000004000000110c23232323205365747570204e6f64650a0a476574207468652062696e617279205b686572655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2f72656c65617365732f646f776e6c6f61642f76312e302e302f6a6f7973747265616d2d6e6f64652d312e302e302d77696e646f77732d7838365f36342e7a6970292e20546f206d616b65207468652061637475616c20636f6d6d616e6473207468652073616d6520666f7220616c6c2075736572732c2049276d20676f696e6720746f20736176652069742060433a5c6020616e6420756e7a69702069742074686572652e2060433a5c6a6f7973747265616d2d6e6f64652d312e302e302d77696e646f77732d7838365f3634602e204665656c206672656520746f2073746f726520697420736f6d65776865726520656c73652c206a757374206d616b65207375726520796f75207573652074686520636f7272656374207061746820696e2074686520696e737472756374696f6e73207468617420666f6c6c6f77732e0a0a496620796f7520646f6e277420686176652069742c20646f776e6c6f6164204d6963726f736f66742056697375616c2053747564696f20432b2b2072756e74696d652064697374726962757461626c652032303135205b686572655d2868747470733a2f2f7777772e6d6963726f736f66742e636f6d2f656e2d69652f646f776e6c6f61642f64657461696c732e617370783f69643d3438313435292e20200a0a47657420746865206d697373696e672053534c206c6962726172696573205b686572655d2868747470733a2f2f696e64792e66756c67616e2e636f6d2f53534c2f6f70656e73736c2d312e302e32712d7836345f38362d77696e36342e7a6970292c20657874726163742c20616e64206d6f7665207468652066696c6573206073736c65617933322e646c6c6020616e6420606c696265617933322e646c6c6020746f2060433a5c6a6f7973747265616d2d6e6f64652d77696e646f77732d783634602e0a00000100000000000000c859865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[124,"7c00000000000000100000000000000005000000b10a4f70656e2060436f6d6d616e642050726f6d70746020287479706520696e20636d642e2e2e20616674657220636c69636b696e672077696e646f777320627574746f6e293a0a0a6060600a3e20636420433a5c6a6f7973747265616d2d6e6f64652d312e302e302d77696e646f77732d7838365f36340a3e206a6f7973747265616d2d6e6f64652e6578650a2320496620796f752077616e7420796f7572206e6f646520746f20686176652061206e6f6e2d72616e646f6d206964656e7469666965723a0a3e206a6f7973747265616d2d6e6f64652e657865202d2d6e616d65203c6e6f64656e616d653e0a2320496620796f752077616e7420796f7572206e6f646520746f2073686f7720757020696e207468652074656c656d657472793a2068747470733a2f2f74656c656d657472792e706f6c6b61646f742e696f2f0a3e206a6f7973747265616d2d6e6f64652e657865202d2d6e616d65203c6e6f64656e616d653e202d2d74656c656d657472792d75726c2077733a2f2f74656c656d657472792e706f6c6b61646f742e696f3a313032342f0a0a23204e6f74653a2064756520746f20736f6d65206973737565732077697468206f7572206e6f6465732067657474696e67206d697865642075702077697468206e6f6465732066726f6d2074686520636861696e58206e6574776f726b20287365652074656c656d65747279206c696e6b292c0a23206974206d696768742068656c7020796f757220757074696d6520627920616c736f2070617373696e673a0a2d2d696e2d706565727320313030202d2d6f75742d7065657273203130300a2320616674657220746865206f7468657220666c6167732e20596f752063616e2063686f6f736520616e79206e756d62657220796f75206c696b652c206275742064656661756c742069732032352e0a60606000000100000000000000d459865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[125,"7d00000000000000100000000000000006000000950e596f7572206e6f64652073686f756c64206e6f772073746172742073796e63696e672074686520626c6f636b636861696e2e20546865206f75747075742073686f756c64206c6f6f6b206c696b6520746869733a0a6060600a4a6f7973747265616d204e6f64650a202076657273696f6e202256657273696f6e222d22796f75725f4f53220a20206279204a6f7973747265616d2c20323031390a436861696e2073706563696669636174696f6e3a204a6f7973747265616d20546573746e65742076320a4e6f6465206e616d653a20226e6f64656e616d65220a526f6c65733a2046554c4c0a47656e6572617465642061206e6577206b6579706169723a2022736f6d655f6c6f6e675f6f75707574220a496e697469616c697a696e672047656e6573697320626c6f636b2f7374617465202822736f6d655f6c6f6e675f6f7570757422290a4c6f6164656420626c6f636b2d74696d65203d2036207365636f6e64732066726f6d2067656e65736973206f6e2066697273742d6c61756e636820737461727475702e0a4265737420626c6f636b3a2023300a4c6f63616c206e6f646520616464726573732069733a202f6970342f302e302e302e302f7463702f33303333332f7032702f22796f75725f6e6f64655f6b6579220a4c697374656e696e6720666f72206e657720636f6e6e656374696f6e73206f6e203132372e302e302e313a393934342e0a2e2e2e0a2e2e2e0a53796e63696e672c207461726765743d2322626c6f636b5f686569676874222028226e22207065657273292c20626573743a20232273796e6365645f68656967687422202822686173685f6f665f73796e6365645f74697022292c2066696e616c697a6564202330202822686173685f6f665f66696e616c697a65645f74697022292c20e2ac872022646f776e6c6f61645f73706565642269422f7320e2ac86202275706c6f61645f7370656564226b69422f730a6060600a46726f6d20746865206c617374206c696e652c206e6f7469636520607461726765743d2322626c6f636b5f686569676874226020616e642060626573743a20232273796e6365645f68656967687422600a5768656e2074686520607461726765743d23626c6f636b5f686569676874606973207468652073616d652061732060626573743a20232273796e6365645f68656967687422602c20796f7572206e6f64652069732066756c6c792073796e636564210a0a2a2a4b65657020746865207465726d696e616c2077696e646f77206f70656e2e2a2a00000100000000000000e059865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[126,"7e000000000000001000000000000000070000009d0323232323204b6579730a0a4e6f7720796f75206e65656420746f2067656e657261746520796f757220606b6579736020696e20746865206050696f6e65657220617070602e0a0a496620796f752077616e7420746f206861766520746865206170706c69636174696f6e2074616c6b20746f20796f7572206f776e206e6f64652c2063686f6f7365206053657474696e67736020696e2074686520736964656261722c20616e64206368616e676520746865206072656d6f7465206e6f64652f656e64706f696e7420746f20636f6e6e65637420746f6020746f206c6f63616c206e6f64652e0a00000100000000000000825a865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[127,"7f00000000000000100000000000000008000000490b232323232047656e657261746520796f7572206b6579730a0a5768696c6520746865206e6f64652069732073796e63696e672c20796f752063616e207374617274207468652070726f63657373206f662073657474696e672075702074686520726573742e0a0a312e20476f20746f20746865205b50696f6e656572204170705d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f70696f6e656572292c20616e642073656c65637420604d79206b6579736020696e2074686520736964656261722e20436c69636b207468652060437265617465206b65797360207461622e0a0a4e616d65732061726520656e746972656c79206f7074696f6e616c2c2062757420746865206e6578742073746570732077696c6c2062652065617369657220696620796f7520666f6c6c6f77207468652073797374656d207375676765737465642e0a0a322e204e616d6520796f7572206669727374206b657970616972206073657373696f6e602c206f72206174206c6561737420736f6d657468696e67207468617420636f6e7461696e732074686520776f72642e20496520606a6f686e2d646f652d73657373696f6e2d6b6579602e0a332e20496e207468652064726f70646f776e20696e20746865206669656c642062656c6f772c2063686f6f736520605261772073656564602e204e6f7465207468617420656163682074696d6520796f7520746f67676c65206265747765656e20604d6e656d6f6e69636020616e6420605261772073656564602c20796f752077696c6c2067656e65726174652061206e6577206b657920706169722e0a342e20436f7079207468652060223078596f75724c6f6e6753657373696f6e5261775365656422602c20616e64207361766520697420736f6d6577686572652073616665202d206c696b6520612070617373776f7264206d616e616765722e20596f75206e6565642074686973206c617465722100000100000000000000fa5a865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[128,"8000000000000000100000000000000009000000fd08352e2043686f6f736520612070617373776f7264202874686973206b65792077696c6c20686f6c6420616c6c20796f757220746f6b656e7321290a362e20466f7220746865206073657373696f6e60206b65792c20796f7520616c736f206e65656420746f2073656c65637420604564776172647320286564323535313929602066726f6d207468652060416476616e636564206372656174696f6e206f7074696f6e73602e0a372e20436c69636b20605361766560202d3e206043726561746520616e64206261636b7570206b657973602e0a0a446570656e64696e67206f6e20796f75722062726f777365722c20796f75206d69676874206861766520746f20636f6e6669726d20736176696e672074686520602235596f75724a6f7953657373696f6e416464726573732e6a736f6e22602e0a0a526570656174207468652073746570732074776f206d6f72652074696d65732c20627574207769746820646966666572656e74206e616d65732c206c656176696e6720796f7520776974682074687265652073657473206f66206b6579732061732073686f776e2062656c6f773a0a2a20607374617368600a2a2060636f6e74726f6c6c6572600a2a206073657373696f6e600a0a4e6f7465207468617420796f75206f6e6c79202a7374726963746c79206e6565642a2074686520526177207365656420666f7220746865206073657373696f6e60206b6579706169722c20627574206974277320736166657220746f20646f20697420666f7220616c6c206f66207468656d2e00000100000000000000065b865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[129,"810000000000000010000000000000000a0000000d0f232323232052652d737461727420796f7572206e6f646520617320612076616c696461746f720a0a496620796f7520686176656e277420616c72656164792c2067656e657261746520796f7572206b6579732e0a0a312e204f70656e20746865207465726d696e616c20746861742069732072756e6e696e6720796f7572206e6f64652c20616e64206b696c6c207468652073657373696f6e207769746820606374726c2b636020287477696365292e0a202020202a204f6e2057696e646f77732c2074686520666972737420606374726c2b63602077696c6c2070726f647563652061206c6f6e6720616e6420636f6e667573696e67206f75747075742e0a322e205265737461727420697420616761696e20776974682074686520666f6c6c6f77696e6720636f6d6d616e643a0a6060600a3e206a6f7973747265616d2d6e6f64652e657865202d2d76616c696461746f72202d2d6b6579203c30784d794c6f6e67526177536565643e0a2320496620796f752077616e7420796f7572206e6f646520746f20686176652061206e6f6e2d72616e646f6d206964656e7469666965723a0a3e206a6f7973747265616d2d6e6f64652e657865202d2d6e616d65203c6e6f64656e616d653e202d2d76616c696461746f72202d2d6b6579203c3078596f75724c6f6e6753657373696f6e526177536565643e0a2320496620796f7520616c736f2077616e742069742073686f7720757020696e2074656c656d657472793a0a3e206a6f7973747265616d2d6e6f64652e657865202d2d6e616d65203c6e6f64656e616d653e202d2d74656c656d657472792d75726c2077733a2f2f74656c656d657472792e706f6c6b61646f742e696f3a313032342f202d2d76616c696461746f72202d2d6b6579203c3078596f75724c6f6e6753657373696f6e526177536565643e0a0a23204e6f74653a2064756520746f20736f6d65206973737565732077697468206f7572206e6f6465732067657474696e67206d697865642075702077697468206e6f6465732066726f6d2074686520636861696e58206e6574776f726b20287365652074656c656d65747279206c696e6b292c0a23206974206d696768742068656c7020796f757220757074696d6520627920616c736f2070617373696e673a0a2d2d696e2d706565727320313030202d2d6f75742d7065657273203130300a2320616674657220746865206f7468657220666c6167732e20596f752063616e2063686f6f736520616e79206e756d62657220796f75206c696b652c20627574207468652064656661756c742069732032352e0a60606000000100000000000000365b865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[130,"820000000000000010000000000000000b000000690c546869732074696d652c20746865206f75747075742073686f756c642073686f77206120736c696768746c7920646966666572656e742073746172747570206f75747075743a0a6060600a4a6f7973747265616d204e6f64650a202076657273696f6e202276657273696f6e222d22796f75725f4f53220a20206279204a6f7973747265616d2c20323031390a436861696e2073706563696669636174696f6e3a204a6f7973747265616d2053746167696e6720546573746e65740a4e6f6465206e616d653a20226e6f64656e616d65220a526f6c65733a20415554484f524954590a4265737420626c6f636b3a20232273796e6365645f686569676874220a4c6f63616c206e6f646520616464726573732069733a202f6970342f302e302e302e302f7463702f33303333332f7032702f22796f75725f6e6f64655f6b6579220a4c697374656e696e6720666f72206e657720636f6e6e656374696f6e73206f6e203132372e302e302e313a393934342e0a5573696e6720617574686f72697479206b657920202235596f75724a6f7953657373696f6e416464726573732220202320536565204e6f74650a2e2e2e0a6060600a2a2a4e6f74652a2a0a496620796f7572206073657373696f6e60207761732067656e65726174656420617320605363686e6f72726b656c20287372323535313929602c2069742077696c6c2073686f77206120636f6d706c6574656c7920646966666572656e7420616464726573732e20496620746869732068617070656e732c20676f206261636b20616e642067656e65726174652061206e6577205b73657373696f6e206b65795d282367656e65726174652d796f75722d6b65797329207769746820604564776172647320286564323535313929602e20496620796f7520646f6e27742c20796f7572206e6f64652077696c6c2074727920746f207369676e20626c6f636b732077697468207468652077726f6e67206b65792e204173206120636f6e73657175656e63652c20796f752077696c6c2067657420736c617368656420616e64206b69636b6564206f75742061732061206056616c696461746f72602e00000100000000000000425b865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[131,"830000000000000010000000000000000c0000002d01232323232046696e616c20537465700a0a4e6f7720697427732074696d6520746f20636f6e66696775726520796f7572206b65797320746f2073746172742076616c69646174696e672e20000001000000000000005a5b865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[132,"840000000000000010000000000000000d000000d10c2323232320436f6e66696775726520796f75722076616c696461746f72206b6579730a0a496e206f7264657220746f2062652061206056616c696461746f72602c20796f75206e65656420746f207374616b652e204e6f7465207468617420796f75206d6179206861766520746f207265667265736820796f75722062726f7773657220696620796f75277265206e6f7420736565696e6720746865206f7074696f6e7320726967687420617761792e0a0a2a2a494d504f5254414e543a2a2a205265616420737465702031332e206361726566756c6c792e20596f7572206e6f6465206e6565647320746f2062652066756c6c792073796e6365642c206265666f72652070726f63656564696e6720746f20737465702031342e0a0a312e205374696c6c20696e2074686520604d79204b657973602073696465626172206f6620746865205b50696f6e656572204170705d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f70696f6e656572292c2063686f6f736520796f75722060737461736860206b65792e0a322e20436c69636b2074686520604672656520546f6b656e7360206c696e6b2062656c6f7720796f757220616464726573732c205b6f7220636c69636b20686572655d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f666175636574292e20536f6c76652074686520636170746368612c20616e6420796f752073686f756c64207265636569766520746f6b656e732e0a332e2053656e6420736f6d6520746f6b656e7320746f20796f75722060636f6e74726f6c6c6572602e204974206e6565647320746f20706572666f726d206174206c656173742074776f207472616e73616374696f6e732c206275742062657474657220746f2073656e64207e31302e0a342e204e6f772c20636c69636b206056616c696461746f72736020696e2074686520736964656261722c20616e64207468656e20746865206056616c696461746f72205374616b696e6760207461622e0a352e204c6f636174652074686520616464726573732f6b6579206e616d656420607374617368602c20616e6420636c69636b2060426f6e642046756e6473602e00000100000000000000725b865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[133,"850000000000000010000000000000000e000000150b362e20496e2074686520706f7075702077696e646f772c2063686f6f736520796f75722060636f6e74726f6c6c657260206173207468652060636f6e74726f6c6c6572206163636f756e74602e0a372e20456e7465722074686520616d6f756e7420796f752077616e7420746f207374616b6520696e20746865206076616c756520626f6e64656460206669656c642e2028497420636f756c64206265207769736520746f206c65617665206120636f75706c65206f66204a6f79206c656674292e0a382e20496e2074686520607061796d656e742064657374696e6174696f6e602064726f70646f776e2c20746865726520617265207468726565206f7074696f6e732e2053656c656374207468652064656661756c7420605374617368206163636f756e742028696e6372656173652074686520616d6f756e74206174207374616b6529602c206f7220676f20746f205b616476616e6365645d2823626f6e64696e672d707265666572656e636573292e0a392e2054686520627574746f6e2060626f6e64602073686f756c6420626520686967686c696768746564206e6f772e20436c69636b2069742e0a31302e205479706520696e20796f75722070617373776f726420696e207468652060756e6c6f636b20776974682070617373776f726460206669656c6420616e6420636c69636b20607369676e20616e64207375626d6974602e0a31312e20596f75722060636f6e74726f6c6c657260206163636f756e742073686f756c64206e6f772073686f77206120605365742053657373696f6e204b65796020627574746f6e2e20436c69636b2069742e0a31322e20496e2074686520706f7075702c2073656c65637420796f7572206073657373696f6e6020617320796f7572206073657373696f6e206b65796020696e207468652064726f70646f776e2e20436f6e6669726d2c207369676e20616e64207375626d69742e00000100000000000000845b865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[134,"860000000000000010000000000000000f000000c50d31332e20596f75206e65656420746f20636865636b20796f7572206e6f64652c20776869636820796f752073746172746564206561726c6965722e20496e20746865206f757470757420607461726765743d2322626c6f636b5f68656967687422602073686f756c6420657175616c2060626573743a20232273796e6365645f68656967687422602e20446f206e6f742070726f63656564206265666f72652074686f73652074776f2076616c75657320617265206964656e746963616c2c20617320796f7572206e6f64652077696c6c2062652064726f70706564206f75742066726f6d207468652076616c696461746f727320696620796f7572206e6f6465206973206e6f742066756c6c792073796e6365642e20496620796f752064696420737461727420796f7572206e6f6465207769746820602d2d6e616d65203c6e6f64656e616d653e6020706172616d657465722c207468656e20796f7520616c736f2063616e20636865636b20696620796f7572206e6f64652069732066756c6c792073796e6365642066726f6d205b54656c656d657472795d2868747470733a2f2f74656c656d657472792e706f6c6b61646f742e696f2f236c6973742f4a6f7973747265616d253230546573746e65742532307632292e0a31342e20596f75722060636f6e74726f6c6c657260206163636f756e742073686f756c64206e6f772073686f772061206056616c69646174656020627574746f6e2e20436c69636b2069742e0a31352e20596f752063616e206c65617665207468652060756e7374616b65207468726573686f6c646020616e6420607061796d656e7420707265666572656e636573602061732064656661756c74732c206f7220676f20746f205b616476616e6365645d282376616c69646174696e672d707265666572656e636573292e20436f6e6669726d2c207369676e20616e64207375626d69742e0a0a5265667265736820796f75722062726f777365722c20616e642073656c65637420746865206056616c696461746f72204f7665727669657760207461622e20496620796f7572206163636f756e742073686f777320756e64657220606e657874207570602c207761697420666f7220746865206e6578742060657261602c20616e6420796f752077696c6c206265206d6f76656420746f20746865206076616c696461746f727360206c6973742e0a000001000000000000009c5b865d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[135,"87000000000000001100000000000000020000008d0c2320496e737472756374696f6e730a0a496620796f752077616e7420746f2062652076697369626c6520696e2074686520706f6c6b61646f742f7375627374726174652074656c656d657472792c20676f205b686572655d2868747470733a2f2f74656c656d657472792e706f6c6b61646f742e696f2f292e204e6f7465207468617420666f722077696e646f777320616e642061726d76372028726173706265727279207069292c20796f75206e65656420746f2061646420612074656c656d6574727920666c616720617420737461727475702028736565206170706c696361626c65207365747570206e6f6465292e0a0a496620796f7572206056616c696461746f72602068617320657870657269656e63656420736f6d65206f6620746865206e6574776f726b696e672069737375657320646573637269626564205b686572655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2f6973737565732f3638292c20636f6e73696465722072657374617274696e6720796f7572206e6f646520617420726567756c617220696e74657276616c732e20496620796f752077616e7420746f206175746f6d61746520746869732070726f636573732c20636f6e73696465722072756e6e696e6720796f7572206e6f64652061732061205b736572766963655d282372756e2d61732d612d73657276696365292e0a0a2a2a4e6f74652a2a0a416674657220696e74726f647563696e6720604d656d62657273686970736020746f2074686520706c6174666f726d2c20776520666f756e6420697420746f20626520636f6e667573696e6720746f2068617665206120636f6e63657074206f6620626f746820604163636f756e74736020616e6420604d656d6265727368697073602e2057652061726520696e207468652070726f63657373206f662072656e616d696e672074686520604163636f756e74736020746f2074686520604b657973602c2062757420746865726520617265207374696c6c20747261636573206f6620604163636f756e74602073686f77696e672075702e00000100000000000000eec5875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[136,"88000000000000001200000000000000020000008d0c2320496e737472756374696f6e730a0a496620796f752077616e7420746f2062652076697369626c6520696e2074686520706f6c6b61646f742f7375627374726174652074656c656d657472792c20676f205b686572655d2868747470733a2f2f74656c656d657472792e706f6c6b61646f742e696f2f292e204e6f7465207468617420666f722077696e646f777320616e642061726d76372028726173706265727279207069292c20796f75206e65656420746f2061646420612074656c656d6574727920666c616720617420737461727475702028736565206170706c696361626c65207365747570206e6f6465292e0a0a496620796f7572206056616c696461746f72602068617320657870657269656e63656420736f6d65206f6620746865206e6574776f726b696e672069737375657320646573637269626564205b686572655d2868747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2f6973737565732f3638292c20636f6e73696465722072657374617274696e6720796f7572206e6f646520617420726567756c617220696e74657276616c732e20496620796f752077616e7420746f206175746f6d61746520746869732070726f636573732c20636f6e73696465722072756e6e696e6720796f7572206e6f64652061732061205b736572766963655d282372756e2d61732d612d73657276696365292e0a0a2a2a4e6f74652a2a0a416674657220696e74726f647563696e6720604d656d62657273686970736020746f2074686520706c6174666f726d2c20776520666f756e6420697420746f20626520636f6e667573696e6720746f2068617665206120636f6e63657074206f6620626f746820604163636f756e74736020616e6420604d656d6265727368697073602e2057652061726520696e207468652070726f63657373206f662072656e616d696e672074686520604163636f756e74736020746f2074686520604b657973602c2062757420746865726520617265207374696c6c20747261636573206f6620604163636f756e74602073686f77696e672075702e00000100000000000000f4c5875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[137,"890000000000000012000000000000000300000011092323204d61630a0a2a2045766572792074696d6520736f6d657468696e67206973207772697474656e20696e20603c627261636b6574733e602c206974206d65616e7320796f75206861766520746f207265706c6163652074686973207769746820796f757220696e7075742c20776974686f75742074686520603c3e602e0a2a205768656e20736f6d657468696e67206973207772697474656e20696e206022646f75626c655f71756f74657322602c206974206d65616e7320746865206e756d6265722f646174612077696c6c207661727920646570656e64696e67206f6e20796f7572206e6f6465206f72207468652063757272656e74207374617465206f662074686520626c6f636b636861696e2e0a2a20466f72207465726d696e616c20636f6d6d616e64732c20602460206d65616e7320796f75206d7573742074797065207768617420636f6d65732061667465722074686174206f6e2077696e646f777320616e64206d616320726573706563746976656c792e20602360204d65616e732069742773206a757374206120636f6d6d656e742f6578706c616e6174696f6e2c20616e64206d757374206e6f742062652074797065642e0a6060600a232054686973206973206a757374206120636f6d6d656e742c20646f6e27742074797065206f7220706173746520697420696e20796f7572207465726d696e616c210a24206364207e2f0a23204f6e6c7920747970652f70617374652074686520226364207e2f2c206e6f742074686520707265636564696e67202420210a6060600000010000000000000012c6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[138,"8a00000000000000120000000000000004000000f10c23232323205365747570204e6f64650a0a4f70656e20746865207465726d696e616c20284170706c69636174696f6e732d3e5574696c6974696573293a0a0a6060600a24206364207e2f0a2420776765742068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2f72656c65617365732f646f776e6c6f61642f76312e302e302f6a6f7973747265616d2d6e6f64652d312e302e302d6f73782d7838365f36342e7a69700a2d2d2d2d0a2320496620796f7520646f6e27742068617665207767657420696e7374616c6c65642c20706173746520746865206c696e6b20696e20796f75722062726f7773657220736176652e0a2320417373756d696e67206974206765747320736176656420696e20796f7572207e2f446f776e6c6f61647320666f6c6465723a0a24206d76207e2f446f776e6c6f6164732f6a6f7973747265616d2d6e6f64652d312e302e302d6f73782d7838365f36342e7a6970207e2f0a2d2d2d0a2420746172202d767866206a6f7973747265616d2d6e6f64652d312e302e302d6f73782d7838365f36342e7a69700a24202e2f6a6f7973747265616d2d6e6f64650a2320496620796f752077616e7420796f7572206e6f646520746f20686176652061206e6f6e2d72616e646f6d206964656e7469666965723a0a3e202e2f6a6f7973747265616d2d6e6f6465202d2d6e616d65203c6e6f64656e616d653e0a0a23204e6f74653a2064756520746f20736f6d65206973737565732077697468206f7572206e6f6465732067657474696e67206d697865642075702077697468206e6f6465732066726f6d2074686520636861696e58206e6574776f726b20287365652074656c656d65747279206c696e6b292c0a23206974206d696768742068656c7020796f757220757074696d6520627920616c736f2070617373696e673a0a2d2d696e2d706565727320313030202d2d6f75742d7065657273203130300a2320616674657220746865206f7468657220666c6167732e20596f752063616e2063686f6f736520616e79206e756d62657220796f75206c696b652c20627574207468652064656661756c742069732032352e0a606060000001000000000000001ec6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[139,"8b00000000000000120000000000000005000000950e596f7572206e6f64652073686f756c64206e6f772073746172742073796e63696e672074686520626c6f636b636861696e2e20546865206f75747075742073686f756c64206c6f6f6b206c696b6520746869733a0a6060600a4a6f7973747265616d204e6f64650a202076657273696f6e202256657273696f6e222d22796f75725f4f53220a20206279204a6f7973747265616d2c20323031390a436861696e2073706563696669636174696f6e3a204a6f7973747265616d20546573746e65742076320a4e6f6465206e616d653a20226e6f64656e616d65220a526f6c65733a2046554c4c0a47656e6572617465642061206e6577206b6579706169723a2022736f6d655f6c6f6e675f6f75707574220a496e697469616c697a696e672047656e6573697320626c6f636b2f7374617465202822736f6d655f6c6f6e675f6f7570757422290a4c6f6164656420626c6f636b2d74696d65203d2036207365636f6e64732066726f6d2067656e65736973206f6e2066697273742d6c61756e636820737461727475702e0a4265737420626c6f636b3a2023300a4c6f63616c206e6f646520616464726573732069733a202f6970342f302e302e302e302f7463702f33303333332f7032702f22796f75725f6e6f64655f6b6579220a4c697374656e696e6720666f72206e657720636f6e6e656374696f6e73206f6e203132372e302e302e313a393934342e0a2e2e2e0a2e2e2e0a53796e63696e672c207461726765743d2322626c6f636b5f686569676874222028226e22207065657273292c20626573743a20232273796e6365645f68656967687422202822686173685f6f665f73796e6365645f74697022292c2066696e616c697a6564202330202822686173685f6f665f66696e616c697a65645f74697022292c20e2ac872022646f776e6c6f61645f73706565642269422f7320e2ac86202275706c6f61645f7370656564226b69422f730a6060600a46726f6d20746865206c617374206c696e652c206e6f7469636520607461726765743d2322626c6f636b5f686569676874226020616e642060626573743a20232273796e6365645f68656967687422600a5768656e2074686520607461726765743d23626c6f636b5f686569676874606973207468652073616d652061732060626573743a20232273796e6365645f68656967687422602c20796f7572206e6f64652069732066756c6c792073796e636564210a0a2a2a4b65657020746865207465726d696e616c2077696e646f77206f70656e2e2a2a000001000000000000002ac6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[140,"8c00000000000000120000000000000006000000990323232323204b6579730a0a4e6f7720796f75206e65656420746f2067656e657261746520796f757220606b6579736020696e20746865206050696f6e65657220617070602e0a0a496620796f752077616e7420746f206861766520746865206170706c69636174696f6e2074616c6b20746f20796f7572206f776e206e6f64652c2063686f6f7365206053657474696e67736020696e2074686520736964656261722c20616e64206368616e676520746865206072656d6f7465206e6f64652f656e64706f696e7420746f20636f6e6e65637420746f6020746f206c6f63616c206e6f64652e000001000000000000003cc6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[141,"8d00000000000000120000000000000007000000990e232323232047656e657261746520796f7572206b6579730a0a5768696c6520746865206e6f64652069732073796e63696e672c20796f752063616e207374617274207468652070726f63657373206f662073657474696e672075702074686520726573742e0a0a312e20476f20746f20746865205b50696f6e656572204170705d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f70696f6e656572292c20616e642073656c65637420604d79206b6579736020696e2074686520736964656261722e20436c69636b207468652060437265617465206b65797360207461622e0a0a4e616d65732061726520656e746972656c79206f7074696f6e616c2c2062757420746865206e6578742073746570732077696c6c2062652065617369657220696620796f7520666f6c6c6f77207468652073797374656d207375676765737465642e0a0a322e204e616d6520796f7572206669727374206b657970616972206073657373696f6e602c206f72206174206c6561737420736f6d657468696e67207468617420636f6e7461696e732074686520776f72642e20496520606a6f686e2d646f652d73657373696f6e2d6b6579602e0a332e20496e207468652064726f70646f776e20696e20746865206669656c642062656c6f772c2063686f6f736520605261772073656564602e204e6f7465207468617420656163682074696d6520796f7520746f67676c65206265747765656e20604d6e656d6f6e69636020616e6420605261772073656564602c20796f752077696c6c2067656e65726174652061206e6577206b657920706169722e0a342e20436f7079207468652060223078596f75724c6f6e6753657373696f6e5261775365656422602c20616e64207361766520697420736f6d6577686572652073616665202d206c696b6520612070617373776f7264206d616e616765722e20596f75206e6565642074686973206c61746572210a352e2043686f6f736520612070617373776f7264202874686973206b65792077696c6c20686f6c6420616c6c20796f757220746f6b656e7321290a362e20466f7220746865206073657373696f6e60206b65792c20796f7520616c736f206e65656420746f2073656c65637420604564776172647320286564323535313929602066726f6d207468652060416476616e636564206372656174696f6e206f7074696f6e73602e0a372e20436c69636b20605361766560202d3e206043726561746520616e64206261636b7570206b657973602e000001000000000000006cc6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[142,"8e000000000000001200000000000000080000002104526570656174207468652073746570732074776f206d6f72652074696d65732c20627574207769746820646966666572656e74206e616d65732c206c656176696e6720796f7520776974682074687265652073657473206f66206b6579732061732073686f776e2062656c6f773a0a2a20607374617368600a2a2060636f6e74726f6c6c6572600a2a206073657373696f6e600a0a4e6f7465207468617420796f75206f6e6c79202a7374726963746c79206e6565642a2074686520526177207365656420666f7220746865206073657373696f6e60206b6579706169722c20627574206974277320736166657220746f20646f20697420666f7220616c6c206f66207468656d2e000001000000000000009cc6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[143,"8f00000000000000120000000000000009000000290a232323232052652d737461727420796f7572206e6f646520617320612076616c696461746f720a0a312e204f70656e20746865207465726d696e616c20746861742069732072756e6e696e6720796f7572206e6f64652c20616e64206b696c6c207468652073657373696f6e207769746820606374726c2b63602e0a322e205265737461727420697420616761696e20776974682074686520666f6c6c6f77696e6720636f6d6d616e643a0a6060600a24202e2f6a6f7973747265616d2d6e6f6465202d2d76616c696461746f72202d2d6b6579203c30784d794c6f6e67526177536565643e0a2320496620796f752077616e7420796f7572206e6f646520746f20686176652061206e6f6e2d72616e646f6d206964656e7469666965723a0a24202e2f6a6f7973747265616d2d6e6f6465202d2d6e616d65203c6e6f64656e616d653e202d2d76616c696461746f72202d2d6b6579203c3078596f75724c6f6e6753657373696f6e526177536565643e0a0a23204e6f74653a2064756520746f20736f6d65206973737565732077697468206f7572206e6f6465732067657474696e67206d697865642075702077697468206e6f6465732066726f6d2074686520636861696e58206e6574776f726b20287365652074656c656d65747279206c696e6b292c0a23206974206d696768742068656c7020796f757220757074696d6520627920616c736f2070617373696e673a0a2d2d696e2d706565727320313030202d2d6f75742d7065657273203130300a2320616674657220746865206f7468657220666c6167732e20596f752063616e2063686f6f736520616e79206e756d62657220796f75206c696b652c20627574207468652064656661756c742069732032352e0a60606000000100000000000000a8c6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[144,"900000000000000012000000000000000a000000690c546869732074696d652c20746865206f75747075742073686f756c642073686f77206120736c696768746c7920646966666572656e742073746172747570206f75747075743a0a6060600a4a6f7973747265616d204e6f64650a202076657273696f6e202276657273696f6e222d22796f75725f4f53220a20206279204a6f7973747265616d2c20323031390a436861696e2073706563696669636174696f6e3a204a6f7973747265616d2053746167696e6720546573746e65740a4e6f6465206e616d653a20226e6f64656e616d65220a526f6c65733a20415554484f524954590a4265737420626c6f636b3a20232273796e6365645f686569676874220a4c6f63616c206e6f646520616464726573732069733a202f6970342f302e302e302e302f7463702f33303333332f7032702f22796f75725f6e6f64655f6b6579220a4c697374656e696e6720666f72206e657720636f6e6e656374696f6e73206f6e203132372e302e302e313a393934342e0a5573696e6720617574686f72697479206b657920202235596f75724a6f7953657373696f6e416464726573732220202320536565204e6f74650a2e2e2e0a6060600a2a2a4e6f74652a2a0a496620796f7572206073657373696f6e60207761732067656e65726174656420617320605363686e6f72726b656c20287372323535313929602c2069742077696c6c2073686f77206120636f6d706c6574656c7920646966666572656e7420616464726573732e20496620746869732068617070656e732c20676f206261636b20616e642067656e65726174652061206e6577205b73657373696f6e206b65795d282367656e65726174652d796f75722d6b6579732d3129207769746820604564776172647320286564323535313929602e20496620796f7520646f6e27742c20796f7572206e6f64652077696c6c2074727920746f207369676e20626c6f636b732077697468207468652077726f6e67206b65792e204173206120636f6e73657175656e63652c20796f752077696c6c2067657420736c617368656420616e64206b69636b6564206f7574206173206056616c696461746f72602e00000100000000000000c0c6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[145,"910000000000000012000000000000000b0000002d01232323232046696e616c20537465700a0a4e6f7720697427732074696d6520746f20636f6e66696775726520796f7572206b65797320746f2073746172742076616c69646174696e672e2000000100000000000000ccc6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[146,"920000000000000012000000000000000c000000d10c2323232320436f6e66696775726520796f75722076616c696461746f72206b6579730a0a496e206f7264657220746f2062652061206056616c696461746f72602c20796f75206e65656420746f207374616b652e204e6f7465207468617420796f75206d6179206861766520746f207265667265736820796f75722062726f7773657220696620796f75277265206e6f7420736565696e6720746865206f7074696f6e7320726967687420617761792e0a0a2a2a494d504f5254414e543a2a2a205265616420737465702031332e206361726566756c6c792e20596f7572206e6f6465206e6565647320746f2062652066756c6c792073796e6365642c206265666f72652070726f63656564696e6720746f20737465702031342e0a0a312e205374696c6c20696e2074686520604d79204b657973602073696465626172206f6620746865205b50696f6e656572204170705d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f70696f6e656572292c2063686f6f736520796f75722060737461736860206b65792e0a322e20436c69636b2074686520604672656520546f6b656e7360206c696e6b2062656c6f7720796f757220616464726573732c205b6f7220636c69636b20686572655d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f666175636574292e20536f6c76652074686520636170746368612c20616e6420796f752073686f756c64207265636569766520746f6b656e732e0a332e2053656e6420736f6d6520746f6b656e7320746f20796f75722060636f6e74726f6c6c6572602e204974206e6565647320746f20706572666f726d206174206c656173742074776f207472616e73616374696f6e732c206275742062657474657220746f2073656e64207e31302e0a342e204e6f772c20636c69636b206056616c696461746f72736020696e2074686520736964656261722c20616e64207468656e20746865206056616c696461746f72205374616b696e6760207461622e0a352e204c6f636174652074686520616464726573732f6b6579206e616d656420607374617368602c20616e6420636c69636b2060426f6e642046756e6473602e00000100000000000000dec6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[147,"930000000000000012000000000000000d000000150b362e20496e2074686520706f7075702077696e646f772c2063686f6f736520796f75722060636f6e74726f6c6c657260206173207468652060636f6e74726f6c6c6572206163636f756e74602e0a372e20456e7465722074686520616d6f756e7420796f752077616e7420746f207374616b6520696e20746865206076616c756520626f6e64656460206669656c642e2028497420636f756c64206265207769736520746f206c65617665206120636f75706c65206f66204a6f79206c656674292e0a382e20496e2074686520607061796d656e742064657374696e6174696f6e602064726f70646f776e2c20746865726520617265207468726565206f7074696f6e732e2053656c656374207468652064656661756c7420605374617368206163636f756e742028696e6372656173652074686520616d6f756e74206174207374616b6529602c206f7220676f20746f205b616476616e6365645d2823626f6e64696e672d707265666572656e636573292e0a392e2054686520627574746f6e2060626f6e64602073686f756c6420626520686967686c696768746564206e6f772e20436c69636b2069742e0a31302e205479706520696e20796f75722070617373776f726420696e207468652060756e6c6f636b20776974682070617373776f726460206669656c6420616e6420636c69636b20607369676e20616e64207375626d6974602e0a31312e20596f75722060636f6e74726f6c6c657260206163636f756e742073686f756c64206e6f772073686f77206120605365742053657373696f6e204b65796020627574746f6e2e20436c69636b2069742e0a31322e20496e2074686520706f7075702c2073656c65637420796f7572206073657373696f6e6020617320796f7572206073657373696f6e206b65796020696e207468652064726f70646f776e2e20436f6e6669726d2c207369676e20616e64207375626d69742e00000100000000000000eac6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[148,"940000000000000012000000000000000e000000c10d31332e20596f75206e65656420746f20636865636b20796f7572206e6f64652c20776869636820796f752073746172746564206561726c6965722e20496e20746865206f757470757420607461726765743d2322626c6f636b5f68656967687422602073686f756c6420657175616c2060626573743a20232273796e6365645f68656967687422602e20446f206e6f742070726f63656564206265666f72652074686f73652074776f2076616c75657320617265206964656e746963616c2c20617320796f7572206e6f64652077696c6c2062652064726f70706564206f75742066726f6d207468652076616c696461746f727320696620796f7572206e6f6465206973206e6f742066756c6c792073796e6365642e20496620796f752064696420737461727420796f7572206e6f6465207769746820602d2d6e616d65203c6e6f64656e616d653e6020706172616d657465722c207468656e20796f7520616c736f2063616e20636865636b20696620796f7572206e6f64652069732066756c6c792073796e6365642066726f6d205b54656c656d657472795d2868747470733a2f2f74656c656d657472792e706f6c6b61646f742e696f2f236c6973742f4a6f7973747265616d253230546573746e65742532307632292e0a31342e20596f75722060636f6e74726f6c6c657260206163636f756e742073686f756c64206e6f772073686f772061206056616c69646174656020627574746f6e2e20436c69636b2069742e0a31352e20596f752063616e206c65617665207468652060756e7374616b65207468726573686f6c646020616e6420607061796d656e7420707265666572656e636573602061732064656661756c74732c206f7220676f20746f205b616476616e6365645d282376616c69646174696e672d707265666572656e636573292e20436f6e6669726d2c207369676e20616e64207375626d69742e0a0a5265667265736820796f75722062726f777365722c20616e642073656c65637420746865206056616c696461746f72204f7665727669657760207461622e20496620796f7572206163636f756e742073686f777320756e64657220606e657874207570602c207761697420666f7220746865206e6578742060657261602c20616e6420796f752077696c6c206265206d6f76656420746f20746865206076616c696461746f727360206c6973742e00000100000000000000fcc6875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[149,"950000000000000011000000000000000300000021092323204c696e75780a0a2a2045766572792074696d6520736f6d657468696e67206973207772697474656e20696e20603c627261636b6574733e602c2074686973206d65616e7320796f75206861766520746f207265706c6163652074686973207769746820796f757220696e7075742c20776974686f75742074686520603c3e602e0a2a205768656e20736f6d657468696e67206973207772697474656e20696e206022646f75626c655f71756f74657322602c206974206d65616e7320746865206e756d6265722f646174612077696c6c207661727920646570656e64696e67206f6e20796f7572206e6f6465206f72207468652063757272656e74207374617465206f662074686520626c6f636b636861696e2e0a2a20466f72207465726d696e616c20636f6d6d616e64732c20602460206d65616e7320796f75206d7573742074797065207768617420636f6d65732061667465722074686174206f6e2077696e646f777320616e64206d616320726573706563746976656c792e20602360204d65616e732069742773206a757374206120636f6d6d656e742f6578706c616e6174696f6e2c20616e64206d757374206e6f742062652074797065642e0a6060600a232054686973206973206a757374206120636f6d6d656e742c20646f6e27742074797065206f7220706173746520697420696e20796f7572207465726d696e616c210a24206364207e2f0a23204f6e6c7920747970652f70617374652074686520226364207e2f2c206e6f742074686520707265636564696e67202420210a6060600000010000000000000026c7875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[150,"9600000000000000110000000000000004000000950b23232323205365747570204e6f64650a0a4f70656e20746865207465726d696e616c3a0a0a6060600a24206364207e2f0a23203634206269742064656269616e206261736564206c696e75780a2420776765742068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2f72656c65617365732f646f776e6c6f61642f76312e302e302f6a6f7973747265616d2d6e6f64652d312e302e302d6c696e75782d7838365f36342e7461722e677a0a2420746172202d767866206a6f7973747265616d2d6e6f64652d312e302e302d6c696e75782d7838365f36342e7461722e677a0a232061726d76372028726173706265727279207069290a2420776765742068747470733a2f2f6769746875622e636f6d2f4a6f7973747265616d2f7375627374726174652d6e6f64652d6a6f7973747265616d2f72656c65617365732f646f776e6c6f61642f76312e302e302f6a6f7973747265616d2d6e6f64652d312e302e302d61726d76372e7461722e677a0a2420746172202d767866206a6f7973747265616d2d6e6f64652d312e302e302d61726d76372e7461722e677a0a2320466f7220626f74680a24202e2f6a6f7973747265616d2d6e6f64650a2320496620796f752077616e7420796f7572206e6f646520746f20686176652061206e6f6e2d72616e646f6d206964656e7469666965723a0a24202e2f6a6f7973747265616d2d6e6f6465202d2d6e616d65203c6e6f64656e616d653e0a2320496620796f752077616e7420796f7572206e6f646520746f2073686f7720757020696e207468652074656c656d657472793a2068747470733a2f2f74656c656d657472792e706f6c6b61646f742e696f2f0a24202e2f6a6f7973747265616d2d6e6f6465202d2d6e616d65203c6e6f64656e616d653e202d2d74656c656d657472792d75726c2077733a2f2f74656c656d657472792e706f6c6b61646f742e696f3a313032342f0a6060600000010000000000000044c7875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[151,"97000000000000001100000000000000050000006d046060600a23204e6f74653a2064756520746f20736f6d65206973737565732077697468206f7572206e6f6465732067657474696e67206d697865642075702077697468206e6f6465732066726f6d2074686520636861696e58206e6574776f726b20287365652074656c656d65747279206c696e6b292c0a23206974206d696768742068656c7020796f757220757074696d6520627920616c736f2070617373696e673a0a2d2d696e2d706565727320313030202d2d6f75742d7065657273203130300a2320616674657220746865206f7468657220666c6167732e20596f752063616e2063686f6f736520616e79206e756d62657220796f75206c696b652c20627574207468652064656661756c742069732032352e0a6060600000010000000000000050c7875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[152,"9800000000000000110000000000000006000000950e596f7572206e6f64652073686f756c64206e6f772073746172742073796e63696e672074686520626c6f636b636861696e2e20546865206f75747075742073686f756c64206c6f6f6b206c696b6520746869733a0a6060600a4a6f7973747265616d204e6f64650a202076657273696f6e202256657273696f6e222d22796f75725f4f53220a20206279204a6f7973747265616d2c20323031390a436861696e2073706563696669636174696f6e3a204a6f7973747265616d20546573746e65742076320a4e6f6465206e616d653a20226e6f64656e616d65220a526f6c65733a2046554c4c0a47656e6572617465642061206e6577206b6579706169723a2022736f6d655f6c6f6e675f6f75707574220a496e697469616c697a696e672047656e6573697320626c6f636b2f7374617465202822736f6d655f6c6f6e675f6f7570757422290a4c6f6164656420626c6f636b2d74696d65203d2036207365636f6e64732066726f6d2067656e65736973206f6e2066697273742d6c61756e636820737461727475702e0a4265737420626c6f636b3a2023300a4c6f63616c206e6f646520616464726573732069733a202f6970342f302e302e302e302f7463702f33303333332f7032702f22796f75725f6e6f64655f6b6579220a4c697374656e696e6720666f72206e657720636f6e6e656374696f6e73206f6e203132372e302e302e313a393934342e0a2e2e2e0a2e2e2e0a53796e63696e672c207461726765743d2322626c6f636b5f686569676874222028226e22207065657273292c20626573743a20232273796e6365645f68656967687422202822686173685f6f665f73796e6365645f74697022292c2066696e616c697a6564202330202822686173685f6f665f66696e616c697a65645f74697022292c20e2ac872022646f776e6c6f61645f73706565642269422f7320e2ac86202275706c6f61645f7370656564226b69422f730a6060600a46726f6d20746865206c617374206c696e652c206e6f7469636520607461726765743d2322626c6f636b5f686569676874226020616e642060626573743a20232273796e6365645f68656967687422600a5768656e2074686520607461726765743d23626c6f636b5f686569676874606973207468652073616d652061732060626573743a20232273796e6365645f68656967687422602c20796f7572206e6f64652069732066756c6c792073796e636564210a0a2a2a4b65657020746865207465726d696e616c2077696e646f77206f70656e2e2a2a0000010000000000000062c7875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[153,"99000000000000001100000000000000070000009d0323232323204b6579730a0a4e6f7720796f75206e65656420746f2067656e657261746520796f757220606b6579736020696e20746865206050696f6e65657220617070602e0a0a496620796f752077616e7420746f206861766520746865206170706c69636174696f6e2074616c6b20746f20796f7572206f776e206e6f64652c2063686f6f7365206053657474696e67736020696e2074686520736964656261722c20616e64206368616e676520746865206072656d6f7465206e6f64652f656e64706f696e7420746f20636f6e6e65637420746f6020746f206c6f63616c206e6f64652e0a000001000000000000006ec7875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[154,"9a00000000000000110000000000000008000000990e232323232047656e657261746520796f7572206b6579730a0a5768696c6520746865206e6f64652069732073796e63696e672c20796f752063616e207374617274207468652070726f63657373206f662073657474696e672075702074686520726573742e0a0a312e20476f20746f20746865205b50696f6e656572204170705d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f70696f6e656572292c20616e642073656c65637420604d79206b6579736020696e2074686520736964656261722e20436c69636b207468652060437265617465206b65797360207461622e0a0a4e616d65732061726520656e746972656c79206f7074696f6e616c2c2062757420746865206e6578742073746570732077696c6c2062652065617369657220696620796f7520666f6c6c6f77207468652073797374656d207375676765737465642e0a0a322e204e616d6520796f7572206669727374206b657970616972206073657373696f6e602c206f72206174206c6561737420736f6d657468696e67207468617420636f6e7461696e732074686520776f72642e20496520606a6f686e2d646f652d73657373696f6e2d6b6579602e0a332e20496e207468652064726f70646f776e20696e20746865206669656c642062656c6f772c2063686f6f736520605261772073656564602e204e6f7465207468617420656163682074696d6520796f7520746f67676c65206265747765656e20604d6e656d6f6e69636020616e6420605261772073656564602c20796f752077696c6c2067656e65726174652061206e6577206b657920706169722e0a342e20436f7079207468652060223078596f75724c6f6e6753657373696f6e5261775365656422602c20616e64207361766520697420736f6d6577686572652073616665202d206c696b6520612070617373776f7264206d616e616765722e20596f75206e6565642074686973206c61746572210a352e2043686f6f736520612070617373776f7264202874686973206b65792077696c6c20686f6c6420616c6c20796f757220746f6b656e7321290a362e20466f7220746865206073657373696f6e60206b65792c20796f7520616c736f206e65656420746f2073656c65637420604564776172647320286564323535313929602066726f6d207468652060416476616e636564206372656174696f6e206f7074696f6e73602e0a372e20436c69636b20605361766560202d3e206043726561746520616e64206261636b7570206b657973602e0000010000000000000080c7875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[155,"9b00000000000000110000000000000009000000ad05446570656e64696e67206f6e20796f75722062726f777365722c20796f75206d69676874206861766520746f20636f6e6669726d20736176696e672074686520602235596f75724a6f7953657373696f6e416464726573732e6a736f6e22602e0a0a526570656174207468652073746570732074776f206d6f72652074696d65732c20627574207769746820646966666572656e74206e616d65732c206c656176696e6720796f7520776974682074687265652073657473206f66206b6579732061732073686f776e2062656c6f773a0a2a20607374617368600a2a2060636f6e74726f6c6c6572600a2a206073657373696f6e600a0a4e6f7465207468617420796f75206f6e6c79202a7374726963746c79206e6565642a2074686520526177207365656420666f7220746865206073657373696f6e60206b6579706169722c20627574206974277320736166657220746f20646f20697420666f7220616c6c206f66207468656d2e0a0000010000000000000092c7875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[156,"9c0000000000000011000000000000000a000000f90d232323232052652d737461727420796f7572206e6f646520617320612076616c696461746f720a0a312e204f70656e20746865207465726d696e616c20746861742069732072756e6e696e6720796f7572206e6f64652c20616e64206b696c6c207468652073657373696f6e207769746820606374726c2b63602e0a322e205265737461727420697420616761696e20776974682074686520666f6c6c6f77696e6720636f6d6d616e643a0a6060600a24202e2f6a6f7973747265616d2d6e6f6465202d2d76616c696461746f72202d2d6b6579203c30784d794c6f6e67526177536565643e0a2320496620796f752077616e7420796f7572206e6f646520746f20686176652061206e6f6e2d72616e646f6d206964656e7469666965723a0a24202e2f6a6f7973747265616d2d6e6f6465202d2d6e616d65203c6e6f64656e616d653e202d2d76616c696461746f72202d2d6b6579203c3078596f75724c6f6e6753657373696f6e526177536565643e0a232061726d7637202872617370626572727920706929206f6e6c793a0a2320496620796f752077616e7420796f7572206e6f646520746f2073686f7720757020696e207468652074656c656d657472793a2068747470733a2f2f74656c656d657472792e706f6c6b61646f742e696f2f0a24202e2f6a6f7973747265616d2d6e6f6465202d2d6e616d65203c6e6f64656e616d653e202d2d76616c696461746f72202d2d6b6579203c3078596f75724c6f6e6753657373696f6e526177536565643e202d2d74656c656d657472792d75726c2077733a2f2f74656c656d657472792e706f6c6b61646f742e696f3a313032342f0a0a23204e6f74653a2064756520746f20736f6d65206973737565732077697468206f7572206e6f6465732067657474696e67206d697865642075702077697468206e6f6465732066726f6d2074686520636861696e58206e6574776f726b20287365652074656c656d65747279206c696e6b292c0a23206974206d696768742068656c7020796f757220757074696d6520627920616c736f2070617373696e673a0a2d2d696e2d706565727320313030202d2d6f75742d7065657273203130300a2320616674657220746865206f7468657220666c6167732e20596f752063616e2063686f6f736520616e79206e756d62657220796f75206c696b652c20627574207468652064656661756c742069732032352e0a60606000000100000000000000a4c7875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[157,"9d0000000000000011000000000000000b000000690c546869732074696d652c20746865206f75747075742073686f756c642073686f77206120736c696768746c7920646966666572656e742073746172747570206f75747075743a0a6060600a4a6f7973747265616d204e6f64650a202076657273696f6e202276657273696f6e222d22796f75725f4f53220a20206279204a6f7973747265616d2c20323031390a436861696e2073706563696669636174696f6e3a204a6f7973747265616d2053746167696e6720546573746e65740a4e6f6465206e616d653a20226e6f64656e616d65220a526f6c65733a20415554484f524954590a4265737420626c6f636b3a20232273796e6365645f686569676874220a4c6f63616c206e6f646520616464726573732069733a202f6970342f302e302e302e302f7463702f33303333332f7032702f22796f75725f6e6f64655f6b6579220a4c697374656e696e6720666f72206e657720636f6e6e656374696f6e73206f6e203132372e302e302e313a393934342e0a5573696e6720617574686f72697479206b657920202235596f75724a6f7953657373696f6e416464726573732220202320536565204e6f74650a2e2e2e0a6060600a2a2a4e6f74652a2a0a496620796f7572206073657373696f6e60207761732067656e65726174656420617320605363686e6f72726b656c20287372323535313929602c2069742077696c6c2073686f77206120636f6d706c6574656c7920646966666572656e7420616464726573732e20496620746869732068617070656e732c20676f206261636b20616e642067656e65726174652061206e6577205b73657373696f6e206b65795d282367656e65726174652d796f75722d6b6579732d3229207769746820604564776172647320286564323535313929602e20496620796f7520646f6e27742c20796f7572206e6f64652077696c6c2074727920746f207369676e20626c6f636b732077697468207468652077726f6e67206b65792e204173206120636f6e73657175656e63652c20796f752077696c6c2067657420736c617368656420616e64206b69636b6564206f7574206173206056616c696461746f72602e00000100000000000000e6c7875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[158,"9e0000000000000011000000000000000c0000002d01232323232046696e616c20537465700a0a4e6f7720697427732074696d6520746f20636f6e66696775726520796f7572206b65797320746f2073746172742076616c69646174696e672e2000000100000000000000f2c7875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[159,"9f0000000000000011000000000000000d000000cd0b2323232320436f6e66696775726520796f75722076616c696461746f72206b6579730a0a496e206f7264657220746f2062652061206056616c696461746f72602c20796f75206e65656420746f207374616b652e204e6f7465207468617420796f75206d6179206861766520746f207265667265736820796f75722062726f7773657220696620796f75277265206e6f7420736565696e6720746865206f7074696f6e7320726967687420617761792e0a0a2a2a494d504f5254414e543a2a2a205265616420737465702031332e206361726566756c6c792e20596f7572206e6f6465206e6565647320746f2062652066756c6c792073796e6365642c206265666f72652070726f63656564696e6720746f20737465702031342e0a0a312e205374696c6c20696e2074686520604d79204b657973602073696465626172206f6620746865205b50696f6e656572204170705d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f70696f6e656572292c2063686f6f736520796f75722060737461736860206b65792e0a322e20436c69636b2074686520604672656520546f6b656e7360206c696e6b2062656c6f7720796f757220616464726573732c205b6f7220636c69636b20686572655d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f666175636574292e20536f6c76652074686520636170746368612c20616e6420796f752073686f756c64207265636569766520746f6b656e732e0a332e2053656e6420736f6d6520746f6b656e7320746f20796f75722060636f6e74726f6c6c6572602e204974206e6565647320746f20706572666f726d206174206c656173742074776f207472616e73616374696f6e732c206275742062657474657220746f2073656e64207e31302e0a342e204e6f772c20636c69636b206056616c696461746f72736020696e2074686520736964656261722c20616e64207468656e20746865206056616c696461746f72205374616b696e6760207461622e0000010000000000000004c8875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[160,"a00000000000000011000000000000000e000000190c352e204c6f636174652074686520616464726573732f6b6579206e616d656420607374617368602c20616e6420636c69636b2060426f6e642046756e6473602e0a362e20496e2074686520706f7075702077696e646f772c2063686f6f736520796f75722060636f6e74726f6c6c657260206173207468652060636f6e74726f6c6c6572206163636f756e74602e0a372e20456e7465722074686520616d6f756e7420796f752077616e7420746f207374616b6520696e20746865206076616c756520626f6e64656460206669656c642e2028497420636f756c64206265207769736520746f206c65617665206120636f75706c65206f66204a6f79206c656674292e0a382e20496e2074686520607061796d656e742064657374696e6174696f6e602064726f70646f776e2c20746865726520617265207468726565206f7074696f6e732e2053656c656374207468652064656661756c7420605374617368206163636f756e742028696e6372656173652074686520616d6f756e74206174207374616b6529602c206f7220676f20746f205b616476616e6365645d2823626f6e64696e672d707265666572656e636573292e0a392e2054686520627574746f6e2060626f6e64602073686f756c6420626520686967686c696768746564206e6f772e20436c69636b2069742e0a31302e205479706520696e20796f75722070617373776f726420696e207468652060756e6c6f636b20776974682070617373776f726460206669656c6420616e6420636c69636b20607369676e20616e64207375626d6974602e0a31312e20596f75722060636f6e74726f6c6c657260206163636f756e742073686f756c64206e6f772073686f77206120605365742053657373696f6e204b65796020627574746f6e2e20436c69636b2069742e0a31322e20496e2074686520706f7075702c2073656c65637420796f7572206073657373696f6e6020617320796f7572206073657373696f6e206b65796020696e207468652064726f70646f776e2e20436f6e6669726d2c207369676e20616e64207375626d69742e0000010000000000000010c8875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[161,"a10000000000000011000000000000000f000000c10d31332e20596f75206e65656420746f20636865636b20796f7572206e6f64652c20776869636820796f752073746172746564206561726c6965722e20496e20746865206f757470757420607461726765743d2322626c6f636b5f68656967687422602073686f756c6420657175616c2060626573743a20232273796e6365645f68656967687422602e20446f206e6f742070726f63656564206265666f72652074686f73652074776f2076616c75657320617265206964656e746963616c2c20617320796f7572206e6f64652077696c6c2062652064726f70706564206f75742066726f6d207468652076616c696461746f727320696620796f7572206e6f6465206973206e6f742066756c6c792073796e6365642e20496620796f752064696420737461727420796f7572206e6f6465207769746820602d2d6e616d65203c6e6f64656e616d653e6020706172616d657465722c207468656e20796f7520616c736f2063616e20636865636b20696620796f7572206e6f64652069732066756c6c792073796e6365642066726f6d205b54656c656d657472795d2868747470733a2f2f74656c656d657472792e706f6c6b61646f742e696f2f236c6973742f4a6f7973747265616d253230546573746e65742532307632292e0a31342e20596f75722060636f6e74726f6c6c657260206163636f756e742073686f756c64206e6f772073686f772061206056616c69646174656020627574746f6e2e20436c69636b2069742e0a31352e20596f752063616e206c65617665207468652060756e7374616b65207468726573686f6c646020616e6420607061796d656e7420707265666572656e636573602061732064656661756c74732c206f7220676f20746f205b616476616e6365645d282376616c69646174696e672d707265666572656e636573292e20436f6e6669726d2c207369676e20616e64207375626d69742e0a0a5265667265736820796f75722062726f777365722c20616e642073656c65637420746865206056616c696461746f72204f7665727669657760207461622e20496620796f7572206163636f756e742073686f777320756e64657220606e657874207570602c207761697420666f7220746865206e6578742060657261602c20616e6420796f752077696c6c206265206d6f76656420746f20746865206076616c696461746f727360206c6973742e000001000000000000001cc8875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[162,"a200000000000000130000000000000002000000a90a2323232323204578616d706c6520776974682075736572206a6f7973747265616d0a0a546865206578616d706c652062656c6f7720617373756d65732074686520666f6c6c6f77696e673a0a2d20596f752077616e7420746f207265737461727420796f7572206e6f64652065766572792032346820286038363430306073290a2d20596f7520686176652073657475702061207573657220606a6f7973747265616d6020746f2072756e20746865206e6f64650a2d20546865207061746820746f2074686520606a6f7973747265616d2d6e6f6465602062696e61727920697320602f686f6d652f6a6f7973747265616d2f6a6f7973747265616d2d6e6f6465600a0a6060600a5b556e69745d0a4465736372697074696f6e3d4a6f7973747265616d204e6f64650a41667465723d6e6574776f726b2e7461726765740a0a5b536572766963655d0a547970653d73696d706c650a557365723d6a6f7973747265616d0a576f726b696e674469726563746f72793d2f686f6d652f6a6f7973747265616d2f0a4578656353746172743d2f686f6d652f6a6f7973747265616d2f6a6f7973747265616d2d6e6f6465205c0a20202020202020202d2d6f75742d706565727320313030205c0a20202020202020202d2d696e2d706565727320313030205c0a20202020202020202d2d76616c696461746f72205c0a20202020202020202d2d6b6579203c3078596f75724c6f6e6753657373696f6e526177536565643e205c0a20202020202020202d2d6e616d65203c6e6f64656e616d653e0a526573746172743d616c776179730a52756e74696d654d61785365633d38363430300a526573746172745365633d330a4c696d69744e4f46494c453d383139320a0a5b496e7374616c6c5d0a57616e74656442793d6d756c74692d757365722e7461726765740a60606000000100000000000000e8c8875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[163,"a3000000000000001300000000000000030000002102496620796f75206a7573742077616e7420746f206861766520746865206e6f6465207265737461727420696620697420637261736865732c207265706c6163653a0a0a6060600a526573746172743d616c776179730a52756e74696d654d61785365633d38363430300a2320776974680a526573746172743d6f6e2d6661696c7572650a6060600a00000100000000000000f4c8875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[164,"a400000000000000130000000000000004000000d9092323232323204578616d706c6520617320726f6f740a0a546865206578616d706c652062656c6f7720617373756d65732074686520666f6c6c6f77696e673a0a2d20596f752077616e7420746f207265737461727420796f7572206e6f64652065766572792032346820286038363430306073290a2d20596f752068617665207365747570206120757365722060726f6f746020746f2072756e20746865206e6f64650a2d20546865207061746820746f2074686520606a6f7973747265616d2d6e6f6465602062696e61727920697320602f726f6f742f6a6f7973747265616d2d6e6f6465600a0a6060600a5b556e69745d0a4465736372697074696f6e3d4a6f7973747265616d204e6f64650a41667465723d6e6574776f726b2e7461726765740a0a5b536572766963655d0a547970653d73696d706c650a557365723d726f6f740a576f726b696e674469726563746f72793d2f726f6f742f0a4578656353746172743d2f726f6f742f6a6f7973747265616d2d6e6f6465205c0a20202020202020202d2d6f75742d706565727320313030205c0a20202020202020202d2d696e2d706565727320313030205c0a20202020202020202d2d76616c696461746f72205c0a20202020202020202d2d6b6579203c3078596f75724c6f6e6753657373696f6e526177536565643e205c0a20202020202020202d2d6e616d65203c6e6f64656e616d653e0a526573746172743d616c776179730a52756e74696d654d61785365633d38363430300a526573746172745365633d330a4c696d69744e4f46494c453d383139320a0a5b496e7374616c6c5d0a57616e74656442793d6d756c74692d757365722e7461726765740a6060600000010000000000000000c9875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[165,"a5000000000000001300000000000000050000001d02496620796f75206a7573742077616e7420746f206861766520746865206e6f6465207265737461727420696620697420637261736865732c207265706c6163653a0a0a6060600a526573746172743d616c776179730a52756e74696d654d61785365633d38363430300a2320776974680a526573746172743d6f6e2d6661696c7572650a6060600000010000000000000006c9875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[166,"a6000000000000001300000000000000060000000d0d23232323205374617274696e672074686520736572766963650a0a596f752063616e206164642f72656d6f766520616e792060666c61677360206173206c6f6e6720617320796f752072656d656d62657220746f20696e636c75646520605c6020666f72206576657279206c696e652062757420746865206c6173742e20416c736f206e6f746520746861742073797374656d6420697320766572792073656e73697469766520746f2073796e7461782c20736f206d616b65207375726520746865726520617265206e6f20657874726120737061636573206265666f7265206f722061667465722074686520605c602e0a0a416674657220796f7520617265206861707079207769746820796f757220636f6e66696775726174696f6e3a0a0a6060600a242073797374656d63746c206461656d6f6e2d72656c6f61640a232074686973206973206f6e6c79207374726963746c79206e656365737361727920616674657220796f75206368616e67656420746865202e736572766963652066696c652061667465722072756e6e696e672c20627574206368616e6365732061726520796f752077696c6c206e65656420746f20757365206974206f6e6365206f722074776963652e0a2320696620796f7572206e6f6465206973207374696c6c2072756e6e696e672c206e6f77206973207468652074696d6520746f206b696c6c2069742e0a242073797374656d63746c207374617274206a6f7973747265616d2d6e6f64650a232069662065766572797468696e6720697320636f72726563746c7920636f6e666967757265642c207468697320636f6d6d616e642077696c6c206e6f742072657475726e20616e797468696e672e0a2320546f2076657269667920697427732072756e6e696e673a0a242073797374656d63746c20737461747573206a6f7973747265616d2d6e6f64650a2320746869732077696c6c206f6e6c792073686f7720746865206c61737420666577206c696e65732e20546f2073656520746865206c61746573742031303020656e74726965732028616e6420666f6c6c6f77206173206e657720617265206164646564290a24206a6f75726e616c63746c202d6e20313030202d66202d75206a6f7973747265616d2d6e6f64650000010000000000000024c9875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[167,"a700000000000000130000000000000007000000b5056060600a2320546f206d616b65207468652073657276696365207374617274206175746f6d61746963616c6c7920617420626f6f743a0a242073797374656d63746c20656e61626c65206a6f7973747265616d2d6e6f64650a6060600a596f752063616e207265737461727420746865207365727669636520776974683a0a2d206073797374656d63746c2072657374617274206a6f7973747265616d2d6e6f6465600a0a496620796f752077616e7420746f206368616e676520736f6d657468696e6720286f72206a7573742073746f70292c2072756e3a0a2d206073797374656d63746c2073746f70206a6f7973747265616d2d6e6f6465600a0a4265666f726520796f75206d616b6520746865206368616e6765732e204166746572206368616e67696e673a0a0a6060600a242073797374656d63746c206461656d6f6e2d72656c6f61640a242073797374656d63746c207374617274206a6f7973747265616d2d6e6f64650a6060600000010000000000000030c9875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[168,"a800000000000000130000000000000008000000b50623232323204572726f72730a0a496620796f75206d616b652061206d697374616b6520736f6d6577686572652c206073797374656d63746c207374617274206a6f7973747265616d2d6e6f6465602077696c6c2070726f6d70743a0a6060600a4661696c656420746f207374617274206a6f7973747265616d2d6e6f64652e736572766963653a20556e6974206a6f7973747265616d2d6e6f64652e73657276696365206973206e6f74206c6f616465642070726f7065726c793a20496e76616c696420617267756d656e742e0a5365652073797374656d206c6f677320616e64202773797374656d63746c20737461747573206a6f7973747265616d2d6e6f64652e736572766963652720666f722064657461696c732e0a6060600a466f6c6c6f772074686520696e737472756374696f6e732c20616e642073656520696620616e797468696e67206c6f6f6b732077726f6e672e20436f72726563742069742c207468656e3a0a0a6060600a242073797374656d63746c206461656d6f6e2d72656c6f61640a242073797374656d63746c207374617274206a6f7973747265616d2d6e6f64650a6060600a0000010000000000000078c9875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[169,"a900000000000000130000000000000009000000b10c23232053657474696e67730a0a496620796f7520646f6e27742077616e7420746f20757365207468652064656661756c742073657474696e67732c20686572652061726520736f6d65206f6620746865206f7074696f6e7320796f752063616e20636f6e6669677572652e0a0a2323232320426f6e64696e6720707265666572656e6365730a54686520626f6e64696e6720707265666572656e6365732064656369646573206f6e20686f7720776865726520796f757220284a6f7929207374616b696e672072657761726473206172652064697374726962757465642e2054686572652061726520746872656520616c7465726e6174697665733a0a312e20605374617368206163636f756e742028696e6372656173652074686520616d6f756e74206174207374616b652960202864656661756c74292e0a0a54686973206175746f6d61746963616c6c792073656e647320616c6c207265776172647320746865206073746173686020616464726573732c207768657265206974206765747320626f6e64656420617320616e206164646974696f6e616c207374616b652e20546869732077696c6c20696e63726561736520796f75722070726f626162696c697479206f662073746179696e6720696e20746865206076616c696461746f7260207365742e0a0a322e20605374617368206163636f756e742028646f206e6f20696e6372656173652074686520616d6f756e74206174207374616b6529600a0a4173206c696b652060312e602074686973206175746f6d61746963616c6c792073656e647320616c6c207265776172647320746865206073746173686020616464726573732c2062757420646f6573202a6e6f742a2067657420626f6e646564206173207374616b652c206d65616e696e6720796f752069742077696c6c206e6f742068656c70202267756172642220796f75722073706f7420696e20746865206076616c696461746f7260207365742e0a0a332e2060436f6e74726f6c6c6572206163636f756e74600a0a546869732073656e647320616c6c207265776172647320746f207468652060636f6e74726f6c6c6572602c20617420796f757220646973706f73616c2e0000010000000000000090c9875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[170,"aa0000000000000013000000000000000a000000410a232323232056616c69646174696e6720707265666572656e6365730a312e205468652060756e7374616b65207468726573686f6c646020697320746865206e756d626572206f662074696d657320796f752063616e2067657420736c61736865642028666f72206265696e67206f66666c696e6529206265666f726520796f75277265206175746f6d61746963616c6c79205b756e7374616b65645d2823756e7374616b696e67292e2041206c6f77206e756d6265722063616e206d65616e20796f752073746f70206265696e67206076616c696461746f7260206a757374206265636175736520796f757220696e7465726e657420697320646f776e2061206d696e7574652c2062757420696620796f752073657420746865206e756d62657220746f6f20686967682c20796f752077696c6c2067657420736c61736865642068656176696c7920696620796f7572206e6f646520627265616b7320646f776e206f7220796f75206c6f73652074686520696e7465726e657420666f7220616e20686f75722e0a0a322e2054686520607061796d656e7420707265666572656e6365736020697320686f772074686520286a6f7929207374616b696e672072657761726473206172652073706c6974206265747765656e20796f757273656c6620616e6420616e7920706f74656e7469616c205b6e6f6d696e61746f72735d28236e6f6d696e6174696e67292e205468652064656661756c7420283029206d65616e73207468617420746865207265776172642069732073706c6974206261736564206f6e2074686520616d6f756e74206f6620626f6e646564207374616b6520746865206076616c696461746f726020616e6420606e6f6d696e61746f7273602068617665207075742075702e2000000100000000000000aec9875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[171,"ab0000000000000013000000000000000b00000075064578616d706c653a0a0a4c657420607660205b4a6f795d2062652074686520626f6e64656420746f6b656e7320666f72207468652076616c696461746f7220607374617368600a4c657420607060205b4a6f795d2062652074686520607061796d656e7420707265666572656e6365602064656369646564206279207468652076616c696461746f720a4c657420606e3160205b4a6f795d20626520746865c2a0626f6e64656420746f6b656e7320666f7220746865206e6f6d696e61746f723120607374617368600a4c657420606e3260205b4a6f795d20626520746865c2a0626f6e64656420746f6b656e7320666f7220746865206e6f6d696e61746f723220607374617368600a4c657420607260205b4a6f795d206265207468652072657761726420746861742060657261600a0a6060600a23207061796f757420666f72207468652076616c696461746f720a70202b2028762f28762b6e312b6e32292a28722d7029290a23207061796f757420666f7220746865206e6f6d696e61746f72310a286e312f28762b6e312b6e32292a28722d7029290a60606000000100000000000000bac9875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[172,"ac0000000000000013000000000000000c0000006d092323204e6f6d696e6174696e670a0a496620796f752077616e7420746f2067657420736f6d652072657475726e206f6e20796f757220746f6b656e7320776974686f75742072756e6e696e672061206e6f646520796f757273656c662c20796f752063616e20606e6f6d696e6174656020616e6f74686572206076616c696461746f726020616e64206765742061207368617265206f6620746865697220726577617264732e0a0a54686973206d6967687420616c736f20636f6d6520696e2068616e64792069662074686572652061726520746f6f206d616e79206076616c696461746f72736020616e6420796f7520646f6e2774206861766520656e6f75676820746f6b656e732067657420612073706f742c206f7220696620796f75206861766520746f207368757420646f776e20796f7572206f776e206e6f646520666f722061207768696c652e0a0a232323232047656e6572617465206b6579730a496620796f7520686176656e277420616c7265616479206265656e207468726f756768207468652070726f63657373206f662073657474696e6720757020796f757220607374617368602c2060636f6e74726f6c6c65726020616e64206073657373696f6e60206b65792c20796f75206669727374206e65656420746f2067656e657261746520796f7572206b65797320287365652076616c696461746f72207365747570292e204e6f7465207468617420796f7520646f6e2774206e6565642061206073657373696f6e60206b657920746f206e6f6d696e6174652c20736f20796f752063616e20736b69702074686f73652073746570732e00000100000000000000d2c9875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[173,"ad0000000000000013000000000000000d0000006d0b2323232320436f6e66696775726520796f7572206e6f6d696e6174696e67206b6579730a496e206f7264657220746f206265206120606e6f6d696e61746f72602c20796f75206e656564207374616b652e204e6f7465207468617420796f75206d6179206861766520746f207265667265736820796f75722062726f7773657220696620796f75277265206e6f7420736565696e6720746865206f7074696f6e7320726967687420617761792e20496620796f7520686176652070726576696f75736c79206265656e2061206056616c696461746f72602c206f7220747269656420746f20646f20736f2c20736b697020616865616420746f20737465702060392e602e0a0a312e20496e2074686520604d79204b6579736020736964656261722c2063686f6f736520796f75722060737461736860206b65792e0a322e20436c69636b2074686520604672656520546f6b656e7360206c696e6b2062656c6f7720796f757220616464726573732c205b6f7220636c69636b20686572655d2868747470733a2f2f746573746e65742e6a6f7973747265616d2e6f72672f666175636574292e20536f6c76652074686520636170746368612c20616e6420796f752073686f756c64207265636569766520746f6b656e732e0a332e2053656e6420736f6d6520746f6b656e7320746f20796f75722060636f6e74726f6c6c6572602e204974206e6565647320746f20706572666f726d206174206c656173742074776f207472616e73616374696f6e732c206275742062657474657220746f2073656e64207e31302e0a342e204e6f772c20636c69636b206056616c696461746f72736020696e2074686520736964656261722c20616e64207468656e20746865206056616c696461746f72205374616b696e6760207461622e0a352e204c6f636174652074686520616464726573732f6b6579206e616d656420607374617368602c20616e6420636c69636b2060426f6e642046756e6473602e00000100000000000000f0c9875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[174,"ae0000000000000013000000000000000e000000e909362e20496e2074686520706f7075702077696e646f772c2063686f6f736520796f75722060636f6e74726f6c6c657260206173207468652060636f6e74726f6c6c6572206163636f756e74602e0a372e20456e7465722074686520616d6f756e7420796f752077616e7420746f207374616b6520696e20746865206076616c756520626f6e64656460206669656c642e0a382e20496e2074686520607061796d656e742064657374696e6174696f6e602064726f70646f776e2c20746865726520617265207468726565206f7074696f6e732e2053656c656374207468652064656661756c7420605374617368206163636f756e742028696e6372656173652074686520616d6f756e74206174207374616b6529602c206f7220676f20746f205b616476616e6365645d2823626f6e64696e672d707265666572656e636573292e0a392e20596f75722060636f6e74726f6c6c657260206163636f756e742073686f756c64206e6f772073686f77206120605365742053657373696f6e204b65796020616e64206120604e6f6d696e6174696e676020627574746f6e2e20436c69636b20746865206c61747465722e0a31302e20496e2074686520706f7075702c2073656c6563742f70617374652074686520607374617368602061646472657373206f6620746865206056616c696461746f726020796f75207769736820746f206e6f6d696e6174652e20436f6e6669726d2c207369676e20616e64207375626d69742e0a0a496e20746865206e6578742060657261602c20796f752077696c6c2073686f77206173206120606e6f6d696e61746f7260206f6620746865206056616c696461746f726020796f75206e6f6d696e617465642e00000100000000000000fcc9875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[175,"af00000000000000140000000000000002000000e10e232323232053657373696f6e206b65790a0a44696420796f75206163636964656e74616c6c792063686f6f736520605363686e6f72726b656c20287372323535313929602c20696e7374656164206f66206045647761726473202865643235353139296020666f7220796f7572206073657373696f6e60206b65792c20616e64206469646e2774206e6f74696365206265666f726520796f7520636f6e6669677572656420796f7572206056616c696461746f72206b657973603f20546869732063616e206265207265736f6c7665642e0a0a312e20476f20746f206056616c696461746f727360202d3e206056616c696461746f72205374616b696e676020616e642060556e7374616b65602e0a0a322e2047656e65726174652061206e6577206073657373696f6e60206b6579207769746820604564776172647320286564323535313929602c207265737461727420796f7572206e6f64652c20616e64207265706c616365207468652060726177207365656460207769746820746865206e6577206f6e652e0a0a332e205468656e2c2063686f6f7365206053657474696e67736020696e2074686520736964656261722c20616e64207377697463682066726f6d20604261736963206665617475726573206f6e6c796020746f206046756c6c79206665617475726564602e0a0a342e20476f20746f206045787472696e73696373602c20616e642073656c65637420796f75722060636f6e74726f6c6c657260206b65792066726f6d207468652064726f70646f776e2061742074686520746f702e20496e20746865207365636f6e642064726f70646f776e2c2073656c656374206073657373696f6e602c20616e6420696e207468652074686972642c20607365744b6579602e2046696e616c6c792c2063686f6f736520796f7572206e6577206073657373696f6e60206b657920696e2074686520666f7572746820616e642066696e616c2064726f70646f776e2c20616e64207375626d69742e0a0a352e204f6e636520697420636f6e6669726d732c20676f206261636b20746f206056616c696461746f727360202d3e206056616c696461746f72205374616b696e676020616e6420605374616b65602e0a0a496e2074686520604e657874207570602c20796f7572206e6577206073657373696f6e60206b65792073686f756c642073686f772c20616e64206d61746368207468652060617574686f72697479206b65796020696e20796f7572206e6f64652e20286d696e7573207468652066696e616c20332063686172616374657273292e0a0000010000000000000086ca875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[176,"b000000000000000140000000000000003000000850b2323232320556e7374616b696e670a0a496620796f752073746f702076616c69646174696e67206279206b696c6c696e6720796f7572206e6f6465206265666f726520756e7374616b696e672c20796f752077696c6c2067657420736c617368656420616e64206b69636b65642066726f6d20746865206076616c696461746f7260207365742e20496620796f75206b6e6f7720696e20616476616e636520287e3168722920796f752063616e20646f2074686520666f6c6c6f77696e6720737465707320696e73746561643a0a0a46697273742c206d616b65207375726520796f75206861766520736574206046756c6c792046656174757265646020696e7465726661636520696e20746865206053657474696e67736020736964656261722e0a0a312e20496e206056616c696461746f72205374616b696e67602c20636c69636b206053746f702056616c69646174696e6760207769746820796f757220636f6e74726f6c6c65722e20546869732063616e20616c736f20626520646f6e6520766961206045787472696e736963603a20576974682060636f6e74726f6c6c657260202d3e20607374616b696e6760202d3e20606368696c6c2829602e0a0a496620796f7520617265206a7573742070617573696e6720746865206076616c696461746f726020616e6420696e74656e6420746f207374617274206974207570206c617465722c20796f752063616e2073746f7020686572652e205768656e20796f752061726520726561647920746f20737461727420616761696e2c206669726520757020796f7572206e6f64652c20676f20746f206056616c696461746f72205374616b696e67602c20616e6420636c69636b206056616c6964617465602e0a0a496620796f752077616e7420746f2073746f70206265696e672061206076616c696461746f726020616e64206d6f766520796f757220746f6b656e7320746f206f746865722f626574746572207573652c20636f6e74696e75652e000001000000000000009eca875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[177,"b10000000000000014000000000000000400000011040a322e204e65787420796f75206d75737420756e626f6e642e20496e206045787472696e73696373602c207573696e67207468652060636f6e74726f6c6c6572602c2073656c65637420607374616b696e6760202d3e2060756e626f6e642876616c7565296020616e642063686f6f736520686f77206d75636820796f752077616e7420746f20756e626f6e642c20603c756e626f6e64696e673e602e205375626d6974205472616e73616374696f6e2e0a0a4174207468697320706f696e742c20796f752063616e206a7573742077616974203268727320746f20626520737572652c20616e642070726f6365656420746f20737465702060362e60200a0a4f723a0a00000100000000000000bcca875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[178,"b200000000000000140000000000000005000000550e332e20476f20746f2060436861696e20537461746560202d3e20607374616b696e6760202d3e20606c6564676572284163636f756e744964293a204f7074696f6e3c5374616b696e674c65646765723e602077697468207468652060636f6e74726f6c6c6572602e204f75747075743a0a6060600a2320496620796f752068617665207375636365737366756c6c7920696e6974696174656420756e7374616b696e673a0a7b227374617368223a2235596f7572537461736841646472657373222c22746f74616c223a3c746f745f626f6e6465643e2c22616374697665223a2c3c6163745f626f6e6465643e3a5b7b2276616c7565223a3c756e626f6e64696e673e2c22657261223a3c455f756e626f6e6465643e7d5d7d0a2320496620796f752068617665206e6f74207375636365737366756c6c7920696e6974696174656420756e7374616b696e672c206f722069742068617320616c726561647920636f6d706c657465643a0a7b227374617368223a2235596f7572537461736841646472657373222c22746f74616c223a3c746f745f626f6e6465643e2c22616374697665223a2c223c6163745f626f6e6465643e223a5b5d7d0a6060600a2a20603c746f745f626f6e6465643e602049732074686520746f74616c20616d6f756e7420796f752068617665207374616b65642f626f6e6465640a2a20603c6163745f626f6e6465643e602049732074686520616d6f756e74206f6620746f6b656e732074686174206973206e6f74206265696e6720756e6c6f636b65640a2a20603c756e626f6e64696e673e602049732074686520616d6f756e74206f6620746f6b656e73207468617420697320696e207468652070726f63657373206f66206265696e672066726565640a20202a20603c756e626f6e64696e673e60202b20603c6163745f626f6e6465643e60203d20603c746f745f626f6e6465643e600a2a20603c455f756e626f6e6465643e6020497320746865206065726160207768656e20796f757220746f6b656e732077696c6c2062652022667265652220746f207472616e736665722f626f6e642f766f74650a0a5468652060657261602073686f756c64206f6e6c79206368616e67652065766572792036303020626c6f636b732c20627574206365727461696e206576656e7473206d617920747269676765722061206e6577206572612e20546f2063616c63756c617465207768656e20796f75722066756e6473206172652022667265652200000100000000000000e6ca875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[179,"b300000000000000140000000000000006000000fd09342e20496e2060436861696e20537461746560202d3e20607374616b696e6760202d3e206063757272656e744572612829602e204c6574206f757470757420626520603c455f63757272656e743e600a352e20496e20604578706c6f7265646020636f6c6c65637420603c626c6f636b735f696e5f6572613e2f3630306020756e646572206572612e0a6060600a363030283c455f756e626f6e6465643e202d203c455f63757272656e743e202d203129202d203c626c6f636b735f696e5f6572613e203d203c626c6f636b735f6c6566743e0a283c626c6f636b735f6c6566743e202a2036292f3630203d203c6d696e757465735f6c6566743e0a6060600a416674657220603c6d696e757465735f6c6566743e6020686173207061737365642c2069652e20603c455f63757272656e743e60203d20603c455f756e626f6e6465643e602c20796f757220746f6b656e732073686f756c6420626520667265652e0a52657065617420737465702060332e6020696620796f752077616e7420746f20636f6e6669726d2e0a6060600a2320496620796f75206861766520636f6d706c6574656420756e7374616b696e673a0a7b227374617368223a2235596f7572537461736841646472657373222c22746f74616c223a3c746f745f626f6e6465643e2c22616374697665223a2c223c6163745f626f6e6465643e223a5b5d7d0a6060600a0a0a362e20496e206045787472696e73696373602c207573696e67207468652060636f6e74726f6c6c6572602c2073656c65637420607374616b696e6760202d3e20607769746864726177556e626f6e6465642829600a0a596f757220746f6b656e732073686f756c64206e6f77206265202266726565222e0000010000000000000010cb875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[180,"b400000000000000140000000000000007000000ad062323232320526573746172742076616c69646174696e672061667465722067657474696e6720626f6f7465640a496620796f7572206e6f6465207368757420646f776e206265666f726520796f75206861642073746f707065642076616c69646174696e6720616e642f6f722074686520677261636520706572696f6420666f7220607374616b696e672e6368696c6c602077617320636f6d706c657465642c20616c6c20796f75206e65656420746f206973207374617274206076616c69646174696e676020616761696e2066726f6d206056616c696461746f72205374616b696e67602e204a757374206d616b652073757265207468617420796f7572206e6f6465206973206261636b2075702c20616e64207468652060617574686f7269747960206b65792073686f77696e67206174206e6f64652073746172747570206973207468652073616d6520617320796f7572206073657373696f6e60206b65792e0a2a2a4e6f74652a2a0a497420646f65736e2774206d617474657220696620796f75722060737461736860206861732061206062616c616e636560203c2060626f6e646564602e0a0000010000000000000022cb875d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[181,"b5000000000000001c00000000000000010000009c4a6f7973747265616d20666f72756d20697320617765736f6d652c206c6574277320706f73742e00000100000000000000869af95d0000000083f56c776eb3cfba9c7c82f73cbcabd9c203e15cb8e11bde2857a1ae84691b47"],[182,"b6000000000000001d00000000000000010000009c446f206c6574207573206b6e6f7720686f7720746f2062652061206469737472696275746f722e000001000000000000003079fb5d0000000015960c38e07613475b5cbaa2849cb65a5a9a11ea034860a4e7519d611f62b00f"],[183,"b7000000000000001e00000000000000010000002901596573204920616d2061637475616c6c7920616e2061727469737420616e64207468697320697320746865206265737420492063616e20646f207769746820637265617469766974792e00000100000000000000ec33275e00000000b4c62287a60c28c7da4f09db40396e9b02b8bbad7aac6bf574766fe33577185d"],[184,"b8000000000000001e00000000000000020000006074657374207265706c792028736e65616b79206564697429000001000000000000003236275e00000000b4c62287a60c28c7da4f09db40396e9b02b8bbad7aac6bf574766fe33577185d"],[185,"b9000000000000001e00000000000000030000002c666f6f206261722062617a000001000000000000003446275e00000000b4c62287a60c28c7da4f09db40396e9b02b8bbad7aac6bf574766fe33577185d"],[186,"ba000000000000001f00000000000000010000002c6265746120746872656164000001000000000000005657275e00000000b4c62287a60c28c7da4f09db40396e9b02b8bbad7aac6bf574766fe33577185d"],[187,"bb000000000000001f00000000000000020000002874657374207265706c7900000100000000000000c257275e00000000b4c62287a60c28c7da4f09db40396e9b02b8bbad7aac6bf574766fe33577185d"]],"threads":[[1,"01000000000000003c436f6465206f6620436f6e647563740100000000000000010000000001000000000000000100000000000000082c115d0000000042be11a654ef34dbbfba9aa252ed093ef0890e874091b66e4193913ee2913953"],[2,"02000000000000001101546869732069732074686520666972737420706f7374206576657220666f7220746865204a6f7973747265616d205368697420506f7374696e6720436f6d6d756e6974790300000000000000010000000006000000000000000100000000000000de2e115d0000000007cd1fb09a58aff8bf48eba12fc659d37822a74b81270b85a1fb5baf3aa591cf"],[3,"030000000000000070486f7720746f20537461727420412053746f72616765204e6f64653f0100000000000000020000000001000000000000000100000000000000202f115d0000000007cd1fb09a58aff8bf48eba12fc659d37822a74b81270b85a1fb5baf3aa591cf"],[4,"04000000000000003c436f6e74656e742043757261746f720200000000000000010000000002000000000000000100000000000000c41a125d00000000b032b7392bd29cd9389d56891d38495ea2b1bafa9793ae3d26a2477669b8eb6e"],[5,"05000000000000004043727970746f63757272656e6369657303000000000000000200000000020000000000000001000000000000003cba125d00000000e042ed3c9093904acaf6f10dd118215ce3366e32c03047937d5cf04d70d51908"],[6,"06000000000000006c496e74726f64756374696f6e3a2042656465686f204d656e64657201000000000000000300000000020000000000000001000000000000004460135d00000000b65ba19cbb7786445ab30af15a1c3636f11a3227b8102d0389ee5d4ade93159f"],[7,"0700000000000000505374616b656420506f6463617374202d204570360300000000000000030000000003000000000000000100000000000000a0d1155d000000007cbd2c992945e5fc83d937a180e402ff32699718c1fc753f7a0214492e3ff035"],[8,"080000000000000078496d70726f76696e6720466f72756d2046756e6374696f6e616c6974793f01000000000000000400000000070000000000000001000000000000006aaf1c5d00000000b65ba19cbb7786445ab30af15a1c3636f11a3227b8102d0389ee5d4ade93159f"],[9,"0900000000000000804469737472696275746f72202842616e6477696474682050726f76696465722902000000000000000200000001010000000000000094052a5d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad744d65616e7420746f20626520612073756263617465676f72792e2e2e2e01000000000000000100000000000000e8022a5d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[10,"0a000000000000008c4a6f7973747265616d20556e6f6666696369616c205475746f7269616c20566964656f0100000000000000050000000003000000000000000100000000000000d8122a5d00000000e042ed3c9093904acaf6f10dd118215ce3366e32c03047937d5cf04d70d51908"],[11,"0b000000000000006041626f7574204a6f7973747265616d20426f756e746965730a0000000000000001000000000f000000000000000100000000000000aab7825d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[12,"0c000000000000000501426f756e7479202330202d204669782062726f6b656e206c696e6b732c20666f726d617474696e672c2065746320696e20524541444d4573202d2024322f6669780a00000000000000020000000005000000000000000100000000000000c2b7825d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[13,"0d00000000000000f4426f756e7479202331202d20496d70726f7665206e6574776f726b696e67202b2070726f6d6f74696f6e616c2063616d706169676e202d20243530302a0a00000000000000030000000009000000000000000100000000000000e6b7825d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[14,"0e00000000000000f8426f756e7479202332202d204c697374206f66206d656469612066696c652074797065732f657874656e73696f6e7320706c617961626c65202d202435300a00000000000000040000000002000000000000000100000000000000feb7825d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[15,"0f000000000000000d01426f756e7479202333202d20436f6d70696c65206c697374206f662066726565206d6564696120616e64206d6574616461746120736f7572636573202d20243230302a0a0000000000000005000000000600000000000000010000000000000028b8825d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[16,"100000000000000078536574757020596f75722056616c696461746f72202857696e646f777329040000000000000001000000000f0000000000000001000000000000008e81835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[17,"110000000000000070536574757020596f75722056616c696461746f7220284c696e757829040000000000000002000000000f000000000000000100000000000000ac81835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[18,"120000000000000068536574757020596f75722056616c696461746f7220284d616329040000000000000003000000000e000000000000000100000000000000ca81835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[19,"1300000000000000c8416476616e636564202852756e20417320536572766963652c2053657474696e677320616e64204e6f6d696e6174696e6729040000000000000004000000000e0000000000000001000000000000005482835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[20,"14000000000000003c54726f75626c6573686f6f74696e6704000000000000000500000000070000000000000001000000000000007882835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[21,"15000000000000006c536574757020596f75722053746f726167652050726f766964657205000000000000000100000000190000000000000001000000000000008083835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[22,"16000000000000003c54726f75626c6573686f6f74696e6705000000000000000200000000090000000000000001000000000000009883835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[23,"1700000000000000685265676973746572696e6720466f72204d656d626572736869700600000000000000010000000003000000000000000100000000000000ca84835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[24,"18000000000000007c4765742053746172746564204173204120436f756e63696c204d656d6265720600000000000000020000000008000000000000000100000000000000e284835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[25,"19000000000000003c54726f75626c6573686f6f74696e670600000000000000030000000001000000000000000100000000000000f484835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[26,"1a0000000000000034427567205265706f72746572730b000000000000000100000000030000000000000001000000000000003085835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[27,"1b000000000000005c4275696c646572732028436f6e7472696275746f7273290b000000000000000200000000010000000000000001000000000000008485835d000000001b2c38944daf5aee2662fe355694b55330aaa6ff3bfbfba3caebd07a2ab545ad"],[28,"1c00000000000000684a6f7973747265616d20666f72756d20697320617765736f6d650100000000000000060000000001000000000000000100000000000000869af95d0000000083f56c776eb3cfba9c7c82f73cbcabd9c203e15cb8e11bde2857a1ae84691b47"],[29,"1d0000000000000068486f772063616e207765206265206469737472696275746f723f09000000000000000100000000010000000000000001000000000000003079fb5d0000000015960c38e07613475b5cbaa2849cb65a5a9a11ea034860a4e7519d611f62b00f"],[30,"1e000000000000002c54657374207468726561640100000000000000070000000003000000000000000100000000000000ec33275e00000000b4c62287a60c28c7da4f09db40396e9b02b8bbad7aac6bf574766fe33577185d"],[31,"1f00000000000000405465737420746872656164206265746101000000000000000800000000020000000000000001000000000000005657275e00000000b4c62287a60c28c7da4f09db40396e9b02b8bbad7aac6bf574766fe33577185d"]]} diff --git a/node/res/forum_data_acropolis_serialized.json b/node/res/forum_data_acropolis_serialized.json deleted file mode 100644 index cd8e446d18..0000000000 --- a/node/res/forum_data_acropolis_serialized.json +++ /dev/null @@ -1 +0,0 @@ -{"categories":[[1,{"id":1,"title":[71,101,110,101,114,97,108,32,68,105,115,99,117,115,115,105,111,110],"description":[72,101,114,101,32,121,111,117,32,99,97,110,32,100,105,115,99,117,115,115,32,97,110,121,116,104,105,110,103,32,121,111,117,32,119,97,110,116,33,10,40,106,117,115,116,32,107,101,101,112,32,116,104,105,110,103,115,32,99,105,118,105,108,41],"created_at":{"block":1,"time":1561400376},"deleted":false,"archived":false,"num_direct_subcategories":0,"num_direct_unmoderated_threads":8,"num_direct_moderated_threads":0,"position_in_parent_category":null,"moderator_id":"5CJzTaCp5fuqG7NdJQ6oUCwdmFHKichew8w4RZ3zFHM8qSe6"}],[2,{"id":2,"title":[74,111,121,115,116,114,101,97,109,32,82,111,108,101,115],"description":[85,115,101,32,116,104,105,115,32,99,97,116,101,103,111,114,121,32,116,111,32,100,105,115,99,117,115,115,32,116,104,101,32,99,117,114,114,101,110,116,32,97,110,100,32,102,117,116,117,114,101,32,74,111,121,115,116,114,101,97,109,32,110,101,116,119,111,114,107,32,114,111,108,101,115,46],"created_at":{"block":1,"time":1561400460},"deleted":false,"archived":false,"num_direct_subcategories":5,"num_direct_unmoderated_threads":1,"num_direct_moderated_threads":1,"position_in_parent_category":null,"moderator_id":"5CJzTaCp5fuqG7NdJQ6oUCwdmFHKichew8w4RZ3zFHM8qSe6"}],[3,{"id":3,"title":[79,102,102,45,116,111,112,105,99,32,40,115,104,105,116,112,111,115,116,105,110,103,41],"description":[74,117,115,116,32,107,101,101,112,32,116,104,105,110,103,115,32,99,105,118,105,108,33],"created_at":{"block":1,"time":1561400940},"deleted":false,"archived":false,"num_direct_subcategories":0,"num_direct_unmoderated_threads":3,"num_direct_moderated_threads":0,"position_in_parent_category":null,"moderator_id":"5CJzTaCp5fuqG7NdJQ6oUCwdmFHKichew8w4RZ3zFHM8qSe6"}],[4,{"id":4,"title":[86,97,108,105,100,97,116,111,114,115],"description":[72,101,114,101,32,121,111,117,32,99,97,110,32,100,105,115,99,117,115,115,32,97,108,108,32,116,104,105,110,103,115,32,114,101,108,97,116,101,100,32,116,111,32,98,101,105,110,103,32,97,32,96,86,97,108,105,100,97,116,111,114,96,194,160,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,110,101,116,119,111,114,107,46],"created_at":{"block":1,"time":1561467750},"deleted":false,"archived":false,"num_direct_subcategories":0,"num_direct_unmoderated_threads":5,"num_direct_moderated_threads":0,"position_in_parent_category":{"parent_id":2,"child_nr_in_parent_category":0},"moderator_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[5,{"id":5,"title":[83,116,111,114,97,103,101,32,80,114,111,118,105,100,101,114,115],"description":[72,101,114,101,32,121,111,117,32,99,97,110,32,100,105,115,99,117,115,115,32,97,108,108,32,109,97,116,116,101,114,115,32,114,101,103,97,114,100,105,110,103,32,116,104,101,32,96,83,116,111,114,97,103,101,32,80,114,111,118,105,100,101,114,96,194,160,114,111,108,101,32,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,110,101,116,119,111,114,107,46],"created_at":{"block":1,"time":1561467828},"deleted":false,"archived":false,"num_direct_subcategories":0,"num_direct_unmoderated_threads":2,"num_direct_moderated_threads":0,"position_in_parent_category":{"parent_id":2,"child_nr_in_parent_category":1},"moderator_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[6,{"id":6,"title":[67,111,117,110,99,105,108,32,77,101,109,98,101,114,115],"description":[72,101,114,101,32,121,111,117,32,99,97,110,32,100,105,115,99,117,115,115,32,97,108,108,32,109,97,116,116,101,114,115,32,114,101,103,97,114,100,105,110,103,32,116,104,101,32,96,67,111,117,110,99,105,108,32,77,101,109,98,101,114,96,32,114,111,108,101,32,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,110,101,116,119,111,114,107,46],"created_at":{"block":1,"time":1561467888},"deleted":false,"archived":false,"num_direct_subcategories":0,"num_direct_unmoderated_threads":3,"num_direct_moderated_threads":0,"position_in_parent_category":{"parent_id":2,"child_nr_in_parent_category":2},"moderator_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[7,{"id":7,"title":[71,111,118,101,114,110,97,110,99,101,32,97,110,100,32,80,114,111,112,111,115,97,108,115],"description":[84,104,105,115,32,105,115,32,116,104,101,32,112,108,97,99,101,32,116,111,32,100,105,115,99,117,115,115,32,103,111,118,101,114,110,97,110,99,101,32,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,78,101,116,119,111,114,107,46],"created_at":{"block":1,"time":1561468044},"deleted":true,"archived":false,"num_direct_subcategories":0,"num_direct_unmoderated_threads":0,"num_direct_moderated_threads":0,"position_in_parent_category":null,"moderator_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[8,{"id":8,"title":[74,111,121,115,116,114,101,97,109,32,67,111,109,112,101,116,105,116,105,111,110,115],"description":[84,104,105,115,32,99,97,116,101,103,111,114,121,32,99,111,110,116,97,105,110,115,32,105,110,102,111,32,111,110,32,112,97,115,116,44,32,99,117,114,114,101,110,116,32,97,110,100,32,102,117,116,117,114,101,32,99,111,109,112,101,116,105,116,105,111,110,115,32,102,111,114,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,99,111,109,109,117,110,105,116,121,46],"created_at":{"block":1,"time":1562489298},"deleted":true,"archived":false,"num_direct_subcategories":0,"num_direct_unmoderated_threads":0,"num_direct_moderated_threads":0,"position_in_parent_category":null,"moderator_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[9,{"id":9,"title":[68,105,115,116,114,105,98,117,116,111,114,32,40,66,97,110,100,119,105,100,116,104,32,80,114,111,118,105,100,101,114,41],"description":[72,101,114,101,32,121,111,117,32,99,97,110,32,100,105,115,99,117,115,115,32,97,108,108,32,116,104,105,110,103,115,32,114,101,108,97,116,101,100,32,116,111,32,98,101,105,110,103,32,97,32,68,105,115,116,114,105,98,117,116,111,114,32,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,110,101,116,119,111,114,107,46,10,10,84,104,105,115,32,114,111,108,101,32,119,105,108,108,32,98,101,99,111,109,101,32,97,99,116,105,118,97,116,101,100,32,102,111,114,32,116,104,101,32,110,101,120,116,32,116,101,115,116,110,101,116,33],"created_at":{"block":1,"time":1563034584},"deleted":false,"archived":false,"num_direct_subcategories":0,"num_direct_unmoderated_threads":1,"num_direct_moderated_threads":0,"position_in_parent_category":{"parent_id":2,"child_nr_in_parent_category":3},"moderator_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[10,{"id":10,"title":[74,111,121,115,116,114,101,97,109,32,66,111,117,110,116,105,101,115],"description":[65,32,99,97,116,101,103,111,114,121,32,102,111,114,32,112,114,111,112,111,115,105,110,103,44,32,112,111,115,116,105,110,103,32,97,110,100,32,101,118,97,108,117,97,116,105,110,103,32,98,111,117,110,116,105,101,115,32,102,111,114,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,112,114,111,106,101,99,116,46],"created_at":{"block":1,"time":1568847744},"deleted":false,"archived":false,"num_direct_subcategories":0,"num_direct_unmoderated_threads":5,"num_direct_moderated_threads":0,"position_in_parent_category":null,"moderator_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[11,{"id":11,"title":[66,117,105,108,100,101,114,115,32,97,110,100,32,66,117,103,32,82,101,112,111,114,116,101,114,115],"description":[72,101,108,112,32,111,117,116,32,74,111,121,115,116,114,101,97,109,32,98,121,32,114,101,112,111,114,116,105,110,103,32,98,117,103,115,32,111,114,32,99,111,110,116,114,105,98,117,116,105,110,103,32,116,111,32,111,117,114,32,115,111,102,116,119,97,114,101,46],"created_at":{"block":1,"time":1568899824},"deleted":false,"archived":false,"num_direct_subcategories":0,"num_direct_unmoderated_threads":2,"num_direct_moderated_threads":0,"position_in_parent_category":{"parent_id":2,"child_nr_in_parent_category":4},"moderator_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}]],"posts":[[1,{"id":1,"thread_id":1,"nr_in_thread":1,"current_text":[80,108,101,97,115,101,32,102,111,108,108,111,119,32,111,117,114,32,116,101,114,109,115,32,111,102,32,115,101,114,118,105,99,101,44,32,97,110,100,32,103,101,110,101,114,97,108,32,114,117,108,101,115,32,97,110,100,32,103,117,105,100,101,108,105,110,101,115,32,102,111,114,32,116,104,101,32,102,111,114,117,109,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1561406472},"author_id":"5DaDUnNVzZPwK9KLwyPFgeSbc9Xeh6G39A2oq36tiV9aEzcx"}],[2,{"id":2,"thread_id":2,"nr_in_thread":1,"current_text":[87,104,97,116,32,100,111,32,121,111,117,32,101,120,112,101,99,116,32,109,101,32,116,111,32,119,114,105,116,101,63],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1561407198},"author_id":"5CEw8JxuM1kh34VoocG9bqqjqs98pdA7fG5uaTtPdjzShqFb"}],[3,{"id":3,"thread_id":3,"nr_in_thread":1,"current_text":[87,105,108,108,32,98,101,32,112,111,115,116,105,110,103,32,97,108,108,32,116,104,101,32,105,110,102,111,32,104,101,114,101,32,117,110,116,105,108,32,116,104,101,110,32,10,71,111,32,104,101,114,101,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,104,101,108,112,100,101,115,107,47,116,114,101,101,47,109,97,115,116,101,114,47,114,111,108,101,115,47,115,116,111,114,97,103,101,45,112,114,111,118,105,100,101,114,115],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1561407264},"author_id":"5CEw8JxuM1kh34VoocG9bqqjqs98pdA7fG5uaTtPdjzShqFb"}],[4,{"id":4,"thread_id":2,"nr_in_thread":2,"current_text":[84,104,105,115,32,105,115,32,116,104,101,32,118,101,114,121,32,102,105,114,115,116,32,114,101,112,108,121,32,111,110,32,116,104,114,101,97,100,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1561444074},"author_id":"5CiGc9SzUjaVPZd66HVDnJNSRh5Ld3TK477nGYiwurwHZnZv"}],[5,{"id":5,"thread_id":2,"nr_in_thread":3,"current_text":[74,117,115,116,32,99,97,109,101,32,116,111,32,115,97,121,32,116,104,105,115,32,105,115,32,116,104,101,32,116,117,114,100,32,112,111,115,116,32,105,110,32,116,104,101,32,116,104,114,101,97,100,33],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1561451058},"author_id":"5DaDUnNVzZPwK9KLwyPFgeSbc9Xeh6G39A2oq36tiV9aEzcx"}],[6,{"id":6,"thread_id":2,"nr_in_thread":4,"current_text":[34,87,104,97,116,32,100,111,32,121,111,117,32,101,120,112,101,99,116,32,109,101,32,116,111,32,119,114,105,116,101,63,34,10,65,116,32,108,101,97,115,116,32,97,110,32,101,110,116,105,114,101,32,110,111,118,101,108],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1561456236},"author_id":"5G3jMHcbqgzyqCiiBMZ26LFZoqTPw77XzMqwj8cyrb58ybhE"}],[7,{"id":7,"thread_id":4,"nr_in_thread":1,"current_text":[65,110,121,32,116,104,111,117,103,104,116,115,32,97,98,111,117,116,32,104,111,119,32,116,104,105,115,32,114,111,108,101,32,109,105,103,104,116,32,119,111,114,107,63,10,104,116,116,112,115,58,47,47,119,119,119,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,114,111,108,101,115,35,67,111,110,116,101,110,116,45,67,117,114,97,116,111,114],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1561467588},"author_id":"5G3jMHcbqgzyqCiiBMZ26LFZoqTPw77XzMqwj8cyrb58ybhE"}],[8,{"id":8,"thread_id":5,"nr_in_thread":1,"current_text":[87,104,105,99,104,32,111,110,101,115,32,100,111,32,121,111,117,32,116,104,105,110,107,32,119,105,108,108,32,115,116,105,108,108,32,98,101,32,97,114,111,117,110,100,32,98,121,32,50,48,51,48,63],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1561508412},"author_id":"5H8kTuZp2T2geceCuaEQ29Jg8fFjCJkwGQgZjRhhGLxFVMSC"}],[9,{"id":9,"thread_id":5,"nr_in_thread":2,"current_text":[88,77,82,32,77,97,121,98,101,46,46,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1561525326},"author_id":"5CEw8JxuM1kh34VoocG9bqqjqs98pdA7fG5uaTtPdjzShqFb"}],[10,{"id":10,"thread_id":6,"nr_in_thread":1,"current_text":[74,117,115,116,32,116,104,111,117,103,104,116,32,73,32,119,111,117,108,100,32,108,101,97,118,101,32,97,32,113,117,105,99,107,32,105,110,116,114,111,32,104,101,114,101,46,10,10,77,121,32,110,97,109,101,32,105,115,32,66,101,100,101,104,111,32,77,101,110,100,101,114,44,32,73,32,97,109,32,67,69,79,32,97,116,32,74,115,103,101,110,101,115,105,115,44,32,116,104,101,32,99,111,109,112,97,110,121,32,99,117,114,114,101,110,116,108,121,32,98,117,105,108,100,105,110,103,32,74,111,121,115,116,114,101,97,109,46,32,77,111,115,116,32,111,102,32,109,121,32,116,105,109,101,32,105,115,32,115,112,101,110,116,32,100,111,105,110,103,32,100,101,118,101,108,111,112,109,101,110,116,44,32,82,110,68,44,32,116,101,99,104,110,105,99,97,108,47,112,114,111,100,117,99,116,32,100,101,115,105,103,110,32,97,110,100,32,104,105,114,105,110,103,46,32,10,10,77,121,32,99,117,114,114,101,110,116,32,102,111,99,117,115,32,105,115,32,116,111,32,112,108,97,110,32,102,111,114,32,111,117,114,32,110,101,120,116,32,116,101,115,116,110,101,116,44,32,119,104,105,99,104,32,119,101,32,104,97,118,101,32,110,111,116,32,121,101,116,32,97,110,110,111,117,110,99,101,100,46,10,10,73,102,32,121,111,117,32,97,115,107,32,97,32,113,117,101,115,116,105,111,110,44,32,73,32,119,105,108,108,32,116,114,121,32,116,111,32,97,110,115,119,101,114,33],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1561550916},"author_id":"5GBonukAQsiG7pr7UFNUYW3BYudduTKWokKCJPy1bMeu7ZhB"}],[11,{"id":11,"thread_id":7,"nr_in_thread":1,"current_text":[87,101,32,104,97,118,101,110,39,116,32,104,97,100,32,116,104,101,32,116,105,109,101,32,116,111,32,109,97,107,101,32,97,110,32,101,112,105,115,111,100,101,32,105,110,32,97,32,119,104,105,108,101,44,32,98,117,116,32,119,101,39,108,108,32,116,114,121,32,97,110,100,32,109,97,107,101,32,111,110,101,32,110,101,120,116,32,119,101,101,107,46,32,65,110,121,32,105,110,116,101,114,101,115,116,105,110,103,32,110,101,119,115,32,111,114,32,116,111,112,105,99,115,32,119,101,32,115,104,111,117,108,100,32,99,111,118,101,114,63,10,10,36,49,48,32,98,111,117,110,116,121,32,102,111,114,32,97,32,108,105,110,107,32,116,111,32,97,32,116,119,101,101,116,47,97,114,116,105,99,108,101,32,116,104,97,116,32,103,101,116,115,32,109,101,110,116,105,111,110,101,100,33],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1561711008},"author_id":"5EtFzT8ZJN7VPKfcxjsQhtJUhHzuPsUFMaahPLGoaw5odaqj"}],[12,{"id":12,"thread_id":7,"nr_in_thread":2,"current_text":[114,101,99,101,110,116,32,104,105,116,32,116,111,32,99,111,105,110,100,101,115,107,32,119,104,101,110,32,99,108,111,117,100,102,108,97,114,101,32,119,101,110,116,32,100,111,119,110,46,10,104,116,116,112,115,58,47,47,116,119,105,116,116,101,114,46,99,111,109,47,99,111,105,110,100,101,115,107,47,115,116,97,116,117,115,47,49,49,52,54,48,53,54,56,55,52,57,56,56,54,52,50,51,48,54,63,115,61,49,57,10,10,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1562147196},"author_id":"5CNWS2V6RYKZVeqjqg9UqbQhAxGGphWtv9STxKKuuJW9kG3S"}],[13,{"id":13,"thread_id":2,"nr_in_thread":5,"current_text":[73,32,119,105,115,104,32,73,32,99,111,117,108,100,32,116,105,112,32,116,104,105,115,32,115,111,114,116,32,111,102,32,115,116,117,102,102,33,32,73,116,115,32,116,111,111,32,105,110,99,111,110,118,101,110,105,101,110,116,32,114,105,103,104,116,32,110,111,119],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1562160846},"author_id":"5GBonukAQsiG7pr7UFNUYW3BYudduTKWokKCJPy1bMeu7ZhB"}],[14,{"id":14,"thread_id":8,"nr_in_thread":1,"current_text":[35,32,87,104,97,116,32,119,111,117,108,100,32,121,111,117,32,102,105,120,63,10,10,73,32,119,111,117,108,100,32,97,100,100,10,10,49,46,32,65,99,99,117,114,97,116,101,32,115,117,98,99,97,116,101,103,111,114,121,32,97,110,100,32,116,104,114,101,97,100,32,99,111,117,110,116,115,33,32,73,116,115,32,99,111,110,102,117,115,105,110,103,44,32,97,110,100,32,104,97,114,100,32,116,111,32,116,114,97,99,107,32,110,101,119,32,112,111,115,116,115,46,10,50,46,32,72,111,119,32,99,97,110,32,119,101,32,115,117,114,102,97,99,101,32,110,101,119,32,112,111,115,116,115,32,98,101,116,116,101,114,63,10,50,46,32,83,111,109,101,32,115,111,114,116,32,111,102,32,116,97,103,103,105,110,103,32,111,102,32,117,115,101,114,115,44,32,119,105,116,104,32,110,111,116,105,102,105,99,97,116,105,111,110,115,32,40,73,32,107,110,111,119,32,104,97,114,100,41,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1562161002},"author_id":"5GBonukAQsiG7pr7UFNUYW3BYudduTKWokKCJPy1bMeu7ZhB"}],[15,{"id":15,"thread_id":8,"nr_in_thread":2,"current_text":[83,111,109,101,32,115,117,103,103,101,115,116,105,111,110,115,58,10,42,32,84,111,32,97,100,100,32,116,104,101,32,100,97,116,101,47,116,105,109,101,32,116,104,101,32,108,97,115,116,32,112,111,115,116,32,119,97,115,32,109,97,100,101,32,102,114,111,109,32,102,111,114,117,109,32,111,118,101,114,118,105,101,119,32,97,110,100,32,108,105,110,107,32,116,111,32,100,105,114,101,99,116,32,112,111,115,116,32,43,32,116,104,114,101,97,100,32,116,105,116,108,101,10,42,32,84,111,32,97,100,100,32,116,104,101,32,100,97,116,101,47,116,105,109,101,32,111,102,32,97,108,108,32,112,111,115,116,115,32,105,110,32,101,97,99,104,32,116,104,114,101,97,100,10,42,32,84,111,32,97,100,100,32,97,32,115,101,112,97,114,97,116,101,32,102,105,101,108,100,32,102,114,111,109,32,116,105,116,108,101,32,116,104,97,116,32,99,97,110,32,98,101,32,102,105,108,108,101,100,32,119,105,116,104,32,97,110,32,101,109,111,106,105,32,116,111,32,103,105,118,101,32,116,104,114,101,97,100,115,32,97,32,98,105,116,32,111,102,32,118,105,115,117,97,108,32,102,108,97,114,101,32,40,101,109,111,106,105,39,115,32,99,111,117,108,100,32,98,101,32,99,117,116,32,100,111,119,110,32,116,111,32,97,32,115,109,97,108,108,32,115,101,116,32,114,97,116,104,101,114,32,116,104,97,110,32,97,108,108,32,111,102,32,116,104,101,109,41,10,42,32,84,111,32,97,100,100,32,116,104,101,32,97,98,105,108,105,116,121,32,116,111,32,100,111,32,97,110,32,97,117,116,111,109,97,116,105,99,32,105,110,45,108,105,110,101,32,113,117,111,116,101,32,116,111,32,112,114,101,118,105,111,117,115,32,112,111,115,116,115,32,116,104,97,116,32,97,100,100,115,32,97,32,113,117,111,116,101,32,43,32,108,105,110,107,32,116,111,32,116,104,101,32,112,111,115,116,32,116,104,101,32,112,101,114,115,111,110,32,105,115,32,114,101,112,108,121,105,110,103,32,116,111,32,40,116,104,114,101,97,100,101,100,32,114,101,115,112,111,110,115,101,115,41,10,42,32,84,111,32,97,100,100,32,114,101,97,99,116,105,111,110,115,32,116,111,32,112,111,115,116,115,32,40,116,104,117,109,98,115,32,117,112,47,102,117,110,110,121,41,32,111,114,32,97,32,119,97,121,32,116,111,32,118,111,116,101,32,112,111,115,116,115,47,116,104,114,101,97,100,115,32,97,115,32,98,101,105,110,103,32,103,111,111,100,47,98,97,100,10,42,32,84,111,32,97,100,100,32,116,97,103,115,32,102,111,114,32,116,104,114,101,97,100,115,32,40,34,116,101,99,104,32,115,117,112,112,111,114,116,34,32,34,111,114,105,103,105,110,97,108,32,99,111,110,116,101,110,116,34,32,34,100,101,98,105,97,110,32,110,111,100,101,34,41,32,43,32,109,97,121,98,101,32,115,101,97,114,99,104,32,102,117,110,99,116,105,111,110,97,108,105,116,121,32,105,110,32,116,104,101,32,102,117,116,117,114,101,10,42,32,84,111,32,97,100,100,32,112,111,115,116,32,110,117,109,98,101,114,32,43,32,108,105,110,107,32,116,111,32,97,110,99,104,111,114,32,111,102,32,112,111,115,116,32,110,117,109,98,101,114,32,105,110,32,101,97,99,104,32,116,104,114,101,97,100,46,32,83,111,32,121,111,117,32,99,97,110,32,101,97,115,105,108,121,32,115,101,110,100,32,97,32,108,105,110,107,32,116,111,32,112,111,115,116,32,35,49,50,32,116,111,32,111,116,104,101,114,32,112,101,111,112,108,101,32,111,114,32,108,105,110,107,32,102,114,111,109,32,97,110,111,116,104,101,114,32,116,104,114,101,97,100,46,10,42,32,84,111,32,97,100,100,32,97,32,109,101,110,117,32,102,111,114,32,115,105,109,112,108,101,32,116,101,120,116,32,102,111,114,109,97,116,116,105,110,103,32,108,105,107,101,32,98,111,108,100,44,32,105,116,97,108,105,99,44,32,105,110,115,101,114,116,32,112,105,99,116,117,114,101,32],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1562247726},"author_id":"5G3jMHcbqgzyqCiiBMZ26LFZoqTPw77XzMqwj8cyrb58ybhE"}],[16,{"id":16,"thread_id":8,"nr_in_thread":3,"current_text":[84,104,105,115,32,105,115,32,97,32,114,101,97,108,108,121,32,103,114,101,97,116,32,108,105,115,116,44,32,116,104,97,110,107,115,33,10,10,73,32,116,104,105,110,107,32,119,101,32,99,97,110,32,100,111,32,97,32,108,111,116,32,111,102,32,116,104,105,115,32,119,105,116,104,111,117,116,32,97,32,114,117,110,116,105,109,101,32,117,112,103,114,97,100,101,44,32,119,104,105,99,104,32,105,115,32,110,105,99,101,46,32,87,101,32,97,114,101,32,103,111,105,110,103,32,116,111,32,105,110,118,101,115,116,32,109,111,114,101,32,105,110,116,111,32,116,104,101,32,102,111,114,117,109,44,32,115,111,32,119,101,32,110,101,101,100,32,116,111,32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,32,116,111,32,117,115,101,46,10,10,89,111,117,32,100,105,100,110,39,116,32,116,111,117,99,104,32,115,111,32,109,117,99,104,32,111,110,32,116,104,101,32,105,115,115,117,101,32,111,102,32,115,117,114,102,97,99,105,110,103,32,110,101,119,32,99,111,110,116,101,110,116,44,32,97,110,121,32,116,105,112,115,32,111,110,32,116,104,97,116,63,10,10,73,32,104,97,118,101,32,97,32,118,101,114,121,32,118,101,114,121,32,104,97,114,100,32,116,105,109,101,32,102,105,103,117,114,105,110,103,32,111,117,116,32,97,32,119,104,101,114,101,32,110,101,119,32,97,99,116,105,118,105,116,121,32,105,115,32,116,97,107,105,110,103,32,112,108,97,99,101,32,119,104,101,110,32,73,32,104,105,116,32,116,104,101,32,109,97,105,110,32,102,111,114,117,109,32,112,97,103,101,44,32,111,114,32,101,118,101,110,32,115,117,98,99,97,116,101,103,111,114,105,101,115,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1562655690},"author_id":"5GBonukAQsiG7pr7UFNUYW3BYudduTKWokKCJPy1bMeu7ZhB"}],[17,{"id":17,"thread_id":8,"nr_in_thread":4,"current_text":[70,111,114,32,110,101,119,32,99,111,110,116,101,110,116,115,32,119,101,32,110,101,101,100,32,97,32,110,111,116,105,102,105,99,97,116,105,111,110,32,115,121,115,116,101,109,32,108,105,107,101,44,32,97,32,110,111,116,105,102,105,99,97,116,105,111,110,32,99,111,117,110,116,101,114,32,119,104,101,110,32,115,111,109,101,111,110,101,32,114,101,112,108,105,101,115,32,116,111,32,111,117,114,32,112,111,115,116,32,111,114,32,116,104,114,101,97,100,46,83,104,111,119,32,97,32,110,111,116,105,102,105,99,97,116,105,111,110,32,99,111,117,110,116,101,114,32,119,105,116,104,32,115,109,97,108,108,32,100,101,116,97,105,108,32,111,110,32,116,104,101,32,116,111,112,32,114,105,103,104,116,32,46,32,73,116,32,119,111,117,108,100,32,98,101,32,110,105,99,101,32,97,110,100,32,118,101,114,121,32,117,115,101,102,117,108,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1562693490},"author_id":"5CNWS2V6RYKZVeqjqg9UqbQhAxGGphWtv9STxKKuuJW9kG3S"}],[18,{"id":18,"thread_id":7,"nr_in_thread":3,"current_text":[104,116,116,112,115,58,47,47,119,119,119,46,99,111,105,110,100,101,115,107,46,99,111,109,47,116,104,101,114,101,115,45,97,45,115,101,99,111,110,100,45,116,111,107,101,110,45,97,45,98,114,101,97,107,100,111,119,110,45,111,102,45,102,97,99,101,98,111,111,107,115,45,98,108,111,99,107,99,104,97,105,110,45,101,99,111,110,111,109,121],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1562976942},"author_id":"5H8kTuZp2T2geceCuaEQ29Jg8fFjCJkwGQgZjRhhGLxFVMSC"}],[19,{"id":19,"thread_id":8,"nr_in_thread":5,"current_text":[73,102,32,97,32,110,111,116,105,102,105,99,97,116,105,111,110,32,99,111,117,110,116,101,114,32,105,115,32,116,111,111,32,105,110,116,114,117,115,105,118,101,44,32,121,111,117,32,99,111,117,108,100,32,106,117,115,116,32,104,105,103,104,108,105,103,104,116,32,116,104,114,101,97,100,115,32,119,105,116,104,32,110,101,119,32,112,111,115,116,115,32,115,111,109,101,104,111,119,46,32,80,101,114,104,97,112,115,32,112,117,116,32,97,32,115,116,97,114,32,110,101,120,116,32,116,111,32,116,104,101,32,116,104,114,101,97,100,32,111,114,32,112,117,116,32,116,104,101,32,116,104,114,101,97,100,32,116,105,116,108,101,32,105,110,32,98,111,108,100,32,119,104,101,110,32,116,104,101,114,101,32,105,115,32,110,101,119,32,117,110,114,101,97,100,32,99,111,110,116,101,110,116,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1562978136},"author_id":"5H8kTuZp2T2geceCuaEQ29Jg8fFjCJkwGQgZjRhhGLxFVMSC"}],[20,{"id":20,"thread_id":6,"nr_in_thread":2,"current_text":[32,32,32,32,32,32,32,32,32,32],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1562978328},"author_id":"5H8kTuZp2T2geceCuaEQ29Jg8fFjCJkwGQgZjRhhGLxFVMSC"}],[21,{"id":21,"thread_id":8,"nr_in_thread":6,"current_text":[65,110,111,116,104,101,114,32,102,101,97,116,117,114,101,32,105,100,101,97,32,119,111,117,108,100,32,98,101,32,116,111,32,104,97,118,101,32,34,101,100,105,116,101,100,34,32,115,104,111,119,110,32,110,101,120,116,32,116,111,32,112,111,115,116,115,32,116,104,97,116,32,104,97,118,101,32,98,101,101,110,32,101,100,105,116,101,100,32,97,102,116,101,114,32,116,104,101,121,39,118,101,32,98,101,101,110,32,119,114,105,116,116,101,110,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1563025176},"author_id":"5H8kTuZp2T2geceCuaEQ29Jg8fFjCJkwGQgZjRhhGLxFVMSC"}],[22,{"id":22,"thread_id":9,"nr_in_thread":1,"current_text":[72,101,114,101,32,121,111,117,32,99,97,110,32,100,105,115,99,117,115,115,32,97,108,108,32,116,104,105,110,103,115,32,114,101,108,97,116,101,100,32,116,111,32,98,101,105,110,103,32,97,32,96,68,105,115,116,114,105,98,117,116,111,114,96,32,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,110,101,116,119,111,114,107,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1563034344},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[23,{"id":23,"thread_id":10,"nr_in_thread":1,"current_text":[76,101,116,32,109,101,32,107,110,111,119,32,105,102,32,121,111,117,32,119,111,117,108,100,32,108,105,107,101,32,116,111,32,115,101,101,32,109,111,114,101,32,111,102,32,116,104,101,115,101,46,32,73,39,109,32,97,32,98,105,116,32,98,117,115,121,32,114,105,103,104,116,32,110,111,119,44,32,98,117,116,32,105,102,32,112,101,111,112,108,101,32,110,101,101,100,32,104,101,108,112,32,103,101,116,116,105,110,103,32,115,101,116,32,117,112,44,32,73,39,108,108,32,112,114,111,98,97,98,108,121,32,109,97,107,101,32,115,111,109,101,32,109,111,114,101,46,10,10,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,97,99,114,111,112,111,108,105,115,47,112,105,111,110,101,101,114,47,35,47,109,101,100,105,97,47,112,108,97,121,47,53,69,84,80,88,104,85,113,53,81,110,67,102,90,57,121,99,100,97,66,51,112,99,69,49,56,71,52,100,85,109,71,65,116,84,87,68,53,80,109,84,77,99,98,120,98,119,80],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1563038424},"author_id":"5H8kTuZp2T2geceCuaEQ29Jg8fFjCJkwGQgZjRhhGLxFVMSC"}],[24,{"id":24,"thread_id":8,"nr_in_thread":7,"current_text":[87,111,114,107,105,110,103,32,111,110,32,97,32,91,103,105,116,104,117,98,32,105,115,115,117,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,47,105,115,115,117,101,115,47,56,48,41,32,102,111,114,32,116,104,105,115,33,10,10,70,101,101,108,32,102,114,101,101,32,116,111,32,99,104,105,109,101,32,105,110,46,46,46,10,10,42,69,100,105,116,101,100,32,116,111,32,115,101,101,32,105,102,32,105,116,39,115,32,115,104,111,119,110,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1563186162},"author_id":"5DaDUnNVzZPwK9KLwyPFgeSbc9Xeh6G39A2oq36tiV9aEzcx"}],[25,{"id":25,"thread_id":10,"nr_in_thread":2,"current_text":[72,101,121,32,66,101,110,44,10,10,84,104,105,115,32,105,115,32,119,111,110,100,101,114,102,117,108,32,115,116,117,102,102,33,32,10,10,83,111,109,101,32,116,105,109,101,32,116,104,105,115,32,119,101,101,107,44,32,73,39,108,108,32,116,114,121,32,116,111,32,111,114,103,97,110,105,122,101,32,116,104,101,32,102,111,114,117,109,32,112,114,111,112,101,114,108,121,32,102,111,114,32,115,111,109,101,116,104,105,110,103,32,119,101,32,104,97,118,101,32,105,110,32,109,105,110,100,32,102,111,114,32,108,97,116,101,114,46,32,67,111,109,112,101,116,105,116,105,111,110,115,44,32,97,110,100,32,97,32,99,111,109,109,117,110,105,116,121,32,102,117,110,100,32,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,32,99,111,117,110,99,105,108,46,10,10,87,101,32,109,97,121,32,106,117,115,116,32,111,102,102,101,114,32,34,114,101,103,117,108,97,114,34,32,91,98,111,117,110,116,105,101,115,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,41,32,102,111,114,32,109,111,114,101,32,111,102,32,116,104,101,115,101,32,105,110,115,116,101,97,100,46,32,70,101,101,108,32,102,114,101,101,32,116,111,32,112,114,111,112,111,115,101,32,111,110,101,32,121,111,117,114,115,101,108,102,33],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1563206556},"author_id":"5DaDUnNVzZPwK9KLwyPFgeSbc9Xeh6G39A2oq36tiV9aEzcx"}],[26,{"id":26,"thread_id":10,"nr_in_thread":3,"current_text":[71,114,101,97,116,44,32,116,104,97,110,107,115,32,77,97,114,116,105,110,33,10,10,67,111,109,112,101,116,105,116,105,111,110,115,32,97,110,100,32,99,111,109,109,117,110,105,116,121,32,102,117,110,100,32,98,111,116,104,32,115,111,117,110,100,32,118,101,114,121,32,105,110,116,101,114,101,115,116,105,110,103,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1563212034},"author_id":"5H8kTuZp2T2geceCuaEQ29Jg8fFjCJkwGQgZjRhhGLxFVMSC"}],[27,{"id":27,"thread_id":2,"nr_in_thread":6,"current_text":[97,32,116,101,115,116,32,102,111,111,32,114,101,112,108,121],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568179602},"author_id":"5FdyqzHPZe71EzDU3pHKBWEPChbUitfoToUgrDtnWoojFtic"}],[28,{"id":28,"thread_id":4,"nr_in_thread":2,"current_text":[87,101,39,114,101,32,105,110,116,114,111,100,117,99,105,110,103,32,105,116,32,105,110,32,116,104,101,32,82,111,109,101,32,116,101,115,116,110,101,116,44,32,115,111,32,104,111,112,101,102,117,108,108,121,32,105,116,39,108,108,32,98,101,99,111,109,101,32,97,112,112,97,114,101,110,116,32,116,104,101,110,32,58,41],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568500710},"author_id":"5H8kTuZp2T2geceCuaEQ29Jg8fFjCJkwGQgZjRhhGLxFVMSC"}],[29,{"id":29,"thread_id":11,"nr_in_thread":1,"current_text":[35,32,79,118,101,114,118,105,101,119,10,84,104,105,115,32,102,111,114,117,109,32,99,97,116,101,103,111,114,121,32,97,110,100,32,116,104,101,32,91,111,114,105,103,105,110,97,108,32,114,101,112,111,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,47,41,32,97,114,101,32,119,104,101,114,101,32,119,101,32,112,117,98,108,105,115,104,44,32,116,114,97,99,107,32,97,110,100,32,100,111,99,117,109,101,110,116,32,116,104,101,32,98,111,117,110,116,121,32,115,121,115,116,101,109,32,102,111,114,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,112,108,97,116,102,111,114,109,46,32,65,110,121,111,110,101,32,105,115,32,102,114,101,101,32,116,111,32,109,97,107,101,32,97,32,91,112,114,111,112,111,115,97,108,93,40,35,112,114,111,112,111,115,97,108,115,41,32,102,111,114,32,97,32,98,111,117,110,116,121,44,32,97,110,100,32,97,110,121,111,110,101,32,105,115,32,102,114,101,101,32,116,111,32,99,111,109,112,101,116,101,32,102,111,114,32,116,104,101,109,46,10,10,67,117,114,114,101,110,116,108,121,44,32,97,108,108,32,98,111,117,110,116,105,101,115,32,119,105,108,108,32,98,101,32,109,97,100,101,32,96,97,99,116,105,118,101,96,44,32,102,117,110,100,101,100,44,32,97,110,100,32,119,105,108,108,32,98,101,32,101,118,97,108,117,97,116,101,100,32,98,121,32,91,74,115,103,101,110,101,115,105,115,93,40,104,116,116,112,115,58,47,47,98,108,111,103,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,106,115,103,101,110,101,115,105,115,47,41,46,32,73,110,32,116,104,101,32,102,117,116,117,114,101,44,32,111,117,114,32,105,110,116,101,110,116,105,111,110,32,105,115,32,116,111,32,103,114,97,100,117,97,108,108,121,32,105,110,118,111,108,118,101,32,116,104,101,32,112,108,97,116,102,111,114,109,32,103,111,118,101,114,110,97,110,99,101,32,115,121,115,116,101,109,32,105,110,32,116,104,101,32,100,101,99,105,115,105,111,110,32,109,97,107,105,110,103,46,10,10,84,104,101,32,112,97,121,111,117,116,115,32,119,105,108,108,32,98,101,32,109,97,100,101,32,105,110,32,91,109,111,110,101,114,111,93,40,104,116,116,112,115,58,47,47,119,101,98,46,103,101,116,109,111,110,101,114,111,46,111,114,103,47,41,32,117,110,108,101,115,115,32,110,111,116,101,100,32,111,116,104,101,114,119,105,115,101,46,32,79,117,114,32,99,104,111,105,99,101,32,111,102,32,117,115,105,110,103,32,109,111,110,101,114,111,32,97,115,32,116,104,101,32,109,101,116,104,111,100,32,111,102,32,112,97,121,109,101,110,116,32,105,115,32,116,104,97,116,32,105,116,39,115,32,98,111,116,104,32,97,32,119,101,108,108,32,101,115,116,97,98,108,105,115,104,101,100,32,97,110,100,32,114,101,112,117,116,97,98,108,101,32,112,114,111,106,101,99,116,44,32,97,110,100,32,97,114,103,117,97,98,108,121,32,104,97,115,32,98,101,116,116,101,114,32,112,114,105,118,97,99,121,32,102,101,97,116,117,114,101,115,32,116,104,97,110,32,115,111,109,101,32,111,102,32,116,104,101,32,111,116,104,101,114,32,111,112,116,105,111,110,115,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568847786},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[30,{"id":30,"thread_id":12,"nr_in_thread":1,"current_text":[32,35,35,35,35,32,80,114,111,98,108,101,109,10,65,115,32,116,104,101,32,110,111,110,45,99,111,100,101,32,114,101,112,111,115,32,97,114,101,32,117,112,100,97,116,101,100,44,32,105,116,39,115,32,100,105,102,102,105,99,117,108,116,32,116,111,32,97,118,111,105,100,32,105,110,116,114,111,100,117,99,105,110,103,32,98,114,111,107,101,110,32,108,105,110,107,115,44,32,101,114,114,111,114,115,32,119,105,116,104,32,105,109,97,103,101,115,44,32,103,114,97,109,109,97,114,32,109,105,115,116,97,107,101,115,44,32,102,111,114,109,97,116,116,105,110,103,32,101,114,114,111,114,115,44,32,101,116,99,46,32,84,104,105,115,32,109,97,107,101,115,32,105,116,32,100,105,102,102,105,99,117,108,116,32,116,111,32,110,97,118,105,103,97,116,101,44,32,97,110,100,32,97,100,100,115,32,102,114,105,99,116,105,111,110,32,102,111,114,32,114,101,97,100,101,114,115,46,32,10,78,111,116,101,32,116,104,97,116,32,116,104,105,115,32,97,112,112,108,105,101,115,32,116,111,32,65,76,76,32,116,104,101,32,82,69,65,68,77,69,46,109,100,32,102,105,108,101,115,44,32,110,111,116,32,106,117,115,116,32,116,104,101,32,116,111,112,32,108,101,118,101,108,32,111,110,101,46,10,10,35,35,35,35,32,71,111,97,108,115,10,73,109,112,114,111,118,101,32,113,117,97,108,105,116,121,32,97,110,100,32,97,99,99,101,115,115,105,98,105,108,105,116,121,32,111,102,32,111,117,114,32,114,101,112,111,115,46,10,10,35,35,35,35,32,82,101,119,97,114,100,115,10,36,50,32,112,101,114,32,102,105,120,32,116,104,97,116,32,103,101,116,115,32,109,101,114,103,101,100,46,10,10,32,95,83,117,98,115,116,97,110,116,105,97,108,32,105,109,112,114,111,118,101,109,101,110,116,115,32,109,97,121,32,98,101,32,114,101,119,97,114,100,101,100,32,101,120,116,114,97,46,95],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568847810},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[31,{"id":31,"thread_id":13,"nr_in_thread":1,"current_text":[35,35,35,32,95,65,108,116,104,111,117,103,104,32,116,104,105,115,32,98,111,117,110,116,121,32,105,115,32,115,116,105,108,108,32,111,112,101,110,44,32,98,101,32,97,119,97,114,101,32,116,104,97,116,32,119,101,32,104,97,118,101,32,98,101,101,110,32,105,110,32,99,111,110,116,97,99,116,32,119,105,116,104,32,111,110,101,32,97,112,112,108,105,99,97,110,116,32,116,104,97,116,32,99,97,109,101,32,117,112,32,119,105,116,104,32,115,111,109,101,32,97,100,100,105,116,105,111,110,97,108,32,105,100,101,97,115,32,97,110,100,32,114,101,115,101,97,114,99,104,46,32,84,104,105,115,32,112,101,114,115,111,110,32,104,97,115,32,98,101,101,110,32,103,105,118,101,110,32,36,50,53,48,32,116,111,32,99,111,110,116,105,110,117,101,32,108,111,111,107,105,110,103,32,105,110,116,111,32,109,111,114,101,32,100,101,116,97,105,108,115,46,95],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568847846},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[32,{"id":32,"thread_id":14,"nr_in_thread":1,"current_text":[35,35,32,80,114,111,98,108,101,109,10,87,101,32,104,97,118,101,32,102,111,117,110,100,32,97,32,108,111,116,32,111,102,32,116,104,101,32,99,111,109,109,111,110,32,109,101,100,105,97,32,102,105,108,101,32,116,121,112,101,115,32,119,105,108,108,32,110,111,116,32,112,108,97,121,32,105,110,32,91,112,105,111,110,101,101,114,93,40,104,116,116,112,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,41,44,32,119,105,116,104,111,117,116,32,100,111,119,110,108,111,97,100,105,110,103,32,116,104,101,32,102,105,108,101,46,10,10,35,35,32,71,111,97,108,115,10,73,109,112,114,111,118,101,32,116,104,101,32,85,88,44,32,98,121,32,107,110,111,119,105,110,103,32,101,120,97,99,116,108,121,32,119,104,97,116,32,102,105,108,101,32,116,121,112,101,115,32,119,111,114,107,115,44,32,97,110,100,32,105,110,32,119,104,105,99,104,32,98,114,111,119,115,101,114,115,32,40,99,104,114,111,109,101,47,99,104,114,111,109,105,117,109,44,32,102,105,114,101,102,111,120,32,97,110,100,32,115,97,102,97,114,105,41,46,10,10,35,35,32,82,101,119,97,114,100,115,10,79,117,114,32,102,105,114,115,116,32,112,114,111,112,111,115,97,108,32,105,115,32,36,53,48,44,32,98,117,116,32,105,102,32,97,110,32,97,112,112,108,105,99,97,110,116,32,112,114,111,100,117,99,101,115,32,97,32,103,111,111,100,32,116,101,115,116,32,112,108,97,110,44,32,40,105,101,46,32,108,105,115,116,32,97,108,108,32,101,120,116,101,110,115,105,111,110,115,44,32,98,114,111,119,115,101,114,115,32,97,110,100,32,79,83,39,115,32,116,104,101,121,32,99,97,110,47,119,105,108,108,32,116,101,115,116,41,44,32,116,104,105,115,32,99,97,110,32,98,101,32,110,101,103,111,116,105,97,116,101,100,46,10,10,35,35,32,83,99,111,112,101,32,111,102,32,87,111,114,107,32,38,32,68,101,108,105,118,101,114,97,98,108,101,115,10,85,112,108,111,97,100,32,99,111,110,116,101,110,116,32,105,110,32,97,108,108,32,34,115,116,97,110,100,97,114,100,34,32,102,111,114,109,97,116,115,44,32,97,110,100,32,112,114,111,100,117,99,101,32,97,32,102,117,108,108,32,108,105,115,116,32,111,102,32,119,104,97,116,32,119,111,114,107,115,32,105,110,32,119,104,105,99,104,32,98,114,111,119,115,101,114,115,47,79,83,39,115,46,10,10,35,35,32,67,111,110,115,116,114,97,105,110,116,115,10,65,108,108,32,99,111,110,116,101,110,116,32,117,112,108,111,97,100,101,100,32,109,117,115,116,32,98,101,32,105,110,32,108,105,110,101,32,119,105,116,104,32,111,117,114,32,91,84,111,83,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,97,99,114,111,112,111,108,105,115,47,112,105,111,110,101,101,114,47,35,47,112,97,103,101,115,47,116,111,115,41,46,10,10,35,35,32,66,111,117,110,116,121,32,102,111,114,109,97,116,10,84,104,101,32,97,112,112,108,105,99,97,116,105,111,110,40,115,41,32,109,117,115,116,32,98,101,32,97,112,112,114,111,118,101,100,32,98,101,102,111,114,101,32,97,110,121,32,119,111,114,107,32,119,105,108,108,32,98,101,32,114,101,119,97,114,100,101,100,46,10,10,35,35,32,68,101,97,100,108,105,110,101,10,84,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,100,101,97,100,108,105,110,101,32,105,115,32,116,104,101,32,48,56,46,48,55,46,49,57,44,32,49,53,48,48,71,77,84,43,50,46,10,10,40,84,104,105,115,32,98,111,117,110,116,121,32,105,115,32,110,111,32,108,111,110,103,101,114,32,111,112,101,110,41],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568847870},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[33,{"id":33,"thread_id":15,"nr_in_thread":1,"current_text":[35,35,32,80,114,111,98,108,101,109,10,87,101,32,110,101,101,100,32,115,111,117,114,99,101,115,32,111,102,32,102,114,101,101,32,97,110,100,32,97,118,97,105,108,97,98,108,101,32,109,101,100,105,97,32,99,111,110,116,101,110,116,44,32,105,110,32,118,97,114,105,111,117,115,32,102,111,114,109,97,116,115,44,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,116,111,112,32,108,101,118,101,108,32,99,97,116,101,103,111,114,105,101,115,58,10,10,42,32,118,105,100,101,111,10,42,32,97,117,100,105,111,10,42,32,101,45,98,111,111,107,115],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568847912},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[34,{"id":34,"thread_id":16,"nr_in_thread":1,"current_text":[35,32,79,118,101,114,118,105,101,119,10,10,84,104,105,115,32,112,97,103,101,32,99,111,110,116,97,105,110,115,32,97,108,108,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,111,119,32,116,111,32,115,101,116,117,112,32,121,111,117,114,32,110,111,100,101,32,97,110,100,32,98,101,99,111,109,105,110,103,32,97,32,96,86,97,108,105,100,97,116,111,114,96,32,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,84,101,115,116,110,101,116,115,46,32,73,116,32,119,105,108,108,32,98,101,32,117,112,100,97,116,101,100,32,102,111,114,32,105,109,112,114,111,118,101,109,101,110,116,115,44,32,97,110,100,32,119,104,101,110,32,115,111,109,101,116,104,105,110,103,32,99,104,97,110,103,101,115,32,102,111,114,32,110,101,119,32,116,101,115,116,110,101,116,115,46,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,101,97,114,110,32,109,111,114,101,32,96,74,111,121,96,32,116,111,107,101,110,115,44,32,98,117,116,32,102,111,114,32,115,111,109,101,32,114,101,97,115,111,110,32,99,97,110,39,116,32,111,114,32,119,111,110,39,116,32,98,101,99,111,109,101,32,97,32,96,86,97,108,105,100,97,116,111,114,96,44,32,121,111,117,32,99,97,110,32,96,78,111,109,105,110,97,116,101,96,32,105,110,115,116,101,97,100,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568899470},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[35,{"id":35,"thread_id":17,"nr_in_thread":1,"current_text":[35,32,79,118,101,114,118,105,101,119,10,10,84,104,105,115,32,112,97,103,101,32,99,111,110,116,97,105,110,115,32,97,108,108,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,111,119,32,116,111,32,115,101,116,117,112,32,121,111,117,114,32,110,111,100,101,32,97,110,100,32,98,101,99,111,109,105,110,103,32,97,32,96,86,97,108,105,100,97,116,111,114,96,32,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,84,101,115,116,110,101,116,115,46,32,73,116,32,119,105,108,108,32,98,101,32,117,112,100,97,116,101,100,32,102,111,114,32,105,109,112,114,111,118,101,109,101,110,116,115,44,32,97,110,100,32,119,104,101,110,32,115,111,109,101,116,104,105,110,103,32,99,104,97,110,103,101,115,32,102,111,114,32,110,101,119,32,116,101,115,116,110,101,116,115,46,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,101,97,114,110,32,109,111,114,101,32,96,74,111,121,96,32,116,111,107,101,110,115,44,32,98,117,116,32,102,111,114,32,115,111,109,101,32,114,101,97,115,111,110,32,99,97,110,39,116,32,111,114,32,119,111,110,39,116,32,98,101,99,111,109,101,32,97,32,96,86,97,108,105,100,97,116,111,114,96,44,32,121,111,117,32,99,97,110,32,96,78,111,109,105,110,97,116,101,96,32,105,110,115,116,101,97,100,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568899500},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[36,{"id":36,"thread_id":18,"nr_in_thread":1,"current_text":[35,32,79,118,101,114,118,105,101,119,10,10,84,104,105,115,32,112,97,103,101,32,99,111,110,116,97,105,110,115,32,97,108,108,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,111,119,32,116,111,32,115,101,116,117,112,32,121,111,117,114,32,110,111,100,101,32,97,110,100,32,98,101,99,111,109,105,110,103,32,97,32,96,86,97,108,105,100,97,116,111,114,96,32,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,84,101,115,116,110,101,116,115,46,32,73,116,32,119,105,108,108,32,98,101,32,117,112,100,97,116,101,100,32,102,111,114,32,105,109,112,114,111,118,101,109,101,110,116,115,44,32,97,110,100,32,119,104,101,110,32,115,111,109,101,116,104,105,110,103,32,99,104,97,110,103,101,115,32,102,111,114,32,110,101,119,32,116,101,115,116,110,101,116,115,46,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,101,97,114,110,32,109,111,114,101,32,96,74,111,121,96,32,116,111,107,101,110,115,44,32,98,117,116,32,102,111,114,32,115,111,109,101,32,114,101,97,115,111,110,32,99,97,110,39,116,32,111,114,32,119,111,110,39,116,32,98,101,99,111,109,101,32,97,32,96,86,97,108,105,100,97,116,111,114,96,44,32,121,111,117,32,99,97,110,32,96,78,111,109,105,110,97,116,101,96,32,105,110,115,116,101,97,100,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568899530},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[37,{"id":37,"thread_id":19,"nr_in_thread":1,"current_text":[10,35,35,32,82,117,110,32,97,115,32,97,32,115,101,114,118,105,99,101,10,10,73,102,32,121,111,117,32,97,114,101,32,114,117,110,110,105,110,103,32,121,111,117,114,32,110,111,100,101,32,111,110,32,97,32,91,108,105,110,117,120,93,40,35,108,105,110,117,120,41,32,97,110,100,32,119,97,110,116,32,116,111,32,114,117,110,32,105,116,32,97,115,32,97,32,91,115,101,114,118,105,99,101,93,40,104,116,116,112,115,58,47,47,119,105,107,105,46,100,101,98,105,97,110,46,111,114,103,47,115,121,115,116,101,109,100,47,83,101,114,118,105,99,101,115,41,44,32,121,111,117,32,99,97,110,32,115,101,116,32,105,116,32,117,112,32,116,104,105,115,32,119,97,121,46,10,78,111,116,101,32,116,104,97,116,32,121,111,117,32,115,104,111,117,108,100,32,97,118,111,105,100,32,116,104,105,115,32,117,110,108,101,115,115,32,121,111,117,32,107,110,111,119,32,119,104,97,116,32,121,111,117,32,97,114,101,32,100,111,105,110,103,44,32,97,114,101,32,114,117,110,110,105,110,103,32,121,111,117,114,32,110,111,100,101,32,111,110,32,42,42,121,111,117,114,32,111,119,110,32,86,80,83,42,42,32,111,114,32,97,32,115,105,110,103,108,101,32,98,111,97,114,100,32,99,111,109,112,117,116,101,114,46,32,87,105,116,104,32,103,114,101,97,116,32,40,115,117,100,111,41,32,112,114,105,118,105,108,101,103,101,115,44,32,99,111,109,101,115,32,103,114,101,97,116,32,114,101,115,112,111,110,115,105,98,105,108,105,116,105,101,115,33,10,10,73,102,32,121,111,117,32,97,114,101,32,97,108,114,101,97,100,121,32,114,117,110,110,105,110,103,32,97,115,32,97,32,96,118,97,108,105,100,97,116,111,114,96,44,32,99,111,110,115,105,100,101,114,32,91,117,110,115,116,97,107,105,110,103,93,40,35,117,110,115,116,97,107,105,110,103,41,32,102,105,114,115,116,44,32,97,115,32,121,111,117,32,109,97,121,32,101,120,112,101,114,105,101,110,99,101,32,115,111,109,101,32,100,111,119,110,116,105,109,101,32,105,102,32,121,111,117,32,109,97,107,101,32,97,110,121,32,109,105,115,116,97,107,101,115,32,105,110,32,116,104,101,32,115,101,116,117,112,46,10,10,35,35,35,35,32,67,111,110,102,105,103,117,114,101,32,116,104,101,32,115,101,114,118,105,99,101,10,10,69,105,116,104,101,114,32,97,115,32,114,111,111,116,44,32,111,114,32,97,32,117,115,101,114,32,119,105,116,104,32,115,117,100,111,32,112,114,105,118,105,108,101,103,101,115,46,32,73,102,32,116,104,101,32,108,97,116,116,101,114,44,32,97,100,100,32,96,115,117,100,111,96,32,98,101,102,111,114,101,32,99,111,109,109,97,110,100,115,46,10,10,96,96,96,10,36,32,99,100,32,47,101,116,99,47,115,121,115,116,101,109,100,47,115,121,115,116,101,109,10,35,32,121,111,117,32,99,97,110,32,99,104,111,111,115,101,32,119,104,97,116,101,118,101,114,32,110,97,109,101,32,121,111,117,32,108,105,107,101,44,32,98,117,116,32,116,104,101,32,110,97,109,101,32,104,97,115,32,116,111,32,101,110,100,32,119,105,116,104,32,46,115,101,114,118,105,99,101,10,36,32,116,111,117,99,104,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,115,101,114,118,105,99,101,10,35,32,111,112,101,110,32,116,104,101,32,102,105,108,101,32,119,105,116,104,32,121,111,117,114,32,102,97,118,111,114,105,116,101,32,101,100,105,116,111,114,32,40,73,32,117,115,101,32,110,97,110,111,32,98,101,108,111,119,41,10,36,32,110,97,110,111,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,115,101,114,118,105,99,101,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568899668},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[38,{"id":38,"thread_id":20,"nr_in_thread":1,"current_text":[35,35,32,84,114,111,117,98,108,101,115,104,111,111,116,105,110,103,10,73,102,32,121,111,117,32,104,97,100,32,97,110,121,32,105,115,115,117,101,115,32,115,101,116,116,105,110,103,32,105,116,32,117,112,44,32,121,111,117,32,109,97,121,32,102,105,110,100,32,121,111,117,114,32,97,110,115,119,101,114,32,104,101,114,101,33,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568899704},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[39,{"id":39,"thread_id":21,"nr_in_thread":1,"current_text":[35,32,79,118,101,114,118,105,101,119,10,10,84,104,105,115,32,116,104,114,101,97,100,32,119,105,108,108,32,99,111,110,116,97,105,110,32,97,108,108,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,104,111,119,32,116,111,32,115,101,116,117,112,32,121,111,117,114,32,115,116,111,114,97,103,101,32,110,111,100,101,32,97,110,100,32,98,101,99,111,109,105,110,103,32,97,32,96,83,116,111,114,97,103,101,32,80,114,111,118,105,100,101,114,96,32,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,84,101,115,116,110,101,116,115,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568899968},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[40,{"id":40,"thread_id":22,"nr_in_thread":1,"current_text":[35,32,84,114,111,117,98,108,101,115,104,111,111,116,105,110,103,10,73,102,32,121,111,117,32,104,97,100,32,97,110,121,32,105,115,115,117,101,115,32,115,101,116,116,105,110,103,32,105,116,32,117,112,44,32,121,111,117,32,109,97,121,32,102,105,110,100,32,121,111,117,114,32,97,110,115,119,101,114,32,104,101,114,101,33],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568899992},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[41,{"id":41,"thread_id":23,"nr_in_thread":1,"current_text":[35,32,71,101,116,32,83,116,97,114,116,101,100,10,84,111,32,103,101,116,32,115,116,97,114,116,101,100,32,97,110,100,32,112,97,114,116,105,99,105,112,97,116,101,32,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,116,101,115,116,110,101,116,115,44,32,121,111,117,32,109,117,115,116,32,102,105,114,115,116,32,103,101,110,101,114,97,116,101,32,96,75,101,121,40,115,41,96,44,32,97,110,100,32,115,105,103,110,32,117,112,32,102,111,114,32,97,32,96,77,101,109,98,101,114,115,104,105,112,96,46,32,84,104,105,115,32,114,101,113,117,105,114,101,115,32,110,111,32,115,111,102,116,119,97,114,101,32,111,114,32,100,111,119,110,108,111,97,100,115,44,32,97,110,100,32,99,97,110,32,98,101,32,100,111,110,101,32,105,110,32,121,111,117,114,32,98,114,111,119,115,101,114,32,91,104,101,114,101,93,40,104,116,116,112,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,41,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568900298},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[42,{"id":42,"thread_id":24,"nr_in_thread":1,"current_text":[35,32,79,118,101,114,118,105,101,119,10,10,84,104,105,115,32,112,97,103,101,32,99,111,110,116,97,105,110,115,32,97,32,100,101,116,97,105,108,101,100,32,103,117,105,100,101,32,97,98,111,117,116,32,104,111,119,32,116,104,101,32,103,111,118,101,114,110,97,110,99,101,32,115,121,115,116,101,109,32,119,111,114,107,115,32,111,110,32,116,104,101,32,99,117,114,114,101,110,116,32,74,111,121,115,116,114,101,97,109,32,116,101,115,116,110,101,116,44,32,97,110,100,32,104,111,119,32,121,111,117,32,99,97,110,32,112,97,114,116,105,99,105,112,97,116,101,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568900322},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[43,{"id":43,"thread_id":25,"nr_in_thread":1,"current_text":[87,101,32,104,97,118,101,110,39,116,32,114,101,99,101,105,118,101,100,32,97,110,121,32,114,101,112,111,114,116,115,32,111,102,32,112,114,111,98,108,101,109,115,32,119,105,116,104,32,116,104,105,115,32,114,111,108,101,44,32,115,111,32,116,104,105,115,32,116,114,111,117,98,108,101,115,104,111,111,116,105,110,103,32,116,104,114,101,97,100,32,105,115,32,98,108,97,110,107,32,102,111,114,32,110,111,119,46,32,76,101,116,32,117,115,32,107,110,111,119,32,105,102,32,121,111,117,32,97,114,101,32,115,116,114,117,103,103,108,105,110,103,32,119,105,116,104,32,97,110,121,116,104,105,110,103,32,111,110,32,91,71,105,116,72,117,98,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,104,101,108,112,100,101,115,107,47,41,44,32,111,114,32,105,110,32,111,117,114,32,91,84,101,108,101,103,114,97,109,32,71,114,111,117,112,93,40,104,116,116,112,115,58,47,47,116,46,109,101,47,74,111,121,83,116,114,101,97,109,79,102,102,105,99,105,97,108,41,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568900340},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[44,{"id":44,"thread_id":26,"nr_in_thread":1,"current_text":[35,35,32,66,117,103,32,82,101,112,111,114,116,101,114,115,10,65,115,32,119,105,116,104,32,97,108,108,32,115,111,102,116,119,97,114,101,44,32,97,110,100,32,101,115,112,101,99,105,97,108,108,121,32,116,104,101,32,101,97,114,108,121,32,118,101,114,115,105,111,110,115,44,32,116,104,101,114,101,32,119,105,108,108,32,98,101,32,112,108,101,110,116,121,32,111,102,32,98,117,103,115,44,32,109,105,115,115,105,110,103,32,102,101,97,116,117,114,101,115,32,97,110,100,32,101,110,104,97,110,99,101,109,101,110,116,115,32,114,101,113,117,105,114,101,100,46,32,66,111,116,104,32,116,111,32,105,109,112,114,111,118,101,32,97,115,32,119,101,32,103,111,44,32,97,110,100,32,116,111,32,34,116,114,97,105,110,34,32,97,32,103,114,111,117,112,32,111,102,32,116,101,115,116,101,114,115,32,97,110,100,32,100,101,118,101,108,111,112,101,114,115,32,102,111,114,32,111,117,114,32,97,117,116,111,110,111,109,111,117,115,32,112,108,97,116,102,111,114,109,44,32,119,101,32,119,97,110,116,32,95,111,117,116,115,105,100,101,114,115,95,32,116,111,32,115,116,97,114,116,32,99,111,110,116,114,105,98,117,116,105,110,103,32,97,115,32,115,111,111,110,32,97,115,32,112,111,115,115,105,98,108,101,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568900400},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[45,{"id":45,"thread_id":27,"nr_in_thread":1,"current_text":[35,35,35,32,73,110,115,116,114,117,99,116,105,111,110,115,10,65,115,32,97,110,32,111,112,101,110,45,115,111,117,114,99,101,32,112,114,111,106,101,99,116,44,32,119,101,32,116,114,121,32,116,111,32,102,111,108,108,111,119,32,116,104,101,32,115,116,97,110,100,97,114,100,32,99,111,110,118,101,110,116,105,111,110,115,32,97,110,100,32,119,111,114,107,102,108,111,119,46,10,10,73,102,32,121,111,117,32,102,105,110,100,32,97,32,98,117,103,44,32,111,114,32,119,97,110,116,32,116,111,32,105,109,112,114,111,118,101,32,111,114,32,97,100,100,32,115,111,109,101,116,104,105,110,103,32,105,110,32,116,104,101,32,99,111,100,101,44,32,100,111,99,117,109,101,110,116,97,116,105,111,110,115,32,111,114,32,103,117,105,100,101,115,44,32,108,111,99,97,116,101,32,116,104,101,32,99,111,114,114,101,99,116,32,114,101,112,111,32,102,114,111,109,32,116,104,101,32,111,114,103,97,110,105,122,97,116,105,111,110,32,91,105,110,100,101,120,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,35,114,101,112,111,115,105,116,111,114,121,45,105,110,100,101,120,41,46,32,70,111,114,107,32,116,104,101,32,114,101,112,111,44,32,109,97,107,101,32,116,104,101,32,99,104,97,110,103,101,115,32,121,111,117,32,119,97,110,116,32,116,111,32,97,100,100,114,101,115,115,44,32,97,110,100,32,99,114,101,97,116,101,32,97,32,96,80,117,108,108,32,114,101,113,117,101,115,116,96,46,32,70,111,114,32,111,117,114,32,109,117,116,117,97,108,32,99,111,110,118,101,110,105,101,110,99,101,44,32,105,116,32,119,111,117,108,100,32,98,101,32,110,105,99,101,32,105,102,32,121,111,117,32,114,97,105,115,101,100,32,97,110,32,96,73,115,115,117,101,96,32,102,105,114,115,116,32,115,111,32,119,101,32,99,97,110,32,97,103,114,101,101,32,111,110,32,116,104,101,32,115,99,111,112,101,44,32,116,104,101,32,115,105,122,101,32,111,102,32,116,104,101,32,98,111,117,110,116,121,32,97,110,100,32,109,97,107,101,32,115,117,114,101,32,116,104,105,115,32,105,115,32,115,111,109,101,116,104,105,110,103,32,119,101,32,119,97,110,116,47,110,101,101,100,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568900484},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[46,{"id":46,"thread_id":12,"nr_in_thread":2,"current_text":[35,35,35,35,32,83,99,111,112,101,32,111,102,32,87,111,114,107,32,38,32,68,101,108,105,118,101,114,97,98,108,101,115,10,70,111,114,107,32,116,104,101,32,114,101,112,111,44,32,97,110,100,32,102,105,120,32,119,104,97,116,32,105,115,32,98,114,111,107,101,110,46,32,84,104,101,110,32,109,97,107,101,32,97,32,80,82,32,105,110,32,116,104,101,32,97,112,112,108,105,99,97,98,108,101,32,114,101,112,111,44,32,97,110,100,32,114,101,102,101,114,32,116,111,32,105,116,32,97,32,114,101,112,108,121,32,97,110,115,119,101,114,32,105,110,32,116,104,105,115,32,116,104,114,101,97,100,32,111,114,32,116,104,101,32,71,105,116,72,117,98,32,105,115,115,117,101,46,10,10,65,112,112,108,105,99,97,98,108,101,32,114,101,112,111,115,32,97,114,101,58,10,10,42,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,10,42,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,104,101,108,112,100,101,115,107,10,42,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,99,111,109,109,117,110,105,99,97,116,105,111,110,115,10,42,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,10,42,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,100,101,115,105,103,110],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568997744},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[47,{"id":47,"thread_id":12,"nr_in_thread":3,"current_text":[35,35,35,35,32,67,111,110,115,116,114,97,105,110,116,115,10,49,46,32,65,108,116,104,111,117,103,104,32,115,117,103,103,101,115,116,105,111,110,115,32,102,111,114,32,99,108,97,114,105,102,105,99,97,116,105,111,110,115,44,32,105,109,112,114,111,118,101,109,101,110,116,115,44,32,101,116,99,46,32,97,114,101,32,97,108,119,97,121,115,32,119,101,108,99,111,109,101,44,32,112,108,101,97,115,101,32,97,100,100,32,116,104,101,109,32,97,115,32,99,111,109,109,101,110,116,115,32,105,110,115,116,101,97,100,32,111,102,32,105,110,99,108,117,100,105,110,103,32,116,104,101,109,32,105,110,32,116,104,101,32,80,82,32,105,116,115,101,108,102,44,32,116,111,32,109,97,107,101,32,116,104,101,32,80,82,32,101,97,115,105,101,114,32,116,111,32,114,101,118,105,101,119,46,32,73,102,32,116,104,101,32,114,101,118,105,101,119,101,114,32,97,103,114,101,101,115,32,119,105,116,104,32,121,111,117,114,32,115,117,103,103,101,115,116,105,111,110,44,32,121,111,117,32,99,97,110,32,97,100,100,32,97,32,110,101,119,32,99,111,109,109,105,116,32,116,111,32,116,104,101,32,80,82,46,10,50,46,32,65,108,108,32,108,105,110,107,115,32,119,105,116,104,105,110,32,116,104,101,32,115,97,109,101,32,114,101,112,111,32,109,117,115,116,32,98,101,32,114,101,108,97,116,105,118,101,32,105,110,115,116,101,97,100,32,111,102,32,97,98,115,111,108,117,116,101,46,32,69,120,97,109,112,108,101,58,10,10,96,96,96,10,35,32,70,114,111,109,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,47,116,114,101,101,47,109,97,115,116,101,114,47,116,101,115,116,110,101,116,115,47,97,99,114,111,112,111,108,105,115,10,35,32,89,111,117,32,119,97,110,116,32,116,111,32,108,105,110,107,32,116,111,58,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,47,116,114,101,101,47,109,97,115,116,101,114,47,109,101,101,116,105,110,103,115,47,97,99,114,111,112,111,108,105,115,35,108,97,117,110,99,104,45,109,101,101,116,105,110,103,10,35,32,68,111,32,116,104,105,115,58,10,91,108,105,110,107,93,40,46,46,47,46,46,47,109,101,101,116,105,110,103,115,47,97,99,114,111,112,111,108,105,115,47,35,108,97,117,110,99,104,45,109,101,101,116,105,110,103,41,10,35,32,78,111,116,32,116,104,105,115,58,10,91,108,105,110,107,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,47,116,114,101,101,47,109,97,115,116,101,114,47,109,101,101,116,105,110,103,115,47,97,99,114,111,112,111,108,105,115,35,108,97,117,110,99,104,45,109,101,101,116,105,110,103,41,10,96,96,96,10,10,51,46,32,87,104,101,110,32,121,111,117,32,115,116,97,114,116,32,119,111,114,107,105,110,103,44,32,102,101,101,108,32,102,114,101,101,32,116,111,32,109,97,107,101,32,97,32,100,114,97,102,116,32,80,82,32,116,111,32,115,104,111,119,32,121,111,117,114,32,105,110,116,101,110,116,44,32,98,117,116,32,112,114,101,102,101,114,97,98,108,121,32,99,104,101,99,107,32,116,104,101,32,101,110,116,105,114,101,32,114,101,112,111,32,98,101,102,111,114,101,10,80,114,101,102,101,114,97,98,108,121,32,103,111,32,116,104,114,111,117,103,104,32,95,97,108,108,95,32,116,104,101,32,108,105,110,107,115,32,98,101,102,111,114,101,32,109,97,114,107,105,110,103,32,105,116,32,114,101,97,100,121,32,102,111,114,32,114,101,118,105,101,119,44,32,97,110,100,32,97,115,115,105,103,110,105,110,103,32,115,111,109,101,111,110,101,32,116,111,32,114,101,118,105,101,119,32,121,111,117,114,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568997768},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[48,{"id":48,"thread_id":12,"nr_in_thread":4,"current_text":[95,85,112,100,97,116,101,32,45,32,48,53,46,48,56,46,49,57,95,10,10,52,46,32,80,108,101,97,115,101,32,117,115,101,32,85,83,32,69,110,103,108,105,115,104,32,115,112,101,108,108,105,110,103,32,102,111,114,32,99,111,110,115,105,115,116,101,110,99,121,32,97,99,114,111,115,115,32,116,104,101,32,111,114,103,97,110,105,122,97,116,105,111,110,46,10,53,46,32,73,100,101,97,108,108,121,44,32,117,115,101,32,91,97,116,111,109,93,40,104,116,116,112,115,58,47,47,97,116,111,109,46,105,111,47,41,32,97,115,32,121,111,117,114,32,101,100,105,116,111,114,44,32,97,110,100,32,97,100,100,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,112,108,117,103,105,110,115,58,10,10,42,32,91,109,97,114,107,100,111,119,110,45,112,114,101,118,105,101,119,45,101,110,104,97,110,99,101,100,93,40,104,116,116,112,115,58,47,47,97,116,111,109,46,105,111,47,112,97,99,107,97,103,101,115,47,109,97,114,107,100,111,119,110,45,112,114,101,118,105,101,119,45,101,110,104,97,110,99,101,100,41,10,42,32,91,109,97,114,107,100,111,119,110,45,116,111,99,45,97,117,116,111,93,40,104,116,116,112,115,58,47,47,97,116,111,109,46,105,111,47,112,97,99,107,97,103,101,115,47,109,97,114,107,100,111,119,110,45,116,111,99,45,97,117,116,111,41,10,10,84,111,32,101,110,115,117,114,101,32,105,116,32,114,101,110,100,101,114,115,32,99,111,114,114,101,99,116,108,121,46,10,10,35,35,35,35,32,66,111,117,110,116,121,32,102,111,114,109,97,116,10,70,105,114,115,116,32,99,111,109,101,32,102,105,114,115,116,32,115,101,114,118,101,46,32,80,97,121,32,111,117,116,32,111,110,32,100,101,108,105,118,101,114,121,46,10,70,111,114,32,111,117,114,32,99,111,110,118,101,110,105,101,110,99,101,44,32,97,100,100,32,97,32,99,111,109,109,101,110,116,32,97,110,100,32,108,105,110,107,32,116,111,32,116,104,101,32,80,82,32,105,110,32,116,104,105,115,32,105,115,115,117,101,44,32,119,105,116,104,32,110,117,109,98,101,114,32,111,102,32,102,105,120,101,115,32,97,110,100,32,101,120,112,101,99,116,101,100,32,112,97,121,111,117,116,115,46,10,10,35,35,35,35,32,68,101,97,100,108,105,110,101,10,87,105,108,108,32,109,111,115,116,32,108,105,107,101,108,121,32,98,101,32,107,101,112,116,32,111,112,101,110,32,102,111,114,32,121,101,97,114,115,46,32,87,105,108,108,32,104,111,110,111,114,32,99,111,110,116,114,105,98,117,116,105,111,110,115,32,52,56,104,32,97,102,116,101,114,32,99,108,111,115,105,110,103,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568997828},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[49,{"id":49,"thread_id":12,"nr_in_thread":5,"current_text":[35,35,32,84,111,32,115,101,101,32,102,117,114,116,104,101,114,32,99,111,110,118,101,114,115,97,116,105,111,110,115,32,97,98,111,117,116,32,116,104,105,115,32,98,111,117,110,116,121,32,97,110,100,32,116,111,32,112,111,115,116,32,121,111,117,114,32,99,111,110,116,114,105,98,117,116,105,111,110,115,44,32,112,108,101,97,115,101,32,118,105,115,105,116,32,116,104,101,32,91,71,105,116,72,117,98,32,105,115,115,117,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,47,105,115,115,117,101,115,47,51,41,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568997972},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[50,{"id":50,"thread_id":11,"nr_in_thread":2,"current_text":[74,115,103,101,110,101,115,105,115,32,105,115,32,97,108,115,111,32,109,97,107,105,110,103,32,119,101,101,107,108,121,32,112,97,121,111,117,116,115,32,102,111,114,32,112,97,114,116,105,99,105,112,97,116,105,111,110,32,111,110,32,116,104,101,32,91,74,111,121,115,116,114,101,97,109,32,116,101,115,116,110,101,116,115,93,40,104,116,116,112,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,41,46,32,77,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,119,104,97,116,32,121,111,117,32,99,97,110,44,32,119,104,97,116,32,121,111,117,32,99,97,110,32,109,97,107,101,44,32,97,110,100,32,119,104,121,32,119,101,39,114,101,32,100,111,105,110,103,32,116,104,105,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,111,117,114,32,91,104,101,108,112,100,101,115,107,32,114,101,112,111,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,104,101,108,112,100,101,115,107,41,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998146},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[51,{"id":51,"thread_id":11,"nr_in_thread":3,"current_text":[42,42,75,101,101,112,32,105,110,32,109,105,110,100,32,116,104,97,116,32,111,117,114,32,98,111,117,110,116,121,32,115,121,115,116,101,109,32,105,115,32,97,32,87,73,80,44,32,97,110,100,32,105,116,32,115,104,111,117,108,100,32,98,101,32,101,120,112,101,99,116,101,100,32,116,104,97,116,32,99,104,97,110,103,101,115,32,116,111,32,116,104,101,32,112,114,111,99,101,115,115,32,119,105,108,108,32,98,101,32,109,97,100,101,32,97,115,32,116,104,101,32,112,114,111,106,101,99,116,32,103,114,111,119,115,46,42,42],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998176},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[52,{"id":52,"thread_id":11,"nr_in_thread":4,"current_text":[10,35,35,32,83,117,109,109,97,114,121,32,111,102,32,66,111,117,110,116,105,101,115,10,10,124,32,76,97,115,116,32,85,112,100,97,116,101,100,32,124,32,66,111,117,110,116,105,101,115,32,67,111,110,99,108,117,100,101,100,32,124,32,79,110,103,111,105,110,103,32,66,111,117,110,116,105,101,115,32,124,32,79,102,102,105,99,105,97,108,108,121,32,80,97,105,100,32,124,32,79,108,100,32,80,97,121,111,117,116,115,96,42,96,32,32,124,10,124,58,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,10,124,32,49,55,46,48,55,46,49,57,32,32,32,32,32,124,32,32,32,32,32,32,32,32,48,32,32,32,32,32,32,32,32,32,32,32,124,32,32,32,32,32,32,32,32,32,51,32,32,32,32,32,32,32,32,124,32,32,32,32,42,42,36,54,50,54,42,42,32,32,32,32,32,124,32,32,32,32,32,42,42,36,50,49,52,42,42,32,32,32,32,124,10,10,96,42,96,32,68,101,110,111,116,101,115,32,98,111,117,110,116,105,101,115,32,112,97,105,100,32,111,117,116,32,98,101,102,111,114,101,32,116,104,101,32,34,111,102,102,105,99,105,97,108,34,32,114,101,112,111,32,119,97,115,32,117,112,46,32,83,111,109,101,32,111,102,32,116,104,101,115,101,32,98,111,117,110,116,105,101,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,105,110,32,111,116,104,101,114,32,114,101,112,111,115,44,32,115,111,109,101,32,119,101,114,101,32,115,105,109,112,108,121,32,112,111,115,116,101,100,32,111,110,32,84,101,108,101,103,114,97,109,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998218},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[53,{"id":53,"thread_id":11,"nr_in_thread":5,"current_text":[35,35,32,83,117,109,109,97,114,121,32,111,102,32,84,101,115,116,110,101,116,32,80,97,114,116,105,99,105,112,97,116,105,111,110,32,80,97,121,111,117,116,115,10,10,35,35,35,32,84,111,116,97,108,10,10,124,32,76,97,115,116,32,85,112,100,97,116,101,100,32,124,32,86,97,108,105,100,97,116,111,114,115,32,124,32,67,111,117,110,99,105,108,32,77,101,109,98,101,114,115,32,124,32,83,116,111,114,97,103,101,32,80,114,111,118,105,100,101,114,115,124,32,84,111,116,97,108,32,32,32,32,32,32,32,32,32,32,32,124,10,124,58,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,10,124,32,48,50,46,48,56,46,49,57,32,32,32,32,32,124,32,32,32,32,36,56,53,55,32,32,32,32,124,32,32,32,32,32,32,36,57,51,55,32,32,32,32,32,32,32,124,32,32,32,32,32,36,51,56,51,57,32,32,32,32,32,32,32,32,124,32,32,32,42,42,36,53,54,51,51,42,42,32,32,32,32,32,124,10,10,10,35,35,35,32,65,99,114,111,112,111,108,105,115,10,10,124,32,76,97,115,116,32,85,112,100,97,116,101,100,32,124,32,86,97,108,105,100,97,116,111,114,115,32,124,32,67,111,117,110,99,105,108,32,77,101,109,98,101,114,115,32,124,32,83,116,111,114,97,103,101,32,80,114,111,118,105,100,101,114,115,124,32,84,111,116,97,108,32,32,32,32,32,32,32,32,32,32,32,124,10,124,58,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,10,124,32,48,50,46,48,56,46,49,57,32,32,32,32,32,124,32,32,32,32,36,52,56,51,32,32,32,32,124,32,32,32,32,32,32,36,53,49,48,32,32,32,32,32,32,32,124,32,32,32,32,32,32,36,51,48,54,52,32,32,32,32,32,32,32,124,32,32,32,32,42,42,36,52,48,53,55,42,42,32,32,32,32,124,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998248},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[54,{"id":54,"thread_id":11,"nr_in_thread":6,"current_text":[35,35,35,32,65,116,104,101,110,115,10,10,124,32,76,97,115,116,32,85,112,100,97,116,101,100,32,124,32,86,97,108,105,100,97,116,111,114,115,32,124,32,67,111,117,110,99,105,108,32,77,101,109,98,101,114,115,32,124,32,83,116,111,114,97,103,101,32,80,114,111,118,105,100,101,114,115,124,32,84,111,116,97,108,32,32,32,32,32,32,32,32,32,32,32,124,10,124,58,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,10,124,32,50,52,46,48,54,46,49,57,32,32,32,32,32,124,32,32,32,32,32,36,50,54,51,32,32,32,124,32,32,32,32,32,32,32,36,50,55,50,32,32,32,32,32,32,124,32,32,32,32,32,32,36,55,55,53,32,32,32,32,32,32,32,32,124,32,32,32,42,42,36,49,51,49,48,42,42,32,32,32,32,32,124,10,10,10,35,35,35,32,83,112,97,114,116,97,10,10,124,32,76,97,115,116,32,85,112,100,97,116,101,100,32,124,32,86,97,108,105,100,97,116,111,114,115,32,124,32,67,111,117,110,99,105,108,32,77,101,109,98,101,114,115,32,124,32,32,32,32,32,84,111,116,97,108,32,32,32,32,32,32,32,124,10,124,58,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,58,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,58,124,10,124,32,48,49,46,48,52,46,49,57,32,32,32,32,32,124,32,32,32,32,32,36,49,49,49,32,32,32,124,32,32,32,32,32,32,36,49,53,53,32,32,32,32,32,32,32,124,32,32,32,32,32,42,42,36,50,54,54,42,42,32,32,32,32,124],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998266},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[55,{"id":55,"thread_id":11,"nr_in_thread":7,"current_text":[35,35,32,66,111,117,110,116,105,101,115,10,10,45,32,42,42,78,117,109,98,101,114,42,42,10,32,32,45,32,87,104,101,110,32,97,32,98,111,117,110,116,121,32,98,101,99,111,109,101,115,32,96,97,99,116,105,118,101,96,44,32,105,116,32,119,105,108,108,32,98,101,32,97,115,115,105,103,110,101,100,32,97,32,110,117,109,98,101,114,32,98,97,115,101,100,32,111,110,32,105,116,115,32,99,104,114,111,110,111,108,111,103,105,99,97,108,32,111,114,100,101,114,46,10,10,45,32,42,42,84,105,116,108,101,42,42,10,32,32,45,32,65,32,98,114,105,101,102,44,32,100,101,115,99,114,105,112,116,105,118,101,32,116,105,116,108,101,10,10,45,32,42,42,76,105,110,107,42,42,10,32,32,45,32,76,105,110,107,32,116,111,32,116,104,101,32,91,105,115,115,117,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,47,105,115,115,117,101,115,41,32,119,105,116,104,32,100,101,116,97,105,108,115,46,10,10,45,32,42,42,67,97,116,101,103,111,114,121,42,42,10,40,110,111,110,45,101,120,104,97,117,115,116,105,118,101,41,10,32,32,45,32,96,66,117,103,32,102,105,120,96,10,32,32,45,32,96,84,101,115,116,105,110,103,96,10,32,32,45,32,96,68,111,99,117,109,101,110,116,97,116,105,111,110,96,10,32,32,45,32,96,73,109,112,114,111,118,101,109,101,110,116,115,96,10,32,32,45,32,96,77,97,114,107,101,116,105,110,103,96,10,32,32,45,32,96,71,111,118,101,114,110,97,110,99,101,96,10,32,32,45,32,96,78,101,119,32,102,101,97,116,117,114,101,96,10,32,32,45,32,96,80,114,111,106,101,99,116,32,109,97,110,97,103,101,109,101,110,116,96,10,32,32,45,32,96,72,101,108,112,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998302},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[56,{"id":56,"thread_id":11,"nr_in_thread":8,"current_text":[45,32,42,42,83,116,97,114,116,32,68,97,116,101,42,42,10,32,32,45,32,84,104,101,32,100,97,116,101,32,116,104,101,32,98,111,117,110,116,121,32,98,101,99,97,109,101,32,96,97,99,116,105,118,101,96,10,10,45,32,42,42,65,115,115,105,103,110,101,101,40,115,41,42,42,10,32,32,45,32,73,102,32,97,110,32,97,112,112,108,105,99,97,110,116,32,104,97,115,32,98,101,101,110,32,97,112,112,114,111,118,101,100,32,116,111,32,115,116,97,114,116,32,119,111,114,107,44,32,116,104,101,32,112,101,114,115,111,110,39,115,32,71,105,116,72,117,98,32,96,85,115,101,114,110,97,109,101,96,32,119,105,108,108,32,98,101,32,108,105,115,116,101,100,46,10,32,32,45,32,73,110,32,115,111,109,101,32,99,105,114,99,117,109,115,116,97,110,99,101,115,44,32,105,116,32,99,97,110,32,98,101,32,97,99,99,101,112,116,97,98,108,101,32,116,111,32,106,117,115,116,32,115,116,97,116,101,32,96,65,115,115,105,103,110,101,100,96,46,10,10,45,32,42,42,83,116,97,116,117,115,42,42,10,32,32,45,32,65,99,116,105,118,101,32,66,111,117,110,116,105,101,115,10,32,32,32,32,45,32,96,79,112,101,110,96,10,32,32,32,32,45,32,96,65,115,115,105,103,110,101,100,96,10,32,32,32,32,45,32,96,85,110,100,101,114,32,114,101,118,105,101,119,96,10,32,32,32,32,45,32,96,79,110,32,72,111,108,100,96,10,32,32,45,32,67,111,110,99,108,117,100,101,100,32,66,111,117,110,116,105,101,115,10,32,32,32,32,45,32,96,67,111,109,112,108,101,116,101,100,96,10,32,32,32,32,45,32,96,69,120,112,105,114,101,100,96,10,32,32,32,32,45,32,96,65,98,111,114,116,101,100,96,10,32,32,45,32,77,111,114,101,32,100,101,116,97,105,108,115,32,111,110,32,116,104,101,32,115,116,97,116,117,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,98,121,32,102,111,108,108,111,119,105,110,103,32,116,104,101,32,108,105,110,107,32,102,111,114,32,116,104,101,32,112,114,111,112,111,115,97,108,32,111,102,32,105,110,116,101,114,101,115,116,46,10,10,45,32,42,42,80,97,105,100,42,42,10,32,32,45,32,84,104,101,32,97,109,111,117,110,116,32,112,97,105,100,32,111,117,116,32,116,104,117,115,32,102,97,114,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998314},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[57,{"id":57,"thread_id":11,"nr_in_thread":9,"current_text":[45,32,42,42,66,111,117,110,116,121,42,42,10,32,32,45,32,65,99,116,105,118,101,32,66,111,117,110,116,105,101,115,10,32,32,32,32,45,32,84,104,101,32,118,97,108,117,101,32,111,102,32,116,104,101,32,98,111,117,110,116,121,46,10,32,32,45,32,67,111,110,99,108,117,100,101,100,32,66,111,117,110,116,105,101,115,10,32,32,32,32,45,32,84,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,112,97,105,100,32,111,117,116,46,10,32,32,45,32,73,102,32,116,104,101,32,97,109,111,117,110,116,32,105,115,32,102,111,108,108,111,119,101,100,32,98,121,32,96,42,96,44,32,99,111,110,115,117,108,116,32,116,104,101,32,108,105,110,107,101,100,32,91,105,115,115,117,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,47,105,115,115,117,101,115,41,32,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,46,10,10,45,32,42,42,69,110,100,32,68,97,116,101,42,42,10,32,32,45,32,84,104,101,32,100,97,116,101,32,116,104,101,32,98,111,117,110,116,121,32,119,97,115,32,96,99,111,110,99,108,117,100,101,100,96,10,10,45,32,42,42,67,108,97,105,109,97,110,116,40,115,41,42,42,10,32,32,45,32,73,102,32,116,104,101,32,98,111,117,110,116,121,32,119,97,115,32,115,117,99,99,101,115,115,102,117,108,108,121,32,99,108,97,105,109,101,100,44,32,116,104,101,32,112,101,114,115,111,110,39,115,32,71,105,116,72,117,98,32,96,85,115,101,114,110,97,109,101,96,32,119,105,108,108,32,98,101,32,108,105,115,116,101,100,46,10,32,32,45,32,73,110,32,115,111,109,101,32,99,105,114,99,117,109,115,116,97,110,99,101,115,44,32,105,116,32,99,97,110,32,98,101,32,97,99,99,101,112,116,97,98,108,101,32,116,111,32,106,117,115,116,32,115,116,97,116,101,32,96,67,108,97,105,109,101,100,96,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998374},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[58,{"id":58,"thread_id":11,"nr_in_thread":10,"current_text":[35,35,32,80,114,111,112,111,115,97,108,115,10,10,73,110,32,97,100,100,105,116,105,111,110,32,116,111,32,116,104,101,32,74,115,103,101,110,101,115,105,115,32,116,101,97,109,44,32,99,111,109,109,117,110,105,116,121,32,109,101,109,98,101,114,115,44,32,110,101,119,32,97,110,100,32,111,108,100,44,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,97,102,114,97,105,100,32,116,111,32,112,114,111,112,111,115,101,32,98,111,117,110,116,105,101,115,46,32,65,116,32,115,111,109,101,32,112,111,105,110,116,44,32,119,101,32,104,111,112,101,32,116,111,32,99,114,101,97,116,101,32,97,32,115,121,115,116,101,109,32,101,105,116,104,101,114,32,115,105,109,105,108,97,114,32,116,111,32,116,104,101,32,91,66,73,80,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,98,105,116,99,111,105,110,47,98,105,112,115,41,32,112,114,111,99,101,115,115,32,102,111,114,32,98,105,116,99,111,105,110,32,97,110,100,47,111,114,32,116,111,32,116,104,101,32,91,70,70,83,93,40,104,116,116,112,115,58,47,47,102,111,114,117,109,46,103,101,116,109,111,110,101,114,111,46,111,114,103,47,57,47,119,111,114,107,45,105,110,45,112,114,111,103,114,101,115,115,41,32,115,121,115,116,101,109,32,102,111,114,32,109,111,110,101,114,111,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998488},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[59,{"id":59,"thread_id":11,"nr_in_thread":11,"current_text":[35,35,35,32,83,116,101,112,32,98,121,32,83,116,101,112,10,10,84,104,105,115,32,115,101,99,116,105,111,110,32,111,117,116,108,105,110,101,115,32,116,104,101,32,115,116,101,112,115,32,102,114,111,109,32,97,32,112,114,111,112,111,115,97,108,115,32,105,115,32,109,97,100,101,44,32,116,111,32,104,97,118,101,32,105,116,32,98,101,99,111,109,101,32,97,110,32,91,65,99,116,105,118,101,32,66,111,117,110,116,121,93,40,35,97,99,116,105,118,101,45,98,111,117,110,116,105,101,115,41,46,10,10,49,46,32,73,102,32,121,111,117,32,97,114,101,32,110,111,116,32,102,97,109,105,108,105,97,114,32,119,105,116,104,32,116,104,101,32,112,114,111,106,101,99,116,32,97,110,100,32,105,116,115,32,103,111,97,108,115,44,32,99,111,110,115,105,100,101,114,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,111,117,114,99,101,115,58,10,32,32,45,32,84,104,101,32,112,114,111,106,101,99,116,32,91,109,97,110,105,102,101,115,116,111,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,109,97,110,105,102,101,115,116,111,41,46,10,32,32,45,32,84,104,101,32,112,114,111,106,101,99,116,32,91,119,104,105,116,101,112,97,112,101,114,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,119,104,105,116,101,112,97,112,101,114,41,46,10,32,32,45,32,79,117,114,32,108,111,110,103,32,111,114,32,115,104,111,114,116,32,116,101,114,109,32,91,79,75,82,115,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,47,116,114,101,101,47,109,97,115,116,101,114,47,111,107,114,115,41,46,10,89,111,117,114,32,112,114,111,112,111,115,97,108,32,115,104,111,117,108,100,32,112,114,101,102,101,114,97,98,108,121,32,98,101,32,105,110,32,108,105,110,101,32,119,105,116,104,44,32,111,114,32,97,116,32,108,101,97,115,116,32,110,111,116,32,111,114,116,104,111,103,111,110,97,108,32,116,111,32,116,104,101,115,101,32,115,111,117,114,99,101,115,46,32,82,101,102,101,114,114,105,110,103,32,116,111,32,97,110,32,105,115,115,117,101,32,102,114,111,109,32,111,110,101,32,111,102,32,111,117,114,32,111,116,104,101,114,32,114,101,112,111,115,32,99,97,110,32,97,108,115,111,32,98,101,32,97,32,103,111,111,100,32,115,111,117,114,99,101,46,10,10,73,102,32,121,111,117,32,104,97,118,101,32,97,32,112,114,111,112,111,115,97,108,32,116,104,97,116,32,100,111,101,115,32,110,111,116,32,114,101,97,108,108,121,32,102,105,116,32,117,110,100,101,114,32,97,110,121,32,111,102,32,116,104,101,32,97,98,111,118,101,44,32,102,101,101,108,32,102,114,101,101,32,116,111,32,103,97,117,103,101,32,116,104,101,32,105,110,116,101,114,101,115,116,32,97,110,100,32,114,101,108,101,118,97,110,99,101,32,105,110,32,97,32,109,111,114,101,32,105,110,102,111,114,109,97,108,32,109,97,110,110,101,114,44,32,101,46,103,46,32,105,110,32,111,110,101,32,111,102,32,111,117,114,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,99,104,97,110,110,101,108,115,44,32,115,117,99,104,32,97,115,32,91,84,101,108,101,103,114,97,109,93,40,104,116,116,112,115,58,47,47,116,46,109,101,47,74,111,121,83,116,114,101,97,109,79,102,102,105,99,105,97,108,41,44,32,111,114,32,116,104,101,32,102,111,114,117,109,44,32,97,102,116,101,114,32,105,116,32,104,97,115,32,98,101,101,110,32,105,110,116,114,111,100,117,99,101,100,32,105,110,32,91,65,99,114,111,112,111,108,105,115,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,47,116,114,101,101,47,109,97,115,116,101,114,47,116,101,115,116,110,101,116,115,47,97,99,114,111,112,111,108,105,115,41,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998506},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[60,{"id":60,"thread_id":11,"nr_in_thread":12,"current_text":[50,46,32,77,97,107,101,32,97,110,32,91,105,115,115,117,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,47,105,115,115,117,101,115,41,32,105,110,32,116,104,101,32,98,111,117,110,116,105,101,115,32,114,101,112,111,44,32,115,116,114,117,99,116,117,114,101,100,32,97,115,32,102,111,108,108,111,119,115,58,10,10,10,35,35,35,35,32,84,105,116,108,101,10,10,45,32,42,42,74,67,80,42,42,32,45,32,42,42,68,101,115,99,114,105,112,116,105,118,101,32,84,105,116,108,101,42,42,10,10,35,35,35,35,35,32,66,111,100,121,10,10,45,32,42,42,80,114,111,98,108,101,109,58,42,42,10,80,114,111,118,105,100,101,32,97,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,112,114,111,98,108,101,109,32,111,114,32,105,109,112,114,111,118,101,109,101,110,116,32,121,111,117,32,119,105,115,104,32,116,111,32,115,101,101,32,105,109,112,108,101,109,101,110,116,101,100,46,10,45,32,42,42,71,111,97,108,115,58,42,42,10,65,32,98,114,105,101,102,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,32,116,104,101,32,103,111,97,108,115,32,121,111,117,32,104,111,112,101,32,116,111,32,97,99,104,105,101,118,101,44,32,97,110,100,32,104,111,119,32,105,116,32,119,105,108,108,32,98,101,110,101,102,105,116,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,80,114,111,106,101,99,116,46,10,10,84,104,101,115,101,32,97,114,101,32,116,104,101,32,109,105,110,105,109,117,109,32,114,101,113,117,105,114,101,109,101,110,116,115,44,32,98,117,116,32,121,111,117,32,97,114,101,32,101,110,99,111,117,114,97,103,101,100,32,116,111,32,108,111,111,107,32,97,116,32,116,104,101,32,91,98,111,117,110,116,121,32,115,116,114,117,99,116,117,114,101,93,40,35,98,111,100,121,45,49,41,32,102,111,114,32,97,110,121,116,104,105,110,103,32,101,120,116,114,97,32,116,111,32,97,100,100,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998536},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[61,{"id":61,"thread_id":11,"nr_in_thread":13,"current_text":[51,46,32,73,102,32,121,111,117,32,119,105,115,104,44,32,97,110,110,111,117,110,99,101,32,121,111,117,114,32,112,114,111,112,111,115,97,108,32,105,110,32,111,110,101,32,111,102,32,111,117,114,32,99,111,109,109,117,110,105,99,97,116,105,111,110,32,99,104,97,110,110,101,108,115,32,109,101,110,116,105,111,110,101,100,32,97,98,111,118,101,46,32,84,104,105,115,32,119,105,108,108,32,108,105,107,101,108,121,32,103,101,110,101,114,97,116,101,32,109,111,114,101,32,102,101,101,100,98,97,99,107,46,10,10,52,46,32,65,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,74,115,103,101,110,101,115,105,115,32,116,101,97,109,32,119,105,108,108,32,114,101,112,108,121,32,105,110,32,97,32,116,105,109,101,108,121,32,109,97,110,110,101,114,44,32,97,115,107,105,110,103,32,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,44,32,114,101,106,101,99,116,105,110,103,32,111,114,32,97,112,112,114,111,118,105,110,103,32,121,111,117,114,32,112,114,111,112,111,115,97,108,46,10,10,53,46,32,73,102,32,105,116,32,103,101,116,115,32,97,112,112,114,111,118,101,100,44,32,74,115,103,101,110,101,115,105,115,32,119,105,108,108,32,101,105,116,104,101,114,32,119,114,105,116,101,32,97,110,100,32,97,110,110,111,117,110,99,101,32,116,104,101,32,98,111,117,110,116,121,32,97,115,32,100,101,115,99,114,105,98,101,100,32,98,101,108,111,119,44,32,111,114,32,100,101,108,101,103,97,116,101,32,116,104,101,32,114,101,115,112,111,110,115,105,98,105,108,105,116,121,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998548},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[62,{"id":62,"thread_id":11,"nr_in_thread":14,"current_text":[35,35,35,32,65,110,110,111,117,110,99,105,110,103,32,65,99,116,105,118,101,32,66,111,117,110,116,105,101,115,10,10,87,104,101,110,32,97,32,91,112,114,111,112,111,115,97,108,93,40,35,112,114,111,112,111,115,97,108,115,41,32,104,97,115,32,98,101,101,110,32,97,112,112,114,111,118,101,100,44,32,111,114,32,74,115,103,101,110,101,115,105,115,32,104,97,118,101,32,105,100,101,110,116,105,102,105,101,100,32,115,111,109,101,116,104,105,110,103,32,115,117,105,116,97,98,108,101,32,102,111,114,32,97,32,98,111,117,110,116,121,44,32,105,116,32,119,105,108,108,32,98,101,32,97,110,110,111,117,110,99,101,100,32,97,115,32,97,110,32,91,105,115,115,117,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,47,105,115,115,117,101,115,41,44,32,97,110,100,32,97,100,100,101,100,32,116,111,32,116,104,101,32,91,65,99,116,105,118,101,32,66,111,117,110,116,105,101,115,93,40,35,97,99,116,105,118,101,45,98,111,117,110,116,105,101,115,41,32,116,97,98,108,101,46,10,10,72,111,119,32,116,104,101,32,112,114,111,99,101,115,115,32,108,111,111,107,115,32,102,114,111,109,32,116,104,101,32,96,65,99,116,105,118,101,96,32,115,116,97,103,101,32,116,111,32,96,67,111,110,99,108,117,100,101,100,96,32,119,105,108,108,32,100,101,112,101,110,100,32,111,110,32,116,104,101,32,115,99,111,112,101,32,111,102,32,119,111,114,107,44,32,42,42,67,97,116,101,103,111,114,121,42,42,44,32,112,97,121,111,117,116,32,115,116,114,117,99,116,117,114,101,44,32,101,116,99,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998578},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[63,{"id":63,"thread_id":11,"nr_in_thread":15,"current_text":[35,35,32,70,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,98,111,117,110,116,105,101,115,44,32,112,108,101,97,115,101,32,118,105,115,105,116,32,116,104,101,32,91,106,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,47,41,32,114,101,112,111,115,105,116,111,114,121,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568998830},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[64,{"id":64,"thread_id":13,"nr_in_thread":2,"current_text":[35,35,32,80,114,111,98,108,101,109,10,65,115,32,100,111,99,117,109,101,110,116,101,100,32,105,110,32,91,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,35,54,56,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,105,115,115,117,101,115,47,54,56,41,44,32,91,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,35,54,57,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,105,115,115,117,101,115,47,54,57,41,44,32,115,104,111,119,110,32,105,110,32,91,116,101,108,101,109,116,101,116,114,121,93,40,104,116,116,112,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,47,35,47,74,111,121,115,116,114,101,97,109,37,50,48,84,101,115,116,110,101,116,37,50,48,118,50,41,32,97,110,100,32,100,105,115,99,117,115,115,101,100,32,104,101,97,118,105,108,121,32,105,110,32,111,117,114,32,99,111,109,109,117,110,105,116,121,32,99,104,97,110,110,101,108,115,44,32,107,101,101,112,105,110,103,32,97,32,115,117,115,116,97,105,110,101,100,32,104,105,103,104,32,112,101,101,114,32,99,111,117,110,116,32,104,97,115,32,112,114,111,118,101,100,32,100,105,102,102,105,99,117,108,116,46,32,82,117,110,110,105,110,103,32,116,104,101,32,110,111,100,101,32,119,105,116,104,32,100,101,102,97,117,108,116,32,115,101,116,116,105,110,103,115,32,97,110,100,32,108,101,97,118,105,110,103,32,105,116,32,102,111,114,32,97,32,108,111,110,103,32,116,105,109,101,32,119,105,108,108,32,108,105,107,101,108,121,32,114,101,115,117,108,116,32,105,110,58],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568999328},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[65,{"id":65,"thread_id":13,"nr_in_thread":3,"current_text":[49,46,32,65,32,99,111,110,116,105,110,117,111,117,115,32,100,114,111,112,32,105,110,32,112,101,101,114,115,32,40,97,115,32,116,104,101,32,34,112,111,111,108,34,32,111,102,32,50,53,32,103,101,116,115,32,102,105,108,108,101,100,32,119,105,116,104,32,102,114,111,122,101,110,32,110,111,100,101,115,44,32,97,110,100,32,110,111,100,101,115,32,102,114,111,109,32,111,116,104,101,114,32,110,101,116,119,111,114,107,115,41,46,10,50,46,32,65,32,116,101,110,100,101,110,99,121,32,102,111,114,32,99,108,117,115,116,101,114,105,110,103,32,112,101,101,114,115,32,40,105,101,46,32,97,32,103,114,111,117,112,32,111,102,32,110,111,100,101,115,32,111,110,108,121,47,109,111,115,116,108,121,32,99,111,110,110,101,99,116,101,100,32,116,111,32,101,97,99,104,32,111,116,104,101,114,41,10,51,46,32,72,105,103,104,32,108,97,116,101,110,99,121,44,32,108,101,97,118,105,110,103,32,96,118,97,108,105,100,97,116,111,114,115,96,32,116,111,32,103,101,116,32,119,97,114,110,105,110,103,115,47,115,108,97,115,104,105,110,103,115,47,98,97,110,110,101,100,32,100,117,101,32,116,111,32,97,110,32,34,117,110,102,111,114,116,117,110,97,116,101,34,32,111,114,100,101,114,32,105,110,32,116,104,101,32,113,117,101,117,101,46,10,52,46,32,84,104,105,115,32,97,103,97,105,110,32,104,97,115,32,108,101,97,100,32,116,111,32,102,111,114,107,115,44,32,101,105,116,104,101,114,32,98,101,99,97,117,115,101,32,116,104,101,32,111,110,101,32,34,111,117,116,115,105,100,101,34,32,110,111,100,101,32,105,110,32,116,104,101,32,99,108,117,115,116,101,114,32,40,114,101,102,32,50,46,41,32,104,97,115,32,103,111,110,101,32,111,102,102,108,105,110,101,44,32,97,110,100,47,111,114,32,98,101,99,97,117,115,101,32,115,111,109,101,32,110,111,100,101,115,32,99,111,110,115,105,100,101,114,32,116,104,101,32,112,114,111,112,111,115,101,100,32,98,108,111,99,107,32,116,111,32,98,101,32,119,105,116,104,105,110,32,116,104,101,32,116,105,109,101,32,108,105,109,105,116,44,32,97,110,100,32,111,116,104,101,114,115,32,110,111,116,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568999358},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[66,{"id":66,"thread_id":13,"nr_in_thread":4,"current_text":[65,115,32,97,32,115,105,100,101,32,110,111,116,101,44,32,116,104,101,114,101,32,105,115,32,97,32,99,108,117,115,116,101,114,105,110,103,32,111,102,32,110,111,100,101,115,32,105,110,32,69,117,114,111,112,101,44,32,98,117,116,32,116,104,101,32,114,101,115,116,32,111,102,32,116,104,101,32,119,111,114,108,100,32,105,115,32,110,111,116,32,97,115,32,119,101,108,108,32,114,101,112,114,101,115,101,110,116,101,100,44,32,105,110,99,114,101,97,115,105,110,103,32,108,97,116,101,110,99,121,32,97,110,100,32,97,100,100,105,110,103,32,116,111,32,116,104,101,32,112,114,111,98,108,101,109,46,10,10,65,115,32,119,101,32,100,111,110,39,116,32,119,97,110,116,32,116,111,32,114,101,115,116,97,114,116,32,111,117,114,32,110,101,116,119,111,114,107,32,97,103,97,105,110,32,40,97,115,32,111,117,116,108,105,110,101,100,32,105,110,32,91,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,35,54,57,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,105,115,115,117,101,115,47,54,57,41,41,44,32,119,101,32,104,97,118,101,32,97,100,118,105,115,101,100,32,117,115,101,114,115,32,116,111,58,10,10,42,32,105,110,99,114,101,97,115,101,32,112,101,101,114,32,99,111,117,110,116,32,98,121,32,97,100,100,105,110,103,32,116,104,101,32,102,108,97,103,115,10,32,32,96,45,45,105,110,45,112,101,101,114,115,32,110,32,45,45,111,117,116,32,112,101,101,114,115,32,109,96,10,32,32,119,104,101,114,101,32,110,32,97,110,100,32,109,32,62,32,50,53,46,10,42,32,114,101,115,116,97,114,116,32,116,104,101,105,114,32,110,111,100,101,32,97,116,32,114,101,103,117,108,97,114,32,105,110,116,101,114,118,97,108,115,10,10,66,111,116,104,32,111,102,32,116,104,101,115,101,32,105,109,112,114,111,118,101,115,32,116,104,101,32,115,105,116,117,97,116,105,111,110,44,32,98,117,116,32,116,104,101,32,102,111,114,109,101,114,32,105,110,99,114,101,97,115,101,115,32,109,101,109,111,114,121,32,117,115,97,103,101,44,32,97,110,100,32,116,104,101,32,108,97,116,116,101,114,32,114,101,113,117,105,114,101,115,32,97,32,109,111,114,101,32,104,97,110,100,115,32,111,110,32,97,112,112,114,111,97,99,104,44,32,111,114,32,109,111,114,101,32,97,100,118,97,110,99,101,100,32,115,101,116,116,105,110,103,115,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568999376},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[67,{"id":67,"thread_id":13,"nr_in_thread":5,"current_text":[35,35,32,80,114,111,112,111,115,97,108,10,68,111,32,97,32,109,97,114,107,101,116,105,110,103,32,99,97,109,112,97,105,103,110,44,32,119,104,101,114,101,32,101,120,105,115,116,105,110,103,32,99,111,109,109,117,110,105,116,121,32,109,101,109,98,101,114,115,32,97,114,101,32,103,105,118,101,110,32,96,74,111,121,115,116,114,101,97,109,96,32,98,114,97,110,100,101,100,32,115,105,110,103,108,101,32,98,111,97,114,100,32,99,111,109,112,117,116,101,114,115,32,40,114,97,115,112,98,101,114,114,121,32,112,105,39,115,32,111,114,32,115,105,109,105,108,97,114,41,32,102,111,114,32,102,114,101,101,44,32,116,111,32,114,117,110,32,97,115,32,110,111,100,101,115,46,32,84,104,101,121,32,119,105,108,108,32,114,101,99,101,105,118,101,32,114,101,103,117,108,97,114,32,109,111,110,101,114,111,32,112,97,121,109,101,110,116,115,32,116,111,32,99,111,118,101,114,32,101,108,101,99,116,114,105,99,105,116,121,32,97,110,100,32,116,104,101,105,114,32,116,105,109,101,32,105,102,32,116,104,101,105,114,32,110,111,100,101,115,32,104,97,118,101,32,115,117,102,102,105,99,105,101,110,116,32,117,112,116,105,109,101,46,32,84,104,101,121,32,119,105,108,108,32,111,102,32,99,111,117,114,115,101,32,103,101,116,32,116,111,32,107,101,101,112,32,116,104,101,32,82,66,80,115,32,110,111,32,109,97,116,116,101,114,32,119,104,97,116,46,32,84,104,101,115,101,32,110,111,100,101,115,32,119,105,108,108,32,109,97,121,32,111,114,32,109,97,121,32,110,111,116,32,98,101,32,112,97,105,100,32,102,111,114,32,98,101,105,110,103,32,96,118,97,108,105,100,97,116,111,114,115,96,46,10,73,32,98,101,108,105,101,118,101,32,116,104,105,115,32,99,97,110,32,104,101,108,112,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,119,97,121,115,58,10,10,49,46,32,73,110,99,114,101,97,115,101,32,116,104,101,32,110,111,100,101,32,99,111,117,110,116,44,32,119,104,105,99,104,32,119,105,108,108,58,10,32,32,32,10,32,32,32,42,32,105,109,112,114,111,118,101,32,116,104,101,32,110,101,116,119,111,114,107,10,32,32,32,42,32,112,114,111,109,111,116,101,32,111,117,114,32,34,112,111,115,105,116,105,111,110,34,32,105,110,32,116,104,101,32,91,116,101,108,101,109,116,101,116,114,121,93,40,104,116,116,112,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,47,35,47,74,111,121,115,116,114,101,97,109,37,50,48,84,101,115,116,110,101,116,37,50,48,118,50,41,32,104,105,101,114,97,114,99,104,121,10,50,46,32,70,117,114,116,104,101,114,32,98,117,105,108,100,32,97,110,100,32,101,110,99,111,117,114,97,103,101,32,116,104,101,32,99,111,109,109,117,110,105,116,121,46,10,51,46,32,72,101,108,112,32,105,109,112,114,111,118,101,32,116,104,101,32,116,101,99,104,110,105,99,97,108,32,115,107,105,108,108,115,32,111,102,32,116,104,101,32,114,101,99,101,105,118,105,110,103,32,109,101,109,98,101,114,115,32,40,116,104,101,121,32,119,105,108,108,32,111,102,32,99,111,117,114,115,101,32,103,101,116,32,115,117,112,112,111,114,116,44,32,98,117,116,32,119,101,32,119,105,108,108,32,110,111,116,32,115,104,105,112,32,116,104,101,32,110,111,100,101,115,32,119,105,116,104,32,115,111,102,116,119,97,114,101,41],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568999394},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[68,{"id":68,"thread_id":13,"nr_in_thread":6,"current_text":[35,35,32,67,111,115,116,10,65,32,91,114,97,115,112,98,101,114,114,121,32,112,105,93,40,104,116,116,112,115,58,47,47,119,119,119,46,97,109,97,122,111,110,46,99,111,109,47,65,66,79,88,45,82,97,115,112,98,101,114,114,121,45,67,111,109,112,108,101,116,101,45,77,111,116,104,101,114,98,111,97,114,100,45,72,101,97,116,115,105,110,107,47,100,112,47,66,48,55,68,56,86,88,87,82,89,47,114,101,102,61,115,114,95,49,95,49,55,63,99,114,105,100,61,49,56,81,83,83,87,88,87,86,73,72,80,89,38,107,101,121,119,111,114,100,115,61,114,97,115,112,98,101,114,114,121,43,112,105,43,51,43,98,37,50,66,38,113,105,100,61,49,53,53,55,53,48,57,48,54,56,38,115,61,103,97,116,101,119,97,121,38,115,112,114,101,102,105,120,61,114,97,115,112,98,101,114,114,121,43,112,37,50,67,97,112,115,37,50,67,52,48,57,38,115,114,61,56,45,49,55,41,32,119,105,116,104,32,97,108,108,32,116,104,101,32,110,101,101,100,101,100,32,101,120,116,114,97,32,101,113,117,105,112,109,101,110,116,32,99,111,115,116,115,32,97,114,111,117,110,100,32,126,56,48,36,32,119,47,111,32,115,104,105,112,112,105,110,103,46,32,66,121,32,115,104,111,112,112,105,110,103,32,97,114,111,117,110,100,44,32,98,117,121,105,110,103,32,105,110,32,98,117,108,107,44,32,97,110,100,32,99,111,110,115,105,100,101,114,32,99,104,101,97,112,101,114,32,98,111,97,114,100,115,42,44,32,97,32,118,101,114,121,32,104,105,103,104,32,101,110,100,32,101,115,116,105,109,97,116,101,32,99,111,109,101,115,32,116,111,32,36,49,48,48,32,115,104,105,112,112,101,100,46,32,71,101,116,116,105,110,103,32,116,104,101,32,99,111,115,116,32,100,111,119,110,32,116,111,32,36,53,48,32,109,105,103,104,116,32,98,101,32,112,111,115,115,105,98,108,101,44,32,98,117,116,32,97,32,98,117,100,103,101,116,32,111,102,32,36,49,48,48,47,112,114,32,98,111,97,114,100,32,105,115,32,115,105,109,112,108,101,32,97,110,100,32,99,111,110,115,101,114,118,97,116,105,118,101,46,10,10,42,99,117,114,114,101,110,116,108,121,44,32,98,111,97,114,100,115,32,97,115,32,115,105,109,112,108,101,32,97,115,32,116,104,101,32,91,111,114,97,110,103,101,32,112,105,32,122,101,114,111,93,40,104,116,116,112,115,58,47,47,119,119,119,46,97,108,105,101,120,112,114,101,115,115,46,99,111,109,47,105,116,101,109,47,79,114,97,110,103,101,45,80,105,45,90,101,114,111,45,72,50,45,81,117,97,100,45,67,111,114,101,45,79,112,101,110,45,115,111,117,114,99,101,45,53,49,50,77,66,45,80,114,111,116,101,99,116,105,118,101,45,87,104,105,116,101,45,67,97,115,101,45,100,101,118,101,108,111,112,109,101,110,116,45,98,111,97,114,100,45,98,101,121,111,110,100,45,82,97,115,112,98,101,114,114,121,47,51,50,55,57,57,49,49,49,54,49,49,46,104,116,109,108,63,115,112,109,61,97,50,103,48,115,46,57,48,52,50,51,49,49,46,48,46,48,46,49,101,102,55,52,99,52,100,65,71,120,68,73,50,41,32,99,97,110,32,95,99,117,114,114,101,110,116,108,121,95,32,114,117,110,32,111,110,32,116,104,101,32,110,101,116,119,111,114,107,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568999412},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[69,{"id":69,"thread_id":13,"nr_in_thread":7,"current_text":[87,101,32,119,105,108,108,32,112,108,97,99,101,32,97,32,98,111,117,110,116,121,32,102,111,114,32,97,114,114,97,110,103,105,110,103,32,116,104,101,32,119,104,111,108,101,32,116,104,105,110,103,44,32,105,101,46,32,100,101,97,108,105,110,103,32,119,105,116,104,32,115,117,112,112,108,105,101,114,115,32,102,111,114,32,98,111,97,114,100,115,32,97,110,100,32,98,114,97,110,100,105,110,103,44,32,99,111,109,112,105,108,105,110,103,32,97,32,108,105,115,116,32,111,102,32,114,101,99,105,112,105,101,110,116,115,44,32,97,110,100,32,97,114,114,97,110,103,105,110,103,32,102,111,114,32,115,104,105,112,112,105,110,103,46,32,83,66,67,115,32,112,111,119,101,114,32,99,111,110,115,117,109,112,116,105,111,110,32,105,115,32,99,108,111,115,101,32,116,111,32,110,101,103,108,105,103,105,98,108,101,44,32,115,111,32,112,97,121,105,110,103,32,36,56,47,109,111,110,116,104,32,45,62,32,36,49,48,48,47,121,101,97,114,44,32,102,111,114,32,117,112,116,105,109,101,32,62,57,53,37,32,115,101,101,109,115,32,102,97,105,114,46,10,10,65,115,115,117,109,105,110,103,32,119,101,32,112,114,111,118,105,100,101,32,53,48,32,98,111,97,114,100,115,44,32,116,104,101,32,116,111,116,97,108,32,99,111,115,116,32,97,115,115,117,109,105,110,103,32,116,104,101,32,98,111,97,114,100,115,32,97,114,101,32,112,111,119,101,114,102,117,108,32,101,110,111,117,103,104,32,116,111,32,115,117,112,112,111,114,116,32,116,104,101,32,105,110,99,114,101,97,115,105,110,103,32,110,101,116,119,111,114,107,32,108,111,97,100,32,102,111,114,32,126,49,32,121,101,97,114,46,32,40,87,101,32,119,105,108,108,32,108,105,107,101,108,121,32,104,97,118,101,32,116,111,32,115,116,97,114,116,32,110,101,119,32,99,104,97,105,110,115,32,111,110,99,101,32,111,114,32,116,119,105,99,101,32,112,114,32,121,101,97,114,32,97,110,121,119,97,121,41,46,10,10,73,116,101,109,9,81,116,121,9,67,111,115,116,10,66,111,97,114,100,9,53,48,9,36,49,48,48,10,32,80,97,121,111,117,116,115,9,126,52,56,48,42,9,36,56,10,66,111,117,110,116,121,42,42,9,49,9,36,50,53,48,10,42,42,84,79,84,65,76,42,42,9,42,42,78,65,42,42,9,42,42,36,57,48,57,48,42,42,10,42,65,115,115,117,109,105,110,103,32,115,111,109,101,32,108,111,115,115,32,97,108,111,110,103,32,116,104,101,32,119,97,121,46,10,42,42,116,104,101,32,98,111,117,110,116,121,32,99,111,115,116,32,119,97,115,32,99,104,111,115,101,110,32,98,121,32,97,32,112,115,101,117,100,111,45,114,97,110,100,111,109,32,110,117,109,98,101,114,32,103,101,110,101,114,97,116,111,114,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568999442},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[70,{"id":70,"thread_id":13,"nr_in_thread":8,"current_text":[35,35,32,84,104,111,117,103,104,116,115,10,87,101,32,104,97,118,101,32,116,104,117,115,32,102,97,114,32,111,112,116,101,100,32,102,111,114,32,97,110,32,105,110,116,101,114,97,99,116,105,118,101,32,119,97,121,32,111,102,32,109,97,114,107,101,116,105,110,103,32,116,111,32,98,117,105,108,100,32,116,104,101,32,99,111,109,109,117,110,105,116,121,44,32,97,115,32,119,101,32,104,111,112,101,32,116,104,105,115,32,97,112,112,114,111,97,99,104,32,119,105,108,108,32,105,109,112,114,111,118,101,32,116,104,101,32,95,113,117,97,108,105,116,121,95,32,114,97,116,104,101,114,32,116,104,97,110,32,106,117,115,116,32,116,104,101,32,95,113,117,97,110,116,105,116,121,95,32,111,102,32,111,117,114,32,109,101,109,98,101,114,115,46,32,77,111,114,101,32,111,110,32,116,104,105,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,98,108,111,103,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,112,97,121,45,102,111,114,45,112,108,97,121,47,41,46,32,84,104,105,115,32,102,97,108,108,115,32,105,110,32,108,105,110,101,32,119,105,116,104,32,116,104,97,116,32,97,112,112,114,111,97,99,104,44,32,97,115,32,105,116,32,114,101,113,117,105,114,101,115,32,115,111,109,101,32,111,102,32,111,117,114,32,108,101,115,115,32,116,101,99,104,110,105,99,97,108,32,102,111,108,108,111,119,101,114,115,32,116,111,32,103,101,116,32,102,97,109,105,108,105,97,114,105,122,101,100,32,119,105,116,104,32,108,105,110,117,120,32,97,110,100,32,116,104,101,32,99,111,109,109,97,110,100,32,108,105,110,101,46,10,10,73,110,112,117,116,32,111,110,32,116,104,105,115,32,105,115,32,109,111,114,101,32,116,104,97,110,32,119,101,108,99,111,109,101,46,32,66,111,116,104,32,102,114,111,109,32,116,104,101,32,74,115,103,101,110,101,115,105,115,32,116,101,97,109,44,32,99,111,110,116,114,105,98,117,116,111,114,115,44,32,97,110,100,32,99,111,109,109,117,110,105,116,121,32,109,101,109,98,101,114,115,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568999472},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[71,{"id":71,"thread_id":13,"nr_in_thread":9,"current_text":[35,35,32,84,111,32,115,101,101,32,102,117,114,116,104,101,114,32,99,111,110,118,101,114,115,97,116,105,111,110,115,32,97,98,111,117,116,32,116,104,105,115,32,98,111,117,110,116,121,32,97,110,100,32,116,111,32,112,111,115,116,32,121,111,117,114,32,99,111,110,116,114,105,98,117,116,105,111,110,115,44,32,112,108,101,97,115,101,32,118,105,115,105,116,32,116,104,101,32,91,71,105,116,72,117,98,32,105,115,115,117,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,47,105,115,115,117,101,115,47,53,41,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568999640},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[72,{"id":72,"thread_id":14,"nr_in_thread":2,"current_text":[35,35,32,84,111,32,115,101,101,32,102,117,114,116,104,101,114,32,99,111,110,118,101,114,115,97,116,105,111,110,115,32,97,98,111,117,116,32,116,104,105,115,32,98,111,117,110,116,121,32,97,110,100,32,116,111,32,112,111,115,116,32,121,111,117,114,32,99,111,110,116,114,105,98,117,116,105,111,110,115,44,32,112,108,101,97,115,101,32,118,105,115,105,116,32,116,104,101,32,91,71,105,116,72,117,98,32,105,115,115,117,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,47,105,115,115,117,101,115,47,49,51,41,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1568999832},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[73,{"id":73,"thread_id":15,"nr_in_thread":2,"current_text":[35,35,32,71,111,97,108,115,10,84,104,101,32,103,111,97,108,32,111,102,32,116,104,105,115,32,98,111,117,110,116,121,32,105,115,32,116,119,111,102,111,108,100,58,10,10,49,46,32,84,111,32,103,101,116,32,109,111,114,101,32,99,111,110,116,101,110,116,32,111,110,32,116,104,101,32,112,108,97,116,102,111,114,109,44,32,97,110,100,32,102,111,114,32,115,116,114,101,115,115,32,116,101,115,116,115,32,111,102,32,116,104,101,32,115,116,111,114,97,103,101,32,97,110,100,32,100,105,115,116,114,105,98,117,116,105,111,110,32,115,121,115,116,101,109,44,32,119,101,32,110,101,101,100,32,116,111,32,99,111,109,112,105,108,101,32,97,32,108,105,115,116,32,111,102,32,102,114,101,101,108,121,32,97,118,97,105,108,97,98,108,101,32,111,110,32,100,101,109,97,110,100,32,109,101,100,105,97,46,10,50,46,32,87,101,32,97,114,101,32,116,114,121,105,110,103,32,116,111,32,98,117,105,108,100,32,97,110,100,32,97,100,97,112,116,97,98,108,101,32,97,110,100,32,100,121,110,97,109,105,99,32,99,111,110,116,101,110,116,32,100,105,114,101,99,116,111,114,121,32,115,121,115,116,101,109,32,102,111,114,32,111,117,114,32,110,101,120,116,32,116,101,115,116,110,101,116,44,32,96,82,111,109,101,96,46,32,84,104,101,32,115,112,101,99,115,32,97,114,101,32,115,116,105,108,108,32,97,32,87,73,80,44,32,98,117,116,32,116,104,101,32,103,101,110,101,114,97,108,32,99,111,110,99,101,112,116,32,105,115,32,100,105,115,99,117,115,115,101,100,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,47,105,115,115,117,101,115,47,55,52,41,46,32,70,111,114,32,116,104,101,32,105,110,105,116,105,97,108,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,44,32,119,101,32,119,97,110,116,32,116,111,32,108,101,97,114,110,32,109,111,114,101,32,97,98,111,117,116,32,119,104,97,116,32,109,101,116,97,100,97,116,97,32,105,115,32,116,121,112,105,99,97,108,108,121,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,101,97,99,104,32,116,121,112,101,32,111,102,32,109,101,100,105,97,44,32,97,110,100,32,104,111,119,32,105,116,39,115,32,115,116,114,117,99,116,117,114,101,100,46,10,10,85,115,105,110,103,32,97,117,100,105,111,32,97,115,32,97,110,32,101,120,97,109,112,108,101,58,10,87,104,97,116,32,97,114,101,32,116,104,101,32,109,111,115,116,32,105,109,112,111,114,116,97,110,116,32,97,110,100,32,114,101,108,101,118,97,110,116,32,109,101,116,97,100,97,116,97,32,102,111,114,58,10,10,42,32,83,111,110,103,115,10,42,32,65,108,98,117,109,115,10,42,32,65,117,100,105,111,98,111,111,107,115,10,42,32,80,111,100,99,97,115,116,115],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569000072},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[74,{"id":74,"thread_id":15,"nr_in_thread":3,"current_text":[35,35,32,82,101,119,97,114,100,115,10,69,97,99,104,32,99,111,110,116,114,105,98,117,116,105,111,110,32,119,105,108,108,32,98,101,32,101,118,97,108,117,97,116,101,100,32,111,110,32,97,110,32,105,110,100,105,118,105,100,117,97,108,32,98,97,115,105,115,44,32,98,117,116,32,119,101,32,119,105,108,108,32,97,115,115,105,103,110,32,97,32,98,117,100,103,101,116,32,111,102,32,36,50,48,48,32,102,111,114,32,116,104,101,32,98,111,117,110,116,121,46,10,10,35,35,32,83,99,111,112,101,32,111,102,32,87,111,114,107,10,83,101,97,114,99,104,32,116,104,101,32,119,101,98,32,102,111,114,32,115,105,116,101,115,32,111,114,32,111,116,104,101,114,32,112,108,97,116,102,111,114,109,32,99,111,110,116,97,105,110,105,110,103,32,102,114,101,101,108,121,32,97,118,97,105,108,97,98,108,101,32,109,101,100,105,97,32,99,111,110,116,101,110,116,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569000102},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[75,{"id":75,"thread_id":15,"nr_in_thread":4,"current_text":[35,35,32,68,101,108,105,118,101,114,97,98,108,101,115,10,42,32,80,114,111,118,105,100,101,32,108,105,110,107,115,32,116,111,32,119,101,98,115,105,116,101,115,32,111,114,32,111,116,104,101,114,32,109,101,100,105,97,32,112,108,97,116,102,111,114,109,32,99,111,110,116,97,105,110,105,110,103,32,34,108,97,114,103,101,34,32,97,109,111,117,110,116,115,32,111,102,32,109,101,100,105,97,32,99,111,110,116,101,110,116,32,40,118,105,100,101,111,44,32,97,117,100,105,111,44,32,101,45,98,111,111,107,115,41,46,10,42,32,73,110,99,108,117,100,101,32,97,115,32,109,117,99,104,32,105,110,102,111,114,109,97,116,105,111,110,32,97,115,32,112,111,115,115,105,98,108,101,32,97,98,111,117,116,32,116,104,101,58,10,32,32,10,32,32,42,32,84,121,112,101,32,111,102,32,99,111,110,116,101,110,116,44,32,105,102,32,97,112,112,108,105,99,97,98,108,101,32,40,101,103,46,32,118,105,100,101,111,32,100,111,99,117,109,101,110,116,97,114,105,101,115,32,111,110,108,121,41,10,32,32,42,32,76,105,99,101,110,115,105,110,103,32,114,101,115,116,114,105,99,116,105,111,110,115,32,40,105,102,32,116,104,101,32,115,105,116,101,32,99,111,110,116,97,105,110,115,32,97,32,109,105,120,32,111,102,32,99,111,110,116,101,110,116,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,114,101,115,116,114,105,99,116,105,111,110,115,41,10,10,65,110,121,32,105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,116,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,119,105,108,108,32,97,100,100,32,118,97,108,117,101,44,32,97,110,100,32,116,104,117,115,32,105,110,99,114,101,97,115,101,32,116,104,101,32,114,101,119,97,114,100,46,10,10,42,32,72,111,119,32,116,111,32,100,111,119,110,108,111,97,100,32,116,104,101,32,102,105,108,101,115,32,97,110,100,32,109,101,116,97,100,97,116,97,32,105,110,32,98,117,108,107,10,42,32,65,110,121,32,97,100,100,105,116,105,111,110,97,108,32,105,110,102,111,114,109,97,116,105,111,110,32,116,104,97,116,32,97,100,100,114,101,115,115,101,115,32,96,50,46,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569000120},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[76,{"id":76,"thread_id":15,"nr_in_thread":5,"current_text":[35,35,32,67,111,110,115,116,114,97,105,110,116,115,10,42,32,65,108,108,32,115,117,98,109,105,115,115,105,111,110,115,32,109,117,115,116,32,98,101,32,105,110,32,108,105,110,101,32,119,105,116,104,32,111,117,114,32,91,84,111,83,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,97,99,114,111,112,111,108,105,115,47,112,105,111,110,101,101,114,47,35,47,112,97,103,101,115,47,116,111,115,41,32,116,111,32,98,101,32,101,118,97,108,117,97,116,101,100,46,10,10,35,35,32,66,111,117,110,116,121,32,102,111,114,109,97,116,10,79,112,101,110,32,102,111,114,32,97,108,108,46,10,10,35,35,32,68,101,97,100,108,105,110,101,10,85,110,108,101,115,115,32,119,101,32,97,114,101,32,115,97,116,105,115,102,105,101,100,32,98,101,102,111,114,101,32,116,104,105,115,32,116,105,109,101,44,32,116,104,101,32,115,117,98,109,105,115,115,105,111,110,32,100,101,97,100,108,105,110,101,32,105,115,32,116,104,101,32,49,56,116,104,32,111,102,32,65,117,103,117,115,116,32,50,48,49,57,46,10,10,73,110,32,99,97,115,101,32,111,102,32,116,104,101,32,102,111,114,109,101,114,44,32,116,104,105,115,32,115,101,99,116,105,111,110,32,119,105,108,108,32,98,101,32,117,112,100,97,116,101,100,44,32,98,117,116,32,108,101,97,118,105,110,103,32,50,52,104,114,32,102,111,114,32,115,116,114,97,103,103,108,101,114,115,32,116,111,32,115,117,98,109,105,116,46,10,10,40,84,104,105,115,32,98,111,117,110,116,121,32,105,115,32,110,111,119,32,99,108,111,115,101,100,41],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569000162},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[77,{"id":77,"thread_id":15,"nr_in_thread":6,"current_text":[35,35,32,84,111,32,115,101,101,32,102,117,114,116,104,101,114,32,99,111,110,118,101,114,115,97,116,105,111,110,115,32,97,98,111,117,116,32,116,104,105,115,32,98,111,117,110,116,121,32,97,110,100,32,116,111,32,112,111,115,116,32,121,111,117,114,32,99,111,110,116,114,105,98,117,116,105,111,110,115,44,32,112,108,101,97,115,101,32,118,105,115,105,116,32,116,104,101,32,91,71,105,116,72,117,98,32,105,115,115,117,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,47,105,115,115,117,101,115,47,50,48,41,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569000210},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[78,{"id":78,"thread_id":21,"nr_in_thread":2,"current_text":[35,32,73,110,115,116,114,117,99,116,105,111,110,115,10,10,84,104,101,32,105,110,115,116,114,117,99,116,105,111,110,115,32,98,101,108,111,119,32,119,105,108,108,32,97,115,115,117,109,101,32,121,111,117,32,97,114,101,32,114,117,110,110,105,110,103,32,97,115,32,96,114,111,111,116,96,46,32,84,104,105,115,32,109,97,107,101,115,32,116,104,101,32,105,110,115,116,114,117,99,116,105,111,110,115,32,115,111,109,101,119,104,97,116,32,101,97,115,105,101,114,44,32,98,117,116,32,108,101,115,115,32,115,97,102,101,32,97,110,100,32,114,111,98,117,115,116,46,10,10,78,111,116,101,32,116,104,97,116,32,116,104,105,115,32,104,97,115,32,111,110,108,121,32,98,101,101,110,32,116,101,115,116,101,100,32,111,110,32,102,114,101,115,104,32,105,109,97,103,101,115,32,111,102,32,96,85,98,117,110,116,117,32,49,54,46,48,52,32,76,84,83,96,44,32,96,85,98,117,110,116,117,32,49,56,46,48,52,32,76,84,83,96,32,97,110,100,32,96,68,101,98,105,97,110,32,56,96,46,10,10,84,104,101,32,115,121,115,116,101,109,32,104,97,115,32,115,104,111,119,110,32,116,111,32,98,101,32,113,117,105,116,101,32,114,101,115,111,117,114,99,101,32,105,110,116,101,110,115,105,118,101,44,32,115,111,32,121,111,117,32,115,104,111,117,108,100,32,99,104,111,111,115,101,32,97,32,86,80,83,32,119,105,116,104,32,115,112,101,99,115,32,101,113,117,105,118,97,108,101,110,116,32,116,111,32,91,76,105,110,111,100,101,32,56,71,66,93,40,104,116,116,112,115,58,47,47,119,119,119,46,108,105,110,111,100,101,46,99,111,109,47,112,114,105,99,105,110,103,63,109,115,99,108,107,105,100,61,101,97,97,49,50,101,48,48,53,50,57,51,49,48,101,52,54,54,53,99,55,51,48,100,54,98,48,49,98,48,49,52,38,117,116,109,95,115,111,117,114,99,101,61,98,105,110,103,38,117,116,109,95,109,101,100,105,117,109,61,99,112,99,38,117,116,109,95,99,97,109,112,97,105,103,110,61,76,105,110,111,100,101,37,50,48,45,37,50,48,66,114,97,110,100,37,50,48,45,37,50,48,83,101,97,114,99,104,37,50,48,45,37,50,48,76,111,119,71,101,111,38,117,116,109,95,116,101,114,109,61,108,105,110,111,100,101,38,117,116,109,95,99,111,110,116,101,110,116,61,76,105,110,111,100,101,41,32,111,114,32,98,101,116,116,101,114,32,40,110,111,116,32,97,110,32,97,102,102,105,108,105,97,116,101,32,108,105,110,107,41,46,10,10,80,108,101,97,115,101,32,110,111,116,101,32,116,104,97,116,32,117,110,108,101,115,115,32,116,104,101,114,101,32,97,114,101,32,97,110,121,32,111,112,101,110,32,115,112,111,116,115,32,40,119,104,105,99,104,32,121,111,117,32,99,97,110,32,99,104,101,99,107,32,105,110,32,91,80,105,111,110,101,101,114,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,112,105,111,110,101,101,114,41,32,117,110,100,101,114,32,96,82,111,108,101,115,96,32,45,62,32,96,65,118,97,105,108,97,98,108,101,32,82,111,108,101,115,96,41,44,32,121,111,117,32,119,105,108,108,32,110,111,116,32,98,101,32,97,98,108,101,32,116,111,32,106,111,105,110,46,32,78,111,116,101,32,116,104,97,116,32,119,101,32,119,105,108,108,32,98,101,32,113,117,105,116,101,32,118,105,103,105,108,97,110,116,32,105,110,32,98,111,111,116,105,110,103,32,110,111,110,45,112,101,114,102,111,114,109,105,110,103,32,96,83,116,111,114,97,103,101,32,80,114,111,118,105,100,101,114,115,96,44,32,115,111,32,105,102,32,121,111,117,32,104,97,118,101,32,101,118,101,114,121,116,104,105,110,103,32,115,101,116,117,112,32,105,110,32,97,100,118,97,110,99,101,44,32,121,111,117,32,99,111,117,108,100,32,98,101,32,116,104,101,32,113,117,105,99,107,101,115,116,32,116,111,32,116,97,107,101,32,97,32,115,108,111,116,32,119,104,101,110,32,105,116,32,111,112,101,110,115,33],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084138},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[79,{"id":79,"thread_id":21,"nr_in_thread":3,"current_text":[35,35,32,73,110,105,116,105,97,108,32,115,101,116,117,112,10,70,105,114,115,116,32,111,102,32,97,108,108,44,32,121,111,117,32,110,101,101,100,32,97,32,102,117,108,108,121,32,115,121,110,99,101,100,32,91,74,111,121,115,116,114,101,97,109,32,102,117,108,108,32,110,111,100,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,114,101,108,101,97,115,101,115,41,46,32,70,111,114,32,105,110,115,116,114,117,99,116,105,111,110,115,32,111,110,32,104,111,119,32,116,111,32,115,101,116,32,116,104,105,115,32,117,112,44,32,103,111,32,91,104,101,114,101,93,40,46,46,47,118,97,108,105,100,97,116,111,114,115,41,46,32,78,111,116,101,32,116,104,97,116,32,121,111,117,32,99,97,110,32,100,105,115,114,101,103,97,114,100,32,97,108,108,32,116,104,101,32,112,97,114,116,115,32,97,98,111,117,116,32,107,101,121,115,44,32,97,110,100,32,106,117,115,116,32,105,110,115,116,97,108,108,32,116,104,101,32,115,111,102,116,119,97,114,101,46,10,87,101,32,115,116,114,111,110,103,108,121,32,101,110,99,111,117,114,97,103,101,32,116,104,97,116,32,121,111,117,32,114,117,110,32,98,111,116,104,32,116,104,101,32,91,110,111,100,101,93,40,46,46,47,118,97,108,105,100,97,116,111,114,115,35,114,117,110,45,97,115,45,97,45,115,101,114,118,105,99,101,41,32,97,110,100,32,116,104,101,32,111,116,104,101,114,32,115,111,102,116,119,97,114,101,32,98,101,108,111,119,32,97,115,32,97,32,115,101,114,118,105,99,101,46,10,10,70,105,114,115,116,44,32,121,111,117,32,110,101,101,100,32,116,111,32,115,101,116,117,112,32,96,110,111,100,101,96,44,32,96,110,112,109,96,32,97,110,100,32,96,121,97,114,110,96,46,32,84,104,105,115,32,105,115,32,115,111,109,101,116,105,109,101,32,116,114,111,117,98,108,101,115,111,109,101,32,116,111,32,100,111,32,119,105,116,104,32,116,104,101,32,96,97,112,116,96,32,112,97,99,107,97,103,101,32,109,97,110,97,103,101,114,46,32,71,111,32,91,104,101,114,101,93,40,35,105,110,115,116,97,108,108,45,121,97,114,110,45,97,110,100,45,110,111,100,101,45,119,105,116,104,111,117,116,45,111,110,45,108,105,110,117,120,41,32,116,111,32,100,111,32,116,104,105,115,32,105,102,32,121,111,117,32,97,114,101,32,110,111,116,32,99,111,110,102,105,100,101,110,116,32,105,110,32,121,111,117,114,32,97,98,105,108,105,116,105,101,115,32,116,111,32,110,97,118,105,103,97,116,101,32,116,104,101,32,114,111,117,103,104,32,115,101,97,115,46,10,10,78,111,119,44,32,103,101,116,32,116,104,101,32,97,100,100,105,116,105,111,110,97,108,32,100,101,112,101,110,100,101,110,99,105,101,115,58,10,96,96,96,10,36,32,97,112,116,45,103,101,116,32,117,112,100,97,116,101,32,38,38,32,97,112,116,45,103,101,116,32,117,112,103,114,97,100,101,32,45,121,10,36,32,97,112,116,45,103,101,116,32,105,110,115,116,97,108,108,32,103,105,116,32,98,117,105,108,100,45,101,115,115,101,110,116,105,97,108,32,108,105,98,116,111,111,108,32,97,117,116,111,109,97,107,101,32,97,117,116,111,99,111,110,102,32,112,121,116,104,111,110,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084156},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[80,{"id":80,"thread_id":21,"nr_in_thread":4,"current_text":[35,35,32,73,110,115,116,97,108,108,32,105,112,102,115,10,84,104,101,32,110,101,119,32,115,116,111,114,97,103,101,32,110,111,100,101,32,117,115,101,115,32,91,105,112,102,115,93,40,104,116,116,112,115,58,47,47,105,112,102,115,46,105,111,47,41,32,97,115,32,98,97,99,107,101,110,100,46,10,96,96,96,10,36,32,119,103,101,116,32,104,116,116,112,115,58,47,47,100,105,115,116,46,105,112,102,115,46,105,111,47,103,111,45,105,112,102,115,47,118,48,46,52,46,50,49,47,103,111,45,105,112,102,115,95,118,48,46,52,46,50,49,95,108,105,110,117,120,45,97,109,100,54,52,46,116,97,114,46,103,122,10,36,32,116,97,114,32,45,118,120,102,32,103,111,45,105,112,102,115,95,118,48,46,52,46,50,49,95,108,105,110,117,120,45,97,109,100,54,52,46,116,97,114,46,103,122,10,36,32,99,100,32,103,111,45,105,112,102,115,10,36,32,46,47,105,112,102,115,32,105,110,105,116,32,45,45,112,114,111,102,105,108,101,32,115,101,114,118,101,114,10,36,32,46,47,105,110,115,116,97,108,108,46,115,104,10,35,32,115,116,97,114,116,32,105,112,102,115,32,100,97,101,109,111,110,58,10,36,32,105,112,102,115,32,100,97,101,109,111,110,10,96,96,96,10,73,102,32,121,111,117,32,115,101,101,32,96,68,97,101,109,111,110,32,105,115,32,114,101,97,100,121,96,32,97,116,32,116,104,101,32,101,110,100,44,32,121,111,117,32,97,114,101,32,103,111,111,100,33,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084174},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[81,{"id":81,"thread_id":21,"nr_in_thread":5,"current_text":[35,35,35,32,82,117,110,32,105,112,102,115,32,97,115,32,97,32,115,101,114,118,105,99,101,10,10,84,111,32,101,110,115,117,114,101,32,104,105,103,104,32,117,112,116,105,109,101,44,32,105,116,39,115,32,98,101,115,116,32,116,111,32,115,101,116,32,116,104,101,32,115,121,115,116,101,109,32,117,112,32,97,115,32,97,32,96,115,101,114,118,105,99,101,96,46,10,10,69,120,97,109,112,108,101,32,102,105,108,101,32,98,101,108,111,119,58,10,10,96,96,96,10,36,32,110,97,110,111,32,47,101,116,99,47,115,121,115,116,101,109,100,47,115,121,115,116,101,109,47,105,112,102,115,46,115,101,114,118,105,99,101,10,35,32,80,97,115,116,101,32,105,110,32,101,118,101,114,121,116,104,105,110,103,32,98,101,108,111,119,32,116,104,101,32,115,116,97,112,108,101,100,32,108,105,110,101,10,45,45,45,10,91,85,110,105,116,93,10,68,101,115,99,114,105,112,116,105,111,110,61,105,112,102,115,10,65,102,116,101,114,61,110,101,116,119,111,114,107,46,116,97,114,103,101,116,10,10,91,83,101,114,118,105,99,101,93,10,84,121,112,101,61,115,105,109,112,108,101,10,85,115,101,114,61,114,111,111,116,10,87,111,114,107,105,110,103,68,105,114,101,99,116,111,114,121,61,47,114,111,111,116,10,76,105,109,105,116,78,79,70,73,76,69,61,56,49,57,50,10,80,73,68,70,105,108,101,61,47,118,97,114,47,114,117,110,47,105,112,102,115,47,105,112,102,115,46,112,105,100,10,69,120,101,99,83,116,97,114,116,61,47,117,115,114,47,108,111,99,97,108,47,98,105,110,47,105,112,102,115,32,100,97,101,109,111,110,10,82,101,115,116,97,114,116,61,111,110,45,102,97,105,108,117,114,101,10,82,101,115,116,97,114,116,83,101,99,61,51,10,83,116,97,114,116,76,105,109,105,116,73,110,116,101,114,118,97,108,61,54,48,48,10,10,91,73,110,115,116,97,108,108,93,10,87,97,110,116,101,100,66,121,61,109,117,108,116,105,45,117,115,101,114,46,116,97,114,103,101,116,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084186},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[82,{"id":82,"thread_id":21,"nr_in_thread":6,"current_text":[83,97,118,101,32,97,110,100,32,101,120,105,116,46,32,67,108,111,115,101,32,116,104,101,32,96,105,112,102,115,32,100,97,101,109,111,110,96,32,105,102,32,105,116,39,115,32,115,116,105,108,108,32,114,117,110,110,105,110,103,44,32,116,104,101,110,58,10,96,96,96,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,97,114,116,32,105,112,102,115,10,35,32,73,102,32,101,118,101,114,121,116,104,105,110,103,32,119,111,114,107,115,44,32,121,111,117,32,115,104,111,117,108,100,32,103,101,116,32,97,110,32,111,117,116,112,117,116,46,32,86,101,114,105,102,121,32,119,105,116,104,58,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,97,116,117,115,32,105,112,102,115,10,35,32,73,102,32,121,111,117,32,115,101,101,32,115,111,109,101,116,104,105,110,103,32,101,108,115,101,32,116,104,97,110,32,34,68,97,101,109,111,110,32,105,115,32,114,101,97,100,121,34,32,97,116,32,116,104,101,32,101,110,100,44,32,116,114,121,32,97,103,97,105,110,32,105,110,32,97,32,99,111,117,112,108,101,32,111,102,32,115,101,99,111,110,100,115,46,10,35,32,84,111,32,104,97,118,101,32,105,112,102,115,32,115,116,97,114,116,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,97,116,32,114,101,98,111,111,116,58,10,36,32,115,121,115,116,101,109,99,116,108,32,101,110,97,98,108,101,32,105,112,102,115,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,115,116,111,112,32,105,112,102,115,44,32,101,105,116,104,101,114,32,116,111,32,101,100,105,116,32,116,104,101,32,102,105,108,101,32,111,114,32,115,111,109,101,32,111,116,104,101,114,32,114,101,97,115,111,110,58,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,111,112,32,105,112,102,115,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084198},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[83,{"id":83,"thread_id":21,"nr_in_thread":7,"current_text":[35,35,32,83,101,116,117,112,32,72,111,115,116,105,110,103,10,73,110,32,111,114,100,101,114,32,116,111,32,97,108,108,111,119,32,102,111,114,32,117,115,101,114,115,32,116,111,32,117,112,108,111,97,100,32,97,110,100,32,100,111,119,110,108,111,97,100,44,32,121,111,117,32,104,97,118,101,32,116,111,32,115,101,116,117,112,32,104,111,115,116,105,110,103,44,32,119,105,116,104,32,97,110,32,97,99,116,117,97,108,32,100,111,109,97,105,110,32,97,115,32,98,111,116,104,32,67,104,114,111,109,101,32,97,110,100,32,70,105,114,101,102,111,120,32,114,101,113,117,105,114,101,115,32,96,104,116,116,112,115,58,47,47,96,46,32,73,102,32,121,111,117,32,104,97,118,101,32,97,32,34,115,112,97,114,101,34,32,100,111,109,97,105,110,32,111,114,32,115,117,98,100,111,109,97,105,110,32,121,111,117,32,100,111,110,39,116,32,109,105,110,100,32,117,115,105,110,103,32,102,111,114,32,116,104,105,115,32,112,117,114,112,111,115,101,44,32,103,111,32,116,111,32,121,111,117,114,32,100,111,109,97,105,110,32,114,101,103,105,115,116,114,97,114,32,97,110,100,32,112,111,105,110,116,32,121,111,117,114,32,100,111,109,97,105,110,32,116,111,32,116,104,101,32,73,80,32,121,111,117,32,119,97,110,116,46,32,73,102,32,121,111,117,32,100,111,110,39,116,44,32,121,111,117,32,109,117,115,116,32,117,110,102,111,114,116,117,110,97,116,101,108,121,32,103,111,32,112,117,114,99,104,97,115,101,32,111,110,101,46,10,10,84,111,32,99,111,110,102,105,103,117,114,101,32,83,83,76,45,99,101,114,116,105,102,105,99,97,116,101,115,32,116,104,101,32,101,97,115,105,101,115,116,32,105,115,32,116,111,32,117,115,101,32,91,99,97,100,100,121,93,40,104,116,116,112,115,58,47,47,99,97,100,100,121,115,101,114,118,101,114,46,99,111,109,47,41,44,32,98,117,116,32,102,101,101,108,32,102,114,101,101,32,116,111,32,116,97,107,101,32,97,32,100,105,102,102,101,114,101,110,116,32,97,112,112,114,111,97,99,104,46,32,78,111,116,101,32,116,104,97,116,32,105,102,32,121,111,117,32,97,114,101,32,117,115,105,110,103,32,99,97,100,100,121,32,102,111,114,32,99,111,109,109,101,114,99,105,97,108,32,117,115,101,44,32,121,111,117,32,110,101,101,100,32,116,111,32,97,99,113,117,105,114,101,32,97,32,108,105,99,101,110,115,101,46,32,80,108,101,97,115,101,32,99,104,101,99,107,32,116,104,101,105,114,32,116,101,114,109,115,32,97,110,100,32,109,97,107,101,32,115,117,114,101,32,121,111,117,32,99,111,109,112,108,121,32,119,105,116,104,32,119,104,97,116,32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,112,101,114,115,111,110,97,108,32,117,115,101,46,10,10,96,96,96,10,36,32,99,117,114,108,32,104,116,116,112,115,58,47,47,103,101,116,99,97,100,100,121,46,99,111,109,32,124,32,98,97,115,104,32,45,115,32,112,101,114,115,111,110,97,108,10,35,32,65,108,108,111,119,32,99,97,100,100,121,32,97,99,99,101,115,115,32,116,111,32,114,101,113,117,105,114,101,100,32,112,111,114,116,115,58,10,36,32,115,101,116,99,97,112,32,39,99,97,112,95,110,101,116,95,98,105,110,100,95,115,101,114,118,105,99,101,61,43,101,112,39,32,47,117,115,114,47,108,111,99,97,108,47,98,105,110,47,99,97,100,100,121,10,36,32,117,108,105,109,105,116,32,45,110,32,56,49,57,50,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084210},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[84,{"id":84,"thread_id":21,"nr_in_thread":8,"current_text":[67,111,110,102,105,103,117,114,101,32,99,97,100,100,121,32,119,105,116,104,32,96,110,97,110,111,32,126,47,67,97,100,100,121,102,105,108,101,96,32,97,110,100,32,112,97,115,116,101,32,105,110,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58,10,10,96,96,96,10,35,32,83,116,111,114,97,103,101,32,78,111,100,101,32,65,80,73,10,104,116,116,112,115,58,47,47,60,121,111,117,114,46,99,111,111,108,46,117,114,108,62,32,123,10,32,32,32,32,112,114,111,120,121,32,47,32,108,111,99,97,108,104,111,115,116,58,51,48,48,48,32,123,10,32,32,32,32,32,32,32,32,116,114,97,110,115,112,97,114,101,110,116,10,32,32,32,32,125,10,32,32,32,32,104,101,97,100,101,114,32,47,32,123,10,32,32,32,32,32,32,32,32,65,99,99,101,115,115,45,67,111,110,116,114,111,108,45,65,108,108,111,119,45,79,114,105,103,105,110,32,32,42,10,32,32,32,32,32,32,32,32,65,99,99,101,115,115,45,67,111,110,116,114,111,108,45,65,108,108,111,119,45,77,101,116,104,111,100,115,32,34,71,69,84,44,32,80,85,84,44,32,72,69,65,68,44,32,79,80,84,73,79,78,83,34,10,32,32,32,32,125,10,125,10,96,96,96,10,78,111,119,32,121,111,117,32,99,97,110,32,99,104,101,99,107,32,105,102,32,121,111,117,32,99,111,110,102,105,103,117,114,101,100,32,99,111,114,114,101,99,116,108,121,44,32,119,105,116,104,58,10,96,96,96,10,36,32,47,117,115,114,47,108,111,99,97,108,47,98,105,110,47,99,97,100,100,121,32,45,45,118,97,108,105,100,97,116,101,32,45,45,99,111,110,102,32,126,47,67,97,100,100,121,102,105,108,101,10,35,32,87,104,105,99,104,32,115,104,111,117,108,100,32,114,101,116,117,114,110,58,10,67,97,100,100,121,102,105,108,101,32,105,115,32,118,97,108,105,100,10,10,35,32,89,111,117,32,99,97,110,32,110,111,119,32,114,117,110,32,99,97,100,100,121,32,119,105,116,104,58,10,36,32,40,115,99,114,101,101,110,41,32,47,117,115,114,47,108,111,99,97,108,47,98,105,110,47,99,97,100,100,121,32,45,45,97,103,114,101,101,32,45,45,101,109,97,105,108,32,60,121,111,117,114,95,109,97,105,108,64,115,111,109,101,46,100,111,109,97,105,110,62,32,45,45,99,111,110,102,32,126,47,67,97,100,100,121,102,105,108,101,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084228},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[85,{"id":85,"thread_id":21,"nr_in_thread":9,"current_text":[35,35,35,32,82,117,110,32,99,97,100,100,121,32,97,115,32,97,32,115,101,114,118,105,99,101,10,84,111,32,101,110,115,117,114,101,32,104,105,103,104,32,117,112,116,105,109,101,44,32,105,116,39,115,32,98,101,115,116,32,116,111,32,115,101,116,32,116,104,101,32,115,121,115,116,101,109,32,117,112,32,97,115,32,97,32,96,115,101,114,118,105,99,101,96,46,10,10,69,120,97,109,112,108,101,32,102,105,108,101,32,98,101,108,111,119,58,10,10,96,96,96,10,36,32,110,97,110,111,32,47,101,116,99,47,115,121,115,116,101,109,100,47,115,121,115,116,101,109,47,99,97,100,100,121,46,115,101,114,118,105,99,101,10,35,32,80,97,115,116,101,32,105,110,32,101,118,101,114,121,116,104,105,110,103,32,98,101,108,111,119,32,116,104,101,32,115,116,97,112,108,101,100,32,108,105,110,101,10,45,45,45,10,91,85,110,105,116,93,10,68,101,115,99,114,105,112,116,105,111,110,61,82,101,118,101,114,115,101,32,112,114,111,120,121,32,102,111,114,32,115,116,111,114,97,103,101,32,110,111,100,101,10,65,102,116,101,114,61,110,101,116,119,111,114,107,46,116,97,114,103,101,116,10,10,91,83,101,114,118,105,99,101,93,10,85,115,101,114,61,114,111,111,116,10,87,111,114,107,105,110,103,68,105,114,101,99,116,111,114,121,61,47,114,111,111,116,10,76,105,109,105,116,78,79,70,73,76,69,61,56,49,57,50,10,80,73,68,70,105,108,101,61,47,118,97,114,47,114,117,110,47,99,97,100,100,121,47,99,97,100,100,121,46,112,105,100,10,69,120,101,99,83,116,97,114,116,61,47,117,115,114,47,108,111,99,97,108,47,98,105,110,47,99,97,100,100,121,32,45,97,103,114,101,101,32,45,101,109,97,105,108,32,60,121,111,117,114,95,109,97,105,108,64,115,111,109,101,46,100,111,109,97,105,110,62,32,45,112,105,100,102,105,108,101,32,47,118,97,114,47,114,117,110,47,99,97,100,100,121,47,99,97,100,100,121,46,112,105,100,32,45,99,111,110,102,32,47,114,111,111,116,47,67,97,100,100,121,102,105,108,101,10,82,101,115,116,97,114,116,61,111,110,45,102,97,105,108,117,114,101,10,83,116,97,114,116,76,105,109,105,116,73,110,116,101,114,118,97,108,61,54,48,48,10,10,10,91,73,110,115,116,97,108,108,93,10,87,97,110,116,101,100,66,121,61,109,117,108,116,105,45,117,115,101,114,46,116,97,114,103,101,116,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084246},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[86,{"id":86,"thread_id":21,"nr_in_thread":10,"current_text":[83,97,118,101,32,97,110,100,32,101,120,105,116,46,32,67,108,111,115,101,32,96,99,97,100,100,121,96,32,105,102,32,105,116,39,115,32,115,116,105,108,108,32,114,117,110,110,105,110,103,44,32,116,104,101,110,58,10,96,96,96,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,97,114,116,32,99,97,100,100,121,10,35,32,73,102,32,101,118,101,114,121,116,104,105,110,103,32,119,111,114,107,115,44,32,121,111,117,32,115,104,111,117,108,100,32,103,101,116,32,97,110,32,111,117,116,112,117,116,46,32,86,101,114,105,102,121,32,119,105,116,104,58,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,97,116,117,115,32,99,97,100,100,121,10,35,32,87,104,105,99,104,32,115,104,111,117,108,100,32,112,114,111,100,117,99,101,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,58,10,96,96,96,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084294},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[87,{"id":87,"thread_id":21,"nr_in_thread":11,"current_text":[96,96,96,10,45,45,45,10,226,151,143,32,99,97,100,100,121,46,115,101,114,118,105,99,101,32,45,32,82,101,118,101,114,115,101,32,112,114,111,120,121,32,102,111,114,32,115,116,111,114,97,103,101,32,110,111,100,101,10,32,32,32,76,111,97,100,101,100,58,32,108,111,97,100,101,100,32,40,47,101,116,99,47,115,121,115,116,101,109,100,47,115,121,115,116,101,109,47,99,97,100,100,121,46,115,101,114,118,105,99,101,59,32,100,105,115,97,98,108,101,100,41,10,32,32,32,65,99,116,105,118,101,58,32,97,99,116,105,118,101,32,40,114,117,110,110,105,110,103,41,32,115,105,110,99,101,32,84,117,101,32,50,48,49,57,45,48,54,45,49,56,32,49,55,58,49,53,58,52,52,32,85,84,67,59,32,54,115,32,97,103,111,10,32,77,97,105,110,32,80,73,68,58,32,53,54,49,51,32,40,99,97,100,100,121,41,10,32,32,32,67,71,114,111,117,112,58,32,47,115,121,115,116,101,109,46,115,108,105,99,101,47,99,97,100,100,121,46,115,101,114,118,105,99,101,10,32,32,32,32,32,32,32,32,32,32,32,226,148,148,226,148,128,53,54,49,51,32,47,117,115,114,47,108,111,99,97,108,47,98,105,110,47,99,97,100,100,121,32,45,97,103,114,101,101,32,101,109,97,105,108,32,60,121,111,117,114,95,109,97,105,108,64,115,111,109,101,46,100,111,109,97,105,110,62,32,45,112,105,100,102,105,108,101,32,47,118,97,114,47,114,117,110,47,99,97,100,100,121,47,99,97,100,100,121,46,112,105,100,32,45,99,111,110,102,32,47,114,111,111,116,47,67,97,100,100,121,102,105,108,101,10,10,74,117,110,32,49,56,32,49,55,58,49,53,58,52,52,32,108,111,99,97,108,104,111,115,116,32,115,121,115,116,101,109,100,91,49,93,58,32,83,116,97,114,116,101,100,32,82,101,118,101,114,115,101,32,112,114,111,120,121,32,102,111,114,32,104,111,115,116,101,100,32,97,112,112,115,46,10,74,117,110,32,49,56,32,49,55,58,49,53,58,52,52,32,108,111,99,97,108,104,111,115,116,32,99,97,100,100,121,91,53,54,49,51,93,58,32,65,99,116,105,118,97,116,105,110,103,32,112,114,105,118,97,99,121,32,102,101,97,116,117,114,101,115,46,46,46,32,100,111,110,101,46,10,74,117,110,32,49,56,32,49,55,58,49,53,58,52,52,32,108,111,99,97,108,104,111,115,116,32,99,97,100,100,121,91,53,54,49,51,93,58,32,83,101,114,118,105,110,103,32,72,84,84,80,83,32,111,110,32,112,111,114,116,32,52,52,51,10,74,117,110,32,49,56,32,49,55,58,49,53,58,52,52,32,108,111,99,97,108,104,111,115,116,32,99,97,100,100,121,91,53,54,49,51,93,58,32,104,116,116,112,115,58,47,47,60,121,111,117,114,46,99,111,111,108,46,117,114,108,62,10,74,117,110,32,49,56,32,49,55,58,49,53,58,52,52,32,108,111,99,97,108,104,111,115,116,32,99,97,100,100,121,91,53,54,49,51,93,58,32,104,116,116,112,115,58,47,47,60,121,111,117,114,46,99,111,111,108,46,117,114,108,62,10,74,117,110,32,49,56,32,49,55,58,49,53,58,52,52,32,108,111,99,97,108,104,111,115,116,32,99,97,100,100,121,91,53,54,49,51,93,58,32,83,101,114,118,105,110,103,32,72,84,84,80,32,111,110,32,112,111,114,116,32,56,48,10,74,117,110,32,49,56,32,49,55,58,49,53,58,52,52,32,108,111,99,97,108,104,111,115,116,32,99,97,100,100,121,91,53,54,49,51,93,58,32,104,116,116,112,115,58,47,47,60,121,111,117,114,46,99,111,111,108,46,117,114,108,62,10,45,45,45,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084360},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[88,{"id":88,"thread_id":21,"nr_in_thread":12,"current_text":[96,96,96,10,35,32,84,111,32,104,97,118,101,32,99,97,100,100,121,32,115,116,97,114,116,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,97,116,32,114,101,98,111,111,116,58,10,36,32,115,121,115,116,101,109,99,116,108,32,101,110,97,98,108,101,32,99,97,100,100,121,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,115,116,111,112,32,99,97,100,100,121,44,32,101,105,116,104,101,114,32,116,111,32,101,100,105,116,32,116,104,101,32,102,105,108,101,32,111,114,32,115,111,109,101,32,111,116,104,101,114,32,114,101,97,115,111,110,58,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,111,112,32,99,97,100,100,121,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084378},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[89,{"id":89,"thread_id":21,"nr_in_thread":13,"current_text":[35,35,32,73,110,115,116,97,108,108,32,97,110,100,32,83,101,116,117,112,32,116,104,101,32,83,116,111,114,97,103,101,32,78,111,100,101,10,10,70,105,114,115,116,44,32,121,111,117,32,110,101,101,100,32,116,111,32,99,108,111,110,101,32,116,104,101,32,114,101,112,111,46,10,10,96,96,96,10,36,32,103,105,116,32,99,108,111,110,101,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,116,111,114,97,103,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,46,103,105,116,10,36,32,99,100,32,115,116,111,114,97,103,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,10,36,32,121,97,114,110,10,35,32,84,101,115,116,32,116,104,97,116,32,105,116,39,115,32,119,111,114,107,105,110,103,32,119,105,116,104,58,10,36,32,121,97,114,110,32,114,117,110,32,99,111,108,111,115,115,117,115,32,45,45,104,101,108,112,10,96,96,96,10,89,111,117,32,99,97,110,32,115,101,116,32,116,104,101,32,80,65,84,72,32,116,111,32,97,118,111,105,100,32,116,104,101,32,96,121,97,114,110,32,114,117,110,96,32,112,114,101,102,105,120,32,98,121,58,10,96,110,97,110,111,32,126,47,46,98,97,115,104,95,112,114,111,102,105,108,101,96,10,97,110,100,32,97,112,112,101,110,100,58,10,96,96,96,10,35,32,67,111,108,111,115,115,117,115,10,97,108,105,97,115,32,99,111,108,111,115,115,117,115,61,34,47,114,111,111,116,47,115,116,111,114,97,103,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,112,97,99,107,97,103,101,115,47,99,111,108,111,115,115,117,115,47,98,105,110,47,99,108,105,46,106,115,34,10,96,96,96,10,84,104,101,110,58,10,96,46,32,126,47,46,98,97,115,104,95,112,114,111,102,105,108,101,96,10,78,111,119,44,32,121,111,117,32,99,97,110,32,116,101,115,116,32,96,99,111,108,111,115,115,117,115,32,45,45,104,101,108,112,96,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084402},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[90,{"id":90,"thread_id":21,"nr_in_thread":14,"current_text":[35,35,35,32,85,112,100,97,116,101,32,83,116,111,114,97,103,101,32,78,111,100,101,10,10,73,102,32,121,111,117,32,110,101,101,100,32,116,111,32,117,112,100,97,116,101,32,121,111,117,114,32,115,116,111,114,97,103,101,32,110,111,100,101,44,32,121,111,117,32,119,105,108,108,32,102,105,114,115,116,32,110,101,101,100,32,116,111,32,115,116,111,112,32,116,104,101,32,115,111,102,116,119,97,114,101,46,10,10,96,96,96,10,35,32,73,102,32,121,111,117,32,97,114,101,32,114,117,110,110,105,110,103,32,97,115,32,115,101,114,118,105,99,101,32,40,119,104,105,99,104,32,121,111,117,32,115,104,111,117,108,100,41,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,111,112,32,115,116,111,114,97,103,101,45,110,111,100,101,10,36,32,99,100,32,47,112,97,116,104,47,116,111,47,115,116,111,114,97,103,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,10,35,32,65,115,115,117,109,105,110,103,32,121,111,117,32,99,108,111,110,101,100,32,97,115,32,115,104,111,119,110,32,97,98,111,118,101,10,36,32,103,105,116,32,112,117,108,108,32,111,114,105,103,105,110,32,109,97,115,116,101,114,10,36,32,121,97,114,110,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084420},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[91,{"id":91,"thread_id":21,"nr_in_thread":15,"current_text":[35,35,35,32,71,101,110,101,114,97,116,101,32,107,101,121,115,32,97,110,100,32,109,101,109,98,101,114,115,104,105,112,115,10,10,67,108,105,99,107,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,41,32,116,111,32,111,112,101,110,32,116,104,101,32,96,80,105,111,110,101,101,114,32,97,112,112,96,32,105,110,32,121,111,117,114,32,98,114,111,119,115,101,114,46,32,84,104,101,110,32,102,111,108,108,111,119,32,105,110,115,116,114,117,99,116,105,111,110,115,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,104,101,108,112,100,101,115,107,35,103,101,116,45,115,116,97,114,116,101,100,41,32,116,111,32,103,101,110,101,114,97,116,101,32,97,32,115,101,116,32,111,102,32,96,75,101,121,115,96,44,32,103,101,116,32,116,111,107,101,110,115,44,32,97,110,100,32,115,105,103,110,32,117,112,32,102,111,114,32,97,32,96,77,101,109,98,101,114,115,104,105,112,96,46,32,84,104,105,115,32,96,107,101,121,96,32,119,105,108,108,32,98,101,32,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,116,104,101,32,96,109,101,109,98,101,114,96,32,107,101,121,32,102,114,111,109,32,110,111,119,32,111,110,46,32,77,97,107,101,32,115,117,114,101,32,116,111,32,115,97,118,101,32,116,104,101,32,96,53,89,111,117,114,74,111,121,77,101,109,98,101,114,65,100,100,114,101,115,115,46,106,115,111,110,96,32,102,105,108,101,46,32,78,111,116,101,32,116,104,97,116,32,121,111,117,32,110,101,101,100,32,116,111,32,107,101,101,112,32,116,104,101,32,114,101,115,116,32,111,102,32,121,111,117,114,32,116,111,107,101,110,115,32,97,115,32,115,116,97,107,101,32,116,111,32,98,101,99,111,109,101,32,97,32,96,83,116,111,114,97,103,101,32,80,114,111,118,105,100,101,114,96,46,10,10,45,45,45,10,10,65,115,115,117,109,105,110,103,32,121,111,117,32,97,114,101,32,114,117,110,110,105,110,103,32,116,104,101,32,115,116,111,114,97,103,101,32,110,111,100,101,32,111,110,32,97,32,86,80,83,32,118,105,97,32,115,115,104,44,32,111,110,32,121,111,117,114,32,108,111,99,97,108,32,109,97,99,104,105,110,101,58,10,10,96,96,96,10,35,32,71,111,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,119,104,101,114,101,32,121,111,117,32,115,97,118,101,100,32,121,111,117,114,32,60,53,89,111,117,114,74,111,121,77,101,109,98,101,114,65,100,100,114,101,115,115,46,106,115,111,110,62,58,10,36,32,115,99,112,32,60,53,89,111,117,114,74,111,121,77,101,109,98,101,114,65,100,100,114,101,115,115,46,106,115,111,110,62,32,60,117,115,101,114,62,64,60,121,111,117,114,46,118,112,115,46,105,112,46,97,100,100,114,101,115,115,62,58,47,112,97,116,104,47,116,111,47,115,116,111,114,97,103,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,10,96,96,96,10,89,111,117,114,32,96,53,89,111,117,114,74,111,121,77,101,109,98,101,114,65,100,100,114,101,115,115,46,106,115,111,110,96,32,115,104,111,117,108,100,32,110,111,119,32,98,101,32,119,104,101,114,101,32,121,111,117,32,119,97,110,116,32,105,116,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084444},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[92,{"id":92,"thread_id":21,"nr_in_thread":16,"current_text":[35,35,35,35,32,83,101,116,117,112,32,97,110,100,32,99,111,110,102,105,103,117,114,101,32,116,104,101,32,115,116,111,114,97,103,101,32,110,111,100,101,10,10,42,42,77,97,107,101,32,115,117,114,101,32,121,111,117,39,114,101,32,91,74,111,121,115,116,114,101,97,109,32,102,117,108,108,32,110,111,100,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,41,32,105,115,32,102,117,108,108,121,32,115,121,110,99,101,100,32,98,101,102,111,114,101,32,121,111,117,32,109,111,118,101,32,116,111,32,116,104,101,32,110,101,120,116,32,115,116,101,112,40,115,41,33,42,42,10,10,79,110,32,116,104,101,32,109,97,99,104,105,110,101,47,86,80,83,32,121,111,117,32,119,97,110,116,32,116,111,32,114,117,110,32,121,111,117,114,32,115,116,111,114,97,103,101,32,110,111,100,101,58,10,10,96,96,96,10,35,32,73,102,32,121,111,117,32,97,114,101,32,110,111,116,32,97,108,114,101,97,100,121,32,105,110,32,116,104,97,116,32,100,105,114,101,99,116,111,114,121,58,10,36,32,99,100,32,115,116,111,114,97,103,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,10,35,32,73,102,32,121,111,117,32,99,111,110,102,105,103,117,114,101,100,32,121,111,117,114,32,46,98,97,115,104,95,112,114,111,102,105,108,101,58,10,36,32,99,111,108,111,115,115,117,115,32,115,105,103,110,117,112,32,60,53,89,111,117,114,74,111,121,77,101,109,98,101,114,65,100,100,114,101,115,115,46,106,115,111,110,62,10,35,32,73,102,32,121,111,117,32,100,105,100,110,39,116,32,99,111,110,102,105,103,117,114,101,32,121,111,117,114,32,46,98,97,115,104,95,112,114,111,102,105,108,101,58,10,36,32,121,97,114,110,32,114,117,110,32,99,111,108,111,115,115,117,115,32,115,105,103,110,117,112,32,60,53,89,111,117,114,74,111,121,77,101,109,98,101,114,65,100,100,114,101,115,115,46,106,115,111,110,62,10,35,32,78,111,116,101,32,116,104,97,116,32,116,104,101,32,114,101,115,116,32,111,102,32,116,104,101,32,103,117,105,100,101,32,119,105,108,108,32,97,115,115,117,109,101,32,121,111,117,32,100,105,100,32,105,110,32,102,97,99,116,32,99,111,110,102,105,103,117,114,101,32,46,98,97,115,104,95,112,114,111,102,105,108,101,32,97,110,100,32,100,111,110,39,116,32,110,101,101,100,32,34,121,97,114,110,32,114,117,110,34,10,35,32,70,111,108,108,111,119,32,116,104,101,32,105,110,115,116,114,117,99,116,105,111,110,115,32,97,115,32,112,114,111,109,112,116,101,100,46,32,70,111,114,32,101,97,115,101,32,111,102,32,117,115,101,44,32,105,116,39,115,32,98,101,115,116,32,116,111,32,110,111,116,32,115,101,116,32,97,32,112,97,115,115,119,111,114,100,46,46,46,32,73,102,32,121,111,117,32,100,111,44,32,114,101,109,101,109,98,101,114,32,116,111,32,97,100,100,58,10,35,32,45,45,112,97,115,115,112,104,114,97,115,101,32,60,121,111,117,114,95,112,97,115,115,112,104,114,97,115,101,62,32,97,115,32,97,110,32,97,114,103,117,109,101,110,116,32,101,118,101,114,121,32,116,105,109,101,32,121,111,117,32,115,116,97,114,116,32,116,104,101,32,99,111,108,111,115,115,117,115,32,115,101,114,118,101,114,46,10,96,96,96,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084468},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[93,{"id":93,"thread_id":21,"nr_in_thread":17,"current_text":[84,104,105,115,32,112,114,111,100,117,99,101,115,32,97,32,110,101,119,32,107,101,121,32,96,60,53,89,111,117,114,83,116,111,114,97,103,101,65,100,100,114,101,115,115,46,106,115,111,110,62,96,44,32,97,110,100,32,112,114,111,109,112,116,115,32,121,111,117,32,116,111,32,111,112,101,110,32,116,104,101,32,34,97,112,112,34,32,40,80,105,111,110,101,101,114,41,46,32,77,97,107,101,32,115,117,114,101,32,116,104,97,116,32,121,111,117,32,121,111,117,114,32,99,117,114,114,101,110,116,47,100,101,102,97,117,108,116,32,105,115,32,116,104,101,32,96,53,89,111,117,114,74,111,121,77,101,109,98,101,114,65,100,100,114,101,115,115,96,32,107,101,121,46,32,65,102,116,101,114,32,121,111,117,32,99,108,105,99,107,32,96,83,116,97,107,101,96,44,32,121,111,117,32,119,105,108,108,32,115,101,101,32,97,32,110,111,116,105,102,105,99,97,116,105,111,110,32,105,110,32,116,104,101,32,116,111,112,32,114,105,103,104,116,32,99,111,114,110,101,114,46,32,73,102,32,121,111,117,32,103,101,116,32,97,110,32,101,114,114,111,114,44,32,116,104,105,115,32,109,111,115,116,32,108,105,107,101,108,121,32,109,101,97,110,115,32,97,108,108,32,116,104,101,32,115,108,111,116,115,32,97,114,101,32,102,117,108,108,46,32,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32,116,104,105,115,32,109,101,97,110,115,32,121,111,117,32,104,97,118,101,32,116,111,32,105,109,112,111,114,116,32,116,104,101,32,96,60,53,89,111,117,114,83,116,111,114,97,103,101,65,100,100,114,101,115,115,46,106,115,111,110,62,96,32,116,111,32,114,101,99,111,118,101,114,32,121,111,117,114,32,116,111,107,101,110,115,46,10,10,73,102,32,105,116,32,115,117,99,99,101,101,100,101,100,44,32,112,114,111,99,101,101,100,32,97,115,32,115,104,111,119,110,32,98,101,108,111,119,58,10,10,96,96,96,10,35,32,84,111,32,109,97,107,101,32,115,117,114,101,32,101,118,101,114,121,116,104,105,110,103,32,105,115,32,114,117,110,110,105,110,103,32,115,109,111,111,116,104,108,121,44,32,105,116,32,119,111,117,108,100,32,98,101,32,104,101,108,112,102,117,108,32,116,111,32,114,117,110,32,119,105,116,104,32,68,69,66,85,71,58,10,36,32,68,69,66,85,71,61,42,32,99,111,108,111,115,115,117,115,32,115,101,114,118,101,114,32,45,45,107,101,121,45,102,105,108,101,32,60,53,89,111,117,114,83,116,111,114,97,103,101,65,100,100,114,101,115,115,46,106,115,111,110,62,32,45,45,112,117,98,108,105,99,45,117,114,108,32,104,116,116,112,115,58,47,47,60,121,111,117,114,46,99,111,111,108,46,117,114,108,62,10,35,32,73,102,32,121,111,117,32,115,101,116,32,97,32,112,97,115,115,112,104,114,97,115,101,32,102,111,114,32,60,53,89,111,117,114,83,116,111,114,97,103,101,65,100,100,114,101,115,115,46,106,115,111,110,62,58,10,36,32,68,69,66,85,71,61,42,32,99,111,108,111,115,115,117,115,32,115,101,114,118,101,114,32,45,45,107,101,121,45,102,105,108,101,32,60,53,89,111,117,114,83,116,111,114,97,103,101,65,100,100,114,101,115,115,46,106,115,111,110,62,32,45,45,112,97,115,115,112,104,114,97,115,101,32,60,121,111,117,114,95,112,97,115,115,112,104,114,97,115,101,62,32,45,45,112,117,98,108,105,99,45,117,114,108,32,104,116,116,112,115,58,47,47,60,121,111,117,114,46,99,111,111,108,46,117,114,108,62,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084480},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[94,{"id":94,"thread_id":21,"nr_in_thread":18,"current_text":[73,102,32,121,111,117,32,100,111,32,116,104,105,115,44,32,121,111,117,32,115,104,111,117,108,100,32,115,101,101,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,58,10,10,96,96,96,10,100,105,115,99,111,118,101,114,121,58,58,112,117,98,108,105,115,104,32,123,32,110,97,109,101,58,32,39,81,109,80,119,119,115,53,55,54,110,51,66,121,69,54,67,81,85,118,85,116,51,100,103,109,111,107,107,50,88,78,50,99,74,103,80,89,72,87,111,77,54,83,83,85,83,39,44,10,100,105,115,99,111,118,101,114,121,58,58,112,117,98,108,105,115,104,32,32,32,118,97,108,117,101,58,32,39,47,105,112,102,115,47,81,109,101,68,65,87,71,82,106,98,87,120,54,102,77,67,120,116,116,57,53,89,84,83,103,84,103,66,104,104,116,98,107,49,113,115,71,107,116,101,82,88,97,69,83,84,39,32,125,32,43,51,57,49,109,115,10,96,96,96,10,89,111,117,32,99,97,110,32,106,117,115,116,32,100,111,32,116,104,105,115,32,105,110,115,116,101,97,100,44,32,98,117,116,32,105,116,32,119,105,108,108,32,109,97,107,101,32,105,116,32,109,111,114,101,32,100,105,102,102,105,99,117,108,116,32,116,111,32,100,101,98,117,103,46,46,46,10,96,96,96,10,36,32,99,111,108,111,115,115,117,115,32,115,101,114,118,101,114,32,45,45,107,101,121,45,102,105,108,101,32,60,53,89,111,117,114,83,116,111,114,97,103,101,65,100,100,114,101,115,115,46,106,115,111,110,62,32,45,45,112,117,98,108,105,99,45,117,114,108,32,104,116,116,112,115,58,47,47,60,121,111,117,114,46,99,111,111,108,46,117,114,108,62,10,96,96,96,10,73,102,32,101,118,101,114,121,116,104,105,110,103,32,105,115,32,119,111,114,107,105,110,103,32,115,109,111,111,116,104,108,121,44,32,121,111,117,32,119,105,108,108,32,110,111,119,32,115,116,97,114,116,32,115,121,110,99,105,110,103,32,116,104,101,32,96,99,111,110,116,101,110,116,32,100,105,114,101,99,116,111,114,121,96,10,78,111,116,101,32,116,104,97,116,32,117,110,108,101,115,115,32,121,111,117,32,114,117,110,32,116,104,105,115,32,105,115,32,97,32,115,101,114,118,105,99,101,44,32,121,111,117,32,110,111,119,32,104,97,118,101,32,116,111,32,111,112,101,110,32,97,32,115,101,99,111,110,100,32,116,101,114,109,105,110,97,108,32,102,111,114,32,116,104,101,32,114,101,109,97,105,110,105,110,103,32,115,116,101,112,115,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084516},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[95,{"id":95,"thread_id":21,"nr_in_thread":19,"current_text":[35,35,35,35,32,67,104,101,99,107,32,116,104,97,116,32,121,111,117,32,97,114,101,32,115,121,110,99,105,110,103,10,73,110,32,121,111,117,114,32,115,101,99,111,110,100,32,116,101,114,109,105,110,97,108,32,119,105,110,100,111,119,58,10,96,96,96,10,36,32,105,112,102,115,32,98,105,116,115,119,97,112,32,119,97,110,116,108,105,115,116,10,45,45,45,10,35,32,79,117,116,112,117,116,32,115,104,111,117,108,100,32,98,101,32,97,32,108,111,110,103,32,108,105,115,116,32,111,102,32,107,101,121,115,44,32,101,103,46,32,78,111,116,101,32,116,104,97,116,32,105,116,32,109,105,103,104,116,32,116,97,107,101,32,97,32,102,101,119,32,109,105,110,117,116,101,115,32,98,101,102,111,114,101,32,116,104,101,32,97,99,116,117,97,108,32,99,111,110,116,101,110,116,32,102,114,111,109,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,99,111,110,116,101,110,116,32,100,105,114,101,99,116,111,114,121,32,115,104,111,119,115,32,117,112,46,10,45,45,45,10,81,109,101,115,122,101,66,106,66,69,114,70,81,114,107,105,81,80,104,56,81,104,84,115,51,104,102,67,69,71,74,117,75,50,106,78,111,112,97,116,72,110,112,115,49,107,10,46,46,46,10,81,109,102,67,98,85,115,89,104,75,66,109,114,100,111,112,51,121,70,114,101,114,113,86,75,119,66,74,118,89,53,116,98,112,86,49,99,102,57,67,120,51,76,49,74,56,10,96,96,96,10,73,102,32,121,111,117,32,100,105,100,32,116,104,105,115,32,105,109,109,101,100,105,97,116,101,108,121,32,97,102,116,101,114,32,70,73,82,83,84,32,115,116,97,114,116,105,110,103,32,121,111,117,114,32,115,116,111,114,97,103,101,32,110,111,100,101,44,32,116,104,101,32,96,119,97,110,116,108,105,115,116,96,32,109,105,103,104,116,32,98,101,32,101,109,112,116,121,46,32,71,105,118,101,32,105,116,32,97,32,109,105,110,117,116,101,44,32,97,110,100,32,105,116,32,115,104,111,117,108,100,32,99,111,110,116,97,105,110,32,97,116,32,108,101,97,115,116,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,105,116,101,109,115,32,105,110,32,116,104,101,32,99,111,110,116,101,110,116,32,100,105,114,101,99,116,111,114,121,46,32,89,111,117,32,99,97,110,32,97,108,115,111,32,99,104,101,99,107,32,119,104,97,116,32,99,111,110,116,101,110,116,32,121,111,117,32,104,97,118,101,32,115,116,111,114,101,100,32,98,121,58],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084534},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[96,{"id":96,"thread_id":21,"nr_in_thread":20,"current_text":[96,96,96,10,105,112,102,115,32,114,101,102,115,32,108,111,99,97,108,10,45,45,45,10,35,32,79,117,116,112,117,116,32,115,104,111,117,108,100,32,98,101,32,97,110,32,101,118,101,110,32,108,111,110,103,101,114,32,108,105,115,116,32,111,102,32,107,101,121,115,44,32,101,103,46,10,45,45,45,10,81,109,101,115,122,101,66,106,66,69,114,70,81,114,107,105,81,80,104,56,81,104,84,115,51,104,102,67,69,71,74,117,75,50,106,78,111,112,97,116,72,110,112,115,49,107,10,81,109,101,122,117,109,51,65,87,100,120,107,109,49,65,116,72,101,51,53,68,90,71,87,100,102,104,84,81,52,80,86,109,109,90,97,116,71,119,68,76,54,56,82,69,83,10,46,46,46,10,81,109,102,67,67,106,67,53,119,57,119,120,84,70,111,65,97,74,57,52,55,115,115,50,111,99,49,106,120,54,82,50,109,77,57,120,106,85,55,67,99,114,113,53,53,77,10,81,109,102,67,98,85,115,89,104,75,66,109,114,100,111,112,51,121,70,114,101,114,113,86,75,119,66,74,118,89,53,116,98,112,86,49,99,102,57,67,120,51,76,49,74,56,10,96,96,96,10,10,73,110,32,121,111,117,114,32,102,105,114,115,116,32,116,101,114,109,105,110,97,108,32,40,119,104,101,114,101,41,32,116,104,101,32,115,116,111,114,97,103,101,32,110,111,100,101,32,105,115,32,114,117,110,110,105,110,103,44,32,121,111,117,32,119,105,108,108,32,115,111,111,110,32,101,110,111,117,103,104,32,115,101,101,32,116,104,105,115,58,10,96,96,96,10,46,46,46,10,106,111,121,115,116,114,101,97,109,58,114,117,110,116,105,109,101,58,98,97,115,101,32,84,88,32,115,116,97,116,117,115,58,32,70,105,110,97,108,105,122,101,100,32,43,55,109,115,10,106,111,121,115,116,114,101,97,109,58,114,117,110,116,105,109,101,58,98,97,115,101,32,84,88,32,70,105,110,97,108,105,122,101,100,46,32,43,49,109,115,10,106,111,121,115,116,114,101,97,109,58,115,121,110,99,32,115,121,110,99,32,114,117,110,32,99,111,109,112,108,101,116,101,32,43,48,109,115,10,96,96,96,10,10,73,110,32,116,104,101,32,115,101,99,111,110,100,32,116,101,114,109,105,110,97,108,58,10,96,96,96,10,36,32,105,112,102,115,32,114,101,102,115,32,108,111,99,97,108,10,96,96,96,10,83,104,111,117,108,100,32,114,101,116,117,114,110,32,110,111,116,104,105,110,103,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084564},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[97,{"id":97,"thread_id":21,"nr_in_thread":21,"current_text":[35,35,35,32,82,117,110,32,115,116,111,114,97,103,101,32,110,111,100,101,32,97,115,32,97,32,115,101,114,118,105,99,101,10,10,84,111,32,101,110,115,117,114,101,32,104,105,103,104,32,117,112,116,105,109,101,44,32,105,116,39,115,32,98,101,115,116,32,116,111,32,115,101,116,32,116,104,101,32,115,121,115,116,101,109,32,117,112,32,97,115,32,97,32,96,115,101,114,118,105,99,101,96,46,32,78,111,116,101,32,116,104,97,116,32,116,104,105,115,32,119,105,108,108,32,110,111,116,32,119,111,114,107,32,105,102,32,121,111,117,32,115,101,116,32,97,32,112,97,115,115,119,111,114,100,32,102,111,114,32,121,111,117,114,32,96,60,53,89,111,117,114,83,116,111,114,97,103,101,65,100,100,114,101,115,115,46,106,115,111,110,62,32,96,46,10,10,69,120,97,109,112,108,101,32,102,105,108,101,32,98,101,108,111,119,58,10,10,96,96,96,10,36,32,110,97,110,111,32,47,101,116,99,47,115,121,115,116,101,109,100,47,115,121,115,116,101,109,47,115,116,111,114,97,103,101,45,110,111,100,101,46,115,101,114,118,105,99,101,10,35,32,80,97,115,116,101,32,105,110,32,101,118,101,114,121,116,104,105,110,103,32,98,101,108,111,119,32,116,104,101,32,115,116,97,112,108,101,100,32,108,105,110,101,10,45,45,45,10,91,85,110,105,116,93,10,68,101,115,99,114,105,112,116,105,111,110,61,74,111,121,115,116,114,101,97,109,32,83,116,111,114,97,103,101,32,78,111,100,101,10,65,102,116,101,114,61,110,101,116,119,111,114,107,46,116,97,114,103,101,116,32,105,112,102,115,46,115,101,114,118,105,99,101,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,115,101,114,118,105,99,101,10,10,91,83,101,114,118,105,99,101,93,10,85,115,101,114,61,114,111,111,116,10,87,111,114,107,105,110,103,68,105,114,101,99,116,111,114,121,61,47,114,111,111,116,47,115,116,111,114,97,103,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,10,76,105,109,105,116,78,79,70,73,76,69,61,56,49,57,50,10,69,110,118,105,114,111,110,109,101,110,116,61,68,69,66,85,71,61,42,10,69,120,101,99,83,116,97,114,116,61,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,110,111,100,101,106,115,47,110,111,100,101,45,118,49,48,46,49,54,46,48,45,108,105,110,117,120,45,120,54,52,47,98,105,110,47,110,111,100,101,32,92,10,32,32,32,32,32,32,32,32,112,97,99,107,97,103,101,115,47,99,111,108,111,115,115,117,115,47,98,105,110,47,99,108,105,46,106,115,32,92,10,32,32,32,32,32,32,32,32,45,45,107,101,121,45,102,105,108,101,32,60,53,89,111,117,114,83,116,111,114,97,103,101,65,100,100,114,101,115,115,46,106,115,111,110,62,32,45,45,112,117,98,108,105,99,45,117,114,108,32,104,116,116,112,115,58,47,47,60,121,111,117,114,46,99,111,111,108,46,117,114,108,62,10,82,101,115,116,97,114,116,61,111,110,45,102,97,105,108,117,114,101,10,83,116,97,114,116,76,105,109,105,116,73,110,116,101,114,118,97,108,61,54,48,48,10,10,91,73,110,115,116,97,108,108,93,10,87,97,110,116,101,100,66,121,61,109,117,108,116,105,45,117,115,101,114,46,116,97,114,103,101,116,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084588},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[98,{"id":98,"thread_id":21,"nr_in_thread":22,"current_text":[83,97,118,101,32,97,110,100,32,101,120,105,116,46,32,67,108,111,115,101,32,96,99,111,108,111,115,115,117,115,96,32,105,102,32,105,116,39,115,32,115,116,105,108,108,32,114,117,110,110,105,110,103,44,32,116,104,101,110,58,10,96,96,96,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,97,114,116,32,115,116,111,114,97,103,101,45,110,111,100,101,10,35,32,73,102,32,101,118,101,114,121,116,104,105,110,103,32,119,111,114,107,115,44,32,121,111,117,32,115,104,111,117,108,100,32,103,101,116,32,97,110,32,111,117,116,112,117,116,46,32,86,101,114,105,102,121,32,119,105,116,104,58,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,97,116,117,115,32,115,116,111,114,97,103,101,45,110,111,100,101,10,35,32,87,104,105,99,104,32,115,104,111,117,108,100,32,112,114,111,100,117,99,101,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,58,10,45,45,45,10,226,151,143,32,115,116,111,114,97,103,101,45,110,111,100,101,46,115,101,114,118,105,99,101,32,45,32,74,111,121,115,116,114,101,97,109,32,83,116,111,114,97,103,101,32,78,111,100,101,10,32,32,32,76,111,97,100,101,100,58,32,108,111,97,100,101,100,32,40,47,101,116,99,47,115,121,115,116,101,109,100,47,115,121,115,116,101,109,47,115,116,111,114,97,103,101,45,110,111,100,101,46,115,101,114,118,105,99,101,59,32,100,105,115,97,98,108,101,100,41,10,32,32,32,65,99,116,105,118,101,58,32,97,99,116,105,118,101,32,40,114,117,110,110,105,110,103,41,32,115,105,110,99,101,32,84,117,101,32,50,48,49,57,45,48,54,45,49,56,32,49,55,58,50,53,58,52,49,32,85,84,67,59,32,52,109,105,110,32,49,57,115,32,97,103,111,10,32,77,97,105,110,32,80,73,68,58,32,53,54,53,52,32,40,99,111,108,111,115,115,117,115,41,10,32,32,32,67,71,114,111,117,112,58,32,47,115,121,115,116,101,109,46,115,108,105,99,101,47,115,116,111,114,97,103,101,45,110,111,100,101,46,115,101,114,118,105,99,101,10,32,32,32,32,32,32,32,32,32,32,32,226,148,148,226,148,128,53,54,53,52,32,99,111,108,111,115,115,117,115,10,32,32,32,32,32,32,32,32,32,32,32,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084648},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[99,{"id":99,"thread_id":21,"nr_in_thread":23,"current_text":[96,96,96,10,10,74,117,110,32,49,56,32,49,55,58,50,57,58,51,49,32,108,111,99,97,108,104,111,115,116,32,110,111,100,101,91,53,54,53,52,93,58,32,84,117,101,44,32,49,56,32,74,117,110,32,50,48,49,57,32,49,55,58,50,57,58,51,49,32,71,77,84,32,106,111,121,115,116,114,101,97,109,58,117,116,105,108,58,114,97,110,103,101,115,32,61,32,71,111,116,32,99,104,117,110,107,32,119,105,116,104,32,98,121,116,101,32,114,97,110,103,101,32,91,32,49,53,53,53,57,54,56,44,32,49,53,54,48,48,54,51,32,93,10,74,117,110,32,49,56,32,49,55,58,50,57,58,51,49,32,108,111,99,97,108,104,111,115,116,32,110,111,100,101,91,53,54,53,52,93,58,32,84,117,101,44,32,49,56,32,74,117,110,32,50,48,49,57,32,49,55,58,50,57,58,51,49,32,71,77,84,32,106,111,121,115,116,114,101,97,109,58,117,116,105,108,58,114,97,110,103,101,115,32,61,32,71,111,116,32,99,104,117,110,107,32,119,105,116,104,32,98,121,116,101,32,114,97,110,103,101,32,91,32,49,53,54,48,48,54,52,44,32,49,53,54,52,49,53,57,32,93,10,74,117,110,32,49,56,32,49,55,58,50,57,58,51,49,32,108,111,99,97,108,104,111,115,116,32,110,111,100,101,91,53,54,53,52,93,58,32,84,117,101,44,32,49,56,32,74,117,110,32,50,48,49,57,32,49,55,58,50,57,58,51,49,32,71,77,84,32,106,111,121,115,116,114,101,97,109,58,117,116,105,108,58,114,97,110,103,101,115,32,67,117,114,114,101,110,116,32,114,101,113,117,101,115,116,101,100,32,114,97,110,103,101,32,105,115,32,91,32,51,51,55,50,50,56,52,56,44,32,52,52,49,57,53,57,56,51,32,93,10,74,117,110,32,49,56,32,49,55,58,50,57,58,51,49,32,108,111,99,97,108,104,111,115,116,32,110,111,100,101,91,53,54,53,52,93,58,32,84,117,101,44,32,49,56,32,74,117,110,32,50,48,49,57,32,49,55,58,50,57,58,51,49,32,71,77,84,32,106,111,121,115,116,114,101,97,109,58,117,116,105,108,58,114,97,110,103,101,115,32,73,103,110,111,114,105,110,103,32,99,104,117,110,107,59,32,105,116,32,105,115,32,111,117,116,32,111,102,32,114,97,110,103,101,46,10,74,117,110,32,49,56,32,49,55,58,50,57,58,51,49,32,108,111,99,97,108,104,111,115,116,32,110,111,100,101,91,53,54,53,52,93,58,32,84,117,101,44,32,49,56,32,74,117,110,32,50,48,49,57,32,49,55,58,50,57,58,51,49,32,71,77,84,32,106,111,121,115,116,114,101,97,109,58,117,116,105,108,58,114,97,110,103,101,115,32,61,32,71,111,116,32,99,104,117,110,107,32,119,105,116,104,32,98,121,116,101,32,114,97,110,103,101,32,91,32,49,53,54,52,49,54,48,44,32,49,53,54,56,50,53,53,32,93,10,74,117,110,32,49,56,32,49,55,58,50,57,58,51,49,32,108,111,99,97,108,104,111,115,116,32,110,111,100,101,91,53,54,53,52,93,58,32,84,117,101,44,32,49,56,32,74,117,110,32,50,48,49,57,32,49,55,58,50,57,58,51,49,32,71,77,84,32,10,45,45,45,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084690},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[100,{"id":100,"thread_id":21,"nr_in_thread":24,"current_text":[96,96,96,10,35,32,84,111,32,104,97,118,101,32,99,111,108,111,115,115,117,115,32,115,116,97,114,116,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,97,116,32,114,101,98,111,111,116,58,10,36,32,115,121,115,116,101,109,99,116,108,32,101,110,97,98,108,101,32,99,111,108,111,115,115,117,115,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,115,116,111,112,32,116,104,101,32,115,116,111,114,97,103,101,32,110,111,100,101,44,32,101,105,116,104,101,114,32,116,111,32,101,100,105,116,32,116,104,101,32,115,116,111,114,97,103,101,45,110,111,100,101,46,115,101,114,118,105,99,101,32,102,105,108,101,32,111,114,32,115,111,109,101,32,111,116,104,101,114,32,114,101,97,115,111,110,58,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,111,112,32,115,116,111,114,97,103,101,45,110,111,100,101,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084720},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[101,{"id":101,"thread_id":21,"nr_in_thread":25,"current_text":[35,35,35,32,86,101,114,105,102,121,32,101,118,101,114,121,116,104,105,110,103,32,105,115,32,119,111,114,107,105,110,103,10,10,73,110,32,121,111,117,114,32,98,114,111,119,115,101,114,44,32,102,105,110,100,32,99,108,105,99,107,32,111,110,32,97,110,32,117,112,108,111,97,100,101,100,32,109,101,100,105,97,32,102,105,108,101,46,32,67,111,112,121,32,116,104,101,32,96,60,99,111,110,116,101,110,116,45,105,100,62,96,44,32,105,101,46,32,119,104,97,116,32,99,111,109,101,115,32,97,102,116,101,114,32,116,104,101,32,108,97,115,116,32,96,47,96,46,10,10,84,104,101,110,32,112,97,115,116,101,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,105,110,32,121,111,117,114,32,98,114,111,119,115,101,114,58,10,10,96,104,116,116,112,115,58,47,47,60,121,111,117,114,46,99,111,111,108,46,117,114,108,62,47,97,115,115,101,116,47,118,48,47,60,99,111,110,116,101,110,116,45,105,100,62,96,46,10,10,73,102,32,121,111,117,32,103,101,116,32,97,32,98,108,97,99,107,32,115,99,114,101,101,110,32,119,105,116,104,32,97,32,109,101,100,105,97,32,112,108,97,121,101,114,44,32,116,104,97,116,32,109,101,97,110,115,32,121,111,117,32,97,114,101,32,103,111,111,100,33],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084744},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[102,{"id":102,"thread_id":22,"nr_in_thread":2,"current_text":[35,35,32,80,111,114,116,32,110,111,116,32,115,101,116,10,10,73,102,32,121,111,117,32,103,101,116,32,116,104,105,115,32,101,114,114,111,114,58,10,96,96,96,10,84,121,112,101,69,114,114,111,114,32,91,69,82,82,95,73,78,86,65,76,73,68,95,79,80,84,95,86,65,76,85,69,93,58,32,84,104,101,32,118,97,108,117,101,32,34,123,32,112,111,114,116,58,32,116,114,117,101,44,32,104,111,115,116,58,32,39,58,58,39,32,125,34,32,105,115,32,105,110,118,97,108,105,100,32,102,111,114,32,111,112,116,105,111,110,32,34,111,112,116,105,111,110,115,34,10,32,32,32,32,97,116,32,83,101,114,118,101,114,46,108,105,115,116,101,110,32,40,110,101,116,46,106,115,58,49,52,53,48,58,57,41,10,32,32,32,32,97,116,32,80,114,111,109,105,115,101,32,40,47,114,111,111,116,47,115,116,111,114,97,103,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,112,97,99,107,97,103,101,115,47,99,111,108,111,115,115,117,115,47,98,105,110,47,99,108,105,46,106,115,58,49,50,57,58,49,50,41,10,32,32,32,32,97,116,32,110,101,119,32,80,114,111,109,105,115,101,32,40,60,97,110,111,110,121,109,111,117,115,62,41,10,32,32,32,32,97,116,32,115,116,97,114,116,95,101,120,112,114,101,115,115,95,97,112,112,32,40,47,114,111,111,116,47,115,116,111,114,97,103,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,112,97,99,107,97,103,101,115,47,99,111,108,111,115,115,117,115,47,98,105,110,47,99,108,105,46,106,115,58,49,50,48,58,49,48,41,10,32,32,32,32,97,116,32,115,116,97,114,116,95,97,108,108,95,115,101,114,118,105,99,101,115,32,40,47,114,111,111,116,47,115,116,111,114,97,103,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,112,97,99,107,97,103,101,115,47,99,111,108,111,115,115,117,115,47,98,105,110,47,99,108,105,46,106,115,58,49,51,56,58,49,48,41,10,32,32,32,32,97,116,32,79,98,106,101,99,116,46,115,101,114,118,101,114,32,40,47,114,111,111,116,47,115,116,111,114,97,103,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,112,97,99,107,97,103,101,115,47,99,111,108,111,115,115,117,115,47,98,105,110,47,99,108,105,46,106,115,58,51,50,56,58,49,49,41,10,32,32,32,32,97,116,32,112,114,111,99,101,115,115,46,95,116,105,99,107,67,97,108,108,98,97,99,107,32,40,105,110,116,101,114,110,97,108,47,112,114,111,99,101,115,115,47,110,101,120,116,95,116,105,99,107,46,106,115,58,54,56,58,55,41,10,96,96,96,10,10,73,116,32,109,111,115,116,32,108,105,107,101,108,121,32,109,101,97,110,115,32,121,111,117,114,32,112,111,114,116,32,105,115,32,110,111,116,32,115,101,116,44,32,40,97,108,116,104,111,117,103,104,32,105,116,32,115,104,111,117,108,100,32,100,101,102,97,117,108,116,32,116,111,32,51,48,48,48,41,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084792},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[103,{"id":103,"thread_id":22,"nr_in_thread":3,"current_text":[96,96,96,10,36,32,99,111,108,111,115,115,117,115,32,45,45,104,101,108,112,10,35,32,83,104,111,117,108,100,32,108,105,115,116,32,116,104,101,32,112,97,116,104,32,116,111,32,121,111,117,114,32,99,117,114,114,101,110,116,32,99,111,110,102,105,103,32,102,105,108,101,46,10,36,32,99,97,116,32,47,112,97,116,104,47,116,111,47,46,99,111,110,102,105,103,47,99,111,110,102,105,103,115,116,111,114,101,47,64,106,111,121,115,116,114,101,97,109,47,99,111,108,111,115,115,117,115,46,106,115,111,110,10,35,32,115,104,111,117,108,100,32,114,101,116,117,114,110,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,58,10,45,45,45,10,123,10,32,34,112,111,114,116,34,58,32,51,48,48,48,44,10,32,34,115,121,110,99,80,101,114,105,111,100,34,58,32,51,48,48,48,48,48,44,10,32,34,112,117,98,108,105,99,85,114,108,34,58,32,34,104,116,116,112,115,58,47,47,60,121,111,117,114,46,99,111,111,108,46,117,114,108,62,34,44,10,32,34,107,101,121,70,105,108,101,34,58,32,34,47,112,97,116,104,47,116,111,47,60,53,89,111,117,114,83,116,111,114,97,103,101,65,100,100,114,101,115,115,46,106,115,111,110,62,34,10,125,10,96,96,96,10,73,102,32,96,34,112,111,114,116,34,58,32,60,110,62,96,32,105,115,32,109,105,115,115,105,110,103,44,32,111,114,32,110,111,116,32,97,32,110,117,109,98,101,114,44,32,112,97,115,115,32,116,104,101,58,10,96,45,112,32,60,110,62,32,96,32,97,114,103,117,109,101,110,116,32,111,114,32,101,100,105,116,32,121,111,117,114,32,99,111,110,102,105,103,32,102,105,108,101,44,32,119,104,101,114,101,32,96,60,110,62,96,32,99,111,117,108,100,32,98,101,32,51,48,48,48,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084810},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[104,{"id":104,"thread_id":22,"nr_in_thread":4,"current_text":[35,35,32,73,110,115,116,97,108,108,32,121,97,114,110,32,97,110,100,32,110,111,100,101,32,111,110,32,108,105,110,117,120,10,10,71,111,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,110,111,100,101,106,115,46,111,114,103,47,101,110,47,100,111,119,110,108,111,97,100,47,41,32,97,110,100,32,102,105,110,100,32,116,104,101,32,110,101,119,101,115,116,32,40,76,84,83,41,32,98,105,110,97,114,121,32,102,111,114,32,121,111,117,114,32,100,105,115,116,114,111,46,32,84,104,105,115,32,103,117,105,100,101,32,119,105,108,108,32,97,115,115,117,109,101,32,54,52,45,98,105,116,32,108,105,110,117,120,44,32,97,110,100,32,96,110,111,100,101,45,118,49,48,46,49,54,46,48,96,46,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,105,110,115,116,97,108,108,32,97,115,32,96,114,111,111,116,96,44,32,115,111,32,121,111,117,114,32,117,115,101,114,32,99,97,110,32,117,115,101,32,96,110,112,109,96,32,119,105,116,104,111,117,116,32,96,115,117,100,111,96,32,112,114,105,118,105,108,101,103,101,115,44,32,103,111,32,91,104,101,114,101,93,40,35,105,110,115,116,97,108,108,45,97,115,45,114,111,111,116,41,46,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,105,110,115,116,97,108,108,32,97,115,32,97,110,111,116,104,101,114,32,117,115,101,114,32,40,109,117,115,116,32,104,97,118,101,32,96,115,117,100,111,96,32,112,114,105,118,105,108,101,103,101,115,41,44,32,103,111,32,91,104,101,114,101,93,40,35,105,110,115,116,97,108,108,45,97,115,45,117,115,101,114,45,119,105,116,104,45,115,117,100,111,45,112,114,105,118,105,108,101,103,101,115,41,46,10,10,65,108,116,101,114,110,97,116,105,118,101,115,32,115,117,99,104,32,97,115,32,91,110,118,109,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,110,118,109,45,115,104,47,110,118,109,41,32,111,114,32,91,110,111,100,101,115,111,117,114,99,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,110,111,100,101,115,111,117,114,99,101,47,100,105,115,116,114,105,98,117,116,105,111,110,115,47,98,108,111,98,47,109,97,115,116,101,114,47,82,69,65,68,77,69,46,109,100,41,32,97,114,101,32,97,108,115,111,32,119,111,114,116,104,32,99,111,110,115,105,100,101,114,105,110,103,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084828},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[105,{"id":105,"thread_id":22,"nr_in_thread":5,"current_text":[35,35,35,35,32,73,110,115,116,97,108,108,32,97,115,32,82,111,111,116,10,84,104,105,115,32,115,101,99,116,105,111,110,32,97,115,115,117,109,101,115,32,121,111,117,32,97,114,101,32,105,110,115,116,97,108,108,105,110,103,32,97,115,32,96,114,111,111,116,96,46,32,73,116,32,97,108,115,111,32,100,101,109,111,110,115,116,114,97,116,101,115,32,104,111,119,32,121,111,117,32,99,97,110,32,112,114,111,118,105,100,101,32,97,110,111,116,104,101,114,32,117,115,101,114,32,97,99,99,101,115,115,32,119,105,116,104,111,117,116,32,104,97,118,105,110,103,32,116,111,32,117,115,101,32,96,115,117,100,111,96,46,32,73,116,32,100,111,101,115,110,39,116,32,109,97,116,116,101,114,32,105,102,32,117,115,101,114,32,96,106,111,121,115,116,114,101,97,109,96,32,104,97,115,32,96,115,117,100,111,96,32,112,114,105,118,105,108,101,103,101,115,32,111,114,32,110,111,116,46,10,10,96,96,96,10,36,32,119,103,101,116,32,104,116,116,112,115,58,47,47,110,111,100,101,106,115,46,111,114,103,47,100,105,115,116,47,118,49,48,46,49,54,46,48,47,110,111,100,101,45,118,49,48,46,49,54,46,48,45,108,105,110,117,120,45,120,54,52,46,116,97,114,46,120,122,10,36,32,109,107,100,105,114,32,45,112,32,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,110,111,100,101,106,115,10,36,32,116,97,114,32,45,120,74,118,102,32,110,111,100,101,45,118,49,48,46,49,54,46,48,45,108,105,110,117,120,45,120,54,52,46,116,97,114,46,120,122,32,45,67,32,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,110,111,100,101,106,115,10,36,32,110,97,110,111,32,126,47,46,98,97,115,104,95,112,114,111,102,105,108,101,10,45,45,45,10,65,112,112,101,110,100,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,108,105,110,101,115,58,10,45,45,45,10,35,32,78,111,100,101,106,115,10,86,69,82,83,73,79,78,61,118,49,48,46,49,54,46,48,10,68,73,83,84,82,79,61,108,105,110,117,120,45,120,54,52,10,101,120,112,111,114,116,32,80,65,84,72,61,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,110,111,100,101,106,115,47,110,111,100,101,45,36,86,69,82,83,73,79,78,45,36,68,73,83,84,82,79,47,98,105,110,58,36,80,65,84,72,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084864},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[106,{"id":106,"thread_id":22,"nr_in_thread":6,"current_text":[83,97,118,101,32,97,110,100,32,101,120,105,116,44,32,116,104,101,110,58,10,96,96,96,10,36,32,115,111,117,114,99,101,32,126,47,46,98,97,115,104,95,112,114,111,102,105,108,101,10,35,32,86,101,114,105,102,121,32,118,101,114,115,105,111,110,58,10,36,32,110,111,100,101,32,45,118,10,36,32,110,112,109,32,45,118,10,36,32,110,112,120,32,45,118,10,35,32,73,110,115,116,97,108,108,32,121,97,114,110,10,36,32,110,112,109,32,105,110,115,116,97,108,108,32,121,97,114,110,32,45,103,10,36,32,110,112,109,32,105,32,110,111,100,101,45,103,121,112,64,53,46,48,46,48,10,35,32,73,102,32,101,118,101,114,121,116,104,105,110,103,32,108,111,111,107,115,32,111,107,44,32,97,110,100,32,121,111,117,32,119,97,110,116,32,116,111,32,97,108,108,111,119,32,117,115,101,114,32,106,111,121,115,116,114,101,97,109,32,97,99,99,101,115,115,58,10,36,32,99,104,111,119,110,32,45,82,32,106,111,121,115,116,114,101,97,109,32,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,110,111,100,101,106,115,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084888},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[107,{"id":107,"thread_id":22,"nr_in_thread":7,"current_text":[76,111,103,32,105,110,32,116,111,32,106,111,121,115,116,114,101,97,109,58,10,96,96,96,10,36,32,115,117,32,106,111,121,115,116,114,101,97,109,10,36,32,99,100,10,35,32,82,101,112,101,97,116,32,116,104,101,32,46,98,97,115,104,95,112,114,111,102,105,108,101,32,99,111,110,102,105,103,58,10,36,32,110,97,110,111,32,126,47,46,98,97,115,104,95,112,114,111,102,105,108,101,10,45,45,45,10,65,112,112,101,110,100,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,108,105,110,101,115,58,10,45,45,45,10,35,32,78,111,100,101,106,115,10,86,69,82,83,73,79,78,61,118,49,48,46,49,54,46,48,10,68,73,83,84,82,79,61,108,105,110,117,120,45,120,54,52,10,101,120,112,111,114,116,32,80,65,84,72,61,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,110,111,100,101,106,115,47,110,111,100,101,45,36,86,69,82,83,73,79,78,45,36,68,73,83,84,82,79,47,98,105,110,58,36,80,65,84,72,10,96,96,96,10,83,97,118,101,32,97,110,100,32,101,120,105,116,44,32,116,104,101,110,58,10,96,96,96,10,36,32,115,111,117,114,99,101,32,126,47,46,98,97,115,104,95,112,114,111,102,105,108,101,10,35,32,86,101,114,105,102,121,32,116,104,97,116,32,105,116,32,119,111,114,107,115,58,10,36,32,110,111,100,101,32,45,118,10,36,32,110,112,109,32,45,118,10,36,32,110,112,120,32,45,118,10,36,32,121,97,114,110,32,45,118,10,96,96,96,10,10,89,111,117,32,104,97,118,101,32,110,111,119,32,115,117,99,99,101,115,115,102,117,108,108,121,32,105,110,115,116,97,108,108,101,100,32,116,104,101,32,110,101,119,101,115,116,32,40,76,84,83,41,32,118,101,114,115,105,111,110,115,32,111,102,32,96,110,112,109,96,44,32,96,110,111,100,101,96,32,97,110,100,32,96,121,97,114,110,96,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084900},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[108,{"id":108,"thread_id":22,"nr_in_thread":8,"current_text":[35,35,35,35,32,73,110,115,116,97,108,108,32,97,115,32,117,115,101,114,32,119,105,116,104,32,96,115,117,100,111,96,32,112,114,105,118,105,108,101,103,101,115,10,84,104,105,115,32,115,101,99,116,105,111,110,32,97,115,115,117,109,101,115,32,116,104,101,32,115,116,101,112,115,32,97,114,101,32,112,101,114,102,111,114,109,101,100,32,97,115,32,117,115,101,114,32,96,106,111,121,115,116,114,101,97,109,96,32,119,105,116,104,32,96,115,117,100,111,96,32,112,114,105,118,105,108,101,103,101,115,46,10,10,65,115,32,96,106,111,121,115,116,114,101,97,109,96,10,96,96,96,10,36,32,119,103,101,116,32,104,116,116,112,115,58,47,47,110,111,100,101,106,115,46,111,114,103,47,100,105,115,116,47,118,49,48,46,49,54,46,48,47,110,111,100,101,45,118,49,48,46,49,54,46,48,45,108,105,110,117,120,45,120,54,52,46,116,97,114,46,120,122,10,36,32,115,117,100,111,32,109,107,100,105,114,32,45,112,32,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,110,111,100,101,106,115,10,36,32,115,117,100,111,32,116,97,114,32,45,120,74,118,102,32,110,111,100,101,45,118,49,48,46,49,54,46,48,45,108,105,110,117,120,45,120,54,52,46,116,97,114,46,120,122,32,45,67,32,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,110,111,100,101,106,115,10,36,32,110,97,110,111,32,126,47,46,98,97,115,104,95,112,114,111,102,105,108,101,10,45,45,45,10,65,112,112,101,110,100,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,108,105,110,101,115,58,10,45,45,45,10,35,32,78,111,100,101,106,115,10,86,69,82,83,73,79,78,61,118,49,48,46,49,54,46,48,10,68,73,83,84,82,79,61,108,105,110,117,120,45,120,54,52,10,101,120,112,111,114,116,32,80,65,84,72,61,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,110,111,100,101,106,115,47,110,111,100,101,45,36,86,69,82,83,73,79,78,45,36,68,73,83,84,82,79,47,98,105,110,58,36,80,65,84,72,10,96,96,96,10,83,97,118,101,32,97,110,100,32,101,120,105,116,44,32,116,104,101,110,58,10,96,96,96,10,36,32,115,111,117,114,99,101,32,126,47,46,98,97,115,104,95,112,114,111,102,105,108,101,10,36,32,115,117,100,111,32,99,104,111,119,110,32,45,82,32,106,111,121,115,116,114,101,97,109,32,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,110,111,100,101,106,115,10,35,32,86,101,114,105,102,121,32,116,104,97,116,32,105,116,32,119,111,114,107,115,58,10,36,32,110,111,100,101,32,45,118,10,36,32,110,112,109,32,45,118,10,36,32,110,112,120,32,45,118,10,35,32,73,110,115,116,97,108,108,32,121,97,114,110,10,36,32,110,112,109,32,105,110,115,116,97,108,108,32,121,97,114,110,32,45,103,10,35,32,86,101,114,105,102,121,32,116,104,97,116,32,105,116,32,119,111,114,107,115,58,10,36,32,121,97,114,110,32,45,118,10,36,32,110,112,109,32,105,32,110,111,100,101,45,103,121,112,64,53,46,48,46,48,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084942},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[109,{"id":109,"thread_id":22,"nr_in_thread":9,"current_text":[73,102,32,121,111,117,32,119,97,110,116,32,96,114,111,111,116,96,32,116,111,32,98,101,32,97,98,108,101,32,116,111,32,117,115,101,32,96,110,112,109,96,32,97,115,32,119,101,108,108,58,10,10,96,96,96,10,36,32,115,117,100,111,32,115,117,10,36,32,110,97,110,111,32,126,47,46,98,97,115,104,95,112,114,111,102,105,108,101,10,45,45,45,10,65,112,112,101,110,100,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,108,105,110,101,115,58,10,45,45,45,10,35,32,78,111,100,101,106,115,10,86,69,82,83,73,79,78,61,118,49,48,46,49,54,46,48,10,68,73,83,84,82,79,61,108,105,110,117,120,45,120,54,52,10,101,120,112,111,114,116,32,80,65,84,72,61,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,110,111,100,101,106,115,47,110,111,100,101,45,36,86,69,82,83,73,79,78,45,36,68,73,83,84,82,79,47,98,105,110,58,36,80,65,84,72,10,96,96,96,10,83,97,118,101,32,97,110,100,32,101,120,105,116,44,32,116,104,101,110,58,10,10,96,36,32,115,111,117,114,99,101,32,126,47,46,98,97,115,104,95,112,114,111,102,105,108,101,96,10,10,89,111,117,32,104,97,118,101,32,110,111,119,32,115,117,99,99,101,115,115,102,117,108,108,121,32,105,110,115,116,97,108,108,101,100,32,116,104,101,32,110,101,119,101,115,116,32,40,76,84,83,41,32,118,101,114,115,105,111,110,115,32,111,102,32,96,110,112,109,96,44,32,96,110,111,100,101,96,32,97,110,100,32,96,121,97,114,110,96,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569084966},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[110,{"id":110,"thread_id":23,"nr_in_thread":2,"current_text":[35,35,32,71,101,110,101,114,97,116,101,32,75,101,121,115,10,67,108,105,99,107,32,96,77,121,32,75,101,121,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,44,32,97,110,100,32,116,104,101,110,32,115,101,108,101,99,116,32,116,104,101,32,96,67,114,101,97,116,101,32,75,101,121,115,96,32,116,97,98,46,32,84,104,101,32,99,104,111,105,99,101,115,32,121,111,117,32,109,97,107,101,32,102,114,111,109,32,104,101,114,101,44,32,100,101,112,101,110,100,115,32,97,32,108,105,116,116,108,101,32,111,110,32,104,111,119,32,121,111,117,32,119,97,110,116,32,116,111,32,112,97,114,116,105,99,105,112,97,116,101,46,32,73,102,32,121,111,117,32,106,117,115,116,32,119,97,110,116,32,116,111,32,112,108,97,121,32,97,114,111,117,110,100,44,32,121,111,117,32,99,97,110,32,106,117,115,116,32,102,111,108,108,111,119,32,116,104,101,32,100,101,102,97,117,108,116,115,46,32,73,102,32,121,111,117,32,104,97,118,101,32,97,32,115,112,101,99,105,102,105,99,32,114,111,108,101,32,105,110,32,109,105,110,100,44,32,121,111,117,32,109,105,103,104,116,32,119,97,110,116,32,116,111,32,102,111,108,108,111,119,32,116,104,101,32,108,105,110,107,115,32,116,111,32,116,104,101,32,105,110,115,116,114,117,99,116,105,111,110,115,32,105,110,32,116,104,101,32,104,101,97,100,101,114,44,32,111,114,32,97,99,99,101,115,115,32,116,104,101,109,32,118,105,97,32,91,65,99,116,105,118,101,32,82,111,108,101,115,93,40,35,97,99,116,105,118,101,45,114,111,108,101,115,41,46,10,10,73,110,32,97,110,121,32,101,118,101,110,116,44,32,116,104,101,32,96,75,101,121,115,96,32,119,105,108,108,32,98,101,32,115,116,111,114,101,100,32,105,110,32,121,111,117,114,32,98,114,111,119,115,101,114,32,102,111,114,32,121,111,117,114,32,99,111,110,118,101,110,105,101,110,99,101,44,32,98,117,116,32,105,116,39,115,32,115,97,102,101,115,116,32,116,111,32,115,97,118,101,32,121,111,117,114,32,96,82,97,119,32,115,101,101,100,96,32,40,121,111,117,32,110,101,101,100,32,105,116,32,102,111,114,32,99,101,114,116,97,105,110,32,114,111,108,101,115,41,32,97,110,100,32,115,97,118,101,32,116,104,101,32,46,106,115,111,110,32,102,105,108,101,46,32,84,104,101,32,96,77,110,101,109,111,110,105,99,96,32,99,97,110,32,97,108,115,111,32,98,101,32,117,115,101,100,32,116,111,32,114,101,115,116,111,114,101,32,121,111,117,114,32,96,75,101,121,115,96,44,32,98,117,116,32,119,105,108,108,32,110,111,116,32,100,111,32,121,111,117,32,97,110,121,32,103,111,111,100,32,105,102,32,121,111,117,32,119,97,110,116,32,116,111,32,98,101,99,111,109,101,32,97,32,96,86,97,108,105,100,97,116,111,114,96,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085116},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[111,{"id":111,"thread_id":23,"nr_in_thread":3,"current_text":[35,35,32,71,101,116,32,97,32,77,101,109,98,101,114,115,104,105,112,10,84,111,32,98,101,99,111,109,101,32,97,32,96,77,101,109,98,101,114,96,32,111,102,32,116,104,101,32,112,108,97,116,102,111,114,109,44,32,121,111,117,32,110,101,101,100,32,115,111,109,101,32,116,111,107,101,110,115,46,32,69,105,116,104,101,114,32,99,108,105,99,107,32,116,104,101,32,96,70,114,101,101,32,84,111,107,101,110,115,96,32,108,105,110,107,44,32,111,114,32,99,108,105,99,107,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,102,97,117,99,101,116,41,46,32,65,102,116,101,114,32,121,111,117,32,115,111,108,118,101,100,32,116,104,101,32,99,97,112,116,99,104,97,44,32,121,111,117,114,32,116,111,107,101,110,115,32,115,104,111,117,108,100,32,98,101,32,111,110,32,116,104,101,105,114,32,119,97,121,46,10,10,42,42,78,111,116,101,42,42,10,65,108,108,32,116,114,97,110,115,97,99,116,105,111,110,115,32,40,101,120,116,114,105,110,115,105,99,115,41,32,99,111,115,116,32,49,32,74,111,121,32,116,111,107,101,110,44,32,115,111,32,121,111,117,32,115,104,111,117,108,100,32,97,108,119,97,121,115,32,107,101,101,112,32,97,32,108,105,116,116,108,101,32,105,110,32,114,101,115,101,114,118,101,44,32,97,115,32,116,104,105,115,32,97,108,115,111,32,97,112,112,108,105,101,115,32,116,111,32,115,117,99,104,32,97,99,116,105,111,110,115,32,97,115,32,118,111,116,105,110,103,44,32,117,110,115,116,97,107,105,110,103,44,32,97,110,100,32,112,111,115,116,105,110,103,32,105,110,32,116,104,101,32,110,101,119,32,91,102,111,114,117,109,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,97,99,114,111,112,111,108,105,115,47,112,105,111,110,101,101,114,47,35,47,102,111,114,117,109,41,46,10,10,78,111,119,44,32,99,108,105,99,107,32,96,77,101,109,98,101,114,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,44,32,97,110,100,32,115,101,108,101,99,116,32,116,104,101,32,96,82,101,103,105,115,116,101,114,96,32,116,97,98,46,32,67,104,111,111,115,101,32,97,32,96,72,97,110,100,108,101,47,110,105,99,107,110,97,109,101,96,46,32,79,112,116,105,111,110,97,108,108,121,44,32,112,114,111,118,105,100,101,32,97,32,108,105,110,107,32,116,111,32,97,110,32,105,109,97,103,101,32,102,105,108,101,32,102,111,114,32,121,111,117,114,32,97,118,97,116,97,114,44,32,97,110,100,32,102,105,108,108,32,105,110,32,116,104,101,32,109,97,114,107,100,111,119,110,32,101,110,97,98,108,101,100,32,96,65,98,111,117,116,96,32,102,105,101,108,100,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085128},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[112,{"id":112,"thread_id":24,"nr_in_thread":2,"current_text":[35,32,73,110,115,116,114,117,99,116,105,111,110,115,10,85,110,108,105,107,101,32,109,111,115,116,32,111,102,32,116,104,101,32,111,116,104,101,114,32,99,117,114,114,101,110,116,32,97,110,100,32,102,117,116,117,114,101,32,114,111,108,101,115,32,111,110,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,80,108,97,116,102,111,114,109,44,32,98,101,99,111,109,105,110,103,32,97,32,96,67,111,117,110,99,105,108,32,77,101,109,98,101,114,96,32,111,114,32,118,111,116,105,110,103,32,111,110,32,112,114,111,112,111,115,97,108,115,32,114,101,113,117,105,114,101,115,32,110,111,32,101,120,116,114,97,32,115,111,102,116,119,97,114,101,46,32,69,118,101,114,121,116,104,105,110,103,32,99,97,110,32,98,101,32,100,111,110,101,32,105,110,32,116,104,101,32,98,114,111,119,115,101,114,44,32,98,121,32,103,111,105,110,103,32,91,104,101,114,101,93,40,104,116,116,112,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,41,46,10,10,42,42,78,111,116,101,42,42,10,65,102,116,101,114,32,105,110,116,114,111,100,117,99,105,110,103,32,96,77,101,109,98,101,114,115,104,105,112,115,96,32,116,111,32,116,104,101,32,112,108,97,116,102,111,114,109,44,32,119,101,32,102,111,117,110,100,32,105,116,32,116,111,32,98,101,32,99,111,110,102,117,115,105,110,103,32,116,111,32,104,97,118,101,32,97,32,99,111,110,99,101,112,116,32,111,102,32,98,111,116,104,32,96,65,99,99,111,117,110,116,115,96,32,97,110,100,32,96,77,101,109,98,101,114,115,104,105,112,115,96,46,32,87,101,32,97,114,101,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,111,102,32,114,101,110,97,109,105,110,103,32,116,104,101,32,96,65,99,99,111,117,110,116,115,96,32,116,111,32,116,104,101,32,96,75,101,121,115,96,44,32,98,117,116,32,116,104,101,114,101,32,97,114,101,32,115,116,105,108,108,32,116,114,97,99,101,115,32,111,102,32,96,65,99,99,111,117,110,116,115,96,32,115,104,111,119,105,110,103,32,117,112,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085194},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[113,{"id":113,"thread_id":24,"nr_in_thread":3,"current_text":[35,32,71,101,116,32,83,116,97,114,116,101,100,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,103,101,116,32,101,108,101,99,116,101,100,32,97,115,32,97,32,96,67,111,117,110,99,105,108,32,77,101,109,98,101,114,96,32,111,114,32,118,111,116,101,32,111,110,32,116,104,101,32,112,108,97,116,102,111,114,109,44,32,121,111,117,32,110,101,101,100,32,116,111,32,98,101,32,97,32,96,77,101,109,98,101,114,96,46,32,73,110,115,116,114,117,99,116,105,111,110,115,32,102,111,114,32,116,104,105,115,32,99,97,110,32,98,101,32,102,111,117,110,100,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,97,99,114,111,112,111,108,105,115,47,112,105,111,110,101,101,114,47,35,47,102,111,114,117,109,47,116,104,114,101,97,100,115,47,50,51,41,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085284},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[114,{"id":114,"thread_id":24,"nr_in_thread":4,"current_text":[35,32,69,108,101,99,116,105,111,110,32,67,121,99,108,101,10,84,104,101,32,101,108,101,99,116,105,111,110,32,99,121,99,108,101,32,99,111,110,115,105,115,116,115,32,102,111,117,114,32,115,116,97,103,101,115,46,10,49,46,32,96,65,110,110,111,117,110,99,101,109,101,110,116,96,32,45,32,108,97,115,116,115,32,52,51,50,48,48,32,98,108,111,99,107,115,32,40,126,55,50,104,41,10,50,46,32,96,86,111,116,105,110,103,96,32,32,32,32,32,32,32,45,32,108,97,115,116,115,32,49,52,52,48,48,32,98,108,111,99,107,115,32,40,126,50,52,104,41,10,51,46,32,96,82,101,118,101,97,108,96,32,32,32,32,32,32,32,45,32,108,97,115,116,115,32,49,52,52,48,48,32,98,108,111,99,107,115,32,40,126,50,52,104,41,10,52,46,32,96,84,101,114,109,96,32,32,32,32,32,32,32,32,32,45,32,108,97,115,116,115,32,50,48,49,54,48,48,32,98,108,111,99,107,115,32,40,126,49,52,100,97,121,115,41],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085308},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[115,{"id":115,"thread_id":24,"nr_in_thread":5,"current_text":[35,35,32,65,110,110,111,117,110,99,101,109,101,110,116,10,68,117,114,105,110,103,32,116,104,101,32,96,65,110,110,111,117,110,99,101,109,101,110,116,96,32,115,116,97,103,101,44,32,97,110,121,111,110,101,32,116,104,97,116,32,105,115,32,97,32,96,77,101,109,98,101,114,96,44,32,97,110,100,32,104,111,108,100,115,32,97,116,32,108,101,97,115,116,32,117,110,115,116,97,107,101,100,32,49,48,48,48,32,74,111,121,32,40,105,101,46,32,105,102,32,121,111,117,32,117,115,101,32,121,111,117,114,32,96,118,97,108,105,100,97,116,111,114,96,32,96,115,116,97,115,104,96,32,107,101,121,44,32,121,111,117,32,110,101,101,100,32,97,32,96,98,97,108,97,110,99,101,96,32,62,32,96,98,111,110,100,101,100,96,32,43,32,49,48,48,48,32,74,111,121,41,32,116,111,107,101,110,115,32,99,97,110,32,97,110,110,111,117,110,99,101,32,116,104,101,105,114,32,99,97,110,100,105,100,97,99,121,32,116,111,32,98,101,99,111,109,101,32,97,32,96,67,111,117,110,99,105,108,32,77,101,109,98,101,114,96,46,10,10,83,101,108,101,99,116,32,96,67,111,117,110,99,105,108,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,44,32,97,110,100,32,99,108,105,99,107,32,116,104,101,32,96,65,112,112,108,105,99,97,110,116,115,96,32,116,97,98,46,32,83,101,116,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,116,111,107,101,110,115,32,121,111,117,32,119,97,110,116,32,116,111,44,32,115,116,97,107,101,44,32,97,110,100,32,99,111,110,102,105,114,109,46,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,112,117,116,32,109,111,114,101,32,115,116,97,107,101,32,98,101,104,105,110,100,32,121,111,117,114,32,99,97,110,100,105,100,97,99,121,32,108,97,116,101,114,44,32,121,111,117,32,99,97,110,32,116,111,112,32,117,112,32,97,116,32,97,110,121,32,112,111,105,110,116,32,100,117,114,105,110,103,32,116,104,101,32,115,116,97,103,101,46,32,65,102,116,101,114,32,115,101,110,100,105,110,103,32,116,104,101,32,116,114,97,110,115,97,99,116,105,111,110,44,32,121,111,117,32,115,104,111,117,108,100,32,97,112,112,101,97,114,32,117,110,100,101,114,32,34,65,112,112,108,105,99,97,110,116,115,34,46,32,84,104,101,32,109,97,120,32,110,117,109,98,101,114,32,111,102,32,65,112,112,108,105,99,97,110,116,115,32,105,115,32,96,50,53,96,46,32,87,104,101,110,32,116,104,101,32,50,53,116,104,32,99,97,110,100,105,100,97,116,101,32,97,112,112,108,105,101,115,44,32,116,104,101,32,111,110,101,32,119,105,116,104,32,116,104,101,32,108,111,119,101,115,116,32,97,109,111,117,110,116,32,115,116,97,107,101,100,32,119,105,108,108,32,98,101,32,112,117,115,104,101,100,32,111,102,102,32,116,104,101,32,108,105,115,116,44,32,97,110,100,32,103,101,116,32,116,104,101,105,114,32,115,116,97,107,101,32,114,101,116,117,114,110,101,100,46,32,73,110,32,116,111,116,97,108,44,32,96,49,50,96,32,67,111,117,110,99,105,108,32,77,101,109,98,101,114,115,32,109,117,115,116,32,98,101,32,101,108,101,99,116,101,100,46,32,73,102,32,116,104,101,114,101,32,97,114,101,32,108,101,115,115,32,116,104,97,110,32,49,50,32,97,112,112,108,105,99,97,110,116,115,44,32,116,104,101,32,96,65,110,110,111,117,110,99,101,109,101,110,116,96,32,115,116,97,103,101,32,119,105,108,108,32,98,101,32,114,101,115,116,97,114,116,101,100,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085344},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[116,{"id":116,"thread_id":24,"nr_in_thread":6,"current_text":[35,35,32,86,111,116,105,110,103,10,65,115,32,115,111,111,110,32,97,115,32,116,104,101,32,96,65,110,110,111,117,110,99,101,109,101,110,116,96,32,115,116,97,103,101,32,99,108,111,115,101,115,44,32,121,111,117,32,99,97,110,32,98,101,103,105,110,32,118,111,116,105,110,103,32,102,111,114,32,97,112,112,108,105,99,97,110,116,115,46,32,65,115,32,119,105,116,104,32,101,118,101,114,121,116,104,105,110,103,32,101,108,115,101,44,32,121,111,117,32,110,101,101,100,32,116,111,32,115,116,97,107,101,32,105,110,32,111,114,100,101,114,32,116,111,32,100,111,32,115,111,46,32,74,111,121,115,116,114,101,97,109,32,105,115,32,99,117,114,114,101,110,116,108,121,32,119,111,114,107,105,110,103,32,117,110,100,101,114,32,116,104,101,32,34,79,110,101,32,84,111,107,101,110,32,45,32,79,110,101,32,86,111,116,101,34,32,112,114,105,110,99,105,112,97,108,46,32,71,111,32,116,111,32,116,104,101,32,96,86,111,116,101,115,96,32,116,97,98,44,32,115,101,116,32,121,111,117,114,32,115,116,97,107,105,110,103,32,97,109,111,117,110,116,44,32,115,101,108,101,99,116,32,121,111,117,114,32,99,97,110,100,105,100,97,116,101,32,97,110,100,32,103,101,110,101,114,97,116,101,32,97,32,96,82,97,110,100,111,109,32,115,97,108,116,96,46,32,84,104,105,115,32,119,105,108,108,32,98,101,32,110,101,101,100,101,100,32,116,111,32,114,101,118,101,97,108,32,97,110,100,32,97,99,116,117,97,108,108,121,32,34,98,114,111,97,100,99,97,115,116,34,32,121,111,117,114,32,118,111,116,101,46,32,89,111,117,32,99,97,110,32,118,111,116,101,32,109,111,114,101,32,116,104,97,110,32,111,110,99,101,44,32,102,111,114,32,121,111,117,114,32,115,101,108,102,44,32,97,110,100,32,102,111,114,32,109,111,114,101,32,116,104,97,110,32,111,110,101,32,97,112,112,108,105,99,97,110,116,46,32,65,108,108,32,116,104,101,32,100,97,116,97,32,119,105,108,108,32,98,101,32,115,116,111,114,101,100,32,105,110,32,121,111,117,114,32,98,114,111,119,115,101,114,44,32,115,111,32,97,115,32,108,111,110,103,32,97,115,32,121,111,117,32,97,114,101,32,117,115,105,110,103,32,116,104,101,32,115,97,109,101,32,109,97,99,104,105,110,101,47,98,114,111,119,115,101,114,47,99,111,111,107,105,101,115,44,32,121,111,117,32,100,111,110,39,116,32,110,101,101,100,32,116,111,32,115,97,118,101,32,97,110,121,116,104,105,110,103,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085356},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[117,{"id":117,"thread_id":24,"nr_in_thread":7,"current_text":[35,35,32,82,101,118,101,97,108,10,65,115,32,115,111,111,110,32,97,115,32,116,104,101,32,96,86,111,116,105,110,103,96,32,115,116,97,103,101,32,99,108,111,115,101,115,44,32,116,104,101,32,82,101,118,101,97,108,105,110,103,32,115,116,97,103,101,32,98,101,103,105,110,115,46,32,84,104,105,115,32,105,115,32,119,104,101,110,32,121,111,117,32,99,97,110,32,114,101,118,101,97,108,32,121,111,117,114,32,118,111,116,101,46,32,71,111,32,116,111,32,116,104,101,32,96,82,101,118,101,97,108,32,97,32,118,111,116,101,96,32,116,97,98,44,32,116,111,32,97,99,116,117,97,108,108,121,32,98,114,111,97,100,99,97,115,116,32,121,111,117,114,32,118,111,116,101,46,32,86,111,116,101,115,32,116,104,97,116,32,97,114,101,32,110,111,116,32,114,101,118,101,97,108,101,100,32,105,110,32,116,105,109,101,32,119,105,108,108,32,110,111,116,32,103,101,116,32,99,111,117,110,116,101,100,32,105,110,32,116,104,101,32,101,108,101,99,116,105,111,110,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085368},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[118,{"id":118,"thread_id":24,"nr_in_thread":8,"current_text":[35,35,32,84,101,114,109,10,65,115,32,115,111,111,110,32,97,115,32,116,104,101,32,96,82,101,118,101,97,108,96,32,115,116,97,103,101,32,99,108,111,115,101,115,44,32,116,104,101,32,49,50,32,99,97,110,100,105,100,97,116,101,115,32,119,105,116,104,32,116,104,101,32,104,105,103,104,101,115,116,32,116,111,116,97,108,32,98,97,99,107,105,110,103,44,32,105,101,46,32,116,104,101,105,114,32,111,119,110,32,115,116,97,107,101,32,43,32,118,111,116,101,114,32,115,116,97,107,101,44,32,119,105,108,108,32,98,101,99,111,109,101,32,96,67,111,117,110,99,105,108,32,77,101,109,98,101,114,115,96,46,32,84,104,101,105,114,32,116,101,114,109,32,119,105,108,108,32,114,117,110,32,102,111,114,32,49,52,32,100,97,121,115,44,32,97,102,116,101,114,32,119,104,105,99,104,32,97,32,110,101,119,32,96,67,111,117,110,99,105,108,96,32,119,105,108,108,32,98,101,101,110,32,101,108,101,99,116,101,100,46,10,10,78,111,116,101,32,116,104,97,116,32,116,104,101,32,110,101,120,116,32,96,65,110,110,111,117,110,99,101,109,101,110,116,96,32,115,116,97,103,101,32,119,105,108,108,32,115,116,97,114,116,32,101,120,97,99,116,108,121,32,50,48,49,54,48,48,32,98,108,111,99,107,115,32,40,49,52,32,100,97,121,115,41,32,97,102,116,101,114,32,116,104,101,32,112,114,101,118,105,111,117,115,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085380},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[119,{"id":119,"thread_id":26,"nr_in_thread":2,"current_text":[35,35,35,32,73,110,115,116,114,117,99,116,105,111,110,115,10,73,102,32,121,111,117,32,102,105,110,100,32,97,32,98,117,103,32,105,110,32,97,110,121,32,111,102,32,111,117,114,32,115,111,102,116,119,97,114,101,44,32,114,101,112,111,114,116,105,110,103,32,116,104,101,109,32,97,115,32,96,73,115,115,117,101,115,96,32,105,110,32,116,104,101,32,99,111,114,114,101,99,116,32,91,114,101,112,111,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,35,114,101,112,111,115,105,116,111,114,121,45,105,110,100,101,120,41,32,119,105,108,108,32,97,108,108,111,119,32,117,115,32,116,111,32,97,100,100,114,101,115,115,32,116,104,105,115,46,32,65,115,32,115,116,97,116,101,100,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,104,101,108,112,100,101,115,107,35,98,117,105,108,100,101,114,115,45,97,110,100,45,98,117,103,45,114,101,112,111,114,116,101,114,115,41,44,32,105,116,32,109,105,103,104,116,32,97,108,115,111,32,113,117,97,108,105,102,121,32,102,111,114,32,97,32,98,111,117,110,116,121,46,32,73,102,32,121,111,117,32,102,105,110,100,32,97,110,32,101,114,114,111,114,44,32,115,111,109,101,116,104,105,110,103,32,117,110,99,108,101,97,114,32,111,114,32,106,117,115,116,32,109,105,115,115,105,110,103,32,105,110,32,116,104,101,32,103,117,105,100,101,115,32,105,110,32,116,104,105,115,32,114,101,112,111,44,32,116,104,101,32,91,115,97,109,101,32,99,111,110,99,101,112,116,32,97,112,112,108,105,101,115,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,98,111,117,110,116,105,101,115,47,105,115,115,117,101,115,47,51,41,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085650},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[120,{"id":120,"thread_id":26,"nr_in_thread":3,"current_text":[65,115,32,97,32,103,101,110,101,114,97,108,32,110,111,116,101,44,32,105,110,32,97,100,100,105,116,105,111,110,32,116,111,32,116,104,101,32,115,101,118,101,114,105,116,121,32,111,102,32,116,104,101,32,98,117,103,44,32,116,104,101,32,109,111,114,101,32,100,101,116,97,105,108,115,32,121,111,117,32,105,110,99,108,117,100,101,32,105,110,32,116,104,101,32,96,73,115,115,117,101,96,44,32,116,104,101,32,98,105,103,103,101,114,32,116,104,101,32,114,101,119,97,114,100,32,119,105,108,108,32,98,101,46,32,69,120,97,109,112,108,101,32,111,102,32,97,32,100,101,116,97,105,108,101,100,32,96,73,115,115,117,101,96,58,10,42,32,70,111,114,32,110,111,100,101,115,32,97,110,100,32,115,111,102,116,119,97,114,101,32,114,97,110,32,111,110,32,121,111,117,114,32,99,111,109,112,117,116,101,114,10,32,32,42,32,76,111,103,115,32,97,110,100,32,99,114,97,115,104,32,114,101,112,111,114,116,115,32,40,102,114,111,109,32,111,110,101,32,111,102,32,116,104,101,32,110,111,100,101,115,41,10,32,32,42,32,83,116,101,112,115,32,116,111,32,114,101,112,114,111,100,117,99,101,10,32,32,42,32,89,111,117,114,32,101,110,118,105,114,111,110,109,101,110,116,32,40,101,103,46,32,111,112,101,114,97,116,105,110,103,32,115,121,115,116,101,109,32,97,110,100,32,118,101,114,115,105,111,110,41,10,32,32,42,32,101,116,99,46,10,42,32,73,102,32,114,101,108,97,116,101,100,32,116,111,32,111,117,114,32,96,80,105,111,110,101,101,114,96,32,91,116,101,115,116,110,101,116,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,41,32,97,112,112,115,58,10,32,32,42,32,87,104,97,116,32,40,105,102,32,97,110,121,41,32,101,114,114,111,114,32,109,101,115,115,97,103,101,32,100,105,100,32,121,111,117,32,115,101,101,100,63,10,32,32,42,32,87,104,97,116,32,119,101,114,101,32,121,111,117,32,116,114,121,105,110,103,32,116,111,32,100,111,63,10,32,32,42,32,87,104,97,116,32,105,115,32,121,111,117,114,32,97,100,100,114,101,115,115,63,10,32,32,42,32,87,104,97,116,32,105,115,32,121,111,117,114,32,98,97,108,97,110,99,101,63,10,32,32,42,32,87,104,97,116,32,105,115,32,116,104,101,32,116,121,112,101,32,111,102,32,96,107,101,121,96,32,40,105,101,46,32,96,83,99,104,110,111,114,114,107,101,108,96,32,111,114,32,96,69,100,119,97,114,100,115,96,41,63,10,32,32,42,32,65,114,101,32,121,111,117,32,97,32,96,77,101,109,98,101,114,96,63,10,32,32,42,32,73,115,32,116,104,101,32,96,107,101,121,96,32,117,115,101,100,32,102,111,114,32,97,110,111,116,104,101,114,32,114,111,108,101,63,10,32,32,42,32,101,116,99,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085662},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[121,{"id":121,"thread_id":16,"nr_in_thread":2,"current_text":[35,32,73,110,115,116,114,117,99,116,105,111,110,115,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,98,101,32,118,105,115,105,98,108,101,32,105,110,32,116,104,101,32,112,111,108,107,97,100,111,116,47,115,117,98,115,116,114,97,116,101,32,116,101,108,101,109,101,116,114,121,44,32,103,111,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,47,41,46,32,78,111,116,101,32,116,104,97,116,32,102,111,114,32,119,105,110,100,111,119,115,32,97,110,100,32,97,114,109,118,55,32,40,114,97,115,112,98,101,114,114,121,32,112,105,41,44,32,121,111,117,32,110,101,101,100,32,116,111,32,97,100,100,32,97,32,116,101,108,101,109,101,116,114,121,32,102,108,97,103,32,97,116,32,115,116,97,114,116,117,112,32,40,115,101,101,32,97,112,112,108,105,99,97,98,108,101,32,115,101,116,117,112,32,110,111,100,101,41,46,10,10,73,102,32,121,111,117,114,32,96,86,97,108,105,100,97,116,111,114,96,32,104,97,115,32,101,120,112,101,114,105,101,110,99,101,100,32,115,111,109,101,32,111,102,32,116,104,101,32,110,101,116,119,111,114,107,105,110,103,32,105,115,115,117,101,115,32,100,101,115,99,114,105,98,101,100,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,105,115,115,117,101,115,47,54,56,41,44,32,99,111,110,115,105,100,101,114,32,114,101,115,116,97,114,116,105,110,103,32,121,111,117,114,32,110,111,100,101,32,97,116,32,114,101,103,117,108,97,114,32,105,110,116,101,114,118,97,108,115,46,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,97,117,116,111,109,97,116,101,32,116,104,105,115,32,112,114,111,99,101,115,115,44,32,99,111,110,115,105,100,101,114,32,114,117,110,110,105,110,103,32,121,111,117,114,32,110,111,100,101,32,97,115,32,97,32,91,115,101,114,118,105,99,101,93,40,35,114,117,110,45,97,115,45,97,45,115,101,114,118,105,99,101,41,46,10,10,42,42,78,111,116,101,42,42,10,65,102,116,101,114,32,105,110,116,114,111,100,117,99,105,110,103,32,96,77,101,109,98,101,114,115,104,105,112,115,96,32,116,111,32,116,104,101,32,112,108,97,116,102,111,114,109,44,32,119,101,32,102,111,117,110,100,32,105,116,32,116,111,32,98,101,32,99,111,110,102,117,115,105,110,103,32,116,111,32,104,97,118,101,32,97,32,99,111,110,99,101,112,116,32,111,102,32,98,111,116,104,32,96,65,99,99,111,117,110,116,115,96,32,97,110,100,32,96,77,101,109,98,101,114,115,104,105,112,115,96,46,32,87,101,32,97,114,101,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,111,102,32,114,101,110,97,109,105,110,103,32,116,104,101,32,96,65,99,99,111,117,110,116,115,96,32,116,111,32,116,104,101,32,96,75,101,121,115,96,44,32,98,117,116,32,116,104,101,114,101,32,97,114,101,32,115,116,105,108,108,32,116,114,97,99,101,115,32,111,102,32,96,65,99,99,111,117,110,116,96,32,115,104,111,119,105,110,103,32,117,112,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085866},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[122,{"id":122,"thread_id":16,"nr_in_thread":3,"current_text":[35,35,32,87,105,110,100,111,119,115,10,10,42,32,69,118,101,114,121,32,116,105,109,101,32,115,111,109,101,116,104,105,110,103,32,105,115,32,119,114,105,116,116,101,110,32,105,110,32,96,60,98,114,97,99,107,101,116,115,62,96,44,32,105,116,32,109,101,97,110,115,32,121,111,117,32,104,97,118,101,32,116,111,32,114,101,112,108,97,99,101,32,116,104,105,115,32,119,105,116,104,32,121,111,117,114,32,105,110,112,117,116,44,32,119,105,116,104,111,117,116,32,116,104,101,32,96,60,62,96,46,10,42,32,87,104,101,110,32,115,111,109,101,116,104,105,110,103,32,105,115,32,119,114,105,116,116,101,110,32,105,110,32,96,34,100,111,117,98,108,101,95,113,117,111,116,101,115,34,96,44,32,105,116,32,109,101,97,110,115,32,116,104,101,32,110,117,109,98,101,114,47,100,97,116,97,32,119,105,108,108,32,118,97,114,121,32,100,101,112,101,110,100,105,110,103,32,111,110,32,121,111,117,114,32,110,111,100,101,32,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,115,116,97,116,101,32,111,102,32,116,104,101,32,98,108,111,99,107,99,104,97,105,110,46,10,42,32,70,111,114,32,116,101,114,109,105,110,97,108,32,99,111,109,109,97,110,100,115,44,32,96,62,96,32,109,101,97,110,115,32,121,111,117,32,109,117,115,116,32,116,121,112,101,32,119,104,97,116,32,99,111,109,101,115,32,97,102,116,101,114,32,116,104,97,116,32,111,110,32,119,105,110,100,111,119,115,32,97,110,100,32,109,97,99,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,96,35,96,32,77,101,97,110,115,32,105,116,39,115,32,106,117,115,116,32,97,32,99,111,109,109,101,110,116,47,101,120,112,108,97,110,97,116,105,111,110,44,32,97,110,100,32,109,117,115,116,32,110,111,116,32,98,101,32,116,121,112,101,100,46,10,96,96,96,10,35,32,84,104,105,115,32,105,115,32,106,117,115,116,32,97,32,99,111,109,109,101,110,116,44,32,100,111,110,39,116,32,116,121,112,101,32,111,114,32,112,97,115,116,101,32,105,116,32,105,110,32,121,111,117,114,32,116,101,114,109,105,110,97,108,33,10,62,32,99,100,32,67,58,92,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,49,46,48,46,48,45,119,105,110,100,111,119,115,45,120,56,54,95,54,52,10,35,32,79,110,108,121,32,116,121,112,101,47,112,97,115,116,101,32,116,104,101,32,34,99,100,32,67,58,92,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,119,105,110,100,111,119,115,45,120,54,52,34,44,32,110,111,116,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,62,32,33,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085878},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[123,{"id":123,"thread_id":16,"nr_in_thread":4,"current_text":[35,35,35,35,32,83,101,116,117,112,32,78,111,100,101,10,10,71,101,116,32,116,104,101,32,98,105,110,97,114,121,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,114,101,108,101,97,115,101,115,47,100,111,119,110,108,111,97,100,47,118,49,46,48,46,48,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,49,46,48,46,48,45,119,105,110,100,111,119,115,45,120,56,54,95,54,52,46,122,105,112,41,46,32,84,111,32,109,97,107,101,32,116,104,101,32,97,99,116,117,97,108,32,99,111,109,109,97,110,100,115,32,116,104,101,32,115,97,109,101,32,102,111,114,32,97,108,108,32,117,115,101,114,115,44,32,73,39,109,32,103,111,105,110,103,32,116,111,32,115,97,118,101,32,105,116,32,96,67,58,92,96,32,97,110,100,32,117,110,122,105,112,32,105,116,32,116,104,101,114,101,46,32,96,67,58,92,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,49,46,48,46,48,45,119,105,110,100,111,119,115,45,120,56,54,95,54,52,96,46,32,70,101,101,108,32,102,114,101,101,32,116,111,32,115,116,111,114,101,32,105,116,32,115,111,109,101,119,104,101,114,101,32,101,108,115,101,44,32,106,117,115,116,32,109,97,107,101,32,115,117,114,101,32,121,111,117,32,117,115,101,32,116,104,101,32,99,111,114,114,101,99,116,32,112,97,116,104,32,105,110,32,116,104,101,32,105,110,115,116,114,117,99,116,105,111,110,115,32,116,104,97,116,32,102,111,108,108,111,119,115,46,10,10,73,102,32,121,111,117,32,100,111,110,39,116,32,104,97,118,101,32,105,116,44,32,100,111,119,110,108,111,97,100,32,77,105,99,114,111,115,111,102,116,32,86,105,115,117,97,108,32,83,116,117,100,105,111,32,67,43,43,32,114,117,110,116,105,109,101,32,100,105,115,116,114,105,98,117,116,97,98,108,101,32,50,48,49,53,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,119,119,119,46,109,105,99,114,111,115,111,102,116,46,99,111,109,47,101,110,45,105,101,47,100,111,119,110,108,111,97,100,47,100,101,116,97,105,108,115,46,97,115,112,120,63,105,100,61,52,56,49,52,53,41,46,32,32,10,10,71,101,116,32,116,104,101,32,109,105,115,115,105,110,103,32,83,83,76,32,108,105,98,114,97,114,105,101,115,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,105,110,100,121,46,102,117,108,103,97,110,46,99,111,109,47,83,83,76,47,111,112,101,110,115,115,108,45,49,46,48,46,50,113,45,120,54,52,95,56,54,45,119,105,110,54,52,46,122,105,112,41,44,32,101,120,116,114,97,99,116,44,32,97,110,100,32,109,111,118,101,32,116,104,101,32,102,105,108,101,115,32,96,115,115,108,101,97,121,51,50,46,100,108,108,96,32,97,110,100,32,96,108,105,98,101,97,121,51,50,46,100,108,108,96,32,116,111,32,96,67,58,92,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,119,105,110,100,111,119,115,45,120,54,52,96,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085896},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[124,{"id":124,"thread_id":16,"nr_in_thread":5,"current_text":[79,112,101,110,32,96,67,111,109,109,97,110,100,32,80,114,111,109,112,116,96,32,40,116,121,112,101,32,105,110,32,99,109,100,46,46,46,32,97,102,116,101,114,32,99,108,105,99,107,105,110,103,32,119,105,110,100,111,119,115,32,98,117,116,116,111,110,41,58,10,10,96,96,96,10,62,32,99,100,32,67,58,92,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,49,46,48,46,48,45,119,105,110,100,111,119,115,45,120,56,54,95,54,52,10,62,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,101,120,101,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,121,111,117,114,32,110,111,100,101,32,116,111,32,104,97,118,101,32,97,32,110,111,110,45,114,97,110,100,111,109,32,105,100,101,110,116,105,102,105,101,114,58,10,62,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,101,120,101,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,121,111,117,114,32,110,111,100,101,32,116,111,32,115,104,111,119,32,117,112,32,105,110,32,116,104,101,32,116,101,108,101,109,101,116,114,121,58,32,104,116,116,112,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,47,10,62,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,101,120,101,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,32,45,45,116,101,108,101,109,101,116,114,121,45,117,114,108,32,119,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,58,49,48,50,52,47,10,10,35,32,78,111,116,101,58,32,100,117,101,32,116,111,32,115,111,109,101,32,105,115,115,117,101,115,32,119,105,116,104,32,111,117,114,32,110,111,100,101,115,32,103,101,116,116,105,110,103,32,109,105,120,101,100,32,117,112,32,119,105,116,104,32,110,111,100,101,115,32,102,114,111,109,32,116,104,101,32,99,104,97,105,110,88,32,110,101,116,119,111,114,107,32,40,115,101,101,32,116,101,108,101,109,101,116,114,121,32,108,105,110,107,41,44,10,35,32,105,116,32,109,105,103,104,116,32,104,101,108,112,32,121,111,117,114,32,117,112,116,105,109,101,32,98,121,32,97,108,115,111,32,112,97,115,115,105,110,103,58,10,45,45,105,110,45,112,101,101,114,115,32,49,48,48,32,45,45,111,117,116,45,112,101,101,114,115,32,49,48,48,10,35,32,97,102,116,101,114,32,116,104,101,32,111,116,104,101,114,32,102,108,97,103,115,46,32,89,111,117,32,99,97,110,32,99,104,111,111,115,101,32,97,110,121,32,110,117,109,98,101,114,32,121,111,117,32,108,105,107,101,44,32,98,117,116,32,100,101,102,97,117,108,116,32,105,115,32,50,53,46,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085908},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[125,{"id":125,"thread_id":16,"nr_in_thread":6,"current_text":[89,111,117,114,32,110,111,100,101,32,115,104,111,117,108,100,32,110,111,119,32,115,116,97,114,116,32,115,121,110,99,105,110,103,32,116,104,101,32,98,108,111,99,107,99,104,97,105,110,46,32,84,104,101,32,111,117,116,112,117,116,32,115,104,111,117,108,100,32,108,111,111,107,32,108,105,107,101,32,116,104,105,115,58,10,96,96,96,10,74,111,121,115,116,114,101,97,109,32,78,111,100,101,10,32,32,118,101,114,115,105,111,110,32,34,86,101,114,115,105,111,110,34,45,34,121,111,117,114,95,79,83,34,10,32,32,98,121,32,74,111,121,115,116,114,101,97,109,44,32,50,48,49,57,10,67,104,97,105,110,32,115,112,101,99,105,102,105,99,97,116,105,111,110,58,32,74,111,121,115,116,114,101,97,109,32,84,101,115,116,110,101,116,32,118,50,10,78,111,100,101,32,110,97,109,101,58,32,34,110,111,100,101,110,97,109,101,34,10,82,111,108,101,115,58,32,70,85,76,76,10,71,101,110,101,114,97,116,101,100,32,97,32,110,101,119,32,107,101,121,112,97,105,114,58,32,34,115,111,109,101,95,108,111,110,103,95,111,117,112,117,116,34,10,73,110,105,116,105,97,108,105,122,105,110,103,32,71,101,110,101,115,105,115,32,98,108,111,99,107,47,115,116,97,116,101,32,40,34,115,111,109,101,95,108,111,110,103,95,111,117,112,117,116,34,41,10,76,111,97,100,101,100,32,98,108,111,99,107,45,116,105,109,101,32,61,32,54,32,115,101,99,111,110,100,115,32,102,114,111,109,32,103,101,110,101,115,105,115,32,111,110,32,102,105,114,115,116,45,108,97,117,110,99,104,32,115,116,97,114,116,117,112,46,10,66,101,115,116,32,98,108,111,99,107,58,32,35,48,10,76,111,99,97,108,32,110,111,100,101,32,97,100,100,114,101,115,115,32,105,115,58,32,47,105,112,52,47,48,46,48,46,48,46,48,47,116,99,112,47,51,48,51,51,51,47,112,50,112,47,34,121,111,117,114,95,110,111,100,101,95,107,101,121,34,10,76,105,115,116,101,110,105,110,103,32,102,111,114,32,110,101,119,32,99,111,110,110,101,99,116,105,111,110,115,32,111,110,32,49,50,55,46,48,46,48,46,49,58,57,57,52,52,46,10,46,46,46,10,46,46,46,10,83,121,110,99,105,110,103,44,32,116,97,114,103,101,116,61,35,34,98,108,111,99,107,95,104,101,105,103,104,116,34,32,40,34,110,34,32,112,101,101,114,115,41,44,32,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,32,40,34,104,97,115,104,95,111,102,95,115,121,110,99,101,100,95,116,105,112,34,41,44,32,102,105,110,97,108,105,122,101,100,32,35,48,32,40,34,104,97,115,104,95,111,102,95,102,105,110,97,108,105,122,101,100,95,116,105,112,34,41,44,32,226,172,135,32,34,100,111,119,110,108,111,97,100,95,115,112,101,101,100,34,105,66,47,115,32,226,172,134,32,34,117,112,108,111,97,100,95,115,112,101,101,100,34,107,105,66,47,115,10,96,96,96,10,70,114,111,109,32,116,104,101,32,108,97,115,116,32,108,105,110,101,44,32,110,111,116,105,99,101,32,96,116,97,114,103,101,116,61,35,34,98,108,111,99,107,95,104,101,105,103,104,116,34,96,32,97,110,100,32,96,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,96,10,87,104,101,110,32,116,104,101,32,96,116,97,114,103,101,116,61,35,98,108,111,99,107,95,104,101,105,103,104,116,96,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,96,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,96,44,32,121,111,117,114,32,110,111,100,101,32,105,115,32,102,117,108,108,121,32,115,121,110,99,101,100,33,10,10,42,42,75,101,101,112,32,116,104,101,32,116,101,114,109,105,110,97,108,32,119,105,110,100,111,119,32,111,112,101,110,46,42,42],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569085920},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[126,{"id":126,"thread_id":16,"nr_in_thread":7,"current_text":[35,35,35,35,32,75,101,121,115,10,10,78,111,119,32,121,111,117,32,110,101,101,100,32,116,111,32,103,101,110,101,114,97,116,101,32,121,111,117,114,32,96,107,101,121,115,96,32,105,110,32,116,104,101,32,96,80,105,111,110,101,101,114,32,97,112,112,96,46,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,104,97,118,101,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,116,97,108,107,32,116,111,32,121,111,117,114,32,111,119,110,32,110,111,100,101,44,32,99,104,111,111,115,101,32,96,83,101,116,116,105,110,103,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,44,32,97,110,100,32,99,104,97,110,103,101,32,116,104,101,32,96,114,101,109,111,116,101,32,110,111,100,101,47,101,110,100,112,111,105,110,116,32,116,111,32,99,111,110,110,101,99,116,32,116,111,96,32,116,111,32,108,111,99,97,108,32,110,111,100,101,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569086082},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[127,{"id":127,"thread_id":16,"nr_in_thread":8,"current_text":[35,35,35,35,32,71,101,110,101,114,97,116,101,32,121,111,117,114,32,107,101,121,115,10,10,87,104,105,108,101,32,116,104,101,32,110,111,100,101,32,105,115,32,115,121,110,99,105,110,103,44,32,121,111,117,32,99,97,110,32,115,116,97,114,116,32,116,104,101,32,112,114,111,99,101,115,115,32,111,102,32,115,101,116,116,105,110,103,32,117,112,32,116,104,101,32,114,101,115,116,46,10,10,49,46,32,71,111,32,116,111,32,116,104,101,32,91,80,105,111,110,101,101,114,32,65,112,112,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,112,105,111,110,101,101,114,41,44,32,97,110,100,32,115,101,108,101,99,116,32,96,77,121,32,107,101,121,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,46,32,67,108,105,99,107,32,116,104,101,32,96,67,114,101,97,116,101,32,107,101,121,115,96,32,116,97,98,46,10,10,78,97,109,101,115,32,97,114,101,32,101,110,116,105,114,101,108,121,32,111,112,116,105,111,110,97,108,44,32,98,117,116,32,116,104,101,32,110,101,120,116,32,115,116,101,112,115,32,119,105,108,108,32,98,101,32,101,97,115,105,101,114,32,105,102,32,121,111,117,32,102,111,108,108,111,119,32,116,104,101,32,115,121,115,116,101,109,32,115,117,103,103,101,115,116,101,100,46,10,10,50,46,32,78,97,109,101,32,121,111,117,114,32,102,105,114,115,116,32,107,101,121,112,97,105,114,32,96,115,101,115,115,105,111,110,96,44,32,111,114,32,97,116,32,108,101,97,115,116,32,115,111,109,101,116,104,105,110,103,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,116,104,101,32,119,111,114,100,46,32,73,101,32,96,106,111,104,110,45,100,111,101,45,115,101,115,115,105,111,110,45,107,101,121,96,46,10,51,46,32,73,110,32,116,104,101,32,100,114,111,112,100,111,119,110,32,105,110,32,116,104,101,32,102,105,101,108,100,32,98,101,108,111,119,44,32,99,104,111,111,115,101,32,96,82,97,119,32,115,101,101,100,96,46,32,78,111,116,101,32,116,104,97,116,32,101,97,99,104,32,116,105,109,101,32,121,111,117,32,116,111,103,103,108,101,32,98,101,116,119,101,101,110,32,96,77,110,101,109,111,110,105,99,96,32,97,110,100,32,96,82,97,119,32,115,101,101,100,96,44,32,121,111,117,32,119,105,108,108,32,103,101,110,101,114,97,116,101,32,97,32,110,101,119,32,107,101,121,32,112,97,105,114,46,10,52,46,32,67,111,112,121,32,116,104,101,32,96,34,48,120,89,111,117,114,76,111,110,103,83,101,115,115,105,111,110,82,97,119,83,101,101,100,34,96,44,32,97,110,100,32,115,97,118,101,32,105,116,32,115,111,109,101,119,104,101,114,101,32,115,97,102,101,32,45,32,108,105,107,101,32,97,32,112,97,115,115,119,111,114,100,32,109,97,110,97,103,101,114,46,32,89,111,117,32,110,101,101,100,32,116,104,105,115,32,108,97,116,101,114,33],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569086202},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[128,{"id":128,"thread_id":16,"nr_in_thread":9,"current_text":[53,46,32,67,104,111,111,115,101,32,97,32,112,97,115,115,119,111,114,100,32,40,116,104,105,115,32,107,101,121,32,119,105,108,108,32,104,111,108,100,32,97,108,108,32,121,111,117,114,32,116,111,107,101,110,115,33,41,10,54,46,32,70,111,114,32,116,104,101,32,96,115,101,115,115,105,111,110,96,32,107,101,121,44,32,121,111,117,32,97,108,115,111,32,110,101,101,100,32,116,111,32,115,101,108,101,99,116,32,96,69,100,119,97,114,100,115,32,40,101,100,50,53,53,49,57,41,96,32,102,114,111,109,32,116,104,101,32,96,65,100,118,97,110,99,101,100,32,99,114,101,97,116,105,111,110,32,111,112,116,105,111,110,115,96,46,10,55,46,32,67,108,105,99,107,32,96,83,97,118,101,96,32,45,62,32,96,67,114,101,97,116,101,32,97,110,100,32,98,97,99,107,117,112,32,107,101,121,115,96,46,10,10,68,101,112,101,110,100,105,110,103,32,111,110,32,121,111,117,114,32,98,114,111,119,115,101,114,44,32,121,111,117,32,109,105,103,104,116,32,104,97,118,101,32,116,111,32,99,111,110,102,105,114,109,32,115,97,118,105,110,103,32,116,104,101,32,96,34,53,89,111,117,114,74,111,121,83,101,115,115,105,111,110,65,100,100,114,101,115,115,46,106,115,111,110,34,96,46,10,10,82,101,112,101,97,116,32,116,104,101,32,115,116,101,112,115,32,116,119,111,32,109,111,114,101,32,116,105,109,101,115,44,32,98,117,116,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,110,97,109,101,115,44,32,108,101,97,118,105,110,103,32,121,111,117,32,119,105,116,104,32,116,104,114,101,101,32,115,101,116,115,32,111,102,32,107,101,121,115,32,97,115,32,115,104,111,119,110,32,98,101,108,111,119,58,10,42,32,96,115,116,97,115,104,96,10,42,32,96,99,111,110,116,114,111,108,108,101,114,96,10,42,32,96,115,101,115,115,105,111,110,96,10,10,78,111,116,101,32,116,104,97,116,32,121,111,117,32,111,110,108,121,32,42,115,116,114,105,99,116,108,121,32,110,101,101,100,42,32,116,104,101,32,82,97,119,32,115,101,101,100,32,102,111,114,32,116,104,101,32,96,115,101,115,115,105,111,110,96,32,107,101,121,112,97,105,114,44,32,98,117,116,32,105,116,39,115,32,115,97,102,101,114,32,116,111,32,100,111,32,105,116,32,102,111,114,32,97,108,108,32,111,102,32,116,104,101,109,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569086214},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[129,{"id":129,"thread_id":16,"nr_in_thread":10,"current_text":[35,35,35,35,32,82,101,45,115,116,97,114,116,32,121,111,117,114,32,110,111,100,101,32,97,115,32,97,32,118,97,108,105,100,97,116,111,114,10,10,73,102,32,121,111,117,32,104,97,118,101,110,39,116,32,97,108,114,101,97,100,121,44,32,103,101,110,101,114,97,116,101,32,121,111,117,114,32,107,101,121,115,46,10,10,49,46,32,79,112,101,110,32,116,104,101,32,116,101,114,109,105,110,97,108,32,116,104,97,116,32,105,115,32,114,117,110,110,105,110,103,32,121,111,117,114,32,110,111,100,101,44,32,97,110,100,32,107,105,108,108,32,116,104,101,32,115,101,115,115,105,111,110,32,119,105,116,104,32,96,99,116,114,108,43,99,96,32,40,116,119,105,99,101,41,46,10,32,32,32,32,42,32,79,110,32,87,105,110,100,111,119,115,44,32,116,104,101,32,102,105,114,115,116,32,96,99,116,114,108,43,99,96,32,119,105,108,108,32,112,114,111,100,117,99,101,32,97,32,108,111,110,103,32,97,110,100,32,99,111,110,102,117,115,105,110,103,32,111,117,116,112,117,116,46,10,50,46,32,82,101,115,116,97,114,116,32,105,116,32,97,103,97,105,110,32,119,105,116,104,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,109,109,97,110,100,58,10,96,96,96,10,62,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,101,120,101,32,45,45,118,97,108,105,100,97,116,111,114,32,45,45,107,101,121,32,60,48,120,77,121,76,111,110,103,82,97,119,83,101,101,100,62,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,121,111,117,114,32,110,111,100,101,32,116,111,32,104,97,118,101,32,97,32,110,111,110,45,114,97,110,100,111,109,32,105,100,101,110,116,105,102,105,101,114,58,10,62,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,101,120,101,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,32,45,45,118,97,108,105,100,97,116,111,114,32,45,45,107,101,121,32,60,48,120,89,111,117,114,76,111,110,103,83,101,115,115,105,111,110,82,97,119,83,101,101,100,62,10,35,32,73,102,32,121,111,117,32,97,108,115,111,32,119,97,110,116,32,105,116,32,115,104,111,119,32,117,112,32,105,110,32,116,101,108,101,109,101,116,114,121,58,10,62,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,101,120,101,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,32,45,45,116,101,108,101,109,101,116,114,121,45,117,114,108,32,119,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,58,49,48,50,52,47,32,45,45,118,97,108,105,100,97,116,111,114,32,45,45,107,101,121,32,60,48,120,89,111,117,114,76,111,110,103,83,101,115,115,105,111,110,82,97,119,83,101,101,100,62,10,10,35,32,78,111,116,101,58,32,100,117,101,32,116,111,32,115,111,109,101,32,105,115,115,117,101,115,32,119,105,116,104,32,111,117,114,32,110,111,100,101,115,32,103,101,116,116,105,110,103,32,109,105,120,101,100,32,117,112,32,119,105,116,104,32,110,111,100,101,115,32,102,114,111,109,32,116,104,101,32,99,104,97,105,110,88,32,110,101,116,119,111,114,107,32,40,115,101,101,32,116,101,108,101,109,101,116,114,121,32,108,105,110,107,41,44,10,35,32,105,116,32,109,105,103,104,116,32,104,101,108,112,32,121,111,117,114,32,117,112,116,105,109,101,32,98,121,32,97,108,115,111,32,112,97,115,115,105,110,103,58,10,45,45,105,110,45,112,101,101,114,115,32,49,48,48,32,45,45,111,117,116,45,112,101,101,114,115,32,49,48,48,10,35,32,97,102,116,101,114,32,116,104,101,32,111,116,104,101,114,32,102,108,97,103,115,46,32,89,111,117,32,99,97,110,32,99,104,111,111,115,101,32,97,110,121,32,110,117,109,98,101,114,32,121,111,117,32,108,105,107,101,44,32,98,117,116,32,116,104,101,32,100,101,102,97,117,108,116,32,105,115,32,50,53,46,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569086262},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[130,{"id":130,"thread_id":16,"nr_in_thread":11,"current_text":[84,104,105,115,32,116,105,109,101,44,32,116,104,101,32,111,117,116,112,117,116,32,115,104,111,117,108,100,32,115,104,111,119,32,97,32,115,108,105,103,104,116,108,121,32,100,105,102,102,101,114,101,110,116,32,115,116,97,114,116,117,112,32,111,117,116,112,117,116,58,10,96,96,96,10,74,111,121,115,116,114,101,97,109,32,78,111,100,101,10,32,32,118,101,114,115,105,111,110,32,34,118,101,114,115,105,111,110,34,45,34,121,111,117,114,95,79,83,34,10,32,32,98,121,32,74,111,121,115,116,114,101,97,109,44,32,50,48,49,57,10,67,104,97,105,110,32,115,112,101,99,105,102,105,99,97,116,105,111,110,58,32,74,111,121,115,116,114,101,97,109,32,83,116,97,103,105,110,103,32,84,101,115,116,110,101,116,10,78,111,100,101,32,110,97,109,101,58,32,34,110,111,100,101,110,97,109,101,34,10,82,111,108,101,115,58,32,65,85,84,72,79,82,73,84,89,10,66,101,115,116,32,98,108,111,99,107,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,10,76,111,99,97,108,32,110,111,100,101,32,97,100,100,114,101,115,115,32,105,115,58,32,47,105,112,52,47,48,46,48,46,48,46,48,47,116,99,112,47,51,48,51,51,51,47,112,50,112,47,34,121,111,117,114,95,110,111,100,101,95,107,101,121,34,10,76,105,115,116,101,110,105,110,103,32,102,111,114,32,110,101,119,32,99,111,110,110,101,99,116,105,111,110,115,32,111,110,32,49,50,55,46,48,46,48,46,49,58,57,57,52,52,46,10,85,115,105,110,103,32,97,117,116,104,111,114,105,116,121,32,107,101,121,32,32,34,53,89,111,117,114,74,111,121,83,101,115,115,105,111,110,65,100,100,114,101,115,115,34,32,32,35,32,83,101,101,32,78,111,116,101,10,46,46,46,10,96,96,96,10,42,42,78,111,116,101,42,42,10,73,102,32,121,111,117,114,32,96,115,101,115,115,105,111,110,96,32,119,97,115,32,103,101,110,101,114,97,116,101,100,32,97,115,32,96,83,99,104,110,111,114,114,107,101,108,32,40,115,114,50,53,53,49,57,41,96,44,32,105,116,32,119,105,108,108,32,115,104,111,119,32,97,32,99,111,109,112,108,101,116,101,108,121,32,100,105,102,102,101,114,101,110,116,32,97,100,100,114,101,115,115,46,32,73,102,32,116,104,105,115,32,104,97,112,112,101,110,115,44,32,103,111,32,98,97,99,107,32,97,110,100,32,103,101,110,101,114,97,116,101,32,97,32,110,101,119,32,91,115,101,115,115,105,111,110,32,107,101,121,93,40,35,103,101,110,101,114,97,116,101,45,121,111,117,114,45,107,101,121,115,41,32,119,105,116,104,32,96,69,100,119,97,114,100,115,32,40,101,100,50,53,53,49,57,41,96,46,32,73,102,32,121,111,117,32,100,111,110,39,116,44,32,121,111,117,114,32,110,111,100,101,32,119,105,108,108,32,116,114,121,32,116,111,32,115,105,103,110,32,98,108,111,99,107,115,32,119,105,116,104,32,116,104,101,32,119,114,111,110,103,32,107,101,121,46,32,65,115,32,97,32,99,111,110,115,101,113,117,101,110,99,101,44,32,121,111,117,32,119,105,108,108,32,103,101,116,32,115,108,97,115,104,101,100,32,97,110,100,32,107,105,99,107,101,100,32,111,117,116,32,97,115,32,97,32,96,86,97,108,105,100,97,116,111,114,96,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569086274},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[131,{"id":131,"thread_id":16,"nr_in_thread":12,"current_text":[35,35,35,35,32,70,105,110,97,108,32,83,116,101,112,10,10,78,111,119,32,105,116,39,115,32,116,105,109,101,32,116,111,32,99,111,110,102,105,103,117,114,101,32,121,111,117,114,32,107,101,121,115,32,116,111,32,115,116,97,114,116,32,118,97,108,105,100,97,116,105,110,103,46,32],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569086298},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[132,{"id":132,"thread_id":16,"nr_in_thread":13,"current_text":[35,35,35,35,32,67,111,110,102,105,103,117,114,101,32,121,111,117,114,32,118,97,108,105,100,97,116,111,114,32,107,101,121,115,10,10,73,110,32,111,114,100,101,114,32,116,111,32,98,101,32,97,32,96,86,97,108,105,100,97,116,111,114,96,44,32,121,111,117,32,110,101,101,100,32,116,111,32,115,116,97,107,101,46,32,78,111,116,101,32,116,104,97,116,32,121,111,117,32,109,97,121,32,104,97,118,101,32,116,111,32,114,101,102,114,101,115,104,32,121,111,117,114,32,98,114,111,119,115,101,114,32,105,102,32,121,111,117,39,114,101,32,110,111,116,32,115,101,101,105,110,103,32,116,104,101,32,111,112,116,105,111,110,115,32,114,105,103,104,116,32,97,119,97,121,46,10,10,42,42,73,77,80,79,82,84,65,78,84,58,42,42,32,82,101,97,100,32,115,116,101,112,32,49,51,46,32,99,97,114,101,102,117,108,108,121,46,32,89,111,117,114,32,110,111,100,101,32,110,101,101,100,115,32,116,111,32,98,101,32,102,117,108,108,121,32,115,121,110,99,101,100,44,32,98,101,102,111,114,101,32,112,114,111,99,101,101,100,105,110,103,32,116,111,32,115,116,101,112,32,49,52,46,10,10,49,46,32,83,116,105,108,108,32,105,110,32,116,104,101,32,96,77,121,32,75,101,121,115,96,32,115,105,100,101,98,97,114,32,111,102,32,116,104,101,32,91,80,105,111,110,101,101,114,32,65,112,112,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,112,105,111,110,101,101,114,41,44,32,99,104,111,111,115,101,32,121,111,117,114,32,96,115,116,97,115,104,96,32,107,101,121,46,10,50,46,32,67,108,105,99,107,32,116,104,101,32,96,70,114,101,101,32,84,111,107,101,110,115,96,32,108,105,110,107,32,98,101,108,111,119,32,121,111,117,114,32,97,100,100,114,101,115,115,44,32,91,111,114,32,99,108,105,99,107,32,104,101,114,101,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,102,97,117,99,101,116,41,46,32,83,111,108,118,101,32,116,104,101,32,99,97,112,116,99,104,97,44,32,97,110,100,32,121,111,117,32,115,104,111,117,108,100,32,114,101,99,101,105,118,101,32,116,111,107,101,110,115,46,10,51,46,32,83,101,110,100,32,115,111,109,101,32,116,111,107,101,110,115,32,116,111,32,121,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,46,32,73,116,32,110,101,101,100,115,32,116,111,32,112,101,114,102,111,114,109,32,97,116,32,108,101,97,115,116,32,116,119,111,32,116,114,97,110,115,97,99,116,105,111,110,115,44,32,98,117,116,32,98,101,116,116,101,114,32,116,111,32,115,101,110,100,32,126,49,48,46,10,52,46,32,78,111,119,44,32,99,108,105,99,107,32,96,86,97,108,105,100,97,116,111,114,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,44,32,97,110,100,32,116,104,101,110,32,116,104,101,32,96,86,97,108,105,100,97,116,111,114,32,83,116,97,107,105,110,103,96,32,116,97,98,46,10,53,46,32,76,111,99,97,116,101,32,116,104,101,32,97,100,100,114,101,115,115,47,107,101,121,32,110,97,109,101,100,32,96,115,116,97,115,104,96,44,32,97,110,100,32,99,108,105,99,107,32,96,66,111,110,100,32,70,117,110,100,115,96,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569086322},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[133,{"id":133,"thread_id":16,"nr_in_thread":14,"current_text":[54,46,32,73,110,32,116,104,101,32,112,111,112,117,112,32,119,105,110,100,111,119,44,32,99,104,111,111,115,101,32,121,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,115,32,116,104,101,32,96,99,111,110,116,114,111,108,108,101,114,32,97,99,99,111,117,110,116,96,46,10,55,46,32,69,110,116,101,114,32,116,104,101,32,97,109,111,117,110,116,32,121,111,117,32,119,97,110,116,32,116,111,32,115,116,97,107,101,32,105,110,32,116,104,101,32,96,118,97,108,117,101,32,98,111,110,100,101,100,96,32,102,105,101,108,100,46,32,40,73,116,32,99,111,117,108,100,32,98,101,32,119,105,115,101,32,116,111,32,108,101,97,118,101,32,97,32,99,111,117,112,108,101,32,111,102,32,74,111,121,32,108,101,102,116,41,46,10,56,46,32,73,110,32,116,104,101,32,96,112,97,121,109,101,110,116,32,100,101,115,116,105,110,97,116,105,111,110,96,32,100,114,111,112,100,111,119,110,44,32,116,104,101,114,101,32,97,114,101,32,116,104,114,101,101,32,111,112,116,105,111,110,115,46,32,83,101,108,101,99,116,32,116,104,101,32,100,101,102,97,117,108,116,32,96,83,116,97,115,104,32,97,99,99,111,117,110,116,32,40,105,110,99,114,101,97,115,101,32,116,104,101,32,97,109,111,117,110,116,32,97,116,32,115,116,97,107,101,41,96,44,32,111,114,32,103,111,32,116,111,32,91,97,100,118,97,110,99,101,100,93,40,35,98,111,110,100,105,110,103,45,112,114,101,102,101,114,101,110,99,101,115,41,46,10,57,46,32,84,104,101,32,98,117,116,116,111,110,32,96,98,111,110,100,96,32,115,104,111,117,108,100,32,98,101,32,104,105,103,104,108,105,103,104,116,101,100,32,110,111,119,46,32,67,108,105,99,107,32,105,116,46,10,49,48,46,32,84,121,112,101,32,105,110,32,121,111,117,114,32,112,97,115,115,119,111,114,100,32,105,110,32,116,104,101,32,96,117,110,108,111,99,107,32,119,105,116,104,32,112,97,115,115,119,111,114,100,96,32,102,105,101,108,100,32,97,110,100,32,99,108,105,99,107,32,96,115,105,103,110,32,97,110,100,32,115,117,98,109,105,116,96,46,10,49,49,46,32,89,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,99,99,111,117,110,116,32,115,104,111,117,108,100,32,110,111,119,32,115,104,111,119,32,97,32,96,83,101,116,32,83,101,115,115,105,111,110,32,75,101,121,96,32,98,117,116,116,111,110,46,32,67,108,105,99,107,32,105,116,46,10,49,50,46,32,73,110,32,116,104,101,32,112,111,112,117,112,44,32,115,101,108,101,99,116,32,121,111,117,114,32,96,115,101,115,115,105,111,110,96,32,97,115,32,121,111,117,114,32,96,115,101,115,115,105,111,110,32,107,101,121,96,32,105,110,32,116,104,101,32,100,114,111,112,100,111,119,110,46,32,67,111,110,102,105,114,109,44,32,115,105,103,110,32,97,110,100,32,115,117,98,109,105,116,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569086340},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[134,{"id":134,"thread_id":16,"nr_in_thread":15,"current_text":[49,51,46,32,89,111,117,32,110,101,101,100,32,116,111,32,99,104,101,99,107,32,121,111,117,114,32,110,111,100,101,44,32,119,104,105,99,104,32,121,111,117,32,115,116,97,114,116,101,100,32,101,97,114,108,105,101,114,46,32,73,110,32,116,104,101,32,111,117,116,112,117,116,32,96,116,97,114,103,101,116,61,35,34,98,108,111,99,107,95,104,101,105,103,104,116,34,96,32,115,104,111,117,108,100,32,101,113,117,97,108,32,96,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,96,46,32,68,111,32,110,111,116,32,112,114,111,99,101,101,100,32,98,101,102,111,114,101,32,116,104,111,115,101,32,116,119,111,32,118,97,108,117,101,115,32,97,114,101,32,105,100,101,110,116,105,99,97,108,44,32,97,115,32,121,111,117,114,32,110,111,100,101,32,119,105,108,108,32,98,101,32,100,114,111,112,112,101,100,32,111,117,116,32,102,114,111,109,32,116,104,101,32,118,97,108,105,100,97,116,111,114,115,32,105,102,32,121,111,117,114,32,110,111,100,101,32,105,115,32,110,111,116,32,102,117,108,108,121,32,115,121,110,99,101,100,46,32,73,102,32,121,111,117,32,100,105,100,32,115,116,97,114,116,32,121,111,117,114,32,110,111,100,101,32,119,105,116,104,32,96,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,96,32,112,97,114,97,109,101,116,101,114,44,32,116,104,101,110,32,121,111,117,32,97,108,115,111,32,99,97,110,32,99,104,101,99,107,32,105,102,32,121,111,117,114,32,110,111,100,101,32,105,115,32,102,117,108,108,121,32,115,121,110,99,101,100,32,102,114,111,109,32,91,84,101,108,101,109,101,116,114,121,93,40,104,116,116,112,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,47,35,108,105,115,116,47,74,111,121,115,116,114,101,97,109,37,50,48,84,101,115,116,110,101,116,37,50,48,118,50,41,46,10,49,52,46,32,89,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,99,99,111,117,110,116,32,115,104,111,117,108,100,32,110,111,119,32,115,104,111,119,32,97,32,96,86,97,108,105,100,97,116,101,96,32,98,117,116,116,111,110,46,32,67,108,105,99,107,32,105,116,46,10,49,53,46,32,89,111,117,32,99,97,110,32,108,101,97,118,101,32,116,104,101,32,96,117,110,115,116,97,107,101,32,116,104,114,101,115,104,111,108,100,96,32,97,110,100,32,96,112,97,121,109,101,110,116,32,112,114,101,102,101,114,101,110,99,101,115,96,32,97,115,32,100,101,102,97,117,108,116,115,44,32,111,114,32,103,111,32,116,111,32,91,97,100,118,97,110,99,101,100,93,40,35,118,97,108,105,100,97,116,105,110,103,45,112,114,101,102,101,114,101,110,99,101,115,41,46,32,67,111,110,102,105,114,109,44,32,115,105,103,110,32,97,110,100,32,115,117,98,109,105,116,46,10,10,82,101,102,114,101,115,104,32,121,111,117,114,32,98,114,111,119,115,101,114,44,32,97,110,100,32,115,101,108,101,99,116,32,116,104,101,32,96,86,97,108,105,100,97,116,111,114,32,79,118,101,114,118,105,101,119,96,32,116,97,98,46,32,73,102,32,121,111,117,114,32,97,99,99,111,117,110,116,32,115,104,111,119,115,32,117,110,100,101,114,32,96,110,101,120,116,32,117,112,96,44,32,119,97,105,116,32,102,111,114,32,116,104,101,32,110,101,120,116,32,96,101,114,97,96,44,32,97,110,100,32,121,111,117,32,119,105,108,108,32,98,101,32,109,111,118,101,100,32,116,111,32,116,104,101,32,96,118,97,108,105,100,97,116,111,114,115,96,32,108,105,115,116,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569086364},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[135,{"id":135,"thread_id":17,"nr_in_thread":2,"current_text":[35,32,73,110,115,116,114,117,99,116,105,111,110,115,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,98,101,32,118,105,115,105,98,108,101,32,105,110,32,116,104,101,32,112,111,108,107,97,100,111,116,47,115,117,98,115,116,114,97,116,101,32,116,101,108,101,109,101,116,114,121,44,32,103,111,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,47,41,46,32,78,111,116,101,32,116,104,97,116,32,102,111,114,32,119,105,110,100,111,119,115,32,97,110,100,32,97,114,109,118,55,32,40,114,97,115,112,98,101,114,114,121,32,112,105,41,44,32,121,111,117,32,110,101,101,100,32,116,111,32,97,100,100,32,97,32,116,101,108,101,109,101,116,114,121,32,102,108,97,103,32,97,116,32,115,116,97,114,116,117,112,32,40,115,101,101,32,97,112,112,108,105,99,97,98,108,101,32,115,101,116,117,112,32,110,111,100,101,41,46,10,10,73,102,32,121,111,117,114,32,96,86,97,108,105,100,97,116,111,114,96,32,104,97,115,32,101,120,112,101,114,105,101,110,99,101,100,32,115,111,109,101,32,111,102,32,116,104,101,32,110,101,116,119,111,114,107,105,110,103,32,105,115,115,117,101,115,32,100,101,115,99,114,105,98,101,100,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,105,115,115,117,101,115,47,54,56,41,44,32,99,111,110,115,105,100,101,114,32,114,101,115,116,97,114,116,105,110,103,32,121,111,117,114,32,110,111,100,101,32,97,116,32,114,101,103,117,108,97,114,32,105,110,116,101,114,118,97,108,115,46,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,97,117,116,111,109,97,116,101,32,116,104,105,115,32,112,114,111,99,101,115,115,44,32,99,111,110,115,105,100,101,114,32,114,117,110,110,105,110,103,32,121,111,117,114,32,110,111,100,101,32,97,115,32,97,32,91,115,101,114,118,105,99,101,93,40,35,114,117,110,45,97,115,45,97,45,115,101,114,118,105,99,101,41,46,10,10,42,42,78,111,116,101,42,42,10,65,102,116,101,114,32,105,110,116,114,111,100,117,99,105,110,103,32,96,77,101,109,98,101,114,115,104,105,112,115,96,32,116,111,32,116,104,101,32,112,108,97,116,102,111,114,109,44,32,119,101,32,102,111,117,110,100,32,105,116,32,116,111,32,98,101,32,99,111,110,102,117,115,105,110,103,32,116,111,32,104,97,118,101,32,97,32,99,111,110,99,101,112,116,32,111,102,32,98,111,116,104,32,96,65,99,99,111,117,110,116,115,96,32,97,110,100,32,96,77,101,109,98,101,114,115,104,105,112,115,96,46,32,87,101,32,97,114,101,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,111,102,32,114,101,110,97,109,105,110,103,32,116,104,101,32,96,65,99,99,111,117,110,116,115,96,32,116,111,32,116,104,101,32,96,75,101,121,115,96,44,32,98,117,116,32,116,104,101,114,101,32,97,114,101,32,115,116,105,108,108,32,116,114,97,99,101,115,32,111,102,32,96,65,99,99,111,117,110,116,96,32,115,104,111,119,105,110,103,32,117,112,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179118},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[136,{"id":136,"thread_id":18,"nr_in_thread":2,"current_text":[35,32,73,110,115,116,114,117,99,116,105,111,110,115,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,98,101,32,118,105,115,105,98,108,101,32,105,110,32,116,104,101,32,112,111,108,107,97,100,111,116,47,115,117,98,115,116,114,97,116,101,32,116,101,108,101,109,101,116,114,121,44,32,103,111,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,47,41,46,32,78,111,116,101,32,116,104,97,116,32,102,111,114,32,119,105,110,100,111,119,115,32,97,110,100,32,97,114,109,118,55,32,40,114,97,115,112,98,101,114,114,121,32,112,105,41,44,32,121,111,117,32,110,101,101,100,32,116,111,32,97,100,100,32,97,32,116,101,108,101,109,101,116,114,121,32,102,108,97,103,32,97,116,32,115,116,97,114,116,117,112,32,40,115,101,101,32,97,112,112,108,105,99,97,98,108,101,32,115,101,116,117,112,32,110,111,100,101,41,46,10,10,73,102,32,121,111,117,114,32,96,86,97,108,105,100,97,116,111,114,96,32,104,97,115,32,101,120,112,101,114,105,101,110,99,101,100,32,115,111,109,101,32,111,102,32,116,104,101,32,110,101,116,119,111,114,107,105,110,103,32,105,115,115,117,101,115,32,100,101,115,99,114,105,98,101,100,32,91,104,101,114,101,93,40,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,105,115,115,117,101,115,47,54,56,41,44,32,99,111,110,115,105,100,101,114,32,114,101,115,116,97,114,116,105,110,103,32,121,111,117,114,32,110,111,100,101,32,97,116,32,114,101,103,117,108,97,114,32,105,110,116,101,114,118,97,108,115,46,32,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,97,117,116,111,109,97,116,101,32,116,104,105,115,32,112,114,111,99,101,115,115,44,32,99,111,110,115,105,100,101,114,32,114,117,110,110,105,110,103,32,121,111,117,114,32,110,111,100,101,32,97,115,32,97,32,91,115,101,114,118,105,99,101,93,40,35,114,117,110,45,97,115,45,97,45,115,101,114,118,105,99,101,41,46,10,10,42,42,78,111,116,101,42,42,10,65,102,116,101,114,32,105,110,116,114,111,100,117,99,105,110,103,32,96,77,101,109,98,101,114,115,104,105,112,115,96,32,116,111,32,116,104,101,32,112,108,97,116,102,111,114,109,44,32,119,101,32,102,111,117,110,100,32,105,116,32,116,111,32,98,101,32,99,111,110,102,117,115,105,110,103,32,116,111,32,104,97,118,101,32,97,32,99,111,110,99,101,112,116,32,111,102,32,98,111,116,104,32,96,65,99,99,111,117,110,116,115,96,32,97,110,100,32,96,77,101,109,98,101,114,115,104,105,112,115,96,46,32,87,101,32,97,114,101,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,111,102,32,114,101,110,97,109,105,110,103,32,116,104,101,32,96,65,99,99,111,117,110,116,115,96,32,116,111,32,116,104,101,32,96,75,101,121,115,96,44,32,98,117,116,32,116,104,101,114,101,32,97,114,101,32,115,116,105,108,108,32,116,114,97,99,101,115,32,111,102,32,96,65,99,99,111,117,110,116,96,32,115,104,111,119,105,110,103,32,117,112,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179124},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[137,{"id":137,"thread_id":18,"nr_in_thread":3,"current_text":[35,35,32,77,97,99,10,10,42,32,69,118,101,114,121,32,116,105,109,101,32,115,111,109,101,116,104,105,110,103,32,105,115,32,119,114,105,116,116,101,110,32,105,110,32,96,60,98,114,97,99,107,101,116,115,62,96,44,32,105,116,32,109,101,97,110,115,32,121,111,117,32,104,97,118,101,32,116,111,32,114,101,112,108,97,99,101,32,116,104,105,115,32,119,105,116,104,32,121,111,117,114,32,105,110,112,117,116,44,32,119,105,116,104,111,117,116,32,116,104,101,32,96,60,62,96,46,10,42,32,87,104,101,110,32,115,111,109,101,116,104,105,110,103,32,105,115,32,119,114,105,116,116,101,110,32,105,110,32,96,34,100,111,117,98,108,101,95,113,117,111,116,101,115,34,96,44,32,105,116,32,109,101,97,110,115,32,116,104,101,32,110,117,109,98,101,114,47,100,97,116,97,32,119,105,108,108,32,118,97,114,121,32,100,101,112,101,110,100,105,110,103,32,111,110,32,121,111,117,114,32,110,111,100,101,32,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,115,116,97,116,101,32,111,102,32,116,104,101,32,98,108,111,99,107,99,104,97,105,110,46,10,42,32,70,111,114,32,116,101,114,109,105,110,97,108,32,99,111,109,109,97,110,100,115,44,32,96,36,96,32,109,101,97,110,115,32,121,111,117,32,109,117,115,116,32,116,121,112,101,32,119,104,97,116,32,99,111,109,101,115,32,97,102,116,101,114,32,116,104,97,116,32,111,110,32,119,105,110,100,111,119,115,32,97,110,100,32,109,97,99,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,96,35,96,32,77,101,97,110,115,32,105,116,39,115,32,106,117,115,116,32,97,32,99,111,109,109,101,110,116,47,101,120,112,108,97,110,97,116,105,111,110,44,32,97,110,100,32,109,117,115,116,32,110,111,116,32,98,101,32,116,121,112,101,100,46,10,96,96,96,10,35,32,84,104,105,115,32,105,115,32,106,117,115,116,32,97,32,99,111,109,109,101,110,116,44,32,100,111,110,39,116,32,116,121,112,101,32,111,114,32,112,97,115,116,101,32,105,116,32,105,110,32,121,111,117,114,32,116,101,114,109,105,110,97,108,33,10,36,32,99,100,32,126,47,10,35,32,79,110,108,121,32,116,121,112,101,47,112,97,115,116,101,32,116,104,101,32,34,99,100,32,126,47,44,32,110,111,116,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,36,32,33,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179154},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[138,{"id":138,"thread_id":18,"nr_in_thread":4,"current_text":[35,35,35,35,32,83,101,116,117,112,32,78,111,100,101,10,10,79,112,101,110,32,116,104,101,32,116,101,114,109,105,110,97,108,32,40,65,112,112,108,105,99,97,116,105,111,110,115,45,62,85,116,105,108,105,116,105,101,115,41,58,10,10,96,96,96,10,36,32,99,100,32,126,47,10,36,32,119,103,101,116,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,114,101,108,101,97,115,101,115,47,100,111,119,110,108,111,97,100,47,118,49,46,48,46,48,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,49,46,48,46,48,45,111,115,120,45,120,56,54,95,54,52,46,122,105,112,10,45,45,45,45,10,35,32,73,102,32,121,111,117,32,100,111,110,39,116,32,104,97,118,101,32,119,103,101,116,32,105,110,115,116,97,108,108,101,100,44,32,112,97,115,116,101,32,116,104,101,32,108,105,110,107,32,105,110,32,121,111,117,114,32,98,114,111,119,115,101,114,32,115,97,118,101,46,10,35,32,65,115,115,117,109,105,110,103,32,105,116,32,103,101,116,115,32,115,97,118,101,100,32,105,110,32,121,111,117,114,32,126,47,68,111,119,110,108,111,97,100,115,32,102,111,108,100,101,114,58,10,36,32,109,118,32,126,47,68,111,119,110,108,111,97,100,115,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,49,46,48,46,48,45,111,115,120,45,120,56,54,95,54,52,46,122,105,112,32,126,47,10,45,45,45,10,36,32,116,97,114,32,45,118,120,102,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,49,46,48,46,48,45,111,115,120,45,120,56,54,95,54,52,46,122,105,112,10,36,32,46,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,121,111,117,114,32,110,111,100,101,32,116,111,32,104,97,118,101,32,97,32,110,111,110,45,114,97,110,100,111,109,32,105,100,101,110,116,105,102,105,101,114,58,10,62,32,46,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,10,10,35,32,78,111,116,101,58,32,100,117,101,32,116,111,32,115,111,109,101,32,105,115,115,117,101,115,32,119,105,116,104,32,111,117,114,32,110,111,100,101,115,32,103,101,116,116,105,110,103,32,109,105,120,101,100,32,117,112,32,119,105,116,104,32,110,111,100,101,115,32,102,114,111,109,32,116,104,101,32,99,104,97,105,110,88,32,110,101,116,119,111,114,107,32,40,115,101,101,32,116,101,108,101,109,101,116,114,121,32,108,105,110,107,41,44,10,35,32,105,116,32,109,105,103,104,116,32,104,101,108,112,32,121,111,117,114,32,117,112,116,105,109,101,32,98,121,32,97,108,115,111,32,112,97,115,115,105,110,103,58,10,45,45,105,110,45,112,101,101,114,115,32,49,48,48,32,45,45,111,117,116,45,112,101,101,114,115,32,49,48,48,10,35,32,97,102,116,101,114,32,116,104,101,32,111,116,104,101,114,32,102,108,97,103,115,46,32,89,111,117,32,99,97,110,32,99,104,111,111,115,101,32,97,110,121,32,110,117,109,98,101,114,32,121,111,117,32,108,105,107,101,44,32,98,117,116,32,116,104,101,32,100,101,102,97,117,108,116,32,105,115,32,50,53,46,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179166},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[139,{"id":139,"thread_id":18,"nr_in_thread":5,"current_text":[89,111,117,114,32,110,111,100,101,32,115,104,111,117,108,100,32,110,111,119,32,115,116,97,114,116,32,115,121,110,99,105,110,103,32,116,104,101,32,98,108,111,99,107,99,104,97,105,110,46,32,84,104,101,32,111,117,116,112,117,116,32,115,104,111,117,108,100,32,108,111,111,107,32,108,105,107,101,32,116,104,105,115,58,10,96,96,96,10,74,111,121,115,116,114,101,97,109,32,78,111,100,101,10,32,32,118,101,114,115,105,111,110,32,34,86,101,114,115,105,111,110,34,45,34,121,111,117,114,95,79,83,34,10,32,32,98,121,32,74,111,121,115,116,114,101,97,109,44,32,50,48,49,57,10,67,104,97,105,110,32,115,112,101,99,105,102,105,99,97,116,105,111,110,58,32,74,111,121,115,116,114,101,97,109,32,84,101,115,116,110,101,116,32,118,50,10,78,111,100,101,32,110,97,109,101,58,32,34,110,111,100,101,110,97,109,101,34,10,82,111,108,101,115,58,32,70,85,76,76,10,71,101,110,101,114,97,116,101,100,32,97,32,110,101,119,32,107,101,121,112,97,105,114,58,32,34,115,111,109,101,95,108,111,110,103,95,111,117,112,117,116,34,10,73,110,105,116,105,97,108,105,122,105,110,103,32,71,101,110,101,115,105,115,32,98,108,111,99,107,47,115,116,97,116,101,32,40,34,115,111,109,101,95,108,111,110,103,95,111,117,112,117,116,34,41,10,76,111,97,100,101,100,32,98,108,111,99,107,45,116,105,109,101,32,61,32,54,32,115,101,99,111,110,100,115,32,102,114,111,109,32,103,101,110,101,115,105,115,32,111,110,32,102,105,114,115,116,45,108,97,117,110,99,104,32,115,116,97,114,116,117,112,46,10,66,101,115,116,32,98,108,111,99,107,58,32,35,48,10,76,111,99,97,108,32,110,111,100,101,32,97,100,100,114,101,115,115,32,105,115,58,32,47,105,112,52,47,48,46,48,46,48,46,48,47,116,99,112,47,51,48,51,51,51,47,112,50,112,47,34,121,111,117,114,95,110,111,100,101,95,107,101,121,34,10,76,105,115,116,101,110,105,110,103,32,102,111,114,32,110,101,119,32,99,111,110,110,101,99,116,105,111,110,115,32,111,110,32,49,50,55,46,48,46,48,46,49,58,57,57,52,52,46,10,46,46,46,10,46,46,46,10,83,121,110,99,105,110,103,44,32,116,97,114,103,101,116,61,35,34,98,108,111,99,107,95,104,101,105,103,104,116,34,32,40,34,110,34,32,112,101,101,114,115,41,44,32,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,32,40,34,104,97,115,104,95,111,102,95,115,121,110,99,101,100,95,116,105,112,34,41,44,32,102,105,110,97,108,105,122,101,100,32,35,48,32,40,34,104,97,115,104,95,111,102,95,102,105,110,97,108,105,122,101,100,95,116,105,112,34,41,44,32,226,172,135,32,34,100,111,119,110,108,111,97,100,95,115,112,101,101,100,34,105,66,47,115,32,226,172,134,32,34,117,112,108,111,97,100,95,115,112,101,101,100,34,107,105,66,47,115,10,96,96,96,10,70,114,111,109,32,116,104,101,32,108,97,115,116,32,108,105,110,101,44,32,110,111,116,105,99,101,32,96,116,97,114,103,101,116,61,35,34,98,108,111,99,107,95,104,101,105,103,104,116,34,96,32,97,110,100,32,96,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,96,10,87,104,101,110,32,116,104,101,32,96,116,97,114,103,101,116,61,35,98,108,111,99,107,95,104,101,105,103,104,116,96,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,96,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,96,44,32,121,111,117,114,32,110,111,100,101,32,105,115,32,102,117,108,108,121,32,115,121,110,99,101,100,33,10,10,42,42,75,101,101,112,32,116,104,101,32,116,101,114,109,105,110,97,108,32,119,105,110,100,111,119,32,111,112,101,110,46,42,42],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179178},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[140,{"id":140,"thread_id":18,"nr_in_thread":6,"current_text":[35,35,35,35,32,75,101,121,115,10,10,78,111,119,32,121,111,117,32,110,101,101,100,32,116,111,32,103,101,110,101,114,97,116,101,32,121,111,117,114,32,96,107,101,121,115,96,32,105,110,32,116,104,101,32,96,80,105,111,110,101,101,114,32,97,112,112,96,46,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,104,97,118,101,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,116,97,108,107,32,116,111,32,121,111,117,114,32,111,119,110,32,110,111,100,101,44,32,99,104,111,111,115,101,32,96,83,101,116,116,105,110,103,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,44,32,97,110,100,32,99,104,97,110,103,101,32,116,104,101,32,96,114,101,109,111,116,101,32,110,111,100,101,47,101,110,100,112,111,105,110,116,32,116,111,32,99,111,110,110,101,99,116,32,116,111,96,32,116,111,32,108,111,99,97,108,32,110,111,100,101,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179196},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[141,{"id":141,"thread_id":18,"nr_in_thread":7,"current_text":[35,35,35,35,32,71,101,110,101,114,97,116,101,32,121,111,117,114,32,107,101,121,115,10,10,87,104,105,108,101,32,116,104,101,32,110,111,100,101,32,105,115,32,115,121,110,99,105,110,103,44,32,121,111,117,32,99,97,110,32,115,116,97,114,116,32,116,104,101,32,112,114,111,99,101,115,115,32,111,102,32,115,101,116,116,105,110,103,32,117,112,32,116,104,101,32,114,101,115,116,46,10,10,49,46,32,71,111,32,116,111,32,116,104,101,32,91,80,105,111,110,101,101,114,32,65,112,112,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,112,105,111,110,101,101,114,41,44,32,97,110,100,32,115,101,108,101,99,116,32,96,77,121,32,107,101,121,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,46,32,67,108,105,99,107,32,116,104,101,32,96,67,114,101,97,116,101,32,107,101,121,115,96,32,116,97,98,46,10,10,78,97,109,101,115,32,97,114,101,32,101,110,116,105,114,101,108,121,32,111,112,116,105,111,110,97,108,44,32,98,117,116,32,116,104,101,32,110,101,120,116,32,115,116,101,112,115,32,119,105,108,108,32,98,101,32,101,97,115,105,101,114,32,105,102,32,121,111,117,32,102,111,108,108,111,119,32,116,104,101,32,115,121,115,116,101,109,32,115,117,103,103,101,115,116,101,100,46,10,10,50,46,32,78,97,109,101,32,121,111,117,114,32,102,105,114,115,116,32,107,101,121,112,97,105,114,32,96,115,101,115,115,105,111,110,96,44,32,111,114,32,97,116,32,108,101,97,115,116,32,115,111,109,101,116,104,105,110,103,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,116,104,101,32,119,111,114,100,46,32,73,101,32,96,106,111,104,110,45,100,111,101,45,115,101,115,115,105,111,110,45,107,101,121,96,46,10,51,46,32,73,110,32,116,104,101,32,100,114,111,112,100,111,119,110,32,105,110,32,116,104,101,32,102,105,101,108,100,32,98,101,108,111,119,44,32,99,104,111,111,115,101,32,96,82,97,119,32,115,101,101,100,96,46,32,78,111,116,101,32,116,104,97,116,32,101,97,99,104,32,116,105,109,101,32,121,111,117,32,116,111,103,103,108,101,32,98,101,116,119,101,101,110,32,96,77,110,101,109,111,110,105,99,96,32,97,110,100,32,96,82,97,119,32,115,101,101,100,96,44,32,121,111,117,32,119,105,108,108,32,103,101,110,101,114,97,116,101,32,97,32,110,101,119,32,107,101,121,32,112,97,105,114,46,10,52,46,32,67,111,112,121,32,116,104,101,32,96,34,48,120,89,111,117,114,76,111,110,103,83,101,115,115,105,111,110,82,97,119,83,101,101,100,34,96,44,32,97,110,100,32,115,97,118,101,32,105,116,32,115,111,109,101,119,104,101,114,101,32,115,97,102,101,32,45,32,108,105,107,101,32,97,32,112,97,115,115,119,111,114,100,32,109,97,110,97,103,101,114,46,32,89,111,117,32,110,101,101,100,32,116,104,105,115,32,108,97,116,101,114,33,10,53,46,32,67,104,111,111,115,101,32,97,32,112,97,115,115,119,111,114,100,32,40,116,104,105,115,32,107,101,121,32,119,105,108,108,32,104,111,108,100,32,97,108,108,32,121,111,117,114,32,116,111,107,101,110,115,33,41,10,54,46,32,70,111,114,32,116,104,101,32,96,115,101,115,115,105,111,110,96,32,107,101,121,44,32,121,111,117,32,97,108,115,111,32,110,101,101,100,32,116,111,32,115,101,108,101,99,116,32,96,69,100,119,97,114,100,115,32,40,101,100,50,53,53,49,57,41,96,32,102,114,111,109,32,116,104,101,32,96,65,100,118,97,110,99,101,100,32,99,114,101,97,116,105,111,110,32,111,112,116,105,111,110,115,96,46,10,55,46,32,67,108,105,99,107,32,96,83,97,118,101,96,32,45,62,32,96,67,114,101,97,116,101,32,97,110,100,32,98,97,99,107,117,112,32,107,101,121,115,96,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179244},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[142,{"id":142,"thread_id":18,"nr_in_thread":8,"current_text":[82,101,112,101,97,116,32,116,104,101,32,115,116,101,112,115,32,116,119,111,32,109,111,114,101,32,116,105,109,101,115,44,32,98,117,116,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,110,97,109,101,115,44,32,108,101,97,118,105,110,103,32,121,111,117,32,119,105,116,104,32,116,104,114,101,101,32,115,101,116,115,32,111,102,32,107,101,121,115,32,97,115,32,115,104,111,119,110,32,98,101,108,111,119,58,10,42,32,96,115,116,97,115,104,96,10,42,32,96,99,111,110,116,114,111,108,108,101,114,96,10,42,32,96,115,101,115,115,105,111,110,96,10,10,78,111,116,101,32,116,104,97,116,32,121,111,117,32,111,110,108,121,32,42,115,116,114,105,99,116,108,121,32,110,101,101,100,42,32,116,104,101,32,82,97,119,32,115,101,101,100,32,102,111,114,32,116,104,101,32,96,115,101,115,115,105,111,110,96,32,107,101,121,112,97,105,114,44,32,98,117,116,32,105,116,39,115,32,115,97,102,101,114,32,116,111,32,100,111,32,105,116,32,102,111,114,32,97,108,108,32,111,102,32,116,104,101,109,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179292},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[143,{"id":143,"thread_id":18,"nr_in_thread":9,"current_text":[35,35,35,35,32,82,101,45,115,116,97,114,116,32,121,111,117,114,32,110,111,100,101,32,97,115,32,97,32,118,97,108,105,100,97,116,111,114,10,10,49,46,32,79,112,101,110,32,116,104,101,32,116,101,114,109,105,110,97,108,32,116,104,97,116,32,105,115,32,114,117,110,110,105,110,103,32,121,111,117,114,32,110,111,100,101,44,32,97,110,100,32,107,105,108,108,32,116,104,101,32,115,101,115,115,105,111,110,32,119,105,116,104,32,96,99,116,114,108,43,99,96,46,10,50,46,32,82,101,115,116,97,114,116,32,105,116,32,97,103,97,105,110,32,119,105,116,104,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,109,109,97,110,100,58,10,96,96,96,10,36,32,46,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,32,45,45,118,97,108,105,100,97,116,111,114,32,45,45,107,101,121,32,60,48,120,77,121,76,111,110,103,82,97,119,83,101,101,100,62,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,121,111,117,114,32,110,111,100,101,32,116,111,32,104,97,118,101,32,97,32,110,111,110,45,114,97,110,100,111,109,32,105,100,101,110,116,105,102,105,101,114,58,10,36,32,46,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,32,45,45,118,97,108,105,100,97,116,111,114,32,45,45,107,101,121,32,60,48,120,89,111,117,114,76,111,110,103,83,101,115,115,105,111,110,82,97,119,83,101,101,100,62,10,10,35,32,78,111,116,101,58,32,100,117,101,32,116,111,32,115,111,109,101,32,105,115,115,117,101,115,32,119,105,116,104,32,111,117,114,32,110,111,100,101,115,32,103,101,116,116,105,110,103,32,109,105,120,101,100,32,117,112,32,119,105,116,104,32,110,111,100,101,115,32,102,114,111,109,32,116,104,101,32,99,104,97,105,110,88,32,110,101,116,119,111,114,107,32,40,115,101,101,32,116,101,108,101,109,101,116,114,121,32,108,105,110,107,41,44,10,35,32,105,116,32,109,105,103,104,116,32,104,101,108,112,32,121,111,117,114,32,117,112,116,105,109,101,32,98,121,32,97,108,115,111,32,112,97,115,115,105,110,103,58,10,45,45,105,110,45,112,101,101,114,115,32,49,48,48,32,45,45,111,117,116,45,112,101,101,114,115,32,49,48,48,10,35,32,97,102,116,101,114,32,116,104,101,32,111,116,104,101,114,32,102,108,97,103,115,46,32,89,111,117,32,99,97,110,32,99,104,111,111,115,101,32,97,110,121,32,110,117,109,98,101,114,32,121,111,117,32,108,105,107,101,44,32,98,117,116,32,116,104,101,32,100,101,102,97,117,108,116,32,105,115,32,50,53,46,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179304},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[144,{"id":144,"thread_id":18,"nr_in_thread":10,"current_text":[84,104,105,115,32,116,105,109,101,44,32,116,104,101,32,111,117,116,112,117,116,32,115,104,111,117,108,100,32,115,104,111,119,32,97,32,115,108,105,103,104,116,108,121,32,100,105,102,102,101,114,101,110,116,32,115,116,97,114,116,117,112,32,111,117,116,112,117,116,58,10,96,96,96,10,74,111,121,115,116,114,101,97,109,32,78,111,100,101,10,32,32,118,101,114,115,105,111,110,32,34,118,101,114,115,105,111,110,34,45,34,121,111,117,114,95,79,83,34,10,32,32,98,121,32,74,111,121,115,116,114,101,97,109,44,32,50,48,49,57,10,67,104,97,105,110,32,115,112,101,99,105,102,105,99,97,116,105,111,110,58,32,74,111,121,115,116,114,101,97,109,32,83,116,97,103,105,110,103,32,84,101,115,116,110,101,116,10,78,111,100,101,32,110,97,109,101,58,32,34,110,111,100,101,110,97,109,101,34,10,82,111,108,101,115,58,32,65,85,84,72,79,82,73,84,89,10,66,101,115,116,32,98,108,111,99,107,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,10,76,111,99,97,108,32,110,111,100,101,32,97,100,100,114,101,115,115,32,105,115,58,32,47,105,112,52,47,48,46,48,46,48,46,48,47,116,99,112,47,51,48,51,51,51,47,112,50,112,47,34,121,111,117,114,95,110,111,100,101,95,107,101,121,34,10,76,105,115,116,101,110,105,110,103,32,102,111,114,32,110,101,119,32,99,111,110,110,101,99,116,105,111,110,115,32,111,110,32,49,50,55,46,48,46,48,46,49,58,57,57,52,52,46,10,85,115,105,110,103,32,97,117,116,104,111,114,105,116,121,32,107,101,121,32,32,34,53,89,111,117,114,74,111,121,83,101,115,115,105,111,110,65,100,100,114,101,115,115,34,32,32,35,32,83,101,101,32,78,111,116,101,10,46,46,46,10,96,96,96,10,42,42,78,111,116,101,42,42,10,73,102,32,121,111,117,114,32,96,115,101,115,115,105,111,110,96,32,119,97,115,32,103,101,110,101,114,97,116,101,100,32,97,115,32,96,83,99,104,110,111,114,114,107,101,108,32,40,115,114,50,53,53,49,57,41,96,44,32,105,116,32,119,105,108,108,32,115,104,111,119,32,97,32,99,111,109,112,108,101,116,101,108,121,32,100,105,102,102,101,114,101,110,116,32,97,100,100,114,101,115,115,46,32,73,102,32,116,104,105,115,32,104,97,112,112,101,110,115,44,32,103,111,32,98,97,99,107,32,97,110,100,32,103,101,110,101,114,97,116,101,32,97,32,110,101,119,32,91,115,101,115,115,105,111,110,32,107,101,121,93,40,35,103,101,110,101,114,97,116,101,45,121,111,117,114,45,107,101,121,115,45,49,41,32,119,105,116,104,32,96,69,100,119,97,114,100,115,32,40,101,100,50,53,53,49,57,41,96,46,32,73,102,32,121,111,117,32,100,111,110,39,116,44,32,121,111,117,114,32,110,111,100,101,32,119,105,108,108,32,116,114,121,32,116,111,32,115,105,103,110,32,98,108,111,99,107,115,32,119,105,116,104,32,116,104,101,32,119,114,111,110,103,32,107,101,121,46,32,65,115,32,97,32,99,111,110,115,101,113,117,101,110,99,101,44,32,121,111,117,32,119,105,108,108,32,103,101,116,32,115,108,97,115,104,101,100,32,97,110,100,32,107,105,99,107,101,100,32,111,117,116,32,97,115,32,96,86,97,108,105,100,97,116,111,114,96,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179328},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[145,{"id":145,"thread_id":18,"nr_in_thread":11,"current_text":[35,35,35,35,32,70,105,110,97,108,32,83,116,101,112,10,10,78,111,119,32,105,116,39,115,32,116,105,109,101,32,116,111,32,99,111,110,102,105,103,117,114,101,32,121,111,117,114,32,107,101,121,115,32,116,111,32,115,116,97,114,116,32,118,97,108,105,100,97,116,105,110,103,46,32],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179340},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[146,{"id":146,"thread_id":18,"nr_in_thread":12,"current_text":[35,35,35,35,32,67,111,110,102,105,103,117,114,101,32,121,111,117,114,32,118,97,108,105,100,97,116,111,114,32,107,101,121,115,10,10,73,110,32,111,114,100,101,114,32,116,111,32,98,101,32,97,32,96,86,97,108,105,100,97,116,111,114,96,44,32,121,111,117,32,110,101,101,100,32,116,111,32,115,116,97,107,101,46,32,78,111,116,101,32,116,104,97,116,32,121,111,117,32,109,97,121,32,104,97,118,101,32,116,111,32,114,101,102,114,101,115,104,32,121,111,117,114,32,98,114,111,119,115,101,114,32,105,102,32,121,111,117,39,114,101,32,110,111,116,32,115,101,101,105,110,103,32,116,104,101,32,111,112,116,105,111,110,115,32,114,105,103,104,116,32,97,119,97,121,46,10,10,42,42,73,77,80,79,82,84,65,78,84,58,42,42,32,82,101,97,100,32,115,116,101,112,32,49,51,46,32,99,97,114,101,102,117,108,108,121,46,32,89,111,117,114,32,110,111,100,101,32,110,101,101,100,115,32,116,111,32,98,101,32,102,117,108,108,121,32,115,121,110,99,101,100,44,32,98,101,102,111,114,101,32,112,114,111,99,101,101,100,105,110,103,32,116,111,32,115,116,101,112,32,49,52,46,10,10,49,46,32,83,116,105,108,108,32,105,110,32,116,104,101,32,96,77,121,32,75,101,121,115,96,32,115,105,100,101,98,97,114,32,111,102,32,116,104,101,32,91,80,105,111,110,101,101,114,32,65,112,112,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,112,105,111,110,101,101,114,41,44,32,99,104,111,111,115,101,32,121,111,117,114,32,96,115,116,97,115,104,96,32,107,101,121,46,10,50,46,32,67,108,105,99,107,32,116,104,101,32,96,70,114,101,101,32,84,111,107,101,110,115,96,32,108,105,110,107,32,98,101,108,111,119,32,121,111,117,114,32,97,100,100,114,101,115,115,44,32,91,111,114,32,99,108,105,99,107,32,104,101,114,101,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,102,97,117,99,101,116,41,46,32,83,111,108,118,101,32,116,104,101,32,99,97,112,116,99,104,97,44,32,97,110,100,32,121,111,117,32,115,104,111,117,108,100,32,114,101,99,101,105,118,101,32,116,111,107,101,110,115,46,10,51,46,32,83,101,110,100,32,115,111,109,101,32,116,111,107,101,110,115,32,116,111,32,121,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,46,32,73,116,32,110,101,101,100,115,32,116,111,32,112,101,114,102,111,114,109,32,97,116,32,108,101,97,115,116,32,116,119,111,32,116,114,97,110,115,97,99,116,105,111,110,115,44,32,98,117,116,32,98,101,116,116,101,114,32,116,111,32,115,101,110,100,32,126,49,48,46,10,52,46,32,78,111,119,44,32,99,108,105,99,107,32,96,86,97,108,105,100,97,116,111,114,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,44,32,97,110,100,32,116,104,101,110,32,116,104,101,32,96,86,97,108,105,100,97,116,111,114,32,83,116,97,107,105,110,103,96,32,116,97,98,46,10,53,46,32,76,111,99,97,116,101,32,116,104,101,32,97,100,100,114,101,115,115,47,107,101,121,32,110,97,109,101,100,32,96,115,116,97,115,104,96,44,32,97,110,100,32,99,108,105,99,107,32,96,66,111,110,100,32,70,117,110,100,115,96,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179358},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[147,{"id":147,"thread_id":18,"nr_in_thread":13,"current_text":[54,46,32,73,110,32,116,104,101,32,112,111,112,117,112,32,119,105,110,100,111,119,44,32,99,104,111,111,115,101,32,121,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,115,32,116,104,101,32,96,99,111,110,116,114,111,108,108,101,114,32,97,99,99,111,117,110,116,96,46,10,55,46,32,69,110,116,101,114,32,116,104,101,32,97,109,111,117,110,116,32,121,111,117,32,119,97,110,116,32,116,111,32,115,116,97,107,101,32,105,110,32,116,104,101,32,96,118,97,108,117,101,32,98,111,110,100,101,100,96,32,102,105,101,108,100,46,32,40,73,116,32,99,111,117,108,100,32,98,101,32,119,105,115,101,32,116,111,32,108,101,97,118,101,32,97,32,99,111,117,112,108,101,32,111,102,32,74,111,121,32,108,101,102,116,41,46,10,56,46,32,73,110,32,116,104,101,32,96,112,97,121,109,101,110,116,32,100,101,115,116,105,110,97,116,105,111,110,96,32,100,114,111,112,100,111,119,110,44,32,116,104,101,114,101,32,97,114,101,32,116,104,114,101,101,32,111,112,116,105,111,110,115,46,32,83,101,108,101,99,116,32,116,104,101,32,100,101,102,97,117,108,116,32,96,83,116,97,115,104,32,97,99,99,111,117,110,116,32,40,105,110,99,114,101,97,115,101,32,116,104,101,32,97,109,111,117,110,116,32,97,116,32,115,116,97,107,101,41,96,44,32,111,114,32,103,111,32,116,111,32,91,97,100,118,97,110,99,101,100,93,40,35,98,111,110,100,105,110,103,45,112,114,101,102,101,114,101,110,99,101,115,41,46,10,57,46,32,84,104,101,32,98,117,116,116,111,110,32,96,98,111,110,100,96,32,115,104,111,117,108,100,32,98,101,32,104,105,103,104,108,105,103,104,116,101,100,32,110,111,119,46,32,67,108,105,99,107,32,105,116,46,10,49,48,46,32,84,121,112,101,32,105,110,32,121,111,117,114,32,112,97,115,115,119,111,114,100,32,105,110,32,116,104,101,32,96,117,110,108,111,99,107,32,119,105,116,104,32,112,97,115,115,119,111,114,100,96,32,102,105,101,108,100,32,97,110,100,32,99,108,105,99,107,32,96,115,105,103,110,32,97,110,100,32,115,117,98,109,105,116,96,46,10,49,49,46,32,89,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,99,99,111,117,110,116,32,115,104,111,117,108,100,32,110,111,119,32,115,104,111,119,32,97,32,96,83,101,116,32,83,101,115,115,105,111,110,32,75,101,121,96,32,98,117,116,116,111,110,46,32,67,108,105,99,107,32,105,116,46,10,49,50,46,32,73,110,32,116,104,101,32,112,111,112,117,112,44,32,115,101,108,101,99,116,32,121,111,117,114,32,96,115,101,115,115,105,111,110,96,32,97,115,32,121,111,117,114,32,96,115,101,115,115,105,111,110,32,107,101,121,96,32,105,110,32,116,104,101,32,100,114,111,112,100,111,119,110,46,32,67,111,110,102,105,114,109,44,32,115,105,103,110,32,97,110,100,32,115,117,98,109,105,116,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179370},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[148,{"id":148,"thread_id":18,"nr_in_thread":14,"current_text":[49,51,46,32,89,111,117,32,110,101,101,100,32,116,111,32,99,104,101,99,107,32,121,111,117,114,32,110,111,100,101,44,32,119,104,105,99,104,32,121,111,117,32,115,116,97,114,116,101,100,32,101,97,114,108,105,101,114,46,32,73,110,32,116,104,101,32,111,117,116,112,117,116,32,96,116,97,114,103,101,116,61,35,34,98,108,111,99,107,95,104,101,105,103,104,116,34,96,32,115,104,111,117,108,100,32,101,113,117,97,108,32,96,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,96,46,32,68,111,32,110,111,116,32,112,114,111,99,101,101,100,32,98,101,102,111,114,101,32,116,104,111,115,101,32,116,119,111,32,118,97,108,117,101,115,32,97,114,101,32,105,100,101,110,116,105,99,97,108,44,32,97,115,32,121,111,117,114,32,110,111,100,101,32,119,105,108,108,32,98,101,32,100,114,111,112,112,101,100,32,111,117,116,32,102,114,111,109,32,116,104,101,32,118,97,108,105,100,97,116,111,114,115,32,105,102,32,121,111,117,114,32,110,111,100,101,32,105,115,32,110,111,116,32,102,117,108,108,121,32,115,121,110,99,101,100,46,32,73,102,32,121,111,117,32,100,105,100,32,115,116,97,114,116,32,121,111,117,114,32,110,111,100,101,32,119,105,116,104,32,96,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,96,32,112,97,114,97,109,101,116,101,114,44,32,116,104,101,110,32,121,111,117,32,97,108,115,111,32,99,97,110,32,99,104,101,99,107,32,105,102,32,121,111,117,114,32,110,111,100,101,32,105,115,32,102,117,108,108,121,32,115,121,110,99,101,100,32,102,114,111,109,32,91,84,101,108,101,109,101,116,114,121,93,40,104,116,116,112,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,47,35,108,105,115,116,47,74,111,121,115,116,114,101,97,109,37,50,48,84,101,115,116,110,101,116,37,50,48,118,50,41,46,10,49,52,46,32,89,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,99,99,111,117,110,116,32,115,104,111,117,108,100,32,110,111,119,32,115,104,111,119,32,97,32,96,86,97,108,105,100,97,116,101,96,32,98,117,116,116,111,110,46,32,67,108,105,99,107,32,105,116,46,10,49,53,46,32,89,111,117,32,99,97,110,32,108,101,97,118,101,32,116,104,101,32,96,117,110,115,116,97,107,101,32,116,104,114,101,115,104,111,108,100,96,32,97,110,100,32,96,112,97,121,109,101,110,116,32,112,114,101,102,101,114,101,110,99,101,115,96,32,97,115,32,100,101,102,97,117,108,116,115,44,32,111,114,32,103,111,32,116,111,32,91,97,100,118,97,110,99,101,100,93,40,35,118,97,108,105,100,97,116,105,110,103,45,112,114,101,102,101,114,101,110,99,101,115,41,46,32,67,111,110,102,105,114,109,44,32,115,105,103,110,32,97,110,100,32,115,117,98,109,105,116,46,10,10,82,101,102,114,101,115,104,32,121,111,117,114,32,98,114,111,119,115,101,114,44,32,97,110,100,32,115,101,108,101,99,116,32,116,104,101,32,96,86,97,108,105,100,97,116,111,114,32,79,118,101,114,118,105,101,119,96,32,116,97,98,46,32,73,102,32,121,111,117,114,32,97,99,99,111,117,110,116,32,115,104,111,119,115,32,117,110,100,101,114,32,96,110,101,120,116,32,117,112,96,44,32,119,97,105,116,32,102,111,114,32,116,104,101,32,110,101,120,116,32,96,101,114,97,96,44,32,97,110,100,32,121,111,117,32,119,105,108,108,32,98,101,32,109,111,118,101,100,32,116,111,32,116,104,101,32,96,118,97,108,105,100,97,116,111,114,115,96,32,108,105,115,116,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179388},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[149,{"id":149,"thread_id":17,"nr_in_thread":3,"current_text":[35,35,32,76,105,110,117,120,10,10,42,32,69,118,101,114,121,32,116,105,109,101,32,115,111,109,101,116,104,105,110,103,32,105,115,32,119,114,105,116,116,101,110,32,105,110,32,96,60,98,114,97,99,107,101,116,115,62,96,44,32,116,104,105,115,32,109,101,97,110,115,32,121,111,117,32,104,97,118,101,32,116,111,32,114,101,112,108,97,99,101,32,116,104,105,115,32,119,105,116,104,32,121,111,117,114,32,105,110,112,117,116,44,32,119,105,116,104,111,117,116,32,116,104,101,32,96,60,62,96,46,10,42,32,87,104,101,110,32,115,111,109,101,116,104,105,110,103,32,105,115,32,119,114,105,116,116,101,110,32,105,110,32,96,34,100,111,117,98,108,101,95,113,117,111,116,101,115,34,96,44,32,105,116,32,109,101,97,110,115,32,116,104,101,32,110,117,109,98,101,114,47,100,97,116,97,32,119,105,108,108,32,118,97,114,121,32,100,101,112,101,110,100,105,110,103,32,111,110,32,121,111,117,114,32,110,111,100,101,32,111,114,32,116,104,101,32,99,117,114,114,101,110,116,32,115,116,97,116,101,32,111,102,32,116,104,101,32,98,108,111,99,107,99,104,97,105,110,46,10,42,32,70,111,114,32,116,101,114,109,105,110,97,108,32,99,111,109,109,97,110,100,115,44,32,96,36,96,32,109,101,97,110,115,32,121,111,117,32,109,117,115,116,32,116,121,112,101,32,119,104,97,116,32,99,111,109,101,115,32,97,102,116,101,114,32,116,104,97,116,32,111,110,32,119,105,110,100,111,119,115,32,97,110,100,32,109,97,99,32,114,101,115,112,101,99,116,105,118,101,108,121,46,32,96,35,96,32,77,101,97,110,115,32,105,116,39,115,32,106,117,115,116,32,97,32,99,111,109,109,101,110,116,47,101,120,112,108,97,110,97,116,105,111,110,44,32,97,110,100,32,109,117,115,116,32,110,111,116,32,98,101,32,116,121,112,101,100,46,10,96,96,96,10,35,32,84,104,105,115,32,105,115,32,106,117,115,116,32,97,32,99,111,109,109,101,110,116,44,32,100,111,110,39,116,32,116,121,112,101,32,111,114,32,112,97,115,116,101,32,105,116,32,105,110,32,121,111,117,114,32,116,101,114,109,105,110,97,108,33,10,36,32,99,100,32,126,47,10,35,32,79,110,108,121,32,116,121,112,101,47,112,97,115,116,101,32,116,104,101,32,34,99,100,32,126,47,44,32,110,111,116,32,116,104,101,32,112,114,101,99,101,100,105,110,103,32,36,32,33,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179430},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[150,{"id":150,"thread_id":17,"nr_in_thread":4,"current_text":[35,35,35,35,32,83,101,116,117,112,32,78,111,100,101,10,10,79,112,101,110,32,116,104,101,32,116,101,114,109,105,110,97,108,58,10,10,96,96,96,10,36,32,99,100,32,126,47,10,35,32,54,52,32,98,105,116,32,100,101,98,105,97,110,32,98,97,115,101,100,32,108,105,110,117,120,10,36,32,119,103,101,116,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,114,101,108,101,97,115,101,115,47,100,111,119,110,108,111,97,100,47,118,49,46,48,46,48,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,49,46,48,46,48,45,108,105,110,117,120,45,120,56,54,95,54,52,46,116,97,114,46,103,122,10,36,32,116,97,114,32,45,118,120,102,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,49,46,48,46,48,45,108,105,110,117,120,45,120,56,54,95,54,52,46,116,97,114,46,103,122,10,35,32,97,114,109,118,55,32,40,114,97,115,112,98,101,114,114,121,32,112,105,41,10,36,32,119,103,101,116,32,104,116,116,112,115,58,47,47,103,105,116,104,117,98,46,99,111,109,47,74,111,121,115,116,114,101,97,109,47,115,117,98,115,116,114,97,116,101,45,110,111,100,101,45,106,111,121,115,116,114,101,97,109,47,114,101,108,101,97,115,101,115,47,100,111,119,110,108,111,97,100,47,118,49,46,48,46,48,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,49,46,48,46,48,45,97,114,109,118,55,46,116,97,114,46,103,122,10,36,32,116,97,114,32,45,118,120,102,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,45,49,46,48,46,48,45,97,114,109,118,55,46,116,97,114,46,103,122,10,35,32,70,111,114,32,98,111,116,104,10,36,32,46,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,121,111,117,114,32,110,111,100,101,32,116,111,32,104,97,118,101,32,97,32,110,111,110,45,114,97,110,100,111,109,32,105,100,101,110,116,105,102,105,101,114,58,10,36,32,46,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,121,111,117,114,32,110,111,100,101,32,116,111,32,115,104,111,119,32,117,112,32,105,110,32,116,104,101,32,116,101,108,101,109,101,116,114,121,58,32,104,116,116,112,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,47,10,36,32,46,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,32,45,45,116,101,108,101,109,101,116,114,121,45,117,114,108,32,119,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,58,49,48,50,52,47,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179460},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[151,{"id":151,"thread_id":17,"nr_in_thread":5,"current_text":[96,96,96,10,35,32,78,111,116,101,58,32,100,117,101,32,116,111,32,115,111,109,101,32,105,115,115,117,101,115,32,119,105,116,104,32,111,117,114,32,110,111,100,101,115,32,103,101,116,116,105,110,103,32,109,105,120,101,100,32,117,112,32,119,105,116,104,32,110,111,100,101,115,32,102,114,111,109,32,116,104,101,32,99,104,97,105,110,88,32,110,101,116,119,111,114,107,32,40,115,101,101,32,116,101,108,101,109,101,116,114,121,32,108,105,110,107,41,44,10,35,32,105,116,32,109,105,103,104,116,32,104,101,108,112,32,121,111,117,114,32,117,112,116,105,109,101,32,98,121,32,97,108,115,111,32,112,97,115,115,105,110,103,58,10,45,45,105,110,45,112,101,101,114,115,32,49,48,48,32,45,45,111,117,116,45,112,101,101,114,115,32,49,48,48,10,35,32,97,102,116,101,114,32,116,104,101,32,111,116,104,101,114,32,102,108,97,103,115,46,32,89,111,117,32,99,97,110,32,99,104,111,111,115,101,32,97,110,121,32,110,117,109,98,101,114,32,121,111,117,32,108,105,107,101,44,32,98,117,116,32,116,104,101,32,100,101,102,97,117,108,116,32,105,115,32,50,53,46,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179472},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[152,{"id":152,"thread_id":17,"nr_in_thread":6,"current_text":[89,111,117,114,32,110,111,100,101,32,115,104,111,117,108,100,32,110,111,119,32,115,116,97,114,116,32,115,121,110,99,105,110,103,32,116,104,101,32,98,108,111,99,107,99,104,97,105,110,46,32,84,104,101,32,111,117,116,112,117,116,32,115,104,111,117,108,100,32,108,111,111,107,32,108,105,107,101,32,116,104,105,115,58,10,96,96,96,10,74,111,121,115,116,114,101,97,109,32,78,111,100,101,10,32,32,118,101,114,115,105,111,110,32,34,86,101,114,115,105,111,110,34,45,34,121,111,117,114,95,79,83,34,10,32,32,98,121,32,74,111,121,115,116,114,101,97,109,44,32,50,48,49,57,10,67,104,97,105,110,32,115,112,101,99,105,102,105,99,97,116,105,111,110,58,32,74,111,121,115,116,114,101,97,109,32,84,101,115,116,110,101,116,32,118,50,10,78,111,100,101,32,110,97,109,101,58,32,34,110,111,100,101,110,97,109,101,34,10,82,111,108,101,115,58,32,70,85,76,76,10,71,101,110,101,114,97,116,101,100,32,97,32,110,101,119,32,107,101,121,112,97,105,114,58,32,34,115,111,109,101,95,108,111,110,103,95,111,117,112,117,116,34,10,73,110,105,116,105,97,108,105,122,105,110,103,32,71,101,110,101,115,105,115,32,98,108,111,99,107,47,115,116,97,116,101,32,40,34,115,111,109,101,95,108,111,110,103,95,111,117,112,117,116,34,41,10,76,111,97,100,101,100,32,98,108,111,99,107,45,116,105,109,101,32,61,32,54,32,115,101,99,111,110,100,115,32,102,114,111,109,32,103,101,110,101,115,105,115,32,111,110,32,102,105,114,115,116,45,108,97,117,110,99,104,32,115,116,97,114,116,117,112,46,10,66,101,115,116,32,98,108,111,99,107,58,32,35,48,10,76,111,99,97,108,32,110,111,100,101,32,97,100,100,114,101,115,115,32,105,115,58,32,47,105,112,52,47,48,46,48,46,48,46,48,47,116,99,112,47,51,48,51,51,51,47,112,50,112,47,34,121,111,117,114,95,110,111,100,101,95,107,101,121,34,10,76,105,115,116,101,110,105,110,103,32,102,111,114,32,110,101,119,32,99,111,110,110,101,99,116,105,111,110,115,32,111,110,32,49,50,55,46,48,46,48,46,49,58,57,57,52,52,46,10,46,46,46,10,46,46,46,10,83,121,110,99,105,110,103,44,32,116,97,114,103,101,116,61,35,34,98,108,111,99,107,95,104,101,105,103,104,116,34,32,40,34,110,34,32,112,101,101,114,115,41,44,32,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,32,40,34,104,97,115,104,95,111,102,95,115,121,110,99,101,100,95,116,105,112,34,41,44,32,102,105,110,97,108,105,122,101,100,32,35,48,32,40,34,104,97,115,104,95,111,102,95,102,105,110,97,108,105,122,101,100,95,116,105,112,34,41,44,32,226,172,135,32,34,100,111,119,110,108,111,97,100,95,115,112,101,101,100,34,105,66,47,115,32,226,172,134,32,34,117,112,108,111,97,100,95,115,112,101,101,100,34,107,105,66,47,115,10,96,96,96,10,70,114,111,109,32,116,104,101,32,108,97,115,116,32,108,105,110,101,44,32,110,111,116,105,99,101,32,96,116,97,114,103,101,116,61,35,34,98,108,111,99,107,95,104,101,105,103,104,116,34,96,32,97,110,100,32,96,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,96,10,87,104,101,110,32,116,104,101,32,96,116,97,114,103,101,116,61,35,98,108,111,99,107,95,104,101,105,103,104,116,96,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,96,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,96,44,32,121,111,117,114,32,110,111,100,101,32,105,115,32,102,117,108,108,121,32,115,121,110,99,101,100,33,10,10,42,42,75,101,101,112,32,116,104,101,32,116,101,114,109,105,110,97,108,32,119,105,110,100,111,119,32,111,112,101,110,46,42,42],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179490},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[153,{"id":153,"thread_id":17,"nr_in_thread":7,"current_text":[35,35,35,35,32,75,101,121,115,10,10,78,111,119,32,121,111,117,32,110,101,101,100,32,116,111,32,103,101,110,101,114,97,116,101,32,121,111,117,114,32,96,107,101,121,115,96,32,105,110,32,116,104,101,32,96,80,105,111,110,101,101,114,32,97,112,112,96,46,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,104,97,118,101,32,116,104,101,32,97,112,112,108,105,99,97,116,105,111,110,32,116,97,108,107,32,116,111,32,121,111,117,114,32,111,119,110,32,110,111,100,101,44,32,99,104,111,111,115,101,32,96,83,101,116,116,105,110,103,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,44,32,97,110,100,32,99,104,97,110,103,101,32,116,104,101,32,96,114,101,109,111,116,101,32,110,111,100,101,47,101,110,100,112,111,105,110,116,32,116,111,32,99,111,110,110,101,99,116,32,116,111,96,32,116,111,32,108,111,99,97,108,32,110,111,100,101,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179502},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[154,{"id":154,"thread_id":17,"nr_in_thread":8,"current_text":[35,35,35,35,32,71,101,110,101,114,97,116,101,32,121,111,117,114,32,107,101,121,115,10,10,87,104,105,108,101,32,116,104,101,32,110,111,100,101,32,105,115,32,115,121,110,99,105,110,103,44,32,121,111,117,32,99,97,110,32,115,116,97,114,116,32,116,104,101,32,112,114,111,99,101,115,115,32,111,102,32,115,101,116,116,105,110,103,32,117,112,32,116,104,101,32,114,101,115,116,46,10,10,49,46,32,71,111,32,116,111,32,116,104,101,32,91,80,105,111,110,101,101,114,32,65,112,112,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,112,105,111,110,101,101,114,41,44,32,97,110,100,32,115,101,108,101,99,116,32,96,77,121,32,107,101,121,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,46,32,67,108,105,99,107,32,116,104,101,32,96,67,114,101,97,116,101,32,107,101,121,115,96,32,116,97,98,46,10,10,78,97,109,101,115,32,97,114,101,32,101,110,116,105,114,101,108,121,32,111,112,116,105,111,110,97,108,44,32,98,117,116,32,116,104,101,32,110,101,120,116,32,115,116,101,112,115,32,119,105,108,108,32,98,101,32,101,97,115,105,101,114,32,105,102,32,121,111,117,32,102,111,108,108,111,119,32,116,104,101,32,115,121,115,116,101,109,32,115,117,103,103,101,115,116,101,100,46,10,10,50,46,32,78,97,109,101,32,121,111,117,114,32,102,105,114,115,116,32,107,101,121,112,97,105,114,32,96,115,101,115,115,105,111,110,96,44,32,111,114,32,97,116,32,108,101,97,115,116,32,115,111,109,101,116,104,105,110,103,32,116,104,97,116,32,99,111,110,116,97,105,110,115,32,116,104,101,32,119,111,114,100,46,32,73,101,32,96,106,111,104,110,45,100,111,101,45,115,101,115,115,105,111,110,45,107,101,121,96,46,10,51,46,32,73,110,32,116,104,101,32,100,114,111,112,100,111,119,110,32,105,110,32,116,104,101,32,102,105,101,108,100,32,98,101,108,111,119,44,32,99,104,111,111,115,101,32,96,82,97,119,32,115,101,101,100,96,46,32,78,111,116,101,32,116,104,97,116,32,101,97,99,104,32,116,105,109,101,32,121,111,117,32,116,111,103,103,108,101,32,98,101,116,119,101,101,110,32,96,77,110,101,109,111,110,105,99,96,32,97,110,100,32,96,82,97,119,32,115,101,101,100,96,44,32,121,111,117,32,119,105,108,108,32,103,101,110,101,114,97,116,101,32,97,32,110,101,119,32,107,101,121,32,112,97,105,114,46,10,52,46,32,67,111,112,121,32,116,104,101,32,96,34,48,120,89,111,117,114,76,111,110,103,83,101,115,115,105,111,110,82,97,119,83,101,101,100,34,96,44,32,97,110,100,32,115,97,118,101,32,105,116,32,115,111,109,101,119,104,101,114,101,32,115,97,102,101,32,45,32,108,105,107,101,32,97,32,112,97,115,115,119,111,114,100,32,109,97,110,97,103,101,114,46,32,89,111,117,32,110,101,101,100,32,116,104,105,115,32,108,97,116,101,114,33,10,53,46,32,67,104,111,111,115,101,32,97,32,112,97,115,115,119,111,114,100,32,40,116,104,105,115,32,107,101,121,32,119,105,108,108,32,104,111,108,100,32,97,108,108,32,121,111,117,114,32,116,111,107,101,110,115,33,41,10,54,46,32,70,111,114,32,116,104,101,32,96,115,101,115,115,105,111,110,96,32,107,101,121,44,32,121,111,117,32,97,108,115,111,32,110,101,101,100,32,116,111,32,115,101,108,101,99,116,32,96,69,100,119,97,114,100,115,32,40,101,100,50,53,53,49,57,41,96,32,102,114,111,109,32,116,104,101,32,96,65,100,118,97,110,99,101,100,32,99,114,101,97,116,105,111,110,32,111,112,116,105,111,110,115,96,46,10,55,46,32,67,108,105,99,107,32,96,83,97,118,101,96,32,45,62,32,96,67,114,101,97,116,101,32,97,110,100,32,98,97,99,107,117,112,32,107,101,121,115,96,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179520},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[155,{"id":155,"thread_id":17,"nr_in_thread":9,"current_text":[68,101,112,101,110,100,105,110,103,32,111,110,32,121,111,117,114,32,98,114,111,119,115,101,114,44,32,121,111,117,32,109,105,103,104,116,32,104,97,118,101,32,116,111,32,99,111,110,102,105,114,109,32,115,97,118,105,110,103,32,116,104,101,32,96,34,53,89,111,117,114,74,111,121,83,101,115,115,105,111,110,65,100,100,114,101,115,115,46,106,115,111,110,34,96,46,10,10,82,101,112,101,97,116,32,116,104,101,32,115,116,101,112,115,32,116,119,111,32,109,111,114,101,32,116,105,109,101,115,44,32,98,117,116,32,119,105,116,104,32,100,105,102,102,101,114,101,110,116,32,110,97,109,101,115,44,32,108,101,97,118,105,110,103,32,121,111,117,32,119,105,116,104,32,116,104,114,101,101,32,115,101,116,115,32,111,102,32,107,101,121,115,32,97,115,32,115,104,111,119,110,32,98,101,108,111,119,58,10,42,32,96,115,116,97,115,104,96,10,42,32,96,99,111,110,116,114,111,108,108,101,114,96,10,42,32,96,115,101,115,115,105,111,110,96,10,10,78,111,116,101,32,116,104,97,116,32,121,111,117,32,111,110,108,121,32,42,115,116,114,105,99,116,108,121,32,110,101,101,100,42,32,116,104,101,32,82,97,119,32,115,101,101,100,32,102,111,114,32,116,104,101,32,96,115,101,115,115,105,111,110,96,32,107,101,121,112,97,105,114,44,32,98,117,116,32,105,116,39,115,32,115,97,102,101,114,32,116,111,32,100,111,32,105,116,32,102,111,114,32,97,108,108,32,111,102,32,116,104,101,109,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179538},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[156,{"id":156,"thread_id":17,"nr_in_thread":10,"current_text":[35,35,35,35,32,82,101,45,115,116,97,114,116,32,121,111,117,114,32,110,111,100,101,32,97,115,32,97,32,118,97,108,105,100,97,116,111,114,10,10,49,46,32,79,112,101,110,32,116,104,101,32,116,101,114,109,105,110,97,108,32,116,104,97,116,32,105,115,32,114,117,110,110,105,110,103,32,121,111,117,114,32,110,111,100,101,44,32,97,110,100,32,107,105,108,108,32,116,104,101,32,115,101,115,115,105,111,110,32,119,105,116,104,32,96,99,116,114,108,43,99,96,46,10,50,46,32,82,101,115,116,97,114,116,32,105,116,32,97,103,97,105,110,32,119,105,116,104,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,99,111,109,109,97,110,100,58,10,96,96,96,10,36,32,46,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,32,45,45,118,97,108,105,100,97,116,111,114,32,45,45,107,101,121,32,60,48,120,77,121,76,111,110,103,82,97,119,83,101,101,100,62,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,121,111,117,114,32,110,111,100,101,32,116,111,32,104,97,118,101,32,97,32,110,111,110,45,114,97,110,100,111,109,32,105,100,101,110,116,105,102,105,101,114,58,10,36,32,46,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,32,45,45,118,97,108,105,100,97,116,111,114,32,45,45,107,101,121,32,60,48,120,89,111,117,114,76,111,110,103,83,101,115,115,105,111,110,82,97,119,83,101,101,100,62,10,35,32,97,114,109,118,55,32,40,114,97,115,112,98,101,114,114,121,32,112,105,41,32,111,110,108,121,58,10,35,32,73,102,32,121,111,117,32,119,97,110,116,32,121,111,117,114,32,110,111,100,101,32,116,111,32,115,104,111,119,32,117,112,32,105,110,32,116,104,101,32,116,101,108,101,109,101,116,114,121,58,32,104,116,116,112,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,47,10,36,32,46,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,32,45,45,118,97,108,105,100,97,116,111,114,32,45,45,107,101,121,32,60,48,120,89,111,117,114,76,111,110,103,83,101,115,115,105,111,110,82,97,119,83,101,101,100,62,32,45,45,116,101,108,101,109,101,116,114,121,45,117,114,108,32,119,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,58,49,48,50,52,47,10,10,35,32,78,111,116,101,58,32,100,117,101,32,116,111,32,115,111,109,101,32,105,115,115,117,101,115,32,119,105,116,104,32,111,117,114,32,110,111,100,101,115,32,103,101,116,116,105,110,103,32,109,105,120,101,100,32,117,112,32,119,105,116,104,32,110,111,100,101,115,32,102,114,111,109,32,116,104,101,32,99,104,97,105,110,88,32,110,101,116,119,111,114,107,32,40,115,101,101,32,116,101,108,101,109,101,116,114,121,32,108,105,110,107,41,44,10,35,32,105,116,32,109,105,103,104,116,32,104,101,108,112,32,121,111,117,114,32,117,112,116,105,109,101,32,98,121,32,97,108,115,111,32,112,97,115,115,105,110,103,58,10,45,45,105,110,45,112,101,101,114,115,32,49,48,48,32,45,45,111,117,116,45,112,101,101,114,115,32,49,48,48,10,35,32,97,102,116,101,114,32,116,104,101,32,111,116,104,101,114,32,102,108,97,103,115,46,32,89,111,117,32,99,97,110,32,99,104,111,111,115,101,32,97,110,121,32,110,117,109,98,101,114,32,121,111,117,32,108,105,107,101,44,32,98,117,116,32,116,104,101,32,100,101,102,97,117,108,116,32,105,115,32,50,53,46,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179556},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[157,{"id":157,"thread_id":17,"nr_in_thread":11,"current_text":[84,104,105,115,32,116,105,109,101,44,32,116,104,101,32,111,117,116,112,117,116,32,115,104,111,117,108,100,32,115,104,111,119,32,97,32,115,108,105,103,104,116,108,121,32,100,105,102,102,101,114,101,110,116,32,115,116,97,114,116,117,112,32,111,117,116,112,117,116,58,10,96,96,96,10,74,111,121,115,116,114,101,97,109,32,78,111,100,101,10,32,32,118,101,114,115,105,111,110,32,34,118,101,114,115,105,111,110,34,45,34,121,111,117,114,95,79,83,34,10,32,32,98,121,32,74,111,121,115,116,114,101,97,109,44,32,50,48,49,57,10,67,104,97,105,110,32,115,112,101,99,105,102,105,99,97,116,105,111,110,58,32,74,111,121,115,116,114,101,97,109,32,83,116,97,103,105,110,103,32,84,101,115,116,110,101,116,10,78,111,100,101,32,110,97,109,101,58,32,34,110,111,100,101,110,97,109,101,34,10,82,111,108,101,115,58,32,65,85,84,72,79,82,73,84,89,10,66,101,115,116,32,98,108,111,99,107,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,10,76,111,99,97,108,32,110,111,100,101,32,97,100,100,114,101,115,115,32,105,115,58,32,47,105,112,52,47,48,46,48,46,48,46,48,47,116,99,112,47,51,48,51,51,51,47,112,50,112,47,34,121,111,117,114,95,110,111,100,101,95,107,101,121,34,10,76,105,115,116,101,110,105,110,103,32,102,111,114,32,110,101,119,32,99,111,110,110,101,99,116,105,111,110,115,32,111,110,32,49,50,55,46,48,46,48,46,49,58,57,57,52,52,46,10,85,115,105,110,103,32,97,117,116,104,111,114,105,116,121,32,107,101,121,32,32,34,53,89,111,117,114,74,111,121,83,101,115,115,105,111,110,65,100,100,114,101,115,115,34,32,32,35,32,83,101,101,32,78,111,116,101,10,46,46,46,10,96,96,96,10,42,42,78,111,116,101,42,42,10,73,102,32,121,111,117,114,32,96,115,101,115,115,105,111,110,96,32,119,97,115,32,103,101,110,101,114,97,116,101,100,32,97,115,32,96,83,99,104,110,111,114,114,107,101,108,32,40,115,114,50,53,53,49,57,41,96,44,32,105,116,32,119,105,108,108,32,115,104,111,119,32,97,32,99,111,109,112,108,101,116,101,108,121,32,100,105,102,102,101,114,101,110,116,32,97,100,100,114,101,115,115,46,32,73,102,32,116,104,105,115,32,104,97,112,112,101,110,115,44,32,103,111,32,98,97,99,107,32,97,110,100,32,103,101,110,101,114,97,116,101,32,97,32,110,101,119,32,91,115,101,115,115,105,111,110,32,107,101,121,93,40,35,103,101,110,101,114,97,116,101,45,121,111,117,114,45,107,101,121,115,45,50,41,32,119,105,116,104,32,96,69,100,119,97,114,100,115,32,40,101,100,50,53,53,49,57,41,96,46,32,73,102,32,121,111,117,32,100,111,110,39,116,44,32,121,111,117,114,32,110,111,100,101,32,119,105,108,108,32,116,114,121,32,116,111,32,115,105,103,110,32,98,108,111,99,107,115,32,119,105,116,104,32,116,104,101,32,119,114,111,110,103,32,107,101,121,46,32,65,115,32,97,32,99,111,110,115,101,113,117,101,110,99,101,44,32,121,111,117,32,119,105,108,108,32,103,101,116,32,115,108,97,115,104,101,100,32,97,110,100,32,107,105,99,107,101,100,32,111,117,116,32,97,115,32,96,86,97,108,105,100,97,116,111,114,96,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179622},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[158,{"id":158,"thread_id":17,"nr_in_thread":12,"current_text":[35,35,35,35,32,70,105,110,97,108,32,83,116,101,112,10,10,78,111,119,32,105,116,39,115,32,116,105,109,101,32,116,111,32,99,111,110,102,105,103,117,114,101,32,121,111,117,114,32,107,101,121,115,32,116,111,32,115,116,97,114,116,32,118,97,108,105,100,97,116,105,110,103,46,32],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179634},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[159,{"id":159,"thread_id":17,"nr_in_thread":13,"current_text":[35,35,35,35,32,67,111,110,102,105,103,117,114,101,32,121,111,117,114,32,118,97,108,105,100,97,116,111,114,32,107,101,121,115,10,10,73,110,32,111,114,100,101,114,32,116,111,32,98,101,32,97,32,96,86,97,108,105,100,97,116,111,114,96,44,32,121,111,117,32,110,101,101,100,32,116,111,32,115,116,97,107,101,46,32,78,111,116,101,32,116,104,97,116,32,121,111,117,32,109,97,121,32,104,97,118,101,32,116,111,32,114,101,102,114,101,115,104,32,121,111,117,114,32,98,114,111,119,115,101,114,32,105,102,32,121,111,117,39,114,101,32,110,111,116,32,115,101,101,105,110,103,32,116,104,101,32,111,112,116,105,111,110,115,32,114,105,103,104,116,32,97,119,97,121,46,10,10,42,42,73,77,80,79,82,84,65,78,84,58,42,42,32,82,101,97,100,32,115,116,101,112,32,49,51,46,32,99,97,114,101,102,117,108,108,121,46,32,89,111,117,114,32,110,111,100,101,32,110,101,101,100,115,32,116,111,32,98,101,32,102,117,108,108,121,32,115,121,110,99,101,100,44,32,98,101,102,111,114,101,32,112,114,111,99,101,101,100,105,110,103,32,116,111,32,115,116,101,112,32,49,52,46,10,10,49,46,32,83,116,105,108,108,32,105,110,32,116,104,101,32,96,77,121,32,75,101,121,115,96,32,115,105,100,101,98,97,114,32,111,102,32,116,104,101,32,91,80,105,111,110,101,101,114,32,65,112,112,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,112,105,111,110,101,101,114,41,44,32,99,104,111,111,115,101,32,121,111,117,114,32,96,115,116,97,115,104,96,32,107,101,121,46,10,50,46,32,67,108,105,99,107,32,116,104,101,32,96,70,114,101,101,32,84,111,107,101,110,115,96,32,108,105,110,107,32,98,101,108,111,119,32,121,111,117,114,32,97,100,100,114,101,115,115,44,32,91,111,114,32,99,108,105,99,107,32,104,101,114,101,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,102,97,117,99,101,116,41,46,32,83,111,108,118,101,32,116,104,101,32,99,97,112,116,99,104,97,44,32,97,110,100,32,121,111,117,32,115,104,111,117,108,100,32,114,101,99,101,105,118,101,32,116,111,107,101,110,115,46,10,51,46,32,83,101,110,100,32,115,111,109,101,32,116,111,107,101,110,115,32,116,111,32,121,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,46,32,73,116,32,110,101,101,100,115,32,116,111,32,112,101,114,102,111,114,109,32,97,116,32,108,101,97,115,116,32,116,119,111,32,116,114,97,110,115,97,99,116,105,111,110,115,44,32,98,117,116,32,98,101,116,116,101,114,32,116,111,32,115,101,110,100,32,126,49,48,46,10,52,46,32,78,111,119,44,32,99,108,105,99,107,32,96,86,97,108,105,100,97,116,111,114,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,44,32,97,110,100,32,116,104,101,110,32,116,104,101,32,96,86,97,108,105,100,97,116,111,114,32,83,116,97,107,105,110,103,96,32,116,97,98,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179652},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[160,{"id":160,"thread_id":17,"nr_in_thread":14,"current_text":[53,46,32,76,111,99,97,116,101,32,116,104,101,32,97,100,100,114,101,115,115,47,107,101,121,32,110,97,109,101,100,32,96,115,116,97,115,104,96,44,32,97,110,100,32,99,108,105,99,107,32,96,66,111,110,100,32,70,117,110,100,115,96,46,10,54,46,32,73,110,32,116,104,101,32,112,111,112,117,112,32,119,105,110,100,111,119,44,32,99,104,111,111,115,101,32,121,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,115,32,116,104,101,32,96,99,111,110,116,114,111,108,108,101,114,32,97,99,99,111,117,110,116,96,46,10,55,46,32,69,110,116,101,114,32,116,104,101,32,97,109,111,117,110,116,32,121,111,117,32,119,97,110,116,32,116,111,32,115,116,97,107,101,32,105,110,32,116,104,101,32,96,118,97,108,117,101,32,98,111,110,100,101,100,96,32,102,105,101,108,100,46,32,40,73,116,32,99,111,117,108,100,32,98,101,32,119,105,115,101,32,116,111,32,108,101,97,118,101,32,97,32,99,111,117,112,108,101,32,111,102,32,74,111,121,32,108,101,102,116,41,46,10,56,46,32,73,110,32,116,104,101,32,96,112,97,121,109,101,110,116,32,100,101,115,116,105,110,97,116,105,111,110,96,32,100,114,111,112,100,111,119,110,44,32,116,104,101,114,101,32,97,114,101,32,116,104,114,101,101,32,111,112,116,105,111,110,115,46,32,83,101,108,101,99,116,32,116,104,101,32,100,101,102,97,117,108,116,32,96,83,116,97,115,104,32,97,99,99,111,117,110,116,32,40,105,110,99,114,101,97,115,101,32,116,104,101,32,97,109,111,117,110,116,32,97,116,32,115,116,97,107,101,41,96,44,32,111,114,32,103,111,32,116,111,32,91,97,100,118,97,110,99,101,100,93,40,35,98,111,110,100,105,110,103,45,112,114,101,102,101,114,101,110,99,101,115,41,46,10,57,46,32,84,104,101,32,98,117,116,116,111,110,32,96,98,111,110,100,96,32,115,104,111,117,108,100,32,98,101,32,104,105,103,104,108,105,103,104,116,101,100,32,110,111,119,46,32,67,108,105,99,107,32,105,116,46,10,49,48,46,32,84,121,112,101,32,105,110,32,121,111,117,114,32,112,97,115,115,119,111,114,100,32,105,110,32,116,104,101,32,96,117,110,108,111,99,107,32,119,105,116,104,32,112,97,115,115,119,111,114,100,96,32,102,105,101,108,100,32,97,110,100,32,99,108,105,99,107,32,96,115,105,103,110,32,97,110,100,32,115,117,98,109,105,116,96,46,10,49,49,46,32,89,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,99,99,111,117,110,116,32,115,104,111,117,108,100,32,110,111,119,32,115,104,111,119,32,97,32,96,83,101,116,32,83,101,115,115,105,111,110,32,75,101,121,96,32,98,117,116,116,111,110,46,32,67,108,105,99,107,32,105,116,46,10,49,50,46,32,73,110,32,116,104,101,32,112,111,112,117,112,44,32,115,101,108,101,99,116,32,121,111,117,114,32,96,115,101,115,115,105,111,110,96,32,97,115,32,121,111,117,114,32,96,115,101,115,115,105,111,110,32,107,101,121,96,32,105,110,32,116,104,101,32,100,114,111,112,100,111,119,110,46,32,67,111,110,102,105,114,109,44,32,115,105,103,110,32,97,110,100,32,115,117,98,109,105,116,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179664},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[161,{"id":161,"thread_id":17,"nr_in_thread":15,"current_text":[49,51,46,32,89,111,117,32,110,101,101,100,32,116,111,32,99,104,101,99,107,32,121,111,117,114,32,110,111,100,101,44,32,119,104,105,99,104,32,121,111,117,32,115,116,97,114,116,101,100,32,101,97,114,108,105,101,114,46,32,73,110,32,116,104,101,32,111,117,116,112,117,116,32,96,116,97,114,103,101,116,61,35,34,98,108,111,99,107,95,104,101,105,103,104,116,34,96,32,115,104,111,117,108,100,32,101,113,117,97,108,32,96,98,101,115,116,58,32,35,34,115,121,110,99,101,100,95,104,101,105,103,104,116,34,96,46,32,68,111,32,110,111,116,32,112,114,111,99,101,101,100,32,98,101,102,111,114,101,32,116,104,111,115,101,32,116,119,111,32,118,97,108,117,101,115,32,97,114,101,32,105,100,101,110,116,105,99,97,108,44,32,97,115,32,121,111,117,114,32,110,111,100,101,32,119,105,108,108,32,98,101,32,100,114,111,112,112,101,100,32,111,117,116,32,102,114,111,109,32,116,104,101,32,118,97,108,105,100,97,116,111,114,115,32,105,102,32,121,111,117,114,32,110,111,100,101,32,105,115,32,110,111,116,32,102,117,108,108,121,32,115,121,110,99,101,100,46,32,73,102,32,121,111,117,32,100,105,100,32,115,116,97,114,116,32,121,111,117,114,32,110,111,100,101,32,119,105,116,104,32,96,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,96,32,112,97,114,97,109,101,116,101,114,44,32,116,104,101,110,32,121,111,117,32,97,108,115,111,32,99,97,110,32,99,104,101,99,107,32,105,102,32,121,111,117,114,32,110,111,100,101,32,105,115,32,102,117,108,108,121,32,115,121,110,99,101,100,32,102,114,111,109,32,91,84,101,108,101,109,101,116,114,121,93,40,104,116,116,112,115,58,47,47,116,101,108,101,109,101,116,114,121,46,112,111,108,107,97,100,111,116,46,105,111,47,35,108,105,115,116,47,74,111,121,115,116,114,101,97,109,37,50,48,84,101,115,116,110,101,116,37,50,48,118,50,41,46,10,49,52,46,32,89,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,99,99,111,117,110,116,32,115,104,111,117,108,100,32,110,111,119,32,115,104,111,119,32,97,32,96,86,97,108,105,100,97,116,101,96,32,98,117,116,116,111,110,46,32,67,108,105,99,107,32,105,116,46,10,49,53,46,32,89,111,117,32,99,97,110,32,108,101,97,118,101,32,116,104,101,32,96,117,110,115,116,97,107,101,32,116,104,114,101,115,104,111,108,100,96,32,97,110,100,32,96,112,97,121,109,101,110,116,32,112,114,101,102,101,114,101,110,99,101,115,96,32,97,115,32,100,101,102,97,117,108,116,115,44,32,111,114,32,103,111,32,116,111,32,91,97,100,118,97,110,99,101,100,93,40,35,118,97,108,105,100,97,116,105,110,103,45,112,114,101,102,101,114,101,110,99,101,115,41,46,32,67,111,110,102,105,114,109,44,32,115,105,103,110,32,97,110,100,32,115,117,98,109,105,116,46,10,10,82,101,102,114,101,115,104,32,121,111,117,114,32,98,114,111,119,115,101,114,44,32,97,110,100,32,115,101,108,101,99,116,32,116,104,101,32,96,86,97,108,105,100,97,116,111,114,32,79,118,101,114,118,105,101,119,96,32,116,97,98,46,32,73,102,32,121,111,117,114,32,97,99,99,111,117,110,116,32,115,104,111,119,115,32,117,110,100,101,114,32,96,110,101,120,116,32,117,112,96,44,32,119,97,105,116,32,102,111,114,32,116,104,101,32,110,101,120,116,32,96,101,114,97,96,44,32,97,110,100,32,121,111,117,32,119,105,108,108,32,98,101,32,109,111,118,101,100,32,116,111,32,116,104,101,32,96,118,97,108,105,100,97,116,111,114,115,96,32,108,105,115,116,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179676},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[162,{"id":162,"thread_id":19,"nr_in_thread":2,"current_text":[35,35,35,35,35,32,69,120,97,109,112,108,101,32,119,105,116,104,32,117,115,101,114,32,106,111,121,115,116,114,101,97,109,10,10,84,104,101,32,101,120,97,109,112,108,101,32,98,101,108,111,119,32,97,115,115,117,109,101,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58,10,45,32,89,111,117,32,119,97,110,116,32,116,111,32,114,101,115,116,97,114,116,32,121,111,117,114,32,110,111,100,101,32,101,118,101,114,121,32,50,52,104,32,40,96,56,54,52,48,48,96,115,41,10,45,32,89,111,117,32,104,97,118,101,32,115,101,116,117,112,32,97,32,117,115,101,114,32,96,106,111,121,115,116,114,101,97,109,96,32,116,111,32,114,117,110,32,116,104,101,32,110,111,100,101,10,45,32,84,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,96,106,111,121,115,116,114,101,97,109,45,110,111,100,101,96,32,98,105,110,97,114,121,32,105,115,32,96,47,104,111,109,101,47,106,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,96,10,10,96,96,96,10,91,85,110,105,116,93,10,68,101,115,99,114,105,112,116,105,111,110,61,74,111,121,115,116,114,101,97,109,32,78,111,100,101,10,65,102,116,101,114,61,110,101,116,119,111,114,107,46,116,97,114,103,101,116,10,10,91,83,101,114,118,105,99,101,93,10,84,121,112,101,61,115,105,109,112,108,101,10,85,115,101,114,61,106,111,121,115,116,114,101,97,109,10,87,111,114,107,105,110,103,68,105,114,101,99,116,111,114,121,61,47,104,111,109,101,47,106,111,121,115,116,114,101,97,109,47,10,69,120,101,99,83,116,97,114,116,61,47,104,111,109,101,47,106,111,121,115,116,114,101,97,109,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,32,92,10,32,32,32,32,32,32,32,32,45,45,111,117,116,45,112,101,101,114,115,32,49,48,48,32,92,10,32,32,32,32,32,32,32,32,45,45,105,110,45,112,101,101,114,115,32,49,48,48,32,92,10,32,32,32,32,32,32,32,32,45,45,118,97,108,105,100,97,116,111,114,32,92,10,32,32,32,32,32,32,32,32,45,45,107,101,121,32,60,48,120,89,111,117,114,76,111,110,103,83,101,115,115,105,111,110,82,97,119,83,101,101,100,62,32,92,10,32,32,32,32,32,32,32,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,10,82,101,115,116,97,114,116,61,97,108,119,97,121,115,10,82,117,110,116,105,109,101,77,97,120,83,101,99,61,56,54,52,48,48,10,82,101,115,116,97,114,116,83,101,99,61,51,10,76,105,109,105,116,78,79,70,73,76,69,61,56,49,57,50,10,10,91,73,110,115,116,97,108,108,93,10,87,97,110,116,101,100,66,121,61,109,117,108,116,105,45,117,115,101,114,46,116,97,114,103,101,116,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179880},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[163,{"id":163,"thread_id":19,"nr_in_thread":3,"current_text":[73,102,32,121,111,117,32,106,117,115,116,32,119,97,110,116,32,116,111,32,104,97,118,101,32,116,104,101,32,110,111,100,101,32,114,101,115,116,97,114,116,32,105,102,32,105,116,32,99,114,97,115,104,101,115,44,32,114,101,112,108,97,99,101,58,10,10,96,96,96,10,82,101,115,116,97,114,116,61,97,108,119,97,121,115,10,82,117,110,116,105,109,101,77,97,120,83,101,99,61,56,54,52,48,48,10,35,32,119,105,116,104,10,82,101,115,116,97,114,116,61,111,110,45,102,97,105,108,117,114,101,10,96,96,96,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179892},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[164,{"id":164,"thread_id":19,"nr_in_thread":4,"current_text":[35,35,35,35,35,32,69,120,97,109,112,108,101,32,97,115,32,114,111,111,116,10,10,84,104,101,32,101,120,97,109,112,108,101,32,98,101,108,111,119,32,97,115,115,117,109,101,115,32,116,104,101,32,102,111,108,108,111,119,105,110,103,58,10,45,32,89,111,117,32,119,97,110,116,32,116,111,32,114,101,115,116,97,114,116,32,121,111,117,114,32,110,111,100,101,32,101,118,101,114,121,32,50,52,104,32,40,96,56,54,52,48,48,96,115,41,10,45,32,89,111,117,32,104,97,118,101,32,115,101,116,117,112,32,97,32,117,115,101,114,32,96,114,111,111,116,96,32,116,111,32,114,117,110,32,116,104,101,32,110,111,100,101,10,45,32,84,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,96,106,111,121,115,116,114,101,97,109,45,110,111,100,101,96,32,98,105,110,97,114,121,32,105,115,32,96,47,114,111,111,116,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,96,10,10,96,96,96,10,91,85,110,105,116,93,10,68,101,115,99,114,105,112,116,105,111,110,61,74,111,121,115,116,114,101,97,109,32,78,111,100,101,10,65,102,116,101,114,61,110,101,116,119,111,114,107,46,116,97,114,103,101,116,10,10,91,83,101,114,118,105,99,101,93,10,84,121,112,101,61,115,105,109,112,108,101,10,85,115,101,114,61,114,111,111,116,10,87,111,114,107,105,110,103,68,105,114,101,99,116,111,114,121,61,47,114,111,111,116,47,10,69,120,101,99,83,116,97,114,116,61,47,114,111,111,116,47,106,111,121,115,116,114,101,97,109,45,110,111,100,101,32,92,10,32,32,32,32,32,32,32,32,45,45,111,117,116,45,112,101,101,114,115,32,49,48,48,32,92,10,32,32,32,32,32,32,32,32,45,45,105,110,45,112,101,101,114,115,32,49,48,48,32,92,10,32,32,32,32,32,32,32,32,45,45,118,97,108,105,100,97,116,111,114,32,92,10,32,32,32,32,32,32,32,32,45,45,107,101,121,32,60,48,120,89,111,117,114,76,111,110,103,83,101,115,115,105,111,110,82,97,119,83,101,101,100,62,32,92,10,32,32,32,32,32,32,32,32,45,45,110,97,109,101,32,60,110,111,100,101,110,97,109,101,62,10,82,101,115,116,97,114,116,61,97,108,119,97,121,115,10,82,117,110,116,105,109,101,77,97,120,83,101,99,61,56,54,52,48,48,10,82,101,115,116,97,114,116,83,101,99,61,51,10,76,105,109,105,116,78,79,70,73,76,69,61,56,49,57,50,10,10,91,73,110,115,116,97,108,108,93,10,87,97,110,116,101,100,66,121,61,109,117,108,116,105,45,117,115,101,114,46,116,97,114,103,101,116,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179904},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[165,{"id":165,"thread_id":19,"nr_in_thread":5,"current_text":[73,102,32,121,111,117,32,106,117,115,116,32,119,97,110,116,32,116,111,32,104,97,118,101,32,116,104,101,32,110,111,100,101,32,114,101,115,116,97,114,116,32,105,102,32,105,116,32,99,114,97,115,104,101,115,44,32,114,101,112,108,97,99,101,58,10,10,96,96,96,10,82,101,115,116,97,114,116,61,97,108,119,97,121,115,10,82,117,110,116,105,109,101,77,97,120,83,101,99,61,56,54,52,48,48,10,35,32,119,105,116,104,10,82,101,115,116,97,114,116,61,111,110,45,102,97,105,108,117,114,101,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179910},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[166,{"id":166,"thread_id":19,"nr_in_thread":6,"current_text":[35,35,35,35,32,83,116,97,114,116,105,110,103,32,116,104,101,32,115,101,114,118,105,99,101,10,10,89,111,117,32,99,97,110,32,97,100,100,47,114,101,109,111,118,101,32,97,110,121,32,96,102,108,97,103,115,96,32,97,115,32,108,111,110,103,32,97,115,32,121,111,117,32,114,101,109,101,109,98,101,114,32,116,111,32,105,110,99,108,117,100,101,32,96,92,96,32,102,111,114,32,101,118,101,114,121,32,108,105,110,101,32,98,117,116,32,116,104,101,32,108,97,115,116,46,32,65,108,115,111,32,110,111,116,101,32,116,104,97,116,32,115,121,115,116,101,109,100,32,105,115,32,118,101,114,121,32,115,101,110,115,105,116,105,118,101,32,116,111,32,115,121,110,116,97,120,44,32,115,111,32,109,97,107,101,32,115,117,114,101,32,116,104,101,114,101,32,97,114,101,32,110,111,32,101,120,116,114,97,32,115,112,97,99,101,115,32,98,101,102,111,114,101,32,111,114,32,97,102,116,101,114,32,116,104,101,32,96,92,96,46,10,10,65,102,116,101,114,32,121,111,117,32,97,114,101,32,104,97,112,112,121,32,119,105,116,104,32,121,111,117,114,32,99,111,110,102,105,103,117,114,97,116,105,111,110,58,10,10,96,96,96,10,36,32,115,121,115,116,101,109,99,116,108,32,100,97,101,109,111,110,45,114,101,108,111,97,100,10,35,32,116,104,105,115,32,105,115,32,111,110,108,121,32,115,116,114,105,99,116,108,121,32,110,101,99,101,115,115,97,114,121,32,97,102,116,101,114,32,121,111,117,32,99,104,97,110,103,101,100,32,116,104,101,32,46,115,101,114,118,105,99,101,32,102,105,108,101,32,97,102,116,101,114,32,114,117,110,110,105,110,103,44,32,98,117,116,32,99,104,97,110,99,101,115,32,97,114,101,32,121,111,117,32,119,105,108,108,32,110,101,101,100,32,116,111,32,117,115,101,32,105,116,32,111,110,99,101,32,111,114,32,116,119,105,99,101,46,10,35,32,105,102,32,121,111,117,114,32,110,111,100,101,32,105,115,32,115,116,105,108,108,32,114,117,110,110,105,110,103,44,32,110,111,119,32,105,115,32,116,104,101,32,116,105,109,101,32,116,111,32,107,105,108,108,32,105,116,46,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,97,114,116,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,10,35,32,105,102,32,101,118,101,114,121,116,104,105,110,103,32,105,115,32,99,111,114,114,101,99,116,108,121,32,99,111,110,102,105,103,117,114,101,100,44,32,116,104,105,115,32,99,111,109,109,97,110,100,32,119,105,108,108,32,110,111,116,32,114,101,116,117,114,110,32,97,110,121,116,104,105,110,103,46,10,35,32,84,111,32,118,101,114,105,102,121,32,105,116,39,115,32,114,117,110,110,105,110,103,58,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,97,116,117,115,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,10,35,32,116,104,105,115,32,119,105,108,108,32,111,110,108,121,32,115,104,111,119,32,116,104,101,32,108,97,115,116,32,102,101,119,32,108,105,110,101,115,46,32,84,111,32,115,101,101,32,116,104,101,32,108,97,116,101,115,116,32,49,48,48,32,101,110,116,114,105,101,115,32,40,97,110,100,32,102,111,108,108,111,119,32,97,115,32,110,101,119,32,97,114,101,32,97,100,100,101,100,41,10,36,32,106,111,117,114,110,97,108,99,116,108,32,45,110,32,49,48,48,32,45,102,32,45,117,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179940},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[167,{"id":167,"thread_id":19,"nr_in_thread":7,"current_text":[96,96,96,10,35,32,84,111,32,109,97,107,101,32,116,104,101,32,115,101,114,118,105,99,101,32,115,116,97,114,116,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,97,116,32,98,111,111,116,58,10,36,32,115,121,115,116,101,109,99,116,108,32,101,110,97,98,108,101,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,10,96,96,96,10,89,111,117,32,99,97,110,32,114,101,115,116,97,114,116,32,116,104,101,32,115,101,114,118,105,99,101,32,119,105,116,104,58,10,45,32,96,115,121,115,116,101,109,99,116,108,32,114,101,115,116,97,114,116,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,96,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,99,104,97,110,103,101,32,115,111,109,101,116,104,105,110,103,32,40,111,114,32,106,117,115,116,32,115,116,111,112,41,44,32,114,117,110,58,10,45,32,96,115,121,115,116,101,109,99,116,108,32,115,116,111,112,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,96,10,10,66,101,102,111,114,101,32,121,111,117,32,109,97,107,101,32,116,104,101,32,99,104,97,110,103,101,115,46,32,65,102,116,101,114,32,99,104,97,110,103,105,110,103,58,10,10,96,96,96,10,36,32,115,121,115,116,101,109,99,116,108,32,100,97,101,109,111,110,45,114,101,108,111,97,100,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,97,114,116,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569179952},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[168,{"id":168,"thread_id":19,"nr_in_thread":8,"current_text":[35,35,35,35,32,69,114,114,111,114,115,10,10,73,102,32,121,111,117,32,109,97,107,101,32,97,32,109,105,115,116,97,107,101,32,115,111,109,101,119,104,101,114,101,44,32,96,115,121,115,116,101,109,99,116,108,32,115,116,97,114,116,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,96,32,119,105,108,108,32,112,114,111,109,112,116,58,10,96,96,96,10,70,97,105,108,101,100,32,116,111,32,115,116,97,114,116,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,115,101,114,118,105,99,101,58,32,85,110,105,116,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,115,101,114,118,105,99,101,32,105,115,32,110,111,116,32,108,111,97,100,101,100,32,112,114,111,112,101,114,108,121,58,32,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,46,10,83,101,101,32,115,121,115,116,101,109,32,108,111,103,115,32,97,110,100,32,39,115,121,115,116,101,109,99,116,108,32,115,116,97,116,117,115,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,46,115,101,114,118,105,99,101,39,32,102,111,114,32,100,101,116,97,105,108,115,46,10,96,96,96,10,70,111,108,108,111,119,32,116,104,101,32,105,110,115,116,114,117,99,116,105,111,110,115,44,32,97,110,100,32,115,101,101,32,105,102,32,97,110,121,116,104,105,110,103,32,108,111,111,107,115,32,119,114,111,110,103,46,32,67,111,114,114,101,99,116,32,105,116,44,32,116,104,101,110,58,10,10,96,96,96,10,36,32,115,121,115,116,101,109,99,116,108,32,100,97,101,109,111,110,45,114,101,108,111,97,100,10,36,32,115,121,115,116,101,109,99,116,108,32,115,116,97,114,116,32,106,111,121,115,116,114,101,97,109,45,110,111,100,101,10,96,96,96,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180024},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[169,{"id":169,"thread_id":19,"nr_in_thread":9,"current_text":[35,35,32,83,101,116,116,105,110,103,115,10,10,73,102,32,121,111,117,32,100,111,110,39,116,32,119,97,110,116,32,116,111,32,117,115,101,32,116,104,101,32,100,101,102,97,117,108,116,32,115,101,116,116,105,110,103,115,44,32,104,101,114,101,32,97,114,101,32,115,111,109,101,32,111,102,32,116,104,101,32,111,112,116,105,111,110,115,32,121,111,117,32,99,97,110,32,99,111,110,102,105,103,117,114,101,46,10,10,35,35,35,35,32,66,111,110,100,105,110,103,32,112,114,101,102,101,114,101,110,99,101,115,10,84,104,101,32,98,111,110,100,105,110,103,32,112,114,101,102,101,114,101,110,99,101,115,32,100,101,99,105,100,101,115,32,111,110,32,104,111,119,32,119,104,101,114,101,32,121,111,117,114,32,40,74,111,121,41,32,115,116,97,107,105,110,103,32,114,101,119,97,114,100,115,32,97,114,101,32,100,105,115,116,114,105,98,117,116,101,100,46,32,84,104,101,114,101,32,97,114,101,32,116,104,114,101,101,32,97,108,116,101,114,110,97,116,105,118,101,115,58,10,49,46,32,96,83,116,97,115,104,32,97,99,99,111,117,110,116,32,40,105,110,99,114,101,97,115,101,32,116,104,101,32,97,109,111,117,110,116,32,97,116,32,115,116,97,107,101,41,96,32,40,100,101,102,97,117,108,116,41,46,10,10,84,104,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,115,101,110,100,115,32,97,108,108,32,114,101,119,97,114,100,115,32,116,104,101,32,96,115,116,97,115,104,96,32,97,100,100,114,101,115,115,44,32,119,104,101,114,101,32,105,116,32,103,101,116,115,32,98,111,110,100,101,100,32,97,115,32,97,110,32,97,100,100,105,116,105,111,110,97,108,32,115,116,97,107,101,46,32,84,104,105,115,32,119,105,108,108,32,105,110,99,114,101,97,115,101,32,121,111,117,114,32,112,114,111,98,97,98,105,108,105,116,121,32,111,102,32,115,116,97,121,105,110,103,32,105,110,32,116,104,101,32,96,118,97,108,105,100,97,116,111,114,96,32,115,101,116,46,10,10,50,46,32,96,83,116,97,115,104,32,97,99,99,111,117,110,116,32,40,100,111,32,110,111,32,105,110,99,114,101,97,115,101,32,116,104,101,32,97,109,111,117,110,116,32,97,116,32,115,116,97,107,101,41,96,10,10,65,115,32,108,105,107,101,32,96,49,46,96,32,116,104,105,115,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,115,101,110,100,115,32,97,108,108,32,114,101,119,97,114,100,115,32,116,104,101,32,96,115,116,97,115,104,96,32,97,100,100,114,101,115,115,44,32,98,117,116,32,100,111,101,115,32,42,110,111,116,42,32,103,101,116,32,98,111,110,100,101,100,32,97,115,32,115,116,97,107,101,44,32,109,101,97,110,105,110,103,32,121,111,117,32,105,116,32,119,105,108,108,32,110,111,116,32,104,101,108,112,32,34,103,117,97,114,100,34,32,121,111,117,114,32,115,112,111,116,32,105,110,32,116,104,101,32,96,118,97,108,105,100,97,116,111,114,96,32,115,101,116,46,10,10,51,46,32,96,67,111,110,116,114,111,108,108,101,114,32,97,99,99,111,117,110,116,96,10,10,84,104,105,115,32,115,101,110,100,115,32,97,108,108,32,114,101,119,97,114,100,115,32,116,111,32,116,104,101,32,96,99,111,110,116,114,111,108,108,101,114,96,44,32,97,116,32,121,111,117,114,32,100,105,115,112,111,115,97,108,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180048},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[170,{"id":170,"thread_id":19,"nr_in_thread":10,"current_text":[35,35,35,35,32,86,97,108,105,100,97,116,105,110,103,32,112,114,101,102,101,114,101,110,99,101,115,10,49,46,32,84,104,101,32,96,117,110,115,116,97,107,101,32,116,104,114,101,115,104,111,108,100,96,32,105,115,32,116,104,101,32,110,117,109,98,101,114,32,111,102,32,116,105,109,101,115,32,121,111,117,32,99,97,110,32,103,101,116,32,115,108,97,115,104,101,100,32,40,102,111,114,32,98,101,105,110,103,32,111,102,102,108,105,110,101,41,32,98,101,102,111,114,101,32,121,111,117,39,114,101,32,97,117,116,111,109,97,116,105,99,97,108,108,121,32,91,117,110,115,116,97,107,101,100,93,40,35,117,110,115,116,97,107,105,110,103,41,46,32,65,32,108,111,119,32,110,117,109,98,101,114,32,99,97,110,32,109,101,97,110,32,121,111,117,32,115,116,111,112,32,98,101,105,110,103,32,96,118,97,108,105,100,97,116,111,114,96,32,106,117,115,116,32,98,101,99,97,117,115,101,32,121,111,117,114,32,105,110,116,101,114,110,101,116,32,105,115,32,100,111,119,110,32,97,32,109,105,110,117,116,101,44,32,98,117,116,32,105,102,32,121,111,117,32,115,101,116,32,116,104,101,32,110,117,109,98,101,114,32,116,111,111,32,104,105,103,104,44,32,121,111,117,32,119,105,108,108,32,103,101,116,32,115,108,97,115,104,101,100,32,104,101,97,118,105,108,121,32,105,102,32,121,111,117,114,32,110,111,100,101,32,98,114,101,97,107,115,32,100,111,119,110,32,111,114,32,121,111,117,32,108,111,115,101,32,116,104,101,32,105,110,116,101,114,110,101,116,32,102,111,114,32,97,110,32,104,111,117,114,46,10,10,50,46,32,84,104,101,32,96,112,97,121,109,101,110,116,32,112,114,101,102,101,114,101,110,99,101,115,96,32,105,115,32,104,111,119,32,116,104,101,32,40,106,111,121,41,32,115,116,97,107,105,110,103,32,114,101,119,97,114,100,115,32,97,114,101,32,115,112,108,105,116,32,98,101,116,119,101,101,110,32,121,111,117,114,115,101,108,102,32,97,110,100,32,97,110,121,32,112,111,116,101,110,116,105,97,108,32,91,110,111,109,105,110,97,116,111,114,115,93,40,35,110,111,109,105,110,97,116,105,110,103,41,46,32,84,104,101,32,100,101,102,97,117,108,116,32,40,48,41,32,109,101,97,110,115,32,116,104,97,116,32,116,104,101,32,114,101,119,97,114,100,32,105,115,32,115,112,108,105,116,32,98,97,115,101,100,32,111,110,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,98,111,110,100,101,100,32,115,116,97,107,101,32,116,104,101,32,96,118,97,108,105,100,97,116,111,114,96,32,97,110,100,32,96,110,111,109,105,110,97,116,111,114,115,96,32,104,97,118,101,32,112,117,116,32,117,112,46,32],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180078},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[171,{"id":171,"thread_id":19,"nr_in_thread":11,"current_text":[69,120,97,109,112,108,101,58,10,10,76,101,116,32,96,118,96,32,91,74,111,121,93,32,98,101,32,116,104,101,32,98,111,110,100,101,100,32,116,111,107,101,110,115,32,102,111,114,32,116,104,101,32,118,97,108,105,100,97,116,111,114,32,96,115,116,97,115,104,96,10,76,101,116,32,96,112,96,32,91,74,111,121,93,32,98,101,32,116,104,101,32,96,112,97,121,109,101,110,116,32,112,114,101,102,101,114,101,110,99,101,96,32,100,101,99,105,100,101,100,32,98,121,32,116,104,101,32,118,97,108,105,100,97,116,111,114,10,76,101,116,32,96,110,49,96,32,91,74,111,121,93,32,98,101,32,116,104,101,194,160,98,111,110,100,101,100,32,116,111,107,101,110,115,32,102,111,114,32,116,104,101,32,110,111,109,105,110,97,116,111,114,49,32,96,115,116,97,115,104,96,10,76,101,116,32,96,110,50,96,32,91,74,111,121,93,32,98,101,32,116,104,101,194,160,98,111,110,100,101,100,32,116,111,107,101,110,115,32,102,111,114,32,116,104,101,32,110,111,109,105,110,97,116,111,114,50,32,96,115,116,97,115,104,96,10,76,101,116,32,96,114,96,32,91,74,111,121,93,32,98,101,32,116,104,101,32,114,101,119,97,114,100,32,116,104,97,116,32,96,101,114,97,96,10,10,96,96,96,10,35,32,112,97,121,111,117,116,32,102,111,114,32,116,104,101,32,118,97,108,105,100,97,116,111,114,10,112,32,43,32,40,118,47,40,118,43,110,49,43,110,50,41,42,40,114,45,112,41,41,10,35,32,112,97,121,111,117,116,32,102,111,114,32,116,104,101,32,110,111,109,105,110,97,116,111,114,49,10,40,110,49,47,40,118,43,110,49,43,110,50,41,42,40,114,45,112,41,41,10,96,96,96],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180090},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[172,{"id":172,"thread_id":19,"nr_in_thread":12,"current_text":[35,35,32,78,111,109,105,110,97,116,105,110,103,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,103,101,116,32,115,111,109,101,32,114,101,116,117,114,110,32,111,110,32,121,111,117,114,32,116,111,107,101,110,115,32,119,105,116,104,111,117,116,32,114,117,110,110,105,110,103,32,97,32,110,111,100,101,32,121,111,117,114,115,101,108,102,44,32,121,111,117,32,99,97,110,32,96,110,111,109,105,110,97,116,101,96,32,97,110,111,116,104,101,114,32,96,118,97,108,105,100,97,116,111,114,96,32,97,110,100,32,103,101,116,32,97,32,115,104,97,114,101,32,111,102,32,116,104,101,105,114,32,114,101,119,97,114,100,115,46,10,10,84,104,105,115,32,109,105,103,104,116,32,97,108,115,111,32,99,111,109,101,32,105,110,32,104,97,110,100,121,32,105,102,32,116,104,101,114,101,32,97,114,101,32,116,111,111,32,109,97,110,121,32,96,118,97,108,105,100,97,116,111,114,115,96,32,97,110,100,32,121,111,117,32,100,111,110,39,116,32,104,97,118,101,32,101,110,111,117,103,104,32,116,111,107,101,110,115,32,103,101,116,32,97,32,115,112,111,116,44,32,111,114,32,105,102,32,121,111,117,32,104,97,118,101,32,116,111,32,115,104,117,116,32,100,111,119,110,32,121,111,117,114,32,111,119,110,32,110,111,100,101,32,102,111,114,32,97,32,119,104,105,108,101,46,10,10,35,35,35,35,32,71,101,110,101,114,97,116,101,32,107,101,121,115,10,73,102,32,121,111,117,32,104,97,118,101,110,39,116,32,97,108,114,101,97,100,121,32,98,101,101,110,32,116,104,114,111,117,103,104,32,116,104,101,32,112,114,111,99,101,115,115,32,111,102,32,115,101,116,116,105,110,103,32,117,112,32,121,111,117,114,32,96,115,116,97,115,104,96,44,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,110,100,32,96,115,101,115,115,105,111,110,96,32,107,101,121,44,32,121,111,117,32,102,105,114,115,116,32,110,101,101,100,32,116,111,32,103,101,110,101,114,97,116,101,32,121,111,117,114,32,107,101,121,115,32,40,115,101,101,32,118,97,108,105,100,97,116,111,114,32,115,101,116,117,112,41,46,32,78,111,116,101,32,116,104,97,116,32,121,111,117,32,100,111,110,39,116,32,110,101,101,100,32,97,32,96,115,101,115,115,105,111,110,96,32,107,101,121,32,116,111,32,110,111,109,105,110,97,116,101,44,32,115,111,32,121,111,117,32,99,97,110,32,115,107,105,112,32,116,104,111,115,101,32,115,116,101,112,115,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180114},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[173,{"id":173,"thread_id":19,"nr_in_thread":13,"current_text":[35,35,35,35,32,67,111,110,102,105,103,117,114,101,32,121,111,117,114,32,110,111,109,105,110,97,116,105,110,103,32,107,101,121,115,10,73,110,32,111,114,100,101,114,32,116,111,32,98,101,32,97,32,96,110,111,109,105,110,97,116,111,114,96,44,32,121,111,117,32,110,101,101,100,32,115,116,97,107,101,46,32,78,111,116,101,32,116,104,97,116,32,121,111,117,32,109,97,121,32,104,97,118,101,32,116,111,32,114,101,102,114,101,115,104,32,121,111,117,114,32,98,114,111,119,115,101,114,32,105,102,32,121,111,117,39,114,101,32,110,111,116,32,115,101,101,105,110,103,32,116,104,101,32,111,112,116,105,111,110,115,32,114,105,103,104,116,32,97,119,97,121,46,32,73,102,32,121,111,117,32,104,97,118,101,32,112,114,101,118,105,111,117,115,108,121,32,98,101,101,110,32,97,32,96,86,97,108,105,100,97,116,111,114,96,44,32,111,114,32,116,114,105,101,100,32,116,111,32,100,111,32,115,111,44,32,115,107,105,112,32,97,104,101,97,100,32,116,111,32,115,116,101,112,32,96,57,46,96,46,10,10,49,46,32,73,110,32,116,104,101,32,96,77,121,32,75,101,121,115,96,32,115,105,100,101,98,97,114,44,32,99,104,111,111,115,101,32,121,111,117,114,32,96,115,116,97,115,104,96,32,107,101,121,46,10,50,46,32,67,108,105,99,107,32,116,104,101,32,96,70,114,101,101,32,84,111,107,101,110,115,96,32,108,105,110,107,32,98,101,108,111,119,32,121,111,117,114,32,97,100,100,114,101,115,115,44,32,91,111,114,32,99,108,105,99,107,32,104,101,114,101,93,40,104,116,116,112,115,58,47,47,116,101,115,116,110,101,116,46,106,111,121,115,116,114,101,97,109,46,111,114,103,47,102,97,117,99,101,116,41,46,32,83,111,108,118,101,32,116,104,101,32,99,97,112,116,99,104,97,44,32,97,110,100,32,121,111,117,32,115,104,111,117,108,100,32,114,101,99,101,105,118,101,32,116,111,107,101,110,115,46,10,51,46,32,83,101,110,100,32,115,111,109,101,32,116,111,107,101,110,115,32,116,111,32,121,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,46,32,73,116,32,110,101,101,100,115,32,116,111,32,112,101,114,102,111,114,109,32,97,116,32,108,101,97,115,116,32,116,119,111,32,116,114,97,110,115,97,99,116,105,111,110,115,44,32,98,117,116,32,98,101,116,116,101,114,32,116,111,32,115,101,110,100,32,126,49,48,46,10,52,46,32,78,111,119,44,32,99,108,105,99,107,32,96,86,97,108,105,100,97,116,111,114,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,44,32,97,110,100,32,116,104,101,110,32,116,104,101,32,96,86,97,108,105,100,97,116,111,114,32,83,116,97,107,105,110,103,96,32,116,97,98,46,10,53,46,32,76,111,99,97,116,101,32,116,104,101,32,97,100,100,114,101,115,115,47,107,101,121,32,110,97,109,101,100,32,96,115,116,97,115,104,96,44,32,97,110,100,32,99,108,105,99,107,32,96,66,111,110,100,32,70,117,110,100,115,96,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180144},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[174,{"id":174,"thread_id":19,"nr_in_thread":14,"current_text":[54,46,32,73,110,32,116,104,101,32,112,111,112,117,112,32,119,105,110,100,111,119,44,32,99,104,111,111,115,101,32,121,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,115,32,116,104,101,32,96,99,111,110,116,114,111,108,108,101,114,32,97,99,99,111,117,110,116,96,46,10,55,46,32,69,110,116,101,114,32,116,104,101,32,97,109,111,117,110,116,32,121,111,117,32,119,97,110,116,32,116,111,32,115,116,97,107,101,32,105,110,32,116,104,101,32,96,118,97,108,117,101,32,98,111,110,100,101,100,96,32,102,105,101,108,100,46,10,56,46,32,73,110,32,116,104,101,32,96,112,97,121,109,101,110,116,32,100,101,115,116,105,110,97,116,105,111,110,96,32,100,114,111,112,100,111,119,110,44,32,116,104,101,114,101,32,97,114,101,32,116,104,114,101,101,32,111,112,116,105,111,110,115,46,32,83,101,108,101,99,116,32,116,104,101,32,100,101,102,97,117,108,116,32,96,83,116,97,115,104,32,97,99,99,111,117,110,116,32,40,105,110,99,114,101,97,115,101,32,116,104,101,32,97,109,111,117,110,116,32,97,116,32,115,116,97,107,101,41,96,44,32,111,114,32,103,111,32,116,111,32,91,97,100,118,97,110,99,101,100,93,40,35,98,111,110,100,105,110,103,45,112,114,101,102,101,114,101,110,99,101,115,41,46,10,57,46,32,89,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,97,99,99,111,117,110,116,32,115,104,111,117,108,100,32,110,111,119,32,115,104,111,119,32,97,32,96,83,101,116,32,83,101,115,115,105,111,110,32,75,101,121,96,32,97,110,100,32,97,32,96,78,111,109,105,110,97,116,105,110,103,96,32,98,117,116,116,111,110,46,32,67,108,105,99,107,32,116,104,101,32,108,97,116,116,101,114,46,10,49,48,46,32,73,110,32,116,104,101,32,112,111,112,117,112,44,32,115,101,108,101,99,116,47,112,97,115,116,101,32,116,104,101,32,96,115,116,97,115,104,96,32,97,100,100,114,101,115,115,32,111,102,32,116,104,101,32,96,86,97,108,105,100,97,116,111,114,96,32,121,111,117,32,119,105,115,104,32,116,111,32,110,111,109,105,110,97,116,101,46,32,67,111,110,102,105,114,109,44,32,115,105,103,110,32,97,110,100,32,115,117,98,109,105,116,46,10,10,73,110,32,116,104,101,32,110,101,120,116,32,96,101,114,97,96,44,32,121,111,117,32,119,105,108,108,32,115,104,111,119,32,97,115,32,97,32,96,110,111,109,105,110,97,116,111,114,96,32,111,102,32,116,104,101,32,96,86,97,108,105,100,97,116,111,114,96,32,121,111,117,32,110,111,109,105,110,97,116,101,100,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180156},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[175,{"id":175,"thread_id":20,"nr_in_thread":2,"current_text":[35,35,35,35,32,83,101,115,115,105,111,110,32,107,101,121,10,10,68,105,100,32,121,111,117,32,97,99,99,105,100,101,110,116,97,108,108,121,32,99,104,111,111,115,101,32,96,83,99,104,110,111,114,114,107,101,108,32,40,115,114,50,53,53,49,57,41,96,44,32,105,110,115,116,101,97,100,32,111,102,32,96,69,100,119,97,114,100,115,32,40,101,100,50,53,53,49,57,41,96,32,102,111,114,32,121,111,117,114,32,96,115,101,115,115,105,111,110,96,32,107,101,121,44,32,97,110,100,32,100,105,100,110,39,116,32,110,111,116,105,99,101,32,98,101,102,111,114,101,32,121,111,117,32,99,111,110,102,105,103,117,114,101,100,32,121,111,117,114,32,96,86,97,108,105,100,97,116,111,114,32,107,101,121,115,96,63,32,84,104,105,115,32,99,97,110,32,98,101,32,114,101,115,111,108,118,101,100,46,10,10,49,46,32,71,111,32,116,111,32,96,86,97,108,105,100,97,116,111,114,115,96,32,45,62,32,96,86,97,108,105,100,97,116,111,114,32,83,116,97,107,105,110,103,96,32,97,110,100,32,96,85,110,115,116,97,107,101,96,46,10,10,50,46,32,71,101,110,101,114,97,116,101,32,97,32,110,101,119,32,96,115,101,115,115,105,111,110,96,32,107,101,121,32,119,105,116,104,32,96,69,100,119,97,114,100,115,32,40,101,100,50,53,53,49,57,41,96,44,32,114,101,115,116,97,114,116,32,121,111,117,114,32,110,111,100,101,44,32,97,110,100,32,114,101,112,108,97,99,101,32,116,104,101,32,96,114,97,119,32,115,101,101,100,96,32,119,105,116,104,32,116,104,101,32,110,101,119,32,111,110,101,46,10,10,51,46,32,84,104,101,110,44,32,99,104,111,111,115,101,32,96,83,101,116,116,105,110,103,115,96,32,105,110,32,116,104,101,32,115,105,100,101,98,97,114,44,32,97,110,100,32,115,119,105,116,99,104,32,102,114,111,109,32,96,66,97,115,105,99,32,102,101,97,116,117,114,101,115,32,111,110,108,121,96,32,116,111,32,96,70,117,108,108,121,32,102,101,97,116,117,114,101,100,96,46,10,10,52,46,32,71,111,32,116,111,32,96,69,120,116,114,105,110,115,105,99,115,96,44,32,97,110,100,32,115,101,108,101,99,116,32,121,111,117,114,32,96,99,111,110,116,114,111,108,108,101,114,96,32,107,101,121,32,102,114,111,109,32,116,104,101,32,100,114,111,112,100,111,119,110,32,97,116,32,116,104,101,32,116,111,112,46,32,73,110,32,116,104,101,32,115,101,99,111,110,100,32,100,114,111,112,100,111,119,110,44,32,115,101,108,101,99,116,32,96,115,101,115,115,105,111,110,96,44,32,97,110,100,32,105,110,32,116,104,101,32,116,104,105,114,100,44,32,96,115,101,116,75,101,121,96,46,32,70,105,110,97,108,108,121,44,32,99,104,111,111,115,101,32,121,111,117,114,32,110,101,119,32,96,115,101,115,115,105,111,110,96,32,107,101,121,32,105,110,32,116,104,101,32,102,111,117,114,116,104,32,97,110,100,32,102,105,110,97,108,32,100,114,111,112,100,111,119,110,44,32,97,110,100,32,115,117,98,109,105,116,46,10,10,53,46,32,79,110,99,101,32,105,116,32,99,111,110,102,105,114,109,115,44,32,103,111,32,98,97,99,107,32,116,111,32,96,86,97,108,105,100,97,116,111,114,115,96,32,45,62,32,96,86,97,108,105,100,97,116,111,114,32,83,116,97,107,105,110,103,96,32,97,110,100,32,96,83,116,97,107,101,96,46,10,10,73,110,32,116,104,101,32,96,78,101,120,116,32,117,112,96,44,32,121,111,117,114,32,110,101,119,32,96,115,101,115,115,105,111,110,96,32,107,101,121,32,115,104,111,117,108,100,32,115,104,111,119,44,32,97,110,100,32,109,97,116,99,104,32,116,104,101,32,96,97,117,116,104,111,114,105,116,121,32,107,101,121,96,32,105,110,32,121,111,117,114,32,110,111,100,101,46,32,40,109,105,110,117,115,32,116,104,101,32,102,105,110,97,108,32,51,32,99,104,97,114,97,99,116,101,114,115,41,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180294},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[176,{"id":176,"thread_id":20,"nr_in_thread":3,"current_text":[35,35,35,35,32,85,110,115,116,97,107,105,110,103,10,10,73,102,32,121,111,117,32,115,116,111,112,32,118,97,108,105,100,97,116,105,110,103,32,98,121,32,107,105,108,108,105,110,103,32,121,111,117,114,32,110,111,100,101,32,98,101,102,111,114,101,32,117,110,115,116,97,107,105,110,103,44,32,121,111,117,32,119,105,108,108,32,103,101,116,32,115,108,97,115,104,101,100,32,97,110,100,32,107,105,99,107,101,100,32,102,114,111,109,32,116,104,101,32,96,118,97,108,105,100,97,116,111,114,96,32,115,101,116,46,32,73,102,32,121,111,117,32,107,110,111,119,32,105,110,32,97,100,118,97,110,99,101,32,40,126,49,104,114,41,32,121,111,117,32,99,97,110,32,100,111,32,116,104,101,32,102,111,108,108,111,119,105,110,103,32,115,116,101,112,115,32,105,110,115,116,101,97,100,58,10,10,70,105,114,115,116,44,32,109,97,107,101,32,115,117,114,101,32,121,111,117,32,104,97,118,101,32,115,101,116,32,96,70,117,108,108,121,32,70,101,97,116,117,114,101,100,96,32,105,110,116,101,114,102,97,99,101,32,105,110,32,116,104,101,32,96,83,101,116,116,105,110,103,115,96,32,115,105,100,101,98,97,114,46,10,10,49,46,32,73,110,32,96,86,97,108,105,100,97,116,111,114,32,83,116,97,107,105,110,103,96,44,32,99,108,105,99,107,32,96,83,116,111,112,32,86,97,108,105,100,97,116,105,110,103,96,32,119,105,116,104,32,121,111,117,114,32,99,111,110,116,114,111,108,108,101,114,46,32,84,104,105,115,32,99,97,110,32,97,108,115,111,32,98,101,32,100,111,110,101,32,118,105,97,32,96,69,120,116,114,105,110,115,105,99,96,58,32,87,105,116,104,32,96,99,111,110,116,114,111,108,108,101,114,96,32,45,62,32,96,115,116,97,107,105,110,103,96,32,45,62,32,96,99,104,105,108,108,40,41,96,46,10,10,73,102,32,121,111,117,32,97,114,101,32,106,117,115,116,32,112,97,117,115,105,110,103,32,116,104,101,32,96,118,97,108,105,100,97,116,111,114,96,32,97,110,100,32,105,110,116,101,110,100,32,116,111,32,115,116,97,114,116,32,105,116,32,117,112,32,108,97,116,101,114,44,32,121,111,117,32,99,97,110,32,115,116,111,112,32,104,101,114,101,46,32,87,104,101,110,32,121,111,117,32,97,114,101,32,114,101,97,100,121,32,116,111,32,115,116,97,114,116,32,97,103,97,105,110,44,32,102,105,114,101,32,117,112,32,121,111,117,114,32,110,111,100,101,44,32,103,111,32,116,111,32,96,86,97,108,105,100,97,116,111,114,32,83,116,97,107,105,110,103,96,44,32,97,110,100,32,99,108,105,99,107,32,96,86,97,108,105,100,97,116,101,96,46,10,10,73,102,32,121,111,117,32,119,97,110,116,32,116,111,32,115,116,111,112,32,98,101,105,110,103,32,97,32,96,118,97,108,105,100,97,116,111,114,96,32,97,110,100,32,109,111,118,101,32,121,111,117,114,32,116,111,107,101,110,115,32,116,111,32,111,116,104,101,114,47,98,101,116,116,101,114,32,117,115,101,44,32,99,111,110,116,105,110,117,101,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180318},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[177,{"id":177,"thread_id":20,"nr_in_thread":4,"current_text":[10,50,46,32,78,101,120,116,32,121,111,117,32,109,117,115,116,32,117,110,98,111,110,100,46,32,73,110,32,96,69,120,116,114,105,110,115,105,99,115,96,44,32,117,115,105,110,103,32,116,104,101,32,96,99,111,110,116,114,111,108,108,101,114,96,44,32,115,101,108,101,99,116,32,96,115,116,97,107,105,110,103,96,32,45,62,32,96,117,110,98,111,110,100,40,118,97,108,117,101,41,96,32,97,110,100,32,99,104,111,111,115,101,32,104,111,119,32,109,117,99,104,32,121,111,117,32,119,97,110,116,32,116,111,32,117,110,98,111,110,100,44,32,96,60,117,110,98,111,110,100,105,110,103,62,96,46,32,83,117,98,109,105,116,32,84,114,97,110,115,97,99,116,105,111,110,46,10,10,65,116,32,116,104,105,115,32,112,111,105,110,116,44,32,121,111,117,32,99,97,110,32,106,117,115,116,32,119,97,105,116,32,50,104,114,115,32,116,111,32,98,101,32,115,117,114,101,44,32,97,110,100,32,112,114,111,99,101,101,100,32,116,111,32,115,116,101,112,32,96,54,46,96,32,10,10,79,114,58,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180348},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[178,{"id":178,"thread_id":20,"nr_in_thread":5,"current_text":[51,46,32,71,111,32,116,111,32,96,67,104,97,105,110,32,83,116,97,116,101,96,32,45,62,32,96,115,116,97,107,105,110,103,96,32,45,62,32,96,108,101,100,103,101,114,40,65,99,99,111,117,110,116,73,100,41,58,32,79,112,116,105,111,110,60,83,116,97,107,105,110,103,76,101,100,103,101,114,62,96,32,119,105,116,104,32,116,104,101,32,96,99,111,110,116,114,111,108,108,101,114,96,46,32,79,117,116,112,117,116,58,10,96,96,96,10,35,32,73,102,32,121,111,117,32,104,97,118,101,32,115,117,99,99,101,115,115,102,117,108,108,121,32,105,110,105,116,105,97,116,101,100,32,117,110,115,116,97,107,105,110,103,58,10,123,34,115,116,97,115,104,34,58,34,53,89,111,117,114,83,116,97,115,104,65,100,100,114,101,115,115,34,44,34,116,111,116,97,108,34,58,60,116,111,116,95,98,111,110,100,101,100,62,44,34,97,99,116,105,118,101,34,58,44,60,97,99,116,95,98,111,110,100,101,100,62,58,91,123,34,118,97,108,117,101,34,58,60,117,110,98,111,110,100,105,110,103,62,44,34,101,114,97,34,58,60,69,95,117,110,98,111,110,100,101,100,62,125,93,125,10,35,32,73,102,32,121,111,117,32,104,97,118,101,32,110,111,116,32,115,117,99,99,101,115,115,102,117,108,108,121,32,105,110,105,116,105,97,116,101,100,32,117,110,115,116,97,107,105,110,103,44,32,111,114,32,105,116,32,104,97,115,32,97,108,114,101,97,100,121,32,99,111,109,112,108,101,116,101,100,58,10,123,34,115,116,97,115,104,34,58,34,53,89,111,117,114,83,116,97,115,104,65,100,100,114,101,115,115,34,44,34,116,111,116,97,108,34,58,60,116,111,116,95,98,111,110,100,101,100,62,44,34,97,99,116,105,118,101,34,58,44,34,60,97,99,116,95,98,111,110,100,101,100,62,34,58,91,93,125,10,96,96,96,10,42,32,96,60,116,111,116,95,98,111,110,100,101,100,62,96,32,73,115,32,116,104,101,32,116,111,116,97,108,32,97,109,111,117,110,116,32,121,111,117,32,104,97,118,101,32,115,116,97,107,101,100,47,98,111,110,100,101,100,10,42,32,96,60,97,99,116,95,98,111,110,100,101,100,62,96,32,73,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,116,111,107,101,110,115,32,116,104,97,116,32,105,115,32,110,111,116,32,98,101,105,110,103,32,117,110,108,111,99,107,101,100,10,42,32,96,60,117,110,98,111,110,100,105,110,103,62,96,32,73,115,32,116,104,101,32,97,109,111,117,110,116,32,111,102,32,116,111,107,101,110,115,32,116,104,97,116,32,105,115,32,105,110,32,116,104,101,32,112,114,111,99,101,115,115,32,111,102,32,98,101,105,110,103,32,102,114,101,101,100,10,32,32,42,32,96,60,117,110,98,111,110,100,105,110,103,62,96,32,43,32,96,60,97,99,116,95,98,111,110,100,101,100,62,96,32,61,32,96,60,116,111,116,95,98,111,110,100,101,100,62,96,10,42,32,96,60,69,95,117,110,98,111,110,100,101,100,62,96,32,73,115,32,116,104,101,32,96,101,114,97,96,32,119,104,101,110,32,121,111,117,114,32,116,111,107,101,110,115,32,119,105,108,108,32,98,101,32,34,102,114,101,101,34,32,116,111,32,116,114,97,110,115,102,101,114,47,98,111,110,100,47,118,111,116,101,10,10,84,104,101,32,96,101,114,97,96,32,115,104,111,117,108,100,32,111,110,108,121,32,99,104,97,110,103,101,32,101,118,101,114,121,32,54,48,48,32,98,108,111,99,107,115,44,32,98,117,116,32,99,101,114,116,97,105,110,32,101,118,101,110,116,115,32,109,97,121,32,116,114,105,103,103,101,114,32,97,32,110,101,119,32,101,114,97,46,32,84,111,32,99,97,108,99,117,108,97,116,101,32,119,104,101,110,32,121,111,117,114,32,102,117,110,100,115,32,97,114,101,32,34,102,114,101,101,34],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180390},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[179,{"id":179,"thread_id":20,"nr_in_thread":6,"current_text":[52,46,32,73,110,32,96,67,104,97,105,110,32,83,116,97,116,101,96,32,45,62,32,96,115,116,97,107,105,110,103,96,32,45,62,32,96,99,117,114,114,101,110,116,69,114,97,40,41,96,46,32,76,101,116,32,111,117,116,112,117,116,32,98,101,32,96,60,69,95,99,117,114,114,101,110,116,62,96,10,53,46,32,73,110,32,96,69,120,112,108,111,114,101,100,96,32,99,111,108,108,101,99,116,32,96,60,98,108,111,99,107,115,95,105,110,95,101,114,97,62,47,54,48,48,96,32,117,110,100,101,114,32,101,114,97,46,10,96,96,96,10,54,48,48,40,60,69,95,117,110,98,111,110,100,101,100,62,32,45,32,60,69,95,99,117,114,114,101,110,116,62,32,45,32,49,41,32,45,32,60,98,108,111,99,107,115,95,105,110,95,101,114,97,62,32,61,32,60,98,108,111,99,107,115,95,108,101,102,116,62,10,40,60,98,108,111,99,107,115,95,108,101,102,116,62,32,42,32,54,41,47,54,48,32,61,32,60,109,105,110,117,116,101,115,95,108,101,102,116,62,10,96,96,96,10,65,102,116,101,114,32,96,60,109,105,110,117,116,101,115,95,108,101,102,116,62,96,32,104,97,115,32,112,97,115,115,101,100,44,32,105,101,46,32,96,60,69,95,99,117,114,114,101,110,116,62,96,32,61,32,96,60,69,95,117,110,98,111,110,100,101,100,62,96,44,32,121,111,117,114,32,116,111,107,101,110,115,32,115,104,111,117,108,100,32,98,101,32,102,114,101,101,46,10,82,101,112,101,97,116,32,115,116,101,112,32,96,51,46,96,32,105,102,32,121,111,117,32,119,97,110,116,32,116,111,32,99,111,110,102,105,114,109,46,10,96,96,96,10,35,32,73,102,32,121,111,117,32,104,97,118,101,32,99,111,109,112,108,101,116,101,100,32,117,110,115,116,97,107,105,110,103,58,10,123,34,115,116,97,115,104,34,58,34,53,89,111,117,114,83,116,97,115,104,65,100,100,114,101,115,115,34,44,34,116,111,116,97,108,34,58,60,116,111,116,95,98,111,110,100,101,100,62,44,34,97,99,116,105,118,101,34,58,44,34,60,97,99,116,95,98,111,110,100,101,100,62,34,58,91,93,125,10,96,96,96,10,10,10,54,46,32,73,110,32,96,69,120,116,114,105,110,115,105,99,115,96,44,32,117,115,105,110,103,32,116,104,101,32,96,99,111,110,116,114,111,108,108,101,114,96,44,32,115,101,108,101,99,116,32,96,115,116,97,107,105,110,103,96,32,45,62,32,96,119,105,116,104,100,114,97,119,85,110,98,111,110,100,101,100,40,41,96,10,10,89,111,117,114,32,116,111,107,101,110,115,32,115,104,111,117,108,100,32,110,111,119,32,98,101,32,34,102,114,101,101,34,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180432},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[180,{"id":180,"thread_id":20,"nr_in_thread":7,"current_text":[35,35,35,35,32,82,101,115,116,97,114,116,32,118,97,108,105,100,97,116,105,110,103,32,97,102,116,101,114,32,103,101,116,116,105,110,103,32,98,111,111,116,101,100,10,73,102,32,121,111,117,114,32,110,111,100,101,32,115,104,117,116,32,100,111,119,110,32,98,101,102,111,114,101,32,121,111,117,32,104,97,100,32,115,116,111,112,112,101,100,32,118,97,108,105,100,97,116,105,110,103,32,97,110,100,47,111,114,32,116,104,101,32,103,114,97,99,101,32,112,101,114,105,111,100,32,102,111,114,32,96,115,116,97,107,105,110,103,46,99,104,105,108,108,96,32,119,97,115,32,99,111,109,112,108,101,116,101,100,44,32,97,108,108,32,121,111,117,32,110,101,101,100,32,116,111,32,105,115,32,115,116,97,114,116,32,96,118,97,108,105,100,97,116,105,110,103,96,32,97,103,97,105,110,32,102,114,111,109,32,96,86,97,108,105,100,97,116,111,114,32,83,116,97,107,105,110,103,96,46,32,74,117,115,116,32,109,97,107,101,32,115,117,114,101,32,116,104,97,116,32,121,111,117,114,32,110,111,100,101,32,105,115,32,98,97,99,107,32,117,112,44,32,97,110,100,32,116,104,101,32,96,97,117,116,104,111,114,105,116,121,96,32,107,101,121,32,115,104,111,119,105,110,103,32,97,116,32,110,111,100,101,32,115,116,97,114,116,117,112,32,105,115,32,116,104,101,32,115,97,109,101,32,97,115,32,121,111,117,114,32,96,115,101,115,115,105,111,110,96,32,107,101,121,46,10,42,42,78,111,116,101,42,42,10,73,116,32,100,111,101,115,110,39,116,32,109,97,116,116,101,114,32,105,102,32,121,111,117,114,32,96,115,116,97,115,104,96,32,104,97,115,32,97,32,96,98,97,108,97,110,99,101,96,32,60,32,96,98,111,110,100,101,100,96,46,10],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1569180450},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[181,{"id":181,"thread_id":28,"nr_in_thread":1,"current_text":[74,111,121,115,116,114,101,97,109,32,102,111,114,117,109,32,105,115,32,97,119,101,115,111,109,101,44,32,108,101,116,39,115,32,112,111,115,116,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1576639110},"author_id":"5F3j33mjoyVphsZvBCpgHwveHSfYF52PaiSLAJffKFW2gRJv"}],[182,{"id":182,"thread_id":29,"nr_in_thread":1,"current_text":[68,111,32,108,101,116,32,117,115,32,107,110,111,119,32,104,111,119,32,116,111,32,98,101,32,97,32,100,105,115,116,114,105,98,117,116,111,114,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1576761648},"author_id":"5CZ1SFjDJZzCmRjqMwFdmzGVicNvbKhV1GZ8pDEmHdAiuxuT"}],[183,{"id":183,"thread_id":30,"nr_in_thread":1,"current_text":[89,101,115,32,73,32,97,109,32,97,99,116,117,97,108,108,121,32,97,110,32,97,114,116,105,115,116,32,97,110,100,32,116,104,105,115,32,105,115,32,116,104,101,32,98,101,115,116,32,73,32,99,97,110,32,100,111,32,119,105,116,104,32,99,114,101,97,116,105,118,105,116,121,46],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1579627500},"author_id":"5G9jLNPdnfPR6zuLroCgLu25TmcErbCinutRop1KPhnMUmkC"}],[184,{"id":184,"thread_id":30,"nr_in_thread":2,"current_text":[116,101,115,116,32,114,101,112,108,121,32,40,115,110,101,97,107,121,32,101,100,105,116,41],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1579628082},"author_id":"5G9jLNPdnfPR6zuLroCgLu25TmcErbCinutRop1KPhnMUmkC"}],[185,{"id":185,"thread_id":30,"nr_in_thread":3,"current_text":[102,111,111,32,98,97,114,32,98,97,122],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1579632180},"author_id":"5G9jLNPdnfPR6zuLroCgLu25TmcErbCinutRop1KPhnMUmkC"}],[186,{"id":186,"thread_id":31,"nr_in_thread":1,"current_text":[98,101,116,97,32,116,104,114,101,97,100],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1579636566},"author_id":"5G9jLNPdnfPR6zuLroCgLu25TmcErbCinutRop1KPhnMUmkC"}],[187,{"id":187,"thread_id":31,"nr_in_thread":2,"current_text":[116,101,115,116,32,114,101,112,108,121],"moderation":null,"text_change_history":[],"created_at":{"block":1,"time":1579636674},"author_id":"5G9jLNPdnfPR6zuLroCgLu25TmcErbCinutRop1KPhnMUmkC"}]],"threads":[[1,{"id":1,"title":[67,111,100,101,32,111,102,32,67,111,110,100,117,99,116],"category_id":1,"nr_in_category":1,"moderation":null,"num_unmoderated_posts":1,"num_moderated_posts":0,"created_at":{"block":1,"time":1561406472},"author_id":"5DaDUnNVzZPwK9KLwyPFgeSbc9Xeh6G39A2oq36tiV9aEzcx"}],[2,{"id":2,"title":[84,104,105,115,32,105,115,32,116,104,101,32,102,105,114,115,116,32,112,111,115,116,32,101,118,101,114,32,102,111,114,32,116,104,101,32,74,111,121,115,116,114,101,97,109,32,83,104,105,116,32,80,111,115,116,105,110,103,32,67,111,109,109,117,110,105,116,121],"category_id":3,"nr_in_category":1,"moderation":null,"num_unmoderated_posts":6,"num_moderated_posts":0,"created_at":{"block":1,"time":1561407198},"author_id":"5CEw8JxuM1kh34VoocG9bqqjqs98pdA7fG5uaTtPdjzShqFb"}],[3,{"id":3,"title":[72,111,119,32,116,111,32,83,116,97,114,116,32,65,32,83,116,111,114,97,103,101,32,78,111,100,101,63],"category_id":1,"nr_in_category":2,"moderation":null,"num_unmoderated_posts":1,"num_moderated_posts":0,"created_at":{"block":1,"time":1561407264},"author_id":"5CEw8JxuM1kh34VoocG9bqqjqs98pdA7fG5uaTtPdjzShqFb"}],[4,{"id":4,"title":[67,111,110,116,101,110,116,32,67,117,114,97,116,111,114],"category_id":2,"nr_in_category":1,"moderation":null,"num_unmoderated_posts":2,"num_moderated_posts":0,"created_at":{"block":1,"time":1561467588},"author_id":"5G3jMHcbqgzyqCiiBMZ26LFZoqTPw77XzMqwj8cyrb58ybhE"}],[5,{"id":5,"title":[67,114,121,112,116,111,99,117,114,114,101,110,99,105,101,115],"category_id":3,"nr_in_category":2,"moderation":null,"num_unmoderated_posts":2,"num_moderated_posts":0,"created_at":{"block":1,"time":1561508412},"author_id":"5H8kTuZp2T2geceCuaEQ29Jg8fFjCJkwGQgZjRhhGLxFVMSC"}],[6,{"id":6,"title":[73,110,116,114,111,100,117,99,116,105,111,110,58,32,66,101,100,101,104,111,32,77,101,110,100,101,114],"category_id":1,"nr_in_category":3,"moderation":null,"num_unmoderated_posts":2,"num_moderated_posts":0,"created_at":{"block":1,"time":1561550916},"author_id":"5GBonukAQsiG7pr7UFNUYW3BYudduTKWokKCJPy1bMeu7ZhB"}],[7,{"id":7,"title":[83,116,97,107,101,100,32,80,111,100,99,97,115,116,32,45,32,69,112,54],"category_id":3,"nr_in_category":3,"moderation":null,"num_unmoderated_posts":3,"num_moderated_posts":0,"created_at":{"block":1,"time":1561711008},"author_id":"5EtFzT8ZJN7VPKfcxjsQhtJUhHzuPsUFMaahPLGoaw5odaqj"}],[8,{"id":8,"title":[73,109,112,114,111,118,105,110,103,32,70,111,114,117,109,32,70,117,110,99,116,105,111,110,97,108,105,116,121,63],"category_id":1,"nr_in_category":4,"moderation":null,"num_unmoderated_posts":7,"num_moderated_posts":0,"created_at":{"block":1,"time":1562161002},"author_id":"5GBonukAQsiG7pr7UFNUYW3BYudduTKWokKCJPy1bMeu7ZhB"}],[9,{"id":9,"title":[68,105,115,116,114,105,98,117,116,111,114,32,40,66,97,110,100,119,105,100,116,104,32,80,114,111,118,105,100,101,114,41],"category_id":2,"nr_in_category":2,"moderation":{"moderated_at":{"block":1,"time":1563035028},"moderator_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd","rationale":[77,101,97,110,116,32,116,111,32,98,101,32,97,32,115,117,98,99,97,116,101,103,111,114,121,46,46,46,46]},"num_unmoderated_posts":1,"num_moderated_posts":0,"created_at":{"block":1,"time":1563034344},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[10,{"id":10,"title":[74,111,121,115,116,114,101,97,109,32,85,110,111,102,102,105,99,105,97,108,32,84,117,116,111,114,105,97,108,32,86,105,100,101,111],"category_id":1,"nr_in_category":5,"moderation":null,"num_unmoderated_posts":3,"num_moderated_posts":0,"created_at":{"block":1,"time":1563038424},"author_id":"5H8kTuZp2T2geceCuaEQ29Jg8fFjCJkwGQgZjRhhGLxFVMSC"}],[11,{"id":11,"title":[65,98,111,117,116,32,74,111,121,115,116,114,101,97,109,32,66,111,117,110,116,105,101,115],"category_id":10,"nr_in_category":1,"moderation":null,"num_unmoderated_posts":15,"num_moderated_posts":0,"created_at":{"block":1,"time":1568847786},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[12,{"id":12,"title":[66,111,117,110,116,121,32,35,48,32,45,32,70,105,120,32,98,114,111,107,101,110,32,108,105,110,107,115,44,32,102,111,114,109,97,116,116,105,110,103,44,32,101,116,99,32,105,110,32,82,69,65,68,77,69,115,32,45,32,36,50,47,102,105,120],"category_id":10,"nr_in_category":2,"moderation":null,"num_unmoderated_posts":5,"num_moderated_posts":0,"created_at":{"block":1,"time":1568847810},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[13,{"id":13,"title":[66,111,117,110,116,121,32,35,49,32,45,32,73,109,112,114,111,118,101,32,110,101,116,119,111,114,107,105,110,103,32,43,32,112,114,111,109,111,116,105,111,110,97,108,32,99,97,109,112,97,105,103,110,32,45,32,36,53,48,48,42],"category_id":10,"nr_in_category":3,"moderation":null,"num_unmoderated_posts":9,"num_moderated_posts":0,"created_at":{"block":1,"time":1568847846},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[14,{"id":14,"title":[66,111,117,110,116,121,32,35,50,32,45,32,76,105,115,116,32,111,102,32,109,101,100,105,97,32,102,105,108,101,32,116,121,112,101,115,47,101,120,116,101,110,115,105,111,110,115,32,112,108,97,121,97,98,108,101,32,45,32,36,53,48],"category_id":10,"nr_in_category":4,"moderation":null,"num_unmoderated_posts":2,"num_moderated_posts":0,"created_at":{"block":1,"time":1568847870},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[15,{"id":15,"title":[66,111,117,110,116,121,32,35,51,32,45,32,67,111,109,112,105,108,101,32,108,105,115,116,32,111,102,32,102,114,101,101,32,109,101,100,105,97,32,97,110,100,32,109,101,116,97,100,97,116,97,32,115,111,117,114,99,101,115,32,45,32,36,50,48,48,42],"category_id":10,"nr_in_category":5,"moderation":null,"num_unmoderated_posts":6,"num_moderated_posts":0,"created_at":{"block":1,"time":1568847912},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[16,{"id":16,"title":[83,101,116,117,112,32,89,111,117,114,32,86,97,108,105,100,97,116,111,114,32,40,87,105,110,100,111,119,115,41],"category_id":4,"nr_in_category":1,"moderation":null,"num_unmoderated_posts":15,"num_moderated_posts":0,"created_at":{"block":1,"time":1568899470},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[17,{"id":17,"title":[83,101,116,117,112,32,89,111,117,114,32,86,97,108,105,100,97,116,111,114,32,40,76,105,110,117,120,41],"category_id":4,"nr_in_category":2,"moderation":null,"num_unmoderated_posts":15,"num_moderated_posts":0,"created_at":{"block":1,"time":1568899500},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[18,{"id":18,"title":[83,101,116,117,112,32,89,111,117,114,32,86,97,108,105,100,97,116,111,114,32,40,77,97,99,41],"category_id":4,"nr_in_category":3,"moderation":null,"num_unmoderated_posts":14,"num_moderated_posts":0,"created_at":{"block":1,"time":1568899530},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[19,{"id":19,"title":[65,100,118,97,110,99,101,100,32,40,82,117,110,32,65,115,32,83,101,114,118,105,99,101,44,32,83,101,116,116,105,110,103,115,32,97,110,100,32,78,111,109,105,110,97,116,105,110,103,41],"category_id":4,"nr_in_category":4,"moderation":null,"num_unmoderated_posts":14,"num_moderated_posts":0,"created_at":{"block":1,"time":1568899668},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[20,{"id":20,"title":[84,114,111,117,98,108,101,115,104,111,111,116,105,110,103],"category_id":4,"nr_in_category":5,"moderation":null,"num_unmoderated_posts":7,"num_moderated_posts":0,"created_at":{"block":1,"time":1568899704},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[21,{"id":21,"title":[83,101,116,117,112,32,89,111,117,114,32,83,116,111,114,97,103,101,32,80,114,111,118,105,100,101,114],"category_id":5,"nr_in_category":1,"moderation":null,"num_unmoderated_posts":25,"num_moderated_posts":0,"created_at":{"block":1,"time":1568899968},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[22,{"id":22,"title":[84,114,111,117,98,108,101,115,104,111,111,116,105,110,103],"category_id":5,"nr_in_category":2,"moderation":null,"num_unmoderated_posts":9,"num_moderated_posts":0,"created_at":{"block":1,"time":1568899992},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[23,{"id":23,"title":[82,101,103,105,115,116,101,114,105,110,103,32,70,111,114,32,77,101,109,98,101,114,115,104,105,112],"category_id":6,"nr_in_category":1,"moderation":null,"num_unmoderated_posts":3,"num_moderated_posts":0,"created_at":{"block":1,"time":1568900298},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[24,{"id":24,"title":[71,101,116,32,83,116,97,114,116,101,100,32,65,115,32,65,32,67,111,117,110,99,105,108,32,77,101,109,98,101,114],"category_id":6,"nr_in_category":2,"moderation":null,"num_unmoderated_posts":8,"num_moderated_posts":0,"created_at":{"block":1,"time":1568900322},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[25,{"id":25,"title":[84,114,111,117,98,108,101,115,104,111,111,116,105,110,103],"category_id":6,"nr_in_category":3,"moderation":null,"num_unmoderated_posts":1,"num_moderated_posts":0,"created_at":{"block":1,"time":1568900340},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[26,{"id":26,"title":[66,117,103,32,82,101,112,111,114,116,101,114,115],"category_id":11,"nr_in_category":1,"moderation":null,"num_unmoderated_posts":3,"num_moderated_posts":0,"created_at":{"block":1,"time":1568900400},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[27,{"id":27,"title":[66,117,105,108,100,101,114,115,32,40,67,111,110,116,114,105,98,117,116,111,114,115,41],"category_id":11,"nr_in_category":2,"moderation":null,"num_unmoderated_posts":1,"num_moderated_posts":0,"created_at":{"block":1,"time":1568900484},"author_id":"5CgLHZp1KMVCMhGGgJC8VRMagCSon3n5JAKRbtAMeZNdbdNd"}],[28,{"id":28,"title":[74,111,121,115,116,114,101,97,109,32,102,111,114,117,109,32,105,115,32,97,119,101,115,111,109,101],"category_id":1,"nr_in_category":6,"moderation":null,"num_unmoderated_posts":1,"num_moderated_posts":0,"created_at":{"block":1,"time":1576639110},"author_id":"5F3j33mjoyVphsZvBCpgHwveHSfYF52PaiSLAJffKFW2gRJv"}],[29,{"id":29,"title":[72,111,119,32,99,97,110,32,119,101,32,98,101,32,100,105,115,116,114,105,98,117,116,111,114,63],"category_id":9,"nr_in_category":1,"moderation":null,"num_unmoderated_posts":1,"num_moderated_posts":0,"created_at":{"block":1,"time":1576761648},"author_id":"5CZ1SFjDJZzCmRjqMwFdmzGVicNvbKhV1GZ8pDEmHdAiuxuT"}],[30,{"id":30,"title":[84,101,115,116,32,116,104,114,101,97,100],"category_id":1,"nr_in_category":7,"moderation":null,"num_unmoderated_posts":3,"num_moderated_posts":0,"created_at":{"block":1,"time":1579627500},"author_id":"5G9jLNPdnfPR6zuLroCgLu25TmcErbCinutRop1KPhnMUmkC"}],[31,{"id":31,"title":[84,101,115,116,32,116,104,114,101,97,100,32,98,101,116,97],"category_id":1,"nr_in_category":8,"moderation":null,"num_unmoderated_posts":2,"num_moderated_posts":0,"created_at":{"block":1,"time":1579636566},"author_id":"5G9jLNPdnfPR6zuLroCgLu25TmcErbCinutRop1KPhnMUmkC"}]]} \ No newline at end of file diff --git a/node/res/forum_data_empty.json b/node/res/forum_data_empty.json deleted file mode 100644 index 22599fb4b7..0000000000 --- a/node/res/forum_data_empty.json +++ /dev/null @@ -1 +0,0 @@ -{ "categories":[], "posts":[], "threads":[] } \ No newline at end of file diff --git a/node/src/chain_spec.rs b/node/src/chain_spec.rs deleted file mode 100644 index 250fa271d0..0000000000 --- a/node/src/chain_spec.rs +++ /dev/null @@ -1,337 +0,0 @@ -// Copyright 2019 Joystream Contributors -// This file is part of Joystream node. - -// Joystream node 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. - -// Joystream node 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 Joystream node. If not, see . - -// Clippy linter warning. -#![allow(clippy::identity_op)] // disable it because we use such syntax for a code readability - // Example: voting_period: 1 * DAY - -use node_runtime::{ - versioned_store::InputValidationLengthConstraint as VsInputValidation, ActorsConfig, - AuthorityDiscoveryConfig, BabeConfig, Balance, BalancesConfig, ContentWorkingGroupConfig, - CouncilConfig, CouncilElectionConfig, DataObjectStorageRegistryConfig, - DataObjectTypeRegistryConfig, ElectionParameters, GrandpaConfig, ImOnlineConfig, IndicesConfig, - MembersConfig, MigrationConfig, Perbill, ProposalsCodexConfig, SessionConfig, SessionKeys, - Signature, StakerStatus, StakingConfig, SudoConfig, SystemConfig, VersionedStoreConfig, DAYS, - WASM_BINARY, -}; -pub use node_runtime::{AccountId, GenesisConfig}; -use primitives::{sr25519, Pair, Public}; -use runtime_primitives::traits::{IdentifyAccount, Verify}; - -use babe_primitives::AuthorityId as BabeId; -use grandpa_primitives::AuthorityId as GrandpaId; -use im_online::sr25519::AuthorityId as ImOnlineId; -use serde_json as json; - -type AccountPublic = ::Signer; - -/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type. -pub type ChainSpec = substrate_service::ChainSpec; - -/// The chain specification option. This is expected to come in from the CLI and -/// is little more than one of a number of alternatives which can easily be converted -/// from a string (`--chain=...`) into a `ChainSpec`. -#[derive(Clone, Debug)] -pub enum Alternative { - /// Whatever the current runtime is, with just Alice as an auth. - Development, - /// Whatever the current runtime is, with simple Alice/Bob auths. - LocalTestnet, -} - -/// Helper function to generate a crypto pair from seed -pub fn get_from_seed(seed: &str) -> ::Public { - TPublic::Pair::from_string(&format!("//{}", seed), None) - .expect("static values are valid; qed") - .public() -} - -/// Helper function to generate an account ID from seed -pub fn get_account_id_from_seed(seed: &str) -> AccountId -where - AccountPublic: From<::Public>, -{ - AccountPublic::from(get_from_seed::(seed)).into_account() -} - -/// Helper function to generate stash, controller and session key from seed -pub fn get_authority_keys_from_seed( - seed: &str, -) -> (AccountId, AccountId, GrandpaId, BabeId, ImOnlineId) { - ( - get_account_id_from_seed::(&format!("{}//stash", seed)), - get_account_id_from_seed::(seed), - get_from_seed::(seed), - get_from_seed::(seed), - get_from_seed::(seed), - ) -} - -fn session_keys(grandpa: GrandpaId, babe: BabeId, im_online: ImOnlineId) -> SessionKeys { - SessionKeys { - grandpa, - babe, - im_online, - } -} - -impl Alternative { - /// Get an actual chain config from one of the alternatives. - pub(crate) fn load(self) -> Result { - Ok(match self { - Alternative::Development => ChainSpec::from_genesis( - "Development", - "dev", - || { - testnet_genesis( - vec![get_authority_keys_from_seed("Alice")], - get_account_id_from_seed::("Alice"), - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - ], - ) - }, - vec![], - None, - None, - Some(chain_spec_properties()), - None, - ), - Alternative::LocalTestnet => ChainSpec::from_genesis( - "Local Testnet", - "local_testnet", - || { - testnet_genesis( - vec![ - get_authority_keys_from_seed("Alice"), - get_authority_keys_from_seed("Bob"), - ], - get_account_id_from_seed::("Alice"), - vec![ - get_account_id_from_seed::("Alice"), - get_account_id_from_seed::("Bob"), - get_account_id_from_seed::("Charlie"), - get_account_id_from_seed::("Dave"), - get_account_id_from_seed::("Eve"), - get_account_id_from_seed::("Ferdie"), - get_account_id_from_seed::("Alice//stash"), - get_account_id_from_seed::("Bob//stash"), - get_account_id_from_seed::("Charlie//stash"), - get_account_id_from_seed::("Dave//stash"), - get_account_id_from_seed::("Eve//stash"), - get_account_id_from_seed::("Ferdie//stash"), - ], - ) - }, - vec![], - None, - None, - Some(chain_spec_properties()), - None, - ), - }) - } - - pub(crate) fn from(s: &str) -> Option { - match s { - "dev" => Some(Alternative::Development), - "local" => Some(Alternative::LocalTestnet), - _ => None, - } - } -} - -fn new_vs_validation(min: u16, max_min_diff: u16) -> VsInputValidation { - VsInputValidation { min, max_min_diff } -} - -pub fn chain_spec_properties() -> json::map::Map { - let mut properties: json::map::Map = json::map::Map::new(); - properties.insert( - String::from("tokenDecimals"), - json::Value::Number(json::Number::from(0)), - ); - properties.insert( - String::from("tokenSymbol"), - json::Value::String(String::from("JOY")), - ); - properties -} - -pub fn testnet_genesis( - initial_authorities: Vec<(AccountId, AccountId, GrandpaId, BabeId, ImOnlineId)>, - root_key: AccountId, - endowed_accounts: Vec, -) -> GenesisConfig { - const CENTS: Balance = 1; - const DOLLARS: Balance = 100 * CENTS; - const STASH: Balance = 20 * DOLLARS; - const ENDOWMENT: Balance = 100_000 * DOLLARS; - - // default codex proposals config parameters - let cpcp = node_runtime::ProposalsConfigParameters::default(); - - GenesisConfig { - system: Some(SystemConfig { - code: WASM_BINARY.to_vec(), - changes_trie_config: Default::default(), - }), - balances: Some(BalancesConfig { - balances: endowed_accounts - .iter() - .cloned() - .map(|k| (k, ENDOWMENT)) - .chain(initial_authorities.iter().map(|x| (x.0.clone(), STASH))) - .collect(), - vesting: vec![], - }), - indices: Some(IndicesConfig { ids: vec![] }), - session: Some(SessionConfig { - keys: initial_authorities - .iter() - .map(|x| { - ( - x.0.clone(), - session_keys(x.2.clone(), x.3.clone(), x.4.clone()), - ) - }) - .collect::>(), - }), - staking: Some(StakingConfig { - current_era: 0, - validator_count: 20, - minimum_validator_count: 1, - stakers: initial_authorities - .iter() - .map(|x| (x.0.clone(), x.1.clone(), STASH, StakerStatus::Validator)) - .collect(), - invulnerables: initial_authorities.iter().map(|x| x.0.clone()).collect(), - slash_reward_fraction: Perbill::from_percent(10), - ..Default::default() - }), - sudo: Some(SudoConfig { key: root_key }), - babe: Some(BabeConfig { - authorities: vec![], - }), - im_online: Some(ImOnlineConfig { keys: vec![] }), - authority_discovery: Some(AuthorityDiscoveryConfig { keys: vec![] }), - grandpa: Some(GrandpaConfig { - authorities: vec![], - }), - council: Some(CouncilConfig { - active_council: vec![], - term_ends_at: 1, - }), - election: Some(CouncilElectionConfig { - auto_start: true, - election_parameters: ElectionParameters { - announcing_period: 3 * DAYS, - voting_period: 1 * DAYS, - revealing_period: 1 * DAYS, - council_size: 12, - candidacy_limit: 25, - min_council_stake: 10 * DOLLARS, - new_term_duration: 14 * DAYS, - min_voting_stake: 1 * DOLLARS, - }, - }), - members: Some(MembersConfig { - default_paid_membership_fee: 100u128, - members: crate::members_config::initial_members(), - }), - forum: Some(crate::forum_config::from_serialized::create( - endowed_accounts[0].clone(), - )), - data_object_type_registry: Some(DataObjectTypeRegistryConfig { - first_data_object_type_id: 1, - }), - data_object_storage_registry: Some(DataObjectStorageRegistryConfig { - first_relationship_id: 1, - }), - actors: Some(ActorsConfig { - enable_storage_role: true, - request_life_time: 300, - }), - versioned_store: Some(VersionedStoreConfig { - class_by_id: vec![], - entity_by_id: vec![], - next_class_id: 1, - next_entity_id: 1, - property_name_constraint: new_vs_validation(1, 99), - property_description_constraint: new_vs_validation(1, 999), - class_name_constraint: new_vs_validation(1, 99), - class_description_constraint: new_vs_validation(1, 999), - }), - content_wg: Some(ContentWorkingGroupConfig { - mint_capacity: 100_000, - curator_opening_by_id: vec![], - next_curator_opening_id: 0, - curator_application_by_id: vec![], - next_curator_application_id: 0, - channel_by_id: vec![], - next_channel_id: 1, - channel_id_by_handle: vec![], - curator_by_id: vec![], - next_curator_id: 0, - principal_by_id: vec![], - next_principal_id: 0, - channel_creation_enabled: true, // there is no extrinsic to change it so enabling at genesis - unstaker_by_stake_id: vec![], - channel_handle_constraint: crate::forum_config::new_validation(5, 20), - channel_description_constraint: crate::forum_config::new_validation(1, 1024), - opening_human_readable_text: crate::forum_config::new_validation(1, 2048), - curator_application_human_readable_text: crate::forum_config::new_validation(1, 2048), - curator_exit_rationale_text: crate::forum_config::new_validation(1, 2048), - channel_avatar_constraint: crate::forum_config::new_validation(5, 1024), - channel_banner_constraint: crate::forum_config::new_validation(5, 1024), - channel_title_constraint: crate::forum_config::new_validation(5, 1024), - }), - migration: Some(MigrationConfig {}), - proposals_codex: Some(ProposalsCodexConfig { - set_validator_count_proposal_voting_period: cpcp - .set_validator_count_proposal_voting_period, - set_validator_count_proposal_grace_period: cpcp - .set_validator_count_proposal_grace_period, - runtime_upgrade_proposal_voting_period: cpcp.runtime_upgrade_proposal_voting_period, - runtime_upgrade_proposal_grace_period: cpcp.runtime_upgrade_proposal_grace_period, - text_proposal_voting_period: cpcp.text_proposal_voting_period, - text_proposal_grace_period: cpcp.text_proposal_grace_period, - set_election_parameters_proposal_voting_period: cpcp - .set_election_parameters_proposal_voting_period, - set_election_parameters_proposal_grace_period: cpcp - .set_election_parameters_proposal_grace_period, - set_content_working_group_mint_capacity_proposal_voting_period: cpcp - .set_content_working_group_mint_capacity_proposal_voting_period, - set_content_working_group_mint_capacity_proposal_grace_period: cpcp - .set_content_working_group_mint_capacity_proposal_grace_period, - set_lead_proposal_voting_period: cpcp.set_lead_proposal_voting_period, - set_lead_proposal_grace_period: cpcp.set_lead_proposal_voting_period, - spending_proposal_voting_period: cpcp.spending_proposal_voting_period, - spending_proposal_grace_period: cpcp.spending_proposal_grace_period, - evict_storage_provider_proposal_voting_period: cpcp - .evict_storage_provider_proposal_voting_period, - evict_storage_provider_proposal_grace_period: cpcp - .evict_storage_provider_proposal_grace_period, - set_storage_role_parameters_proposal_voting_period: cpcp - .set_storage_role_parameters_proposal_voting_period, - set_storage_role_parameters_proposal_grace_period: cpcp - .set_storage_role_parameters_proposal_grace_period, - }), - } -} diff --git a/node/src/chain_spec/content_config.rs b/node/src/chain_spec/content_config.rs new file mode 100644 index 0000000000..8b73eaac01 --- /dev/null +++ b/node/src/chain_spec/content_config.rs @@ -0,0 +1,391 @@ +use codec::Decode; +use node_runtime::common::constraints::InputValidationLengthConstraint; +use node_runtime::{ + content_wg::{Channel, ChannelId, Principal, PrincipalId}, + data_directory::DataObject, + primitives::{AccountId, BlockNumber, Credential}, + versioned_store::{Class, ClassId, Entity, EntityId}, + versioned_store_permissions::ClassPermissions, + ContentId, ContentWorkingGroupConfig, DataDirectoryConfig, Runtime, VersionedStoreConfig, + VersionedStorePermissionsConfig, +}; +use serde::Deserialize; +use std::{fs, path::Path}; + +// Because of the way that the @joystream/types were implemented the getters for +// the string types return a `string` not the `Text` type so when we are serializing +// them to json we get a string rather than an array of bytes, so deserializing them +// is failing. So we are relying on parity codec encoding instead.. +#[derive(Decode)] +struct ClassAndPermissions { + class: Class, + permissions: ClassPermissions, +} + +#[derive(Decode)] +struct EntityAndMaintainer { + entity: Entity, + maintainer: Option, +} + +#[derive(Decode)] +struct DataObjectAndContentId { + content_id: ContentId, + data_object: DataObject, +} + +#[derive(Decode)] +struct ContentData { + /// classes and their associted permissions + classes: Vec, + /// entities and their associated maintainer + entities: Vec, + /// DataObject(s) and ContentId + data_objects: Vec, + /// Media Channels + channels: Vec, +} + +#[derive(Deserialize)] +struct EncodedClassAndPermissions { + /// hex encoded Class + class: String, + /// hex encoded ClassPermissions, + permissions: String, +} + +impl EncodedClassAndPermissions { + fn decode(&self) -> ClassAndPermissions { + // hex string must not include '0x' prefix! + let encoded_class = + hex::decode(&self.class[2..].as_bytes()).expect("failed to parse class hex string"); + let encoded_permissions = hex::decode(&self.permissions[2..].as_bytes()) + .expect("failed to parse class permissions hex string"); + ClassAndPermissions { + class: Decode::decode(&mut encoded_class.as_slice()).unwrap(), + permissions: Decode::decode(&mut encoded_permissions.as_slice()).unwrap(), + } + } +} + +#[derive(Deserialize)] +struct EncodedEntityAndMaintainer { + /// hex encoded Entity + entity: String, + /// hex encoded Option + maintainer: Option, +} + +impl EncodedEntityAndMaintainer { + fn decode(&self) -> EntityAndMaintainer { + // hex string must not include '0x' prefix! + let encoded_entity = + hex::decode(&self.entity[2..].as_bytes()).expect("failed to parse entity hex string"); + let encoded_maintainer = self.maintainer.as_ref().map(|maintainer| { + hex::decode(&maintainer[2..].as_bytes()).expect("failed to parse maintainer hex string") + }); + EntityAndMaintainer { + entity: Decode::decode(&mut encoded_entity.as_slice()).unwrap(), + maintainer: encoded_maintainer + .map(|maintainer| Decode::decode(&mut maintainer.as_slice()).unwrap()), + } + } +} + +#[derive(Deserialize)] +struct EncodedDataObjectAndContentId { + /// hex encoded ContentId + content_id: String, + /// hex encoded DataObject + data_object: String, +} + +impl EncodedDataObjectAndContentId { + fn decode(&self) -> DataObjectAndContentId { + // hex string must not include '0x' prefix! + let encoded_content_id = hex::decode(&self.content_id[2..].as_bytes()) + .expect("failed to parse content_id hex string"); + let encoded_data_object = hex::decode(&self.data_object[2..].as_bytes()) + .expect("failed to parse data_object hex string"); + DataObjectAndContentId { + content_id: Decode::decode(&mut encoded_content_id.as_slice()).unwrap(), + data_object: Decode::decode(&mut encoded_data_object.as_slice()).unwrap(), + } + } +} + +#[derive(Decode)] +struct ChannelAndId { + id: ChannelId, + channel: Channel>, +} + +#[derive(Deserialize)] +struct EncodedChannelAndId { + /// ChannelId number + id: u64, + /// hex encoded Channel + channel: String, +} + +impl EncodedChannelAndId { + fn decode(&self) -> ChannelAndId { + let id = self.id; + let encoded_channel = + hex::decode(&self.channel[2..].as_bytes()).expect("failed to parse channel hex string"); + ChannelAndId { + id: id as ChannelId, + channel: Decode::decode(&mut encoded_channel.as_slice()).unwrap(), + } + } +} + +#[derive(Deserialize)] +struct EncodedContentData { + /// classes and their associted permissions + classes: Vec, + /// entities and their associated maintainer + entities: Vec, + /// DataObject(s) and ContentId + data_objects: Vec, + /// Media Channels + channels: Vec, +} + +fn parse_content_data(data_file: &Path) -> EncodedContentData { + let data = fs::read_to_string(data_file).expect("Failed reading file"); + serde_json::from_str(&data).expect("failed parsing content data") +} + +impl EncodedContentData { + pub fn decode(&self) -> ContentData { + ContentData { + classes: self + .classes + .iter() + .map(|class_and_perm| class_and_perm.decode()) + .collect(), + entities: self + .entities + .iter() + .map(|entities_and_maintainer| entities_and_maintainer.decode()) + .collect(), + data_objects: self + .data_objects + .iter() + .map(|data_objects| data_objects.decode()) + .collect(), + channels: self + .channels + .iter() + .map(|channel_and_id| channel_and_id.decode()) + .collect(), + } + } +} + +/// Generates a VersionedStoreConfig genesis config +/// with pre-populated classes and entities parsed from a json file serialized +/// as a ContentData struct. +pub fn versioned_store_config_from_json(data_file: &Path) -> VersionedStoreConfig { + let content = parse_content_data(data_file).decode(); + let base_config = empty_versioned_store_config(); + let first_id = 1; + + let next_class_id: ClassId = content + .classes + .last() + .map_or(first_id, |class_and_perm| class_and_perm.class.id + 1); + assert_eq!(next_class_id, (content.classes.len() + 1) as ClassId); + + let next_entity_id: EntityId = content + .entities + .last() + .map_or(first_id, |entity_and_maintainer| { + entity_and_maintainer.entity.id + 1 + }); + + VersionedStoreConfig { + class_by_id: content + .classes + .into_iter() + .map(|class_and_permissions| { + (class_and_permissions.class.id, class_and_permissions.class) + }) + .collect(), + entity_by_id: content + .entities + .into_iter() + .map(|entity_and_maintainer| { + ( + entity_and_maintainer.entity.id, + entity_and_maintainer.entity, + ) + }) + .collect(), + next_class_id, + next_entity_id, + ..base_config + } +} + +/// Generates basic empty VersionedStoreConfig genesis config +pub fn empty_versioned_store_config() -> VersionedStoreConfig { + VersionedStoreConfig { + class_by_id: vec![], + entity_by_id: vec![], + next_class_id: 1, + next_entity_id: 1, + property_name_constraint: InputValidationLengthConstraint::new(1, 99), + property_description_constraint: InputValidationLengthConstraint::new(1, 999), + class_name_constraint: InputValidationLengthConstraint::new(1, 99), + class_description_constraint: InputValidationLengthConstraint::new(1, 999), + } +} + +/// Generates a basic empty VersionedStorePermissionsConfig genesis config +pub fn empty_versioned_store_permissions_config() -> VersionedStorePermissionsConfig { + VersionedStorePermissionsConfig { + class_permissions_by_class_id: vec![], + entity_maintainer_by_entity_id: vec![], + } +} + +/// Generates a `VersionedStorePermissionsConfig` genesis config +/// pre-populated with permissions and entity maintainers parsed from +/// a json file serialized as a `ContentData` struct. +pub fn versioned_store_permissions_config_from_json( + data_file: &Path, +) -> VersionedStorePermissionsConfig { + let content = parse_content_data(data_file).decode(); + + VersionedStorePermissionsConfig { + class_permissions_by_class_id: content + .classes + .into_iter() + .map(|class_and_perm| (class_and_perm.class.id, class_and_perm.permissions)) + .collect(), + entity_maintainer_by_entity_id: content + .entities + .into_iter() + .filter_map(|entity_and_maintainer| { + entity_and_maintainer + .maintainer + .map(|maintainer| (entity_and_maintainer.entity.id, maintainer)) + }) + .collect(), + } +} + +/// Generates a basic empty `DataDirectoryConfig` genesis config +pub fn empty_data_directory_config() -> DataDirectoryConfig { + DataDirectoryConfig { + data_object_by_content_id: vec![], + known_content_ids: vec![], + } +} + +/// Generates a `DataDirectoryConfig` genesis config +/// pre-populated with data objects and known content ids parsed from +/// a json file serialized as a `ContentData` struct +pub fn data_directory_config_from_json(data_file: &Path) -> DataDirectoryConfig { + let content = parse_content_data(data_file).decode(); + + DataDirectoryConfig { + data_object_by_content_id: content + .data_objects + .iter() + .map(|object| (object.content_id, object.data_object.clone())) + .collect(), + known_content_ids: content + .data_objects + .into_iter() + .map(|object| object.content_id) + .collect(), + } +} + +/// Generates a basic `ContentWorkingGroupConfig` genesis config without any active curators +/// curator lead or channels. +pub fn empty_content_working_group_config() -> ContentWorkingGroupConfig { + ContentWorkingGroupConfig { + mint_capacity: 0, + curator_opening_by_id: vec![], + next_curator_opening_id: 0, + curator_application_by_id: vec![], + next_curator_application_id: 0, + channel_by_id: vec![], + next_channel_id: 1, + channel_id_by_handle: vec![], + curator_by_id: vec![], + next_curator_id: 0, + principal_by_id: vec![], + next_principal_id: 0, + channel_creation_enabled: true, // there is no extrinsic to change it so enabling at genesis + unstaker_by_stake_id: vec![], + channel_handle_constraint: InputValidationLengthConstraint::new(5, 20), + channel_description_constraint: InputValidationLengthConstraint::new(1, 1024), + opening_human_readable_text: InputValidationLengthConstraint::new(1, 2048), + curator_application_human_readable_text: InputValidationLengthConstraint::new(1, 2048), + curator_exit_rationale_text: InputValidationLengthConstraint::new(1, 2048), + channel_avatar_constraint: InputValidationLengthConstraint::new(5, 1024), + channel_banner_constraint: InputValidationLengthConstraint::new(5, 1024), + channel_title_constraint: InputValidationLengthConstraint::new(5, 1024), + } +} + +/// Generates a `ContentWorkingGroupConfig` genesis config +/// pre-populated with channels and corresponding princial channel owners +/// parsed from a json file serialized as a `ContentData` struct +pub fn content_working_group_config_from_json(data_file: &Path) -> ContentWorkingGroupConfig { + let content = parse_content_data(data_file).decode(); + let first_channel_id = 1; + let first_principal_id = 0; + + let next_channel_id: ChannelId = content + .channels + .last() + .map_or(first_channel_id, |channel_and_id| channel_and_id.id + 1); + assert_eq!( + next_channel_id, + (content.channels.len() + 1) as ChannelId + ); + + let base_config = empty_content_working_group_config(); + + ContentWorkingGroupConfig { + channel_by_id: content + .channels + .iter() + .enumerate() + .map(|(ix, channel_and_id)| { + ( + channel_and_id.id, + Channel { + principal_id: first_principal_id + ix as PrincipalId, + ..channel_and_id.channel.clone() + }, + ) + }) + .collect(), + next_channel_id, + channel_id_by_handle: content + .channels + .iter() + .map(|channel_and_id| (channel_and_id.channel.handle.clone(), channel_and_id.id)) + .collect(), + principal_by_id: content + .channels + .iter() + .enumerate() + .map(|(ix, channel_and_id)| { + ( + first_principal_id + ix as PrincipalId, + Principal::ChannelOwner(channel_and_id.id), + ) + }) + .collect(), + next_principal_id: first_principal_id + content.channels.len() as PrincipalId, + ..base_config + } +} diff --git a/node/src/chain_spec/forum_config.rs b/node/src/chain_spec/forum_config.rs new file mode 100644 index 0000000000..dd089a87f9 --- /dev/null +++ b/node/src/chain_spec/forum_config.rs @@ -0,0 +1,149 @@ +use codec::Decode; +use node_runtime::{ + common::constraints::InputValidationLengthConstraint, + forum::{Category, CategoryId, Post, Thread}, + AccountId, BlockNumber, ForumConfig, Moment, PostId, ThreadId, +}; +use serde::Deserialize; +use std::{fs, path::Path}; + +fn new_validation(min: u16, max_min_diff: u16) -> InputValidationLengthConstraint { + InputValidationLengthConstraint { min, max_min_diff } +} + +#[derive(Decode)] +struct ForumData { + categories: Vec>, + posts: Vec>, + threads: Vec>, +} + +#[derive(Deserialize)] +struct EncodedForumData { + /// hex encoded categories + categories: Vec, + /// hex encoded posts + posts: Vec, + /// hex encoded threads + threads: Vec, +} + +impl EncodedForumData { + fn decode(&self) -> ForumData { + ForumData { + categories: self + .categories + .iter() + .map(|category| { + let encoded_category = hex::decode(&category[2..].as_bytes()) + .expect("failed to parse category hex string"); + Decode::decode(&mut encoded_category.as_slice()).unwrap() + }) + .collect(), + posts: self + .posts + .iter() + .map(|post| { + let encoded_post = hex::decode(&post[2..].as_bytes()) + .expect("failed to parse post hex string"); + Decode::decode(&mut encoded_post.as_slice()).unwrap() + }) + .collect(), + threads: self + .threads + .iter() + .map(|thread| { + let encoded_thread = hex::decode(&thread[2..].as_bytes()) + .expect("failed to parse thread hex string"); + Decode::decode(&mut encoded_thread.as_slice()).unwrap() + }) + .collect(), + } + } +} + +fn parse_forum_json(data_file: &Path) -> EncodedForumData { + let data = fs::read_to_string(data_file).expect("Failed reading file"); + serde_json::from_str(&data).expect("failed parsing members data") +} + +/// Generates a `ForumConfig` geneis config pre-populated with +/// categories, threads and posts parsed +/// from a json file serialized as `EncodedForumData` +pub fn from_json(forum_sudo: AccountId, data_file: &Path) -> ForumConfig { + let forum_data = parse_forum_json(data_file); + create(forum_sudo, forum_data) +} + +/// Generates a basic empty `ForumConfig` geneis config +pub fn empty(forum_sudo: AccountId) -> ForumConfig { + let forum_data = EncodedForumData { + categories: vec![], + threads: vec![], + posts: vec![], + }; + create(forum_sudo, forum_data) +} + +fn create(forum_sudo: AccountId, forum_data: EncodedForumData) -> ForumConfig { + let first_id = 1; + let forum_data = forum_data.decode(); + + let next_category_id: CategoryId = forum_data + .categories + .last() + .map_or(first_id, |category| category.id + 1); + + assert_eq!( + next_category_id, + (forum_data.categories.len() + 1) as CategoryId + ); + + let next_thread_id: ThreadId = forum_data + .threads + .last() + .map_or(first_id, |thread| thread.id + 1); + + assert_eq!(next_thread_id, (forum_data.threads.len() + 1) as ThreadId); + + let next_post_id: PostId = forum_data.posts.last().map_or(first_id, |post| post.id + 1); + + assert_eq!(next_post_id, (forum_data.posts.len() + 1) as PostId); + + ForumConfig { + category_by_id: forum_data + .categories + .into_iter() + .map(|encoded_category| { + let category = encoded_category; + (category.id, category) + }) + .collect(), + thread_by_id: forum_data + .threads + .into_iter() + .map(|encoded_thread| { + let thread = encoded_thread; + (thread.id, thread) + }) + .collect(), + post_by_id: forum_data + .posts + .into_iter() + .map(|encoded_post| { + let post = encoded_post; + (post.id, post) + }) + .collect(), + next_category_id, + next_thread_id, + next_post_id, + forum_sudo, + category_title_constraint: new_validation(10, 90), + category_description_constraint: new_validation(10, 490), + thread_title_constraint: new_validation(10, 90), + post_text_constraint: new_validation(10, 2990), + thread_moderation_rationale_constraint: new_validation(10, 290), + post_moderation_rationale_constraint: new_validation(10, 290), + } +} diff --git a/node/src/chain_spec/initial_balances.rs b/node/src/chain_spec/initial_balances.rs new file mode 100644 index 0000000000..e0f4a898fb --- /dev/null +++ b/node/src/chain_spec/initial_balances.rs @@ -0,0 +1,18 @@ +use node_runtime::{AccountId, Balance}; +use serde::Deserialize; +use std::{fs, path::Path}; + +#[derive(Deserialize)] +struct SerializedInitialBalances { + balances: Vec<(AccountId, Balance)>, +} + +fn parse_json(data_file: &Path) -> SerializedInitialBalances { + let data = fs::read_to_string(data_file).expect("Failed reading file"); + serde_json::from_str(&data).expect("failed parsing balances data") +} + +/// Deserializes initial balances from json file +pub fn from_json(data_file: &Path) -> Vec<(AccountId, Balance)> { + parse_json(data_file).balances +} diff --git a/node/src/chain_spec/initial_members.rs b/node/src/chain_spec/initial_members.rs new file mode 100644 index 0000000000..bc26b0f834 --- /dev/null +++ b/node/src/chain_spec/initial_members.rs @@ -0,0 +1,13 @@ +use node_runtime::{membership, AccountId, Moment}; +use std::{fs, path::Path}; + +/// Generates a Vec of genesis members parsed from a json file +pub fn from_json(data_file: &Path) -> Vec> { + let data = fs::read_to_string(data_file).expect("Failed reading file"); + serde_json::from_str(&data).expect("failed parsing members data") +} + +/// Generates an empty Vec of genesis members +pub fn none() -> Vec> { + vec![] +} diff --git a/node/src/chain_spec/mod.rs b/node/src/chain_spec/mod.rs new file mode 100644 index 0000000000..17f86de95a --- /dev/null +++ b/node/src/chain_spec/mod.rs @@ -0,0 +1,476 @@ +// Copyright 2019 Joystream Contributors +// This file is part of Joystream node. + +// Joystream node 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. + +// Joystream node 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 Joystream node. If not, see . + +// Clippy linter warning. +// Disable it because we use such syntax for a code readability. +// Example: voting_period: 1 * DAY +#![allow(clippy::identity_op)] + +use pallet_im_online::sr25519::AuthorityId as ImOnlineId; +use serde_json as json; +use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; +use sp_consensus_babe::AuthorityId as BabeId; +use sp_core::{sr25519, Pair, Public}; +use sp_finality_grandpa::AuthorityId as GrandpaId; +use sp_runtime::traits::{IdentifyAccount, Verify}; +use sp_runtime::Perbill; + +use node_runtime::{ + membership, AuthorityDiscoveryConfig, BabeConfig, Balance, BalancesConfig, + ContentDirectoryConfig, ContentDirectoryWorkingGroupConfig, ContentWorkingGroupConfig, + CouncilConfig, CouncilElectionConfig, DataDirectoryConfig, DataObjectStorageRegistryConfig, + DataObjectTypeRegistryConfig, ElectionParameters, ForumConfig, GrandpaConfig, ImOnlineConfig, + MembersConfig, Moment, ProposalsCodexConfig, SessionConfig, SessionKeys, Signature, + StakerStatus, StakingConfig, StorageWorkingGroupConfig, SudoConfig, SystemConfig, + VersionedStoreConfig, VersionedStorePermissionsConfig, DAYS, WASM_BINARY, +}; + +// Exported to be used by chain-spec-builder +pub use node_runtime::{AccountId, GenesisConfig}; + +pub mod content_config; +pub mod forum_config; +pub mod initial_balances; +pub mod initial_members; +pub mod proposals_config; + +type AccountPublic = ::Signer; + +/// Specialized `ChainSpec`. This is a specialization of the general Substrate ChainSpec type. +pub type ChainSpec = sc_service::GenericChainSpec; + +use sc_chain_spec::ChainType; + +/// The chain specification option. This is expected to come in from the CLI and +/// is little more than one of a number of alternatives which can easily be converted +/// from a string (`--chain=...`) into a `ChainSpec`. +#[derive(Clone, Debug)] +pub enum Alternative { + /// Whatever the current runtime is, with just Alice as an auth. + Development, + /// Whatever the current runtime is, with simple Alice/Bob auths. + LocalTestnet, +} + +/// Helper function to generate a crypto pair from seed +pub fn get_from_seed(seed: &str) -> ::Public { + TPublic::Pair::from_string(&format!("//{}", seed), None) + .expect("static values are valid; qed") + .public() +} + +/// Helper function to generate an account ID from seed +pub fn get_account_id_from_seed(seed: &str) -> AccountId +where + AccountPublic: From<::Public>, +{ + AccountPublic::from(get_from_seed::(seed)).into_account() +} + +/// Helper function to generate stash, controller and session key from seed +pub fn get_authority_keys_from_seed( + seed: &str, +) -> ( + AccountId, + AccountId, + GrandpaId, + BabeId, + ImOnlineId, + AuthorityDiscoveryId, +) { + ( + get_account_id_from_seed::(&format!("{}//stash", seed)), + get_account_id_from_seed::(seed), + get_from_seed::(seed), + get_from_seed::(seed), + get_from_seed::(seed), + get_from_seed::(seed), + ) +} + +fn session_keys( + grandpa: GrandpaId, + babe: BabeId, + im_online: ImOnlineId, + authority_discovery: AuthorityDiscoveryId, +) -> SessionKeys { + SessionKeys { + grandpa, + babe, + im_online, + authority_discovery, + } +} + +impl Alternative { + /// Get an actual chain config from one of the alternatives. + pub(crate) fn load(self) -> Result { + Ok(match self { + Alternative::Development => ChainSpec::from_genesis( + "Development", + "dev", + ChainType::Development, + || { + testnet_genesis( + vec![get_authority_keys_from_seed("Alice")], + get_account_id_from_seed::("Alice"), + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + ], + proposals_config::development(), + initial_members::none(), + forum_config::empty(get_account_id_from_seed::("Alice")), + content_config::empty_versioned_store_config(), + content_config::empty_versioned_store_permissions_config(), + content_config::empty_data_directory_config(), + content_config::empty_content_working_group_config(), + vec![], + ) + }, + Vec::new(), + None, + None, + Some(chain_spec_properties()), + None, + ), + Alternative::LocalTestnet => ChainSpec::from_genesis( + "Local Testnet", + "local_testnet", + ChainType::Local, + || { + testnet_genesis( + vec![ + get_authority_keys_from_seed("Alice"), + get_authority_keys_from_seed("Bob"), + ], + get_account_id_from_seed::("Alice"), + vec![ + get_account_id_from_seed::("Alice"), + get_account_id_from_seed::("Bob"), + get_account_id_from_seed::("Charlie"), + get_account_id_from_seed::("Dave"), + get_account_id_from_seed::("Eve"), + get_account_id_from_seed::("Ferdie"), + get_account_id_from_seed::("Alice//stash"), + get_account_id_from_seed::("Bob//stash"), + get_account_id_from_seed::("Charlie//stash"), + get_account_id_from_seed::("Dave//stash"), + get_account_id_from_seed::("Eve//stash"), + get_account_id_from_seed::("Ferdie//stash"), + ], + proposals_config::development(), + initial_members::none(), + forum_config::empty(get_account_id_from_seed::("Alice")), + content_config::empty_versioned_store_config(), + content_config::empty_versioned_store_permissions_config(), + content_config::empty_data_directory_config(), + content_config::empty_content_working_group_config(), + vec![], + ) + }, + Vec::new(), + None, + None, + Some(chain_spec_properties()), + None, + ), + }) + } +} + +pub fn chain_spec_properties() -> json::map::Map { + let mut properties: json::map::Map = json::map::Map::new(); + properties.insert( + String::from("tokenDecimals"), + json::Value::Number(json::Number::from(0)), + ); + properties.insert( + String::from("tokenSymbol"), + json::Value::String(String::from("JOY")), + ); + properties +} +// This method should be refactored after Alexandria to reduce number of arguments +// as more args will likely be needed +#[allow(clippy::too_many_arguments)] +pub fn testnet_genesis( + initial_authorities: Vec<( + AccountId, + AccountId, + GrandpaId, + BabeId, + ImOnlineId, + AuthorityDiscoveryId, + )>, + root_key: AccountId, + endowed_accounts: Vec, + cpcp: node_runtime::ProposalsConfigParameters, + members: Vec>, + forum_config: ForumConfig, + versioned_store_config: VersionedStoreConfig, + versioned_store_permissions_config: VersionedStorePermissionsConfig, + data_directory_config: DataDirectoryConfig, + content_working_group_config: ContentWorkingGroupConfig, + initial_balances: Vec<(AccountId, Balance)>, +) -> GenesisConfig { + const STASH: Balance = 5_000; + const ENDOWMENT: Balance = 100_000_000; + + let default_text_constraint = node_runtime::working_group::default_text_constraint(); + + GenesisConfig { + system: Some(SystemConfig { + code: WASM_BINARY.to_vec(), + changes_trie_config: Default::default(), + }), + pallet_balances: Some(BalancesConfig { + balances: endowed_accounts + .iter() + .cloned() + .map(|k| (k, ENDOWMENT)) + .chain(initial_authorities.iter().map(|x| (x.0.clone(), STASH))) + .chain( + initial_balances + .iter() + .map(|(account, balance)| (account.clone(), *balance)), + ) + .collect(), + }), + pallet_staking: Some(StakingConfig { + validator_count: 20, + minimum_validator_count: initial_authorities.len() as u32, + stakers: initial_authorities + .iter() + .map(|x| (x.0.clone(), x.1.clone(), STASH, StakerStatus::Validator)) + .collect(), + invulnerables: initial_authorities.iter().map(|x| x.0.clone()).collect(), + slash_reward_fraction: Perbill::from_percent(10), + history_depth: 336, + ..Default::default() + }), + pallet_sudo: Some(SudoConfig { key: root_key }), + pallet_babe: Some(BabeConfig { + authorities: vec![], + }), + pallet_im_online: Some(ImOnlineConfig { keys: vec![] }), + pallet_authority_discovery: Some(AuthorityDiscoveryConfig { keys: vec![] }), + pallet_grandpa: Some(GrandpaConfig { + authorities: vec![], + }), + pallet_session: Some(SessionConfig { + keys: initial_authorities + .iter() + .map(|x| { + ( + x.0.clone(), + x.0.clone(), + session_keys(x.2.clone(), x.3.clone(), x.4.clone(), x.5.clone()), + ) + }) + .collect::>(), + }), + council: Some(CouncilConfig { + active_council: vec![], + term_ends_at: 1, + }), + election: Some(CouncilElectionConfig { + auto_start: true, + election_parameters: ElectionParameters { + announcing_period: 2 * DAYS, + voting_period: 1 * DAYS, + revealing_period: 1 * DAYS, + council_size: 6, + candidacy_limit: 25, + min_council_stake: 1_000, + new_term_duration: 10 * DAYS, + min_voting_stake: 100, + }, + }), + membership: Some(MembersConfig { + default_paid_membership_fee: 100u128, + members, + }), + forum: Some(forum_config), + data_directory: Some(data_directory_config), + data_object_type_registry: Some(DataObjectTypeRegistryConfig { + first_data_object_type_id: 1, + }), + data_object_storage_registry: Some(DataObjectStorageRegistryConfig { + first_relationship_id: 1, + }), + working_group_Instance2: Some(StorageWorkingGroupConfig { + phantom: Default::default(), + storage_working_group_mint_capacity: 0, + opening_human_readable_text_constraint: default_text_constraint, + worker_application_human_readable_text_constraint: default_text_constraint, + worker_exit_rationale_text_constraint: default_text_constraint, + }), + working_group_Instance3: Some(ContentDirectoryWorkingGroupConfig { + phantom: Default::default(), + storage_working_group_mint_capacity: 0, + opening_human_readable_text_constraint: default_text_constraint, + worker_application_human_readable_text_constraint: default_text_constraint, + worker_exit_rationale_text_constraint: default_text_constraint, + }), + content_directory: Some({ + ContentDirectoryConfig { + curator_group_by_id: vec![], + next_class_id: 1, + next_entity_id: 1, + next_curator_group_id: 1, + } + }), + versioned_store: Some(versioned_store_config), + versioned_store_permissions: Some(versioned_store_permissions_config), + content_wg: Some(content_working_group_config), + proposals_codex: Some(ProposalsCodexConfig { + set_validator_count_proposal_voting_period: cpcp + .set_validator_count_proposal_voting_period, + set_validator_count_proposal_grace_period: cpcp + .set_validator_count_proposal_grace_period, + runtime_upgrade_proposal_voting_period: cpcp.runtime_upgrade_proposal_voting_period, + runtime_upgrade_proposal_grace_period: cpcp.runtime_upgrade_proposal_grace_period, + text_proposal_voting_period: cpcp.text_proposal_voting_period, + text_proposal_grace_period: cpcp.text_proposal_grace_period, + set_election_parameters_proposal_voting_period: cpcp + .set_election_parameters_proposal_voting_period, + set_election_parameters_proposal_grace_period: cpcp + .set_election_parameters_proposal_grace_period, + spending_proposal_voting_period: cpcp.spending_proposal_voting_period, + spending_proposal_grace_period: cpcp.spending_proposal_grace_period, + add_working_group_opening_proposal_voting_period: cpcp + .add_working_group_opening_proposal_voting_period, + add_working_group_opening_proposal_grace_period: cpcp + .add_working_group_opening_proposal_grace_period, + begin_review_working_group_leader_applications_proposal_voting_period: cpcp + .begin_review_working_group_leader_applications_proposal_voting_period, + begin_review_working_group_leader_applications_proposal_grace_period: cpcp + .begin_review_working_group_leader_applications_proposal_grace_period, + fill_working_group_leader_opening_proposal_voting_period: cpcp + .fill_working_group_leader_opening_proposal_voting_period, + fill_working_group_leader_opening_proposal_grace_period: cpcp + .fill_working_group_leader_opening_proposal_grace_period, + set_working_group_mint_capacity_proposal_voting_period: cpcp + .set_working_group_mint_capacity_proposal_voting_period, + set_working_group_mint_capacity_proposal_grace_period: cpcp + .set_working_group_mint_capacity_proposal_grace_period, + decrease_working_group_leader_stake_proposal_voting_period: cpcp + .decrease_working_group_leader_stake_proposal_voting_period, + decrease_working_group_leader_stake_proposal_grace_period: cpcp + .decrease_working_group_leader_stake_proposal_grace_period, + slash_working_group_leader_stake_proposal_voting_period: cpcp + .slash_working_group_leader_stake_proposal_voting_period, + slash_working_group_leader_stake_proposal_grace_period: cpcp + .slash_working_group_leader_stake_proposal_grace_period, + set_working_group_leader_reward_proposal_voting_period: cpcp + .set_working_group_leader_reward_proposal_voting_period, + set_working_group_leader_reward_proposal_grace_period: cpcp + .set_working_group_leader_reward_proposal_grace_period, + terminate_working_group_leader_role_proposal_voting_period: cpcp + .terminate_working_group_leader_role_proposal_voting_period, + terminate_working_group_leader_role_proposal_grace_period: cpcp + .terminate_working_group_leader_role_proposal_grace_period, + }), + } +} + +#[cfg(test)] +pub(crate) mod tests { + use super::*; + use crate::service::{new_full, new_light}; + use sc_service_test; + + fn local_testnet_genesis_instant_single() -> GenesisConfig { + testnet_genesis( + vec![get_authority_keys_from_seed("Alice")], + get_account_id_from_seed::("Alice"), + vec![get_authority_keys_from_seed("Alice").0], + proposals_config::development(), + initial_members::none(), + forum_config::empty(get_account_id_from_seed::("Alice")), + content_config::empty_versioned_store_config(), + content_config::empty_versioned_store_permissions_config(), + content_config::empty_data_directory_config(), + content_config::empty_content_working_group_config(), + vec![], + ) + } + + /// Local testnet config (single validator - Alice) + pub fn integration_test_config_with_single_authority() -> ChainSpec { + ChainSpec::from_genesis( + "Integration Test", + "test", + ChainType::Development, + local_testnet_genesis_instant_single, + vec![], + None, + None, + None, + Default::default(), + ) + } + + fn local_testnet_genesis() -> GenesisConfig { + testnet_genesis( + vec![ + get_authority_keys_from_seed("Alice"), + get_authority_keys_from_seed("Bob"), + ], + get_account_id_from_seed::("Alice"), + vec![ + get_authority_keys_from_seed("Alice").0, + get_authority_keys_from_seed("Bob").0, + ], + proposals_config::development(), + initial_members::none(), + forum_config::empty(get_account_id_from_seed::("Alice")), + content_config::empty_versioned_store_config(), + content_config::empty_versioned_store_permissions_config(), + content_config::empty_data_directory_config(), + content_config::empty_content_working_group_config(), + vec![], + ) + } + + /// Local testnet config (multivalidator Alice + Bob) + pub fn integration_test_config_with_two_authorities() -> ChainSpec { + ChainSpec::from_genesis( + "Integration Test", + "test", + ChainType::Development, + local_testnet_genesis, + vec![], + None, + None, + None, + Default::default(), + ) + } + + #[test] + #[ignore] + fn test_connectivity() { + sc_service_test::connectivity( + integration_test_config_with_two_authorities(), + |config| new_full(config), + |config| new_light(config), + ); + } +} diff --git a/node/src/chain_spec/proposals_config.rs b/node/src/chain_spec/proposals_config.rs new file mode 100644 index 0000000000..eb53945e8f --- /dev/null +++ b/node/src/chain_spec/proposals_config.rs @@ -0,0 +1,17 @@ +use node_runtime::ProposalsConfigParameters; + +/// Development chain config. 0 grace period for all proposals, ie. +/// proposals executed immediatly. Short voting period. +pub fn development() -> ProposalsConfigParameters { + ProposalsConfigParameters::with_grace_and_voting_periods(0, 200) +} + +/// Staging chain config. Shorter grace periods and voting periods than default. +pub fn staging() -> ProposalsConfigParameters { + ProposalsConfigParameters::with_grace_and_voting_periods(20, 30) +} + +/// The default configuration as defined in the runtime module +pub fn production() -> ProposalsConfigParameters { + ProposalsConfigParameters::default() +} diff --git a/node/src/cli.rs b/node/src/cli.rs index 9c33d231aa..6acca3e920 100644 --- a/node/src/cli.rs +++ b/node/src/cli.rs @@ -1,128 +1,48 @@ -use crate::chain_spec; -use crate::new_full_start; -use crate::service; -use futures::{future, sync::oneshot, Future}; -use log::info; -use std::cell::RefCell; -pub use substrate_cli::{error, IntoExit, VersionInfo}; -use substrate_cli::{informant, parse_and_prepare, NoCustom, ParseAndPrepare}; -use substrate_service::{AbstractService, Configuration, Roles as ServiceRoles}; -use tokio::runtime::Runtime; - -/// Parse command line arguments into service configuration. -pub fn run(args: I, exit: E, version: VersionInfo) -> error::Result<()> -where - I: IntoIterator, - T: Into + Clone, - E: IntoExit, -{ - type Config = Configuration<(), T>; - match parse_and_prepare::(&version, "joystream-node", args) { - ParseAndPrepare::Run(cmd) => cmd.run( - load_spec, - exit, - |exit, _cli_args, _custom_args, config: Config<_>| { - info!("{}", version.name); - info!(" version {}", config.full_version()); - info!(" by {}, 2019", version.author); - info!("Chain specification: {}", config.chain_spec.name()); - info!("Node name: {}", config.name); - info!("Roles: {:?}", config.roles); - let runtime = Runtime::new().map_err(|e| format!("{:?}", e))?; - match config.roles { - ServiceRoles::LIGHT => run_until_exit( - runtime, - service::new_light(config).map_err(|e| format!("{:?}", e))?, - exit, - ), - _ => run_until_exit( - runtime, - service::new_full(config).map_err(|e| format!("{:?}", e))?, - exit, - ), - } - .map_err(|e| format!("{:?}", e)) - }, - ), - ParseAndPrepare::BuildSpec(cmd) => cmd.run::(load_spec), - ParseAndPrepare::ExportBlocks(cmd) => cmd.run_with_builder( - |config: Config<_>| Ok(new_full_start!(config).0), - load_spec, - exit, - ), - ParseAndPrepare::ImportBlocks(cmd) => cmd.run_with_builder( - |config: Config<_>| Ok(new_full_start!(config).0), - load_spec, - exit, - ), - ParseAndPrepare::PurgeChain(cmd) => cmd.run(load_spec), - ParseAndPrepare::RevertChain(cmd) => { - cmd.run_with_builder(|config: Config<_>| Ok(new_full_start!(config).0), load_spec) - } - ParseAndPrepare::CustomCommand(_) => Ok(()), - }?; - - Ok(()) -} - -fn load_spec(id: &str) -> Result, String> { - Ok(match chain_spec::Alternative::from(id) { - Some(spec) => Some(spec.load()?), - None => None, - }) -} - -fn run_until_exit(mut runtime: Runtime, service: T, e: E) -> error::Result<()> -where - T: AbstractService, - E: IntoExit, -{ - let (exit_send, exit) = exit_future::signal(); - - let informant = informant::build(&service); - runtime.executor().spawn(exit.until(informant).map(|_| ())); - - // we eagerly drop the service so that the internal exit future is fired, - // but we need to keep holding a reference to the global telemetry guard - let _telemetry = service.telemetry(); - - let service_res = { - let exit = e - .into_exit() - .map_err(|_| error::Error::Other("Exit future failed.".into())); - let service = service.map_err(error::Error::Service); - let select = service.select(exit).map(|_| ()).map_err(|(err, _)| err); - runtime.block_on(select) - }; - - exit_send.fire(); - - // TODO [andre]: timeout this future #1318 - let _ = runtime.shutdown_on_idle().wait(); - - service_res +// Copyright 2019 Joystream Contributors +// This file is part of Joystream node. + +// Joystream node 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. + +// Joystream node 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 Joystream node. If not, see . + +use sc_cli::RunCmd; +use structopt::StructOpt; + +/// An overarching CLI command definition. +#[derive(Debug, StructOpt)] +pub struct Cli { + /// Possible subcommand with parameters. + #[structopt(subcommand)] + pub subcommand: Option, + #[allow(missing_docs)] + #[structopt(flatten)] + pub run: RunCmd, } -// handles ctrl-c -pub struct Exit; -impl IntoExit for Exit { - type Exit = future::MapErr, fn(oneshot::Canceled) -> ()>; - fn into_exit(self) -> Self::Exit { - // can't use signal directly here because CtrlC takes only `Fn`. - let (exit_send, exit) = oneshot::channel(); - - let exit_send_cell = RefCell::new(Some(exit_send)); - ctrlc::set_handler(move || { - let exit_send = exit_send_cell - .try_borrow_mut() - .expect("signal handler not reentrant; qed") - .take(); - if let Some(exit_send) = exit_send { - exit_send.send(()).expect("Error sending exit notification"); - } - }) - .expect("Error setting Ctrl-C handler"); - - exit.map_err(drop) - } +/// Possible subcommands of the main binary. +#[derive(Debug, StructOpt)] +pub enum Subcommand { + /// A set of base subcommands handled by `sc_cli`. + #[structopt(flatten)] + Base(sc_cli::Subcommand), + + /// The custom inspect subcommmand for decoding blocks and extrinsics. + #[structopt( + name = "inspect", + about = "Decode given block or extrinsic using current native runtime." + )] + Inspect(node_inspect::cli::InspectCmd), + + /// The custom benchmark subcommmand benchmarking runtime pallets. + #[structopt(name = "benchmark", about = "Benchmark runtime pallets.")] + Benchmark(frame_benchmarking_cli::BenchmarkCmd), } diff --git a/node/src/command.rs b/node/src/command.rs new file mode 100644 index 0000000000..5372c9c7eb --- /dev/null +++ b/node/src/command.rs @@ -0,0 +1,100 @@ +// Copyright 2019 Joystream Contributors +// This file is part of Joystream node. + +// Joystream node 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. + +// Joystream node 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 Joystream node. If not, see . + +use crate::cli::{Cli, Subcommand}; +use crate::node_executor; +use crate::node_rpc; +use crate::{chain_spec, service}; + +use node_executor::Executor; +use node_runtime::{opaque::Block, RuntimeApi}; +use sc_cli::{Result, SubstrateCli}; +use sc_finality_grandpa::{self as grandpa}; + +impl SubstrateCli for Cli { + fn impl_name() -> &'static str { + "Joystream Node" + } + + fn support_url() -> &'static str { + "https://www.joystream.org/" + } + + fn copyright_start_year() -> i32 { + 2019 + } + + fn executable_name() -> &'static str { + "joystream-node" + } + + fn impl_version() -> &'static str { + env!("SUBSTRATE_CLI_IMPL_VERSION") + } + + fn description() -> &'static str { + env!("CARGO_PKG_DESCRIPTION") + } + + fn author() -> &'static str { + env!("CARGO_PKG_AUTHORS") + } + + fn load_spec(&self, id: &str) -> std::result::Result, String> { + Ok(match id { + "dev" => Box::new(chain_spec::Alternative::Development.load()?), + "local" => Box::new(chain_spec::Alternative::LocalTestnet.load()?), + path => Box::new(chain_spec::ChainSpec::from_json_file( + std::path::PathBuf::from(path), + )?), + }) + } +} + +/// Parse command line arguments into service configuration. +pub fn run() -> Result<()> { + let cli = Cli::from_args(); + + match &cli.subcommand { + None => { + let runner = cli.create_runner(&cli.run)?; + runner.run_node(service::new_light, service::new_full, node_runtime::VERSION) + } + Some(Subcommand::Inspect(cmd)) => { + let runner = cli.create_runner(cmd)?; + + runner.sync_run(|config| cmd.run::(config)) + } + Some(Subcommand::Benchmark(cmd)) => { + if cfg!(feature = "runtime-benchmarks") { + let runner = cli.create_runner(cmd)?; + + runner.sync_run(|config| cmd.run::(config)) + } else { + println!( + "Benchmarking wasn't enabled when building the node. \ + You can enable it with `--features runtime-benchmarks`." + ); + Ok(()) + } + } + Some(Subcommand::Base(subcommand)) => { + let runner = cli.create_runner(subcommand)?; + + runner.run_subcommand(subcommand, |config| Ok(new_full_start!(config).0)) + } + } +} diff --git a/node/src/forum_config/from_encoded.rs b/node/src/forum_config/from_encoded.rs deleted file mode 100644 index 2aa0634505..0000000000 --- a/node/src/forum_config/from_encoded.rs +++ /dev/null @@ -1,90 +0,0 @@ -// This module is not used but included as sample code -// and highlights some pitfalls. - -use node_runtime::{ - forum::{ - Category, CategoryId, Post, PostId, Thread, ThreadId, - }, - AccountId, BlockNumber, ForumConfig, Moment, -}; -use serde::Deserialize; -use serde_json::Result; -use super::new_validation; - -use codec::Decode; - -#[derive(Deserialize)] -struct ForumData { - /// hex encoded categories - categories: Vec<(CategoryId, String)>, - /// hex encoded posts - posts: Vec<(PostId, String)>, - /// hex encoded threads - threads: Vec<(ThreadId, String)>, -} - -fn decode_post(encoded: String) -> Post { - // hex string must not include '0x' prefix! - let encoded = hex::decode(encoded.as_bytes()).expect("failed to parse hex string"); - Decode::decode(&mut encoded.as_slice()).unwrap() -} - -fn decode_category(encoded: String) -> Category { - // hex string must not include '0x' prefix! - let encoded = hex::decode(encoded.as_bytes()).expect("failed to parse hex string"); - Decode::decode(&mut encoded.as_slice()).unwrap() -} - -fn decode_thread(encoded: String) -> Thread { - // hex string must not include '0x' prefix! - let encoded = hex::decode(encoded.as_bytes()).expect("failed to parse hex string"); - Decode::decode(&mut encoded.as_slice()).unwrap() -} - -fn parse_forum_json() -> Result { - let data = include_str!("../../res/forum_data_acropolis_encoded.json"); - serde_json::from_str(data) -} - -pub fn create(forum_sudo: AccountId) -> ForumConfig { - let forum_data = parse_forum_json().expect("failed loading forum data"); - - let next_category_id: CategoryId = forum_data - .categories - .last() - .map_or(1, |category| category.0 + 1); - let next_thread_id: ThreadId = forum_data.threads.last().map_or(1, |thread| thread.0 + 1); - let next_post_id: PostId = forum_data.posts.last().map_or(1, |post| post.0 + 1); - - ForumConfig { - // Decoding will fail because of differnt type used for - // BlockNumber between Acropolis (u64) and Rome (u32) - // As long as types between chains are identical this approach works nicely - // since we don't need to use an intermediate format or do any transformation on source data. - category_by_id: forum_data - .categories - .into_iter() - .map(|category| (category.0, decode_category(category.1))) - .collect(), - thread_by_id: forum_data - .threads - .into_iter() - .map(|thread| (thread.0, decode_thread(thread.1))) - .collect(), - post_by_id: forum_data - .posts - .into_iter() - .map(|post| (post.0, decode_post(post.1))) - .collect(), - next_category_id, - next_thread_id, - next_post_id, - forum_sudo, - category_title_constraint: new_validation(10, 90), - category_description_constraint: new_validation(10, 490), - thread_title_constraint: new_validation(10, 90), - post_text_constraint: new_validation(10, 990), - thread_moderation_rationale_constraint: new_validation(10, 290), - post_moderation_rationale_constraint: new_validation(10, 290), - } -} diff --git a/node/src/forum_config/from_serialized.rs b/node/src/forum_config/from_serialized.rs deleted file mode 100644 index 4b512b0a0c..0000000000 --- a/node/src/forum_config/from_serialized.rs +++ /dev/null @@ -1,51 +0,0 @@ -#![allow(clippy::type_complexity)] - -use super::new_validation; -use node_runtime::{ - forum::{Category, CategoryId, Post, Thread}, - AccountId, BlockNumber, ForumConfig, Moment, PostId, ThreadId, -}; -use serde::Deserialize; -use serde_json::Result; - -#[derive(Deserialize)] -struct ForumData { - categories: Vec<(CategoryId, Category)>, - posts: Vec<( - PostId, - Post, - )>, - threads: Vec<(ThreadId, Thread)>, -} - -fn parse_forum_json() -> Result { - let data = include_str!("../../res/forum_data_acropolis_serialized.json"); - serde_json::from_str(data) -} - -pub fn create(forum_sudo: AccountId) -> ForumConfig { - let forum_data = parse_forum_json().expect("failed loading forum data"); - - let next_category_id: CategoryId = forum_data - .categories - .last() - .map_or(1, |category| category.0 + 1); - let next_thread_id: ThreadId = forum_data.threads.last().map_or(1, |thread| thread.0 + 1); - let next_post_id: PostId = forum_data.posts.last().map_or(1, |post| post.0 + 1); - - ForumConfig { - category_by_id: forum_data.categories, - thread_by_id: forum_data.threads, - post_by_id: forum_data.posts, - next_category_id, - next_thread_id, - next_post_id, - forum_sudo, - category_title_constraint: new_validation(10, 90), - category_description_constraint: new_validation(10, 490), - thread_title_constraint: new_validation(10, 90), - post_text_constraint: new_validation(10, 990), - thread_moderation_rationale_constraint: new_validation(10, 290), - post_moderation_rationale_constraint: new_validation(10, 290), - } -} diff --git a/node/src/forum_config/mod.rs b/node/src/forum_config/mod.rs deleted file mode 100644 index c99f69b4ce..0000000000 --- a/node/src/forum_config/mod.rs +++ /dev/null @@ -1,10 +0,0 @@ -pub mod from_serialized; - -// Not exported - only here as sample code -// mod from_encoded; - -use node_runtime::forum::InputValidationLengthConstraint; - -pub fn new_validation(min: u16, max_min_diff: u16) -> InputValidationLengthConstraint { - InputValidationLengthConstraint { min, max_min_diff } -} diff --git a/node/src/lib.rs b/node/src/lib.rs index d0b23aa71a..5db622eeb7 100644 --- a/node/src/lib.rs +++ b/node/src/lib.rs @@ -1,5 +1,7 @@ pub mod chain_spec; pub mod cli; -pub mod forum_config; -pub mod members_config; +#[macro_use] pub mod service; +pub mod command; +pub mod node_executor; +pub mod node_rpc; diff --git a/node/src/members_config.rs b/node/src/members_config.rs deleted file mode 100644 index 23172e9918..0000000000 --- a/node/src/members_config.rs +++ /dev/null @@ -1,50 +0,0 @@ -use serde::Deserialize; -use serde_json::Result; - -use primitives::crypto::{AccountId32, Ss58Codec}; - -#[derive(Deserialize)] -struct Member { - /// SS58 Encoded public key - address: String, - handle: String, - avatar_uri: String, - about: String, -} - -// fn test_load_members() -> Result> { -// let data = r#" -// [{ -// "address": "5Gn9n7SDJ7VgHqHQWYzkSA4vX6DCmS5TFWdHxikTXp9b4L32", -// "handle": "mokhtar", -// "avatar_uri": "http://mokhtar.net/avatar.png", -// "about": "Mokhtar" -// }]"#; - -// serde_json::from_str(data) -// } - -fn parse_members_json() -> Result> { - let data = include_str!("../res/acropolis_members.json"); - serde_json::from_str(data) -} - -pub fn decode_address(address: String) -> AccountId32 { - AccountId32::from_ss58check(address.as_ref()).expect("failed to decode account id") -} - -pub fn initial_members() -> Vec<(AccountId32, String, String, String)> { - let members = parse_members_json().expect("failed parsing members data"); - - members - .into_iter() - .map(|member| { - ( - decode_address(member.address), - member.handle, - member.avatar_uri, - member.about, - ) - }) - .collect() -} diff --git a/node/src/node_executor.rs b/node/src/node_executor.rs new file mode 100644 index 0000000000..665ca94898 --- /dev/null +++ b/node/src/node_executor.rs @@ -0,0 +1,10 @@ +use sc_executor::native_executor_instance; + +// Declare an instance of the native executor named `Executor`. Include the wasm binary as the +// equivalent wasm code. +native_executor_instance!( + pub Executor, + node_runtime::api::dispatch, + node_runtime::native_version, + frame_benchmarking::benchmarking::HostFunctions, +); diff --git a/node/src/node_rpc.rs b/node/src/node_rpc.rs new file mode 100644 index 0000000000..f33509e208 --- /dev/null +++ b/node/src/node_rpc.rs @@ -0,0 +1,188 @@ +// This file is part of Substrate. + +// Copyright (C) 2019-2020 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. + +//! A collection of node-specific RPC methods. +//! +//! Since `substrate` core functionality makes no assumptions +//! about the modules used inside the runtime, so do +//! RPC methods defined in `sc-rpc` crate. +//! It means that `client/rpc` can't have any methods that +//! need some strong assumptions about the particular runtime. +//! +//! The RPCs available in this crate however can make some assumptions +//! about how the runtime is constructed and what FRAME pallets +//! are part of it. Therefore all node-runtime-specific RPCs can +//! be placed here or imported from corresponding FRAME RPC definitions. + +#![warn(missing_docs)] + +use std::sync::Arc; + +use node_runtime::UncheckedExtrinsic; +use node_runtime::{opaque::Block, AccountId, Balance, BlockNumber, Hash, Index}; +use sc_consensus_babe::{Config, Epoch}; +use sc_consensus_babe_rpc::BabeRpcHandler; +use sc_consensus_epochs::SharedEpochChanges; +use sc_finality_grandpa::{SharedAuthoritySet, SharedVoterState}; +use sc_finality_grandpa_rpc::GrandpaRpcHandler; +use sc_keystore::KeyStorePtr; +use sc_rpc_api::DenyUnsafe; +use sp_api::ProvideRuntimeApi; +use sp_block_builder::BlockBuilder; +use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata}; +use sp_consensus::SelectChain; +use sp_consensus_babe::BabeApi; +use sp_transaction_pool::TransactionPool; + +/// Light client extra dependencies. +pub struct LightDeps { + /// The client instance to use. + pub client: Arc, + /// Transaction pool instance. + pub pool: Arc

, + /// Remote access to the blockchain (async). + pub remote_blockchain: Arc>, + /// Fetcher instance. + pub fetcher: Arc, +} + +/// Extra dependencies for BABE. +pub struct BabeDeps { + /// BABE protocol config. + pub babe_config: Config, + /// BABE pending epoch changes. + pub shared_epoch_changes: SharedEpochChanges, + /// The keystore that manages the keys of the node. + pub keystore: KeyStorePtr, +} + +/// Extra dependencies for GRANDPA +pub struct GrandpaDeps { + /// Voting round info. + pub shared_voter_state: SharedVoterState, + /// Authority set info. + pub shared_authority_set: SharedAuthoritySet, +} + +/// Full client dependencies. +pub struct FullDeps { + /// The client instance to use. + pub client: Arc, + /// Transaction pool instance. + pub pool: Arc

, + /// The SelectChain Strategy + pub select_chain: SC, + /// Whether to deny unsafe calls + pub deny_unsafe: DenyUnsafe, + /// BABE specific dependencies. + pub babe: BabeDeps, + /// GRANDPA specific dependencies. + pub grandpa: GrandpaDeps, +} + +/// Instantiate all Full RPC extensions. +pub fn create_full(deps: FullDeps) -> jsonrpc_core::IoHandler +where + C: ProvideRuntimeApi, + C: HeaderBackend + HeaderMetadata + 'static, + C: Send + Sync + 'static, + C::Api: substrate_frame_rpc_system::AccountNonceApi, + C::Api: pallet_transaction_payment_rpc::TransactionPaymentRuntimeApi< + Block, + Balance, + UncheckedExtrinsic, + >, + C::Api: BabeApi, + C::Api: BlockBuilder, + P: TransactionPool + 'static, + M: jsonrpc_core::Metadata + Default, + SC: SelectChain + 'static, +{ + use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApi}; + use substrate_frame_rpc_system::{FullSystem, SystemApi}; + + let mut io = jsonrpc_core::IoHandler::default(); + let FullDeps { + client, + pool, + select_chain, + deny_unsafe, + babe, + grandpa, + } = deps; + let BabeDeps { + keystore, + babe_config, + shared_epoch_changes, + } = babe; + let GrandpaDeps { + shared_voter_state, + shared_authority_set, + } = grandpa; + + io.extend_with(SystemApi::to_delegate(FullSystem::new( + client.clone(), + pool, + deny_unsafe, + ))); + // Making synchronous calls in light client freezes the browser currently, + // more context: https://github.com/paritytech/substrate/pull/3480 + // These RPCs should use an asynchronous caller instead. + io.extend_with(TransactionPaymentApi::to_delegate(TransactionPayment::new( + client.clone(), + ))); + io.extend_with(sc_consensus_babe_rpc::BabeApi::to_delegate( + BabeRpcHandler::new( + client, + shared_epoch_changes, + keystore, + babe_config, + select_chain, + deny_unsafe, + ), + )); + io.extend_with(sc_finality_grandpa_rpc::GrandpaApi::to_delegate( + GrandpaRpcHandler::new(shared_authority_set, shared_voter_state), + )); + + io +} + +/// Instantiate all Light RPC extensions. +pub fn create_light(deps: LightDeps) -> jsonrpc_core::IoHandler +where + C: sp_blockchain::HeaderBackend, + C: Send + Sync + 'static, + F: sc_client_api::light::Fetcher + 'static, + P: TransactionPool + 'static, + M: jsonrpc_core::Metadata + Default, +{ + use substrate_frame_rpc_system::{LightSystem, SystemApi}; + + let LightDeps { + client, + pool, + remote_blockchain, + fetcher, + } = deps; + let mut io = jsonrpc_core::IoHandler::default(); + io.extend_with(SystemApi::::to_delegate( + LightSystem::new(client, remote_blockchain, fetcher, pool), + )); + + io +} diff --git a/node/src/service.rs b/node/src/service.rs index 703bb6f5f2..a1ebae62c5 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -16,107 +16,141 @@ #![warn(unused_extern_crates)] -// Clippy linter warning. -#![allow(clippy::type_complexity)] // disable it because this is foreign code and can be changed any time - -// Clippy linter warning. -#![allow(clippy::redundant_closure_call)] // disable it because of the substrate lib design - -//! Service and ServiceFactory implementation. Specialized wrapper over substrate service. - -use client_db::Backend; -use grandpa::{self, FinalityProofProvider as GrandpaFinalityProofProvider}; -use inherents::InherentDataProviders; -use network::{construct_simple_protocol, NetworkService}; -use node_runtime::{self, opaque::Block, GenesisConfig, RuntimeApi}; -use offchain::OffchainWorkers; -use primitives::Blake2Hasher; -use runtime_primitives::traits::Block as BlockT; -use std::sync::Arc; -use substrate_client::{Client, LocalCallExecutor, LongestChain}; -pub use substrate_executor::{native_executor_instance, NativeExecutor}; -use substrate_service::{ - error::Error as ServiceError, AbstractService, Configuration, NetworkStatus, Service, - ServiceBuilder, -}; -use transaction_pool::{self, txpool::Pool as TransactionPool}; +// Substrate implementation issue. +#![allow(clippy::redundant_closure_call)] -construct_simple_protocol! { - /// Demo protocol attachment for substrate. - pub struct NodeProtocol where Block = Block { } -} +//! Service implementation. Specialized wrapper over substrate service. + +use node_runtime::opaque::Block; +use node_runtime::RuntimeApi; +use sc_consensus::LongestChain; +use sc_finality_grandpa::{ + self as grandpa, FinalityProofProvider as GrandpaFinalityProofProvider, StorageAndProofProvider, +}; +use sc_service::{ + config::Configuration, error::Error as ServiceError, AbstractService, ServiceBuilder, +}; +use sp_inherents::InherentDataProviders; +use std::sync::Arc; -// Declare an instance of the native executor named `Executor`. Include the wasm binary as the -// equivalent wasm code. -native_executor_instance!( - pub Executor, - node_runtime::api::dispatch, - node_runtime::native_version -); +use crate::node_executor; +use crate::node_rpc; /// Starts a `ServiceBuilder` for a full service. /// /// Use this macro if you don't actually need the full service, but just the builder in order to /// be able to perform chain operations. -#[macro_export] macro_rules! new_full_start { ($config:expr) => {{ - // type RpcExtension = jsonrpc_core::IoHandler; + use std::sync::Arc; + let mut import_setup = None; - let inherent_data_providers = inherents::InherentDataProviders::new(); + let mut rpc_setup = None; + let inherent_data_providers = sp_inherents::InherentDataProviders::new(); - let builder = substrate_service::ServiceBuilder::new_full::< - node_runtime::opaque::Block, - node_runtime::RuntimeApi, - crate::service::Executor, + let builder = sc_service::ServiceBuilder::new_full::< + Block, + RuntimeApi, + node_executor::Executor, >($config)? - .with_select_chain(|_config, backend| { - Ok(substrate_client::LongestChain::new(backend.clone())) - })? - .with_transaction_pool(|config, client| { - Ok(transaction_pool::txpool::Pool::new( - config, - transaction_pool::FullChainApi::new(client), + .with_select_chain(|_config, backend| Ok(sc_consensus::LongestChain::new(backend.clone())))? + .with_transaction_pool(|builder| { + let pool_api = sc_transaction_pool::FullChainApi::new(builder.client().clone()); + let config = builder.config(); + + Ok(sc_transaction_pool::BasicPool::new( + config.transaction_pool.clone(), + std::sync::Arc::new(pool_api), + builder.prometheus_registry(), )) })? - .with_import_queue(|_config, client, mut select_chain, _transaction_pool| { - let select_chain = select_chain - .take() - .ok_or_else(|| substrate_service::Error::SelectChainRequired)?; - let (grandpa_block_import, grandpa_link) = - grandpa::block_import::<_, _, _, node_runtime::RuntimeApi, _>( + .with_import_queue( + |_config, + client, + mut select_chain, + _transaction_pool, + spawn_task_handle, + prometheus_registry| { + let select_chain = select_chain + .take() + .ok_or_else(|| sc_service::Error::SelectChainRequired)?; + let (grandpa_block_import, grandpa_link) = grandpa::block_import( client.clone(), - &*client, + &(client.clone() as Arc<_>), select_chain, )?; - let justification_import = grandpa_block_import.clone(); - - let (block_import, babe_link) = babe::block_import( - babe::Config::get_or_compute(&*client)?, - grandpa_block_import, - client.clone(), - client.clone(), - )?; - - let import_queue = babe::import_queue( - babe_link.clone(), - block_import.clone(), - Some(Box::new(justification_import)), - None, - client.clone(), - client, - inherent_data_providers.clone(), - )?; - - import_setup = Some((block_import, grandpa_link, babe_link)); - Ok(import_queue) + let justification_import = grandpa_block_import.clone(); + + let (block_import, babe_link) = sc_consensus_babe::block_import( + sc_consensus_babe::Config::get_or_compute(&*client)?, + grandpa_block_import, + client.clone(), + )?; + + let import_queue = sc_consensus_babe::import_queue( + babe_link.clone(), + block_import.clone(), + Some(Box::new(justification_import)), + None, + client, + inherent_data_providers.clone(), + spawn_task_handle, + prometheus_registry, + )?; + + import_setup = Some((block_import, grandpa_link, babe_link)); + Ok(import_queue) + }, + )? + .with_rpc_extensions_builder(|builder| { + let grandpa_link = import_setup + .as_ref() + .map(|s| &s.1) + .expect("GRANDPA LinkHalf is present for full services or set up failed; qed."); + + let shared_authority_set = grandpa_link.shared_authority_set().clone(); + let shared_voter_state = grandpa::SharedVoterState::empty(); + + rpc_setup = Some((shared_voter_state.clone())); + + let babe_link = import_setup + .as_ref() + .map(|s| &s.2) + .expect("BabeLink is present for full services or set up failed; qed."); + + let babe_config = babe_link.config().clone(); + let shared_epoch_changes = babe_link.epoch_changes().clone(); + + let client = builder.client().clone(); + let pool = builder.pool().clone(); + let select_chain = builder + .select_chain() + .cloned() + .expect("SelectChain is present for full services or set up failed; qed."); + let keystore = builder.keystore().clone(); + + Ok(move |deny_unsafe| { + let deps = node_rpc::FullDeps { + client: client.clone(), + pool: pool.clone(), + select_chain: select_chain.clone(), + deny_unsafe, + babe: node_rpc::BabeDeps { + babe_config: babe_config.clone(), + shared_epoch_changes: shared_epoch_changes.clone(), + keystore: keystore.clone(), + }, + grandpa: node_rpc::GrandpaDeps { + shared_voter_state: shared_voter_state.clone(), + shared_authority_set: shared_authority_set.clone(), + }, + }; + + node_rpc::create_full(deps) + }) })?; - // We don't have any custom rpc commands... - // .with_rpc_extensions(|client, pool| -> RpcExtension { - // node_rpc::create(client, pool) - // })?; - (builder, import_setup, inherent_data_providers) + (builder, import_setup, inherent_data_providers, rpc_setup) }}; } @@ -126,58 +160,57 @@ macro_rules! new_full_start { /// concrete types instead. macro_rules! new_full { ($config:expr, $with_startup_data: expr) => {{ - use futures::sync::mpsc; - use network::DhtEvent; + use futures::prelude::*; + use sc_network::Event; + use sc_client_api::ExecutorProvider; + use sp_core::traits::BareCryptoStorePtr; let ( - is_authority, + role, force_authoring, name, - disable_grandpa + disable_grandpa, ) = ( - $config.roles.is_authority(), + $config.role.clone(), $config.force_authoring, - $config.name.clone(), - $config.disable_grandpa + $config.network.node_name.clone(), + $config.disable_grandpa, ); - // sentry nodes announce themselves as authorities to the network - // and should run the same protocols authorities do, but it should - // never actively participate in any consensus process. - let participates_in_consensus = is_authority && !$config.sentry_mode; + let (builder, mut import_setup, inherent_data_providers, mut rpc_setup) = + new_full_start!($config); - let (builder, mut import_setup, inherent_data_providers) = new_full_start!($config); - - // Dht event channel from the network to the authority discovery module. Use bounded channel to ensure - // back-pressure. Authority discovery is triggering one event per authority within the current authority set. - // This estimates the authority set size to be somewhere below 10 000 thereby setting the channel buffer size to - // 10 000. - let (dht_event_tx, _dht_event_rx) = - mpsc::channel::(10_000); - - let service = builder.with_network_protocol(|_| Ok(crate::service::NodeProtocol::new()))? - .with_finality_proof_provider(|client, backend| - Ok(Arc::new(grandpa::FinalityProofProvider::new(backend, client)) as _) - )? - .with_dht_event_tx(dht_event_tx)? - .build()?; + let service = builder + .with_finality_proof_provider(|client, backend| { + // GenesisAuthoritySetProvider is implemented for StorageAndProofProvider + let provider = client as Arc>; + Ok(Arc::new(grandpa::FinalityProofProvider::new(backend, provider)) as _) + })? + .build_full()?; let (block_import, grandpa_link, babe_link) = import_setup.take() - .expect("Link Half and Block Import are present for Full Services or setup failed before. qed"); + .expect("Link Half and Block Import are present for Full Services or setup failed before. qed"); + + let shared_voter_state = rpc_setup.take() + .expect("The SharedVoterState is present for Full Services or setup failed before. qed"); ($with_startup_data)(&block_import, &babe_link); - if participates_in_consensus { - let proposer = substrate_basic_authorship::ProposerFactory { - client: service.client(), - transaction_pool: service.transaction_pool(), - }; + if let sc_service::config::Role::Authority { .. } = &role { + let proposer = sc_basic_authorship::ProposerFactory::new( + service.client(), + service.transaction_pool(), + service.prometheus_registry().as_ref(), + ); let client = service.client(); let select_chain = service.select_chain() - .ok_or(substrate_service::Error::SelectChainRequired)?; + .ok_or(sc_service::Error::SelectChainRequired)?; + + let can_author_with = + sp_consensus::CanAuthorWithNativeVersion::new(client.executor().clone()); - let babe_config = babe::BabeParams { + let babe_config = sc_consensus_babe::BabeParams { keystore: service.keystore(), client, select_chain, @@ -187,62 +220,95 @@ macro_rules! new_full { inherent_data_providers: inherent_data_providers.clone(), force_authoring, babe_link, + can_author_with, }; - let babe = babe::start_babe(babe_config)?; - service.spawn_essential_task(babe); - } + let babe = sc_consensus_babe::start_babe(babe_config)?; + service.spawn_essential_task_handle().spawn_blocking("babe-proposer", babe); + } + + // Spawn authority discovery module. + if matches!(role, sc_service::config::Role::Authority{..} | sc_service::config::Role::Sentry {..}) { + let (sentries, authority_discovery_role) = match role { + sc_service::config::Role::Authority { ref sentry_nodes } => ( + sentry_nodes.clone(), + sc_authority_discovery::Role::Authority ( + service.keystore(), + ), + ), + sc_service::config::Role::Sentry {..} => ( + vec![], + sc_authority_discovery::Role::Sentry, + ), + _ => unreachable!("Due to outer matches! constraint; qed.") + }; + + let network = service.network(); + let dht_event_stream = network.event_stream("authority-discovery").filter_map(|e| async move { match e { + Event::Dht(e) => Some(e), + _ => None, + }}).boxed(); + let authority_discovery = sc_authority_discovery::AuthorityDiscovery::new( + service.client(), + network, + sentries, + dht_event_stream, + authority_discovery_role, + service.prometheus_registry(), + ); + + service.spawn_task_handle().spawn("authority-discovery", authority_discovery); + } - // if the node isn't actively participating in consensus then it doesn't + // if the node isn't actively participating in consensus then it doesn't // need a keystore, regardless of which protocol we use below. - let keystore = if participates_in_consensus { - Some(service.keystore()) + let keystore = if role.is_authority() { + Some(service.keystore() as BareCryptoStorePtr) } else { None - }; - - let config = grandpa::Config { - // FIXME #1578 make this available through chainspec - gossip_duration: std::time::Duration::from_millis(333), - justification_period: 512, - name: Some(name), - observer_enabled: true, - keystore, - is_authority, - }; - - match (is_authority, disable_grandpa) { - (false, false) => { - // start the lightweight GRANDPA observer - service.spawn_task(Box::new(grandpa::run_grandpa_observer( - config, - grandpa_link, - service.network(), - service.on_exit(), - )?)); - }, - (true, false) => { - // start the full GRANDPA voter - let grandpa_config = grandpa::GrandpaParams { - config: config, - link: grandpa_link, - network: service.network(), - inherent_data_providers: inherent_data_providers.clone(), - on_exit: service.on_exit(), - telemetry_on_connect: Some(service.telemetry_on_connect_stream()), - voting_rule: grandpa::VotingRulesBuilder::default().build(), - }; - // the GRANDPA voter task is considered infallible, i.e. - // if it fails we take down the service with it. - service.spawn_essential_task(grandpa::run_grandpa_voter(grandpa_config)?); - }, - (_, true) => { - grandpa::setup_disabled_grandpa( - service.client(), - &inherent_data_providers, - service.network(), - )?; - }, + }; + + let config = grandpa::Config { + // FIXME #1578 make this available through chainspec + gossip_duration: std::time::Duration::from_millis(333), + justification_period: 512, + name: Some(name), + observer_enabled: false, + keystore, + is_authority: role.is_network_authority(), + }; + + let enable_grandpa = !disable_grandpa; + if enable_grandpa { + // start the full GRANDPA voter + // NOTE: non-authorities could run the GRANDPA observer protocol, but at + // this point the full voter should provide better guarantees of block + // and vote data availability than the observer. The observer has not + // been tested extensively yet and having most nodes in a network run it + // could lead to finality stalls. + let grandpa_config = grandpa::GrandpaParams { + config, + link: grandpa_link, + network: service.network(), + inherent_data_providers: inherent_data_providers.clone(), + telemetry_on_connect: Some(service.telemetry_on_connect_stream()), + voting_rule: grandpa::VotingRulesBuilder::default().build(), + prometheus_registry: service.prometheus_registry(), + shared_voter_state, + }; + + // the GRANDPA voter task is considered infallible, i.e. + // if it fails we take down the service with it. + service.spawn_essential_task_handle().spawn_blocking( + "grandpa-voter", + grandpa::run_grandpa_voter(grandpa_config)? + ); + } else { + grandpa::setup_disabled_grandpa( + service.client(), + &inherent_data_providers, + service.network(), + )?; } Ok((service, inherent_data_providers)) @@ -252,70 +318,49 @@ macro_rules! new_full { }} } -#[allow(dead_code)] -type ConcreteBlock = node_runtime::opaque::Block; -#[allow(dead_code)] -type ConcreteClient = Client< - Backend, - LocalCallExecutor, NativeExecutor>, - ConcreteBlock, - node_runtime::RuntimeApi, ->; -#[allow(dead_code)] -type ConcreteBackend = Backend; - -/// A specialized configuration object for setting up the node.. -pub type NodeConfiguration = - Configuration; - /// Builds a new service for a full client. -pub fn new_full(config: NodeConfiguration) --> Result< - Service< - ConcreteBlock, - ConcreteClient, - LongestChain, - NetworkStatus, - NetworkService::Hash>, - TransactionPool>, - OffchainWorkers< - ConcreteClient, - >::OffchainStorage, - ConcreteBlock, - > - >, - ServiceError, -> -{ +pub fn new_full(config: Configuration) -> Result { new_full!(config).map(|(service, _)| service) } /// Builds a new service for a light client. -pub fn new_light( - config: NodeConfiguration, -) -> Result { - // type RpcExtension = jsonrpc_core::IoHandler; +pub fn new_light(config: Configuration) -> Result { let inherent_data_providers = InherentDataProviders::new(); - let service = ServiceBuilder::new_light::(config)? + let service = ServiceBuilder::new_light::(config)? .with_select_chain(|_config, backend| Ok(LongestChain::new(backend.clone())))? - .with_transaction_pool(|config, client| { - Ok(TransactionPool::new( - config, - transaction_pool::FullChainApi::new(client), - )) + .with_transaction_pool(|builder| { + let fetcher = builder + .fetcher() + .ok_or_else(|| "Trying to start light transaction pool without active fetcher")?; + let pool_api = + sc_transaction_pool::LightChainApi::new(builder.client().clone(), fetcher); + let pool = sc_transaction_pool::BasicPool::with_revalidation_type( + builder.config().transaction_pool.clone(), + Arc::new(pool_api), + builder.prometheus_registry(), + sc_transaction_pool::RevalidationType::Light, + ); + Ok(pool) })? .with_import_queue_and_fprb( - |_config, client, backend, fetcher, _select_chain, _tx_pool| { + |_config, + client, + backend, + fetcher, + _select_chain, + _tx_pool, + spawn_task_handle, + registry| { let fetch_checker = fetcher .map(|fetcher| fetcher.checker().clone()) .ok_or_else(|| { "Trying to start light import queue without active fetch checker" })?; - let grandpa_block_import = grandpa::light_block_import::<_, _, _, RuntimeApi>( + let grandpa_block_import = grandpa::light_block_import( client.clone(), backend, - &*client, + &(client.clone() as Arc<_>), Arc::new(fetch_checker), )?; @@ -323,35 +368,294 @@ pub fn new_light( let finality_proof_request_builder = finality_proof_import.create_finality_proof_request_builder(); - let (babe_block_import, babe_link) = babe::block_import( - babe::Config::get_or_compute(&*client)?, + let (babe_block_import, babe_link) = sc_consensus_babe::block_import( + sc_consensus_babe::Config::get_or_compute(&*client)?, grandpa_block_import, client.clone(), - client.clone(), )?; - let import_queue = babe::import_queue( + let import_queue = sc_consensus_babe::import_queue( babe_link, babe_block_import, None, Some(Box::new(finality_proof_import)), - client.clone(), client, inherent_data_providers.clone(), + spawn_task_handle, + registry, )?; Ok((import_queue, finality_proof_request_builder)) }, )? - .with_network_protocol(|_| Ok(NodeProtocol::new()))? .with_finality_proof_provider(|client, backend| { - Ok(Arc::new(GrandpaFinalityProofProvider::new(backend, client)) as _) + // GenesisAuthoritySetProvider is implemented for StorageAndProofProvider + let provider = client as Arc>; + Ok(Arc::new(GrandpaFinalityProofProvider::new(backend, provider)) as _) + })? + .with_rpc_extensions(|builder| { + let fetcher = builder + .fetcher() + .ok_or_else(|| "Trying to start node RPC without active fetcher")?; + let remote_blockchain = builder + .remote_backend() + .ok_or_else(|| "Trying to start node RPC without active remote blockchain")?; + + let light_deps = node_rpc::LightDeps { + remote_blockchain, + fetcher, + client: builder.client().clone(), + pool: builder.pool(), + }; + + Ok(node_rpc::create_light(light_deps)) })? - // We don't have any custom rpc extensions - // .with_rpc_extensions(|client, pool| -> RpcExtension { - // node_rpc::create(client, pool) - // })? - .build()?; + .build_light()?; Ok(service) } + +#[cfg(test)] +mod tests { + use crate::node_executor; + use crate::node_rpc; + use crate::service::{new_full, new_light}; + use codec::{Decode, Encode}; + use node_runtime::RuntimeApi; + use node_runtime::{currency::CENTS, SLOT_DURATION}; + use node_runtime::{opaque::Block, AccountId, DigestItem, Signature}; + use node_runtime::{BalancesCall, Call, UncheckedExtrinsic}; + use sc_consensus_babe::{BabeIntermediate, CompatibleDigestItem, INTERMEDIATE_KEY}; + use sc_consensus_epochs::descendent_query; + use sc_finality_grandpa::{self as grandpa}; + use sc_service::AbstractService; + use sp_consensus::{ + BlockImport, BlockImportParams, BlockOrigin, Environment, ForkChoiceStrategy, Proposer, + RecordProof, + }; + use sp_core::{crypto::Pair as CryptoPair, H256}; + use sp_finality_tracker; + use sp_keyring::AccountKeyring; + use sp_runtime::traits::IdentifyAccount; + use sp_runtime::{ + generic::{BlockId, Digest, Era, SignedPayload}, + traits::Verify, + traits::{Block as BlockT, Header as HeaderT}, + OpaqueExtrinsic, + }; + use sp_timestamp; + use sp_transaction_pool::{ChainEvent, MaintainedTransactionPool}; + use std::{any::Any, borrow::Cow, sync::Arc}; + + type AccountPublic = ::Signer; + + // Long running test. Run it locally only after the node changes. + #[test] + // It is "ignored", but the node-cli ignored tests are running on the CI. + // This can be run locally with `cargo test --release -p node-cli test_sync -- --ignored`. + #[ignore] + fn test_sync() { + let keystore_path = tempfile::tempdir().expect("Creates keystore path"); + let keystore = + sc_keystore::Store::open(keystore_path.path(), None).expect("Creates keystore"); + let alice = keystore + .write() + .insert_ephemeral_from_seed::("//Alice") + .expect("Creates authority pair"); + + let chain_spec = crate::chain_spec::tests::integration_test_config_with_single_authority(); + + // For the block factory + let mut slot_num = 1u64; + + // For the extrinsics factory + let bob = Arc::new(AccountKeyring::Bob.pair()); + let charlie = Arc::new(AccountKeyring::Charlie.pair()); + let mut index = 0; + + sc_service_test::sync( + chain_spec, + |config| { + let mut setup_handles = None; + new_full!( + config, + |block_import: &sc_consensus_babe::BabeBlockImport, + babe_link: &sc_consensus_babe::BabeLink| { + setup_handles = Some((block_import.clone(), babe_link.clone())); + } + ) + .map(move |(node, x)| (node, (x, setup_handles.unwrap()))) + }, + |config| new_light(config), + |service, &mut (ref inherent_data_providers, (ref mut block_import, ref babe_link))| { + let mut inherent_data = inherent_data_providers + .create_inherent_data() + .expect("Creates inherent data."); + inherent_data.replace_data(sp_finality_tracker::INHERENT_IDENTIFIER, &1u64); + + 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_number = *parent_header.number(); + + futures::executor::block_on(service.transaction_pool().maintain( + ChainEvent::NewBlock { + is_new_best: true, + hash: parent_header.hash(), + tree_route: None, + header: parent_header.clone(), + }, + )); + + let mut proposer_factory = sc_basic_authorship::ProposerFactory::new( + service.client(), + service.transaction_pool(), + None, + ); + + let epoch_descriptor = babe_link + .epoch_changes() + .lock() + .epoch_descriptor_for_child_of( + descendent_query(&*service.client()), + &parent_hash, + parent_number, + slot_num, + ) + .unwrap() + .unwrap(); + + let mut digest = Digest::::default(); + + // even though there's only one authority some slots might be empty, + // so we must keep trying the next slots until we can claim one. + let babe_pre_digest = loop { + inherent_data.replace_data( + sp_timestamp::INHERENT_IDENTIFIER, + &(slot_num * SLOT_DURATION), + ); + if let Some(babe_pre_digest) = sc_consensus_babe::test_helpers::claim_slot( + slot_num, + &parent_header, + &*service.client(), + &keystore, + &babe_link, + ) { + break babe_pre_digest; + } + + slot_num += 1; + }; + + digest.push(::babe_pre_digest( + babe_pre_digest, + )); + + let new_block = futures::executor::block_on(async move { + let proposer = proposer_factory.init(&parent_header).await; + proposer + .unwrap() + .propose( + inherent_data, + digest, + std::time::Duration::from_secs(1), + RecordProof::Yes, + ) + .await + }) + .expect("Error making test block") + .block; + + let (new_header, new_body) = new_block.deconstruct(); + let pre_hash = new_header.hash(); + // sign the pre-sealed hash of the block and then + // add it to a digest item. + let to_sign = pre_hash.encode(); + let signature = alice.sign(&to_sign[..]); + let item = ::babe_seal(signature.into()); + slot_num += 1; + + 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.fork_choice = Some(ForkChoiceStrategy::LongestChain); + + block_import + .import_block(params, Default::default()) + .expect("error importing test block"); + }, + |service, _| { + let amount = 5 * CENTS; + let to: AccountId = AccountPublic::from(bob.public()).into_account().into(); + let from: AccountId = 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 (spec_version, transaction_version) = { + let version = service.client().runtime_version_at(&best_block_id).unwrap(); + (version.spec_version, version.transaction_version) + }; + let signer = charlie.clone(); + + let function = Call::Balances(BalancesCall::transfer(to.into(), amount)); + + let check_spec_version = frame_system::CheckSpecVersion::new(); + let check_tx_version = frame_system::CheckTxVersion::new(); + let check_genesis = frame_system::CheckGenesis::new(); + 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 payment = pallet_transaction_payment::ChargeTransactionPayment::from(0); + let validate_grandpa_equivocation = + pallet_grandpa::ValidateEquivocationReport::new(); + let extra = ( + check_spec_version, + check_tx_version, + check_genesis, + check_era, + check_nonce, + check_weight, + payment, + validate_grandpa_equivocation, + ); + let raw_payload = SignedPayload::from_raw( + function, + extra, + ( + spec_version, + transaction_version, + genesis_hash, + genesis_hash, + (), + (), + (), + (), + ), + ); + let signature = raw_payload.using_encoded(|payload| signer.sign(payload)); + let (function, extra, _) = raw_payload.deconstruct(); + let xt = + UncheckedExtrinsic::new_signed(function, from.into(), signature.into(), extra) + .encode(); + let v: Vec = Decode::decode(&mut xt.as_slice()).unwrap(); + + index += 1; + OpaqueExtrinsic(v) + }, + ); + } + + #[test] + #[ignore] + fn test_consensus() { + sc_service_test::consensus( + crate::chain_spec::tests::integration_test_config_with_two_authorities(), + |config| new_full(config), + |config| new_light(config), + vec!["//Alice".into(), "//Bob".into()], + ) + } +} diff --git a/package.json b/package.json index 06b3453401..b4da7ff767 100644 --- a/package.json +++ b/package.json @@ -1,38 +1,53 @@ { - "private": true, - "name": "joystream", - "license": "GPL-3.0-only", - "scripts": { - "test": "yarn && yarn workspaces run test", - "test-migration": "yarn && yarn workspaces run test-migration", - "postinstall": "yarn workspace @joystream/types build", - "cargo-checks": "devops/git-hooks/pre-commit && devops/git-hooks/pre-push", - "cargo-build": "scripts/cargo-build.sh" - }, - "workspaces": [ - "tests/network-tests", - "cli", - "types", - "pioneer", - "pioneer/packages/*" - ], - "resolutions": { - "@polkadot/api": "^0.96.1", - "@polkadot/api-contract": "^0.96.1", - "@polkadot/keyring": "^1.7.0-beta.5", - "@polkadot/types": "^0.96.1", - "@polkadot/util": "^1.7.0-beta.5", - "@polkadot/util-crypto": "^1.7.0-beta.5", - "babel-core": "^7.0.0-bridge.0", - "typescript": "^3.7.2" - }, - "devDependencies": { - "husky": "^4.2.5" - }, - "husky": { - "hooks": { - "pre-commit": "devops/git-hooks/pre-commit", - "pre-push": "devops/git-hooks/pre-push" - } - } + "private": true, + "name": "joystream", + "version": "1.0.0", + "license": "GPL-3.0-only", + "scripts": { + "test": "yarn && yarn workspaces run test", + "test-migration": "yarn && yarn workspaces run test-migration", + "postinstall": "yarn workspace @joystream/types build", + "cargo-checks": "devops/git-hooks/pre-commit && devops/git-hooks/pre-push", + "cargo-build": "scripts/cargo-build.sh", + "lint": "yarn workspaces run lint" + }, + "workspaces": [ + "tests/network-tests", + "cli", + "types", + "storage-node", + "storage-node/packages/*", + "devops/eslint-config", + "devops/prettier-config", + "pioneer", + "pioneer/packages/*", + "utils/api-examples" + ], + "resolutions": { + "@polkadot/api": "1.26.1", + "@polkadot/api-contract": "1.26.1", + "@polkadot/keyring": "^3.0.1", + "@polkadot/types": "1.26.1", + "@polkadot/util": "^3.0.1", + "@polkadot/util-crypto": "^3.0.1", + "@polkadot/wasm-crypto": "^1.2.1", + "babel-core": "^7.0.0-bridge.0", + "typescript": "^3.9.7", + "bn.js": "^5.1.2" + }, + "devDependencies": { + "husky": "^4.2.5", + "prettier": "2.0.2", + "eslint": "^7.6.0" + }, + "husky": { + "hooks": { + "pre-commit": "devops/git-hooks/pre-commit", + "pre-push": "devops/git-hooks/pre-push" + } + }, + "engines": { + "node": ">=12.18.0", + "yarn": "^1.22.0" + } } diff --git a/pioneer/.123trigger b/pioneer/.123trigger index 7ed6ff82de..553d62ba4d 100644 --- a/pioneer/.123trigger +++ b/pioneer/.123trigger @@ -1 +1,2 @@ -5 +11 +0.45.2 diff --git a/pioneer/.dockerignore b/pioneer/.dockerignore index 3c3629e647..1c8c93fa2d 100644 --- a/pioneer/.dockerignore +++ b/pioneer/.dockerignore @@ -1 +1,3 @@ node_modules +build +.git diff --git a/pioneer/.env-example b/pioneer/.env-example new file mode 100644 index 0000000000..0b0cd09dcf --- /dev/null +++ b/pioneer/.env-example @@ -0,0 +1,4 @@ +# You can define all your ENV in such a file and run docker as: +# docker run ... --env-file .env ... +WS_URL=ws://localhost:9944 +POLKADOT_UI_SAMPLE=42 diff --git a/pioneer/.eslintignore b/pioneer/.eslintignore index 779cb10d5f..50caaf3056 100644 --- a/pioneer/.eslintignore +++ b/pioneer/.eslintignore @@ -1,4 +1,5 @@ **/build/* **/coverage/* **/node_modules/* +.eslintrc.js i18next-scanner.config.js diff --git a/pioneer/.eslintrc.js b/pioneer/.eslintrc.js index 3ccc1c8353..4b3de541bd 100644 --- a/pioneer/.eslintrc.js +++ b/pioneer/.eslintrc.js @@ -1,4 +1,5 @@ -const base = require('@polkadot/dev-react/config/eslint'); +// At some point don't depend on @polkadot rules and use @joystream/eslint-config +const base = require('@polkadot/dev/config/eslint'); // add override for any (a metric ton of them, initial conversion) module.exports = { @@ -12,9 +13,23 @@ module.exports = { rules: { ...base.rules, '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/camelcase': 'off', - 'react/prop-types': 'off', 'new-cap': 'off', - '@typescript-eslint/interface-name-prefix': 'off' - } + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/ban-ts-comment': 'error', + // why only required in VSCode!?!? is eslint plugin not working like eslint commandline? + // Or are we having to add this because of new versions of eslint-config-* ? + 'no-console': 'off', + // Override some extended config rules: + 'camelcase': 'off', + 'header/header': 'off', + 'sort-keys': 'off', + 'react/jsx-sort-props': 'off', + 'react/jsx-max-props-per-line': 'off', + 'sort-destructure-keys/sort-destructure-keys': 'off', + '@typescript-eslint/unbound-method': 'warn', // Doesn't work well with our version of Formik, see: https://github.com/formium/formik/issues/2589 + 'react-hooks/exhaustive-deps': 'warn', // Causes more issues than it solves currently + 'no-void': 'off' // Otherwise we cannot mark unhandles promises + }, + // isolate pioneer from monorepo eslint rules + root: true }; diff --git a/pioneer/.gitignore b/pioneer/.gitignore index f24119b7cf..9f92cfdb84 100644 --- a/pioneer/.gitignore +++ b/pioneer/.gitignore @@ -10,13 +10,16 @@ tmp/ .env.test.local .env.production.local .npmrc +.yarn/* +!.yarn/releases +!.yarn/plugins +.pnp.* cc-test-reporter package-lock.json npm-debug.log* yarn-debug.log* yarn-error.log* !patches/** -.idea/ # Built Joystream types: packages/joy-types/lib/ diff --git a/pioneer/.prettierignore b/pioneer/.prettierignore new file mode 100644 index 0000000000..1d085cacc9 --- /dev/null +++ b/pioneer/.prettierignore @@ -0,0 +1 @@ +** diff --git a/pioneer/.storybook/webpack.config.js b/pioneer/.storybook/webpack.config.js index 6c02952773..32d03f6c6a 100644 --- a/pioneer/.storybook/webpack.config.js +++ b/pioneer/.storybook/webpack.config.js @@ -1,81 +1,47 @@ const path = require('path') const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); module.exports = ({ config }) => { + // Styles (replace the provided rule): + const originalCssRuleIndex = config.module.rules.findIndex(rule => rule.test.source.includes('.css')); + config.module.rules[originalCssRuleIndex] = { + test: /\.(sa|sc|c)ss$/i, + use: [ + // Creates `style` nodes from JS strings + 'style-loader', + // Translates CSS into CommonJS + 'css-loader', + // Compiles Sass to CSS + 'sass-loader' + ] + }; -// Post CSS loader for sources: -config.module.rules.push({ - test: /\.css$/, - include: path.resolve(__dirname, '../packages'), - exclude: /(node_modules)/, - use: [ - { - loader: require.resolve('postcss-loader'), - options: { - // Set postcss.config.js config path && ctx - config: { - path: '../postcss.config.js', - }, - ident: 'postcss', - plugins: () => [ - require('precss'), - require('autoprefixer'), - require('postcss-simple-vars'), - require('postcss-nested'), - require('postcss-import'), - require('postcss-clean')(), - require('postcss-flexbugs-fixes') - ] - } - } - ] -}); + // TypeScript loader (via Babel to match polkadot/apps) + config.module.rules.push({ + test: /\.(js|ts|tsx)$/, + exclude: /(node_modules)/, + use: [ + { + loader: require.resolve('babel-loader'), + options: require('@polkadot/dev/config/babel') + }, + ], + }); + config.resolve.extensions.push('.js', '.ts', '.tsx'); -// TypeScript loader (via Babel to match polkadot/apps) -config.module.rules.push({ - test: /\.(js|ts|tsx)$/, - exclude: /(node_modules)/, - use: [ - { - loader: require.resolve('babel-loader'), - options: require('@polkadot/dev-react/config/babel') - }, - ], -}); -config.resolve.extensions.push('.js', '.ts', '.tsx'); + // TSConfig, uses the same file as packages + config.resolve.plugins = config.resolve.plugins || []; + config.resolve.plugins.push( + new TsconfigPathsPlugin({ + configFile: path.resolve(__dirname, '../tsconfig.json'), + }) + ); -// TSConfig, uses the same file as packages -config.resolve.plugins = config.resolve.plugins || []; -config.resolve.plugins.push( - new TsconfigPathsPlugin({ - configFile: path.resolve(__dirname, '../tsconfig.json'), - }) -); + // Stories parser + config.module.rules.push({ + test: /\.stories\.tsx?$/, + loaders: [require.resolve('@storybook/source-loader')], + enforce: 'pre', + }); -// Stories parser -config.module.rules.push({ - test: /\.stories\.tsx?$/, - loaders: [require.resolve('@storybook/source-loader')], - enforce: 'pre', -}); - -// CSS preprocessors -config.module.rules.push( - { - test: /\.s[ac]ss$/i, - use: [ - // Creates `style` nodes from JS strings - 'style-loader', - // Translates CSS into CommonJS - 'css-loader', - // Compiles Sass to CSS - 'sass-loader', - ], - }, - { - test: /\.less$/, - loaders: [ 'style-loader', 'css-loader', 'less-loader' ] - } -); - -return config; + return config; }; diff --git a/pioneer/.stylelintrc b/pioneer/.stylelintrc new file mode 100644 index 0000000000..9393792fe4 --- /dev/null +++ b/pioneer/.stylelintrc @@ -0,0 +1,7 @@ +{ + "extends": [ + "stylelint-config-recommended", + "stylelint-config-styled-components" + ], + "defaultSeverity": "warning" +} diff --git a/pioneer/CHANGELOG.md b/pioneer/CHANGELOG.md index 07acbeb0ef..6ffcc70be7 100644 --- a/pioneer/CHANGELOG.md +++ b/pioneer/CHANGELOG.md @@ -1,4 +1,358 @@ -# 0.36.1 +# CHANGELOG + +## 0.51.1 Jul 27, 2020 + +- Support for Acala chain and types (Thanks to https://github.com/aniiantt) +- First batch of i18n for Arabic (Thanks to https://github.com/nightwolf3) +- Update for Polkadot council thresholds +- Council motion adjustment to cater for current and previous generations +- Adjust imminent proposals to not need own type adjustments +- Cleanup voting totals to only take free into account +- Support JSON v3 formats with kdf +- Always display time left in countdowns, not blocks +- Adjust progress component to be circular +- Rename "Deposit" button to "Send" button (less confusion) +- Ensure new generation tip cancel works for council & users +- Split council votes in backing & number of votes +- Adjust council motions to have the correct max display for nay votes +- Adjust payout toggles with increasing day increments +- Adjust button formats & layouts +- Adjust council slashing params to cater for current generation +- Fixed for keyboard locale detection +- Don't allow display in an iframe + +## 0.50.1 Jul 20, 2020 + +- Adjust CSPs for Electron (Thanks to https://github.com/EthWorks) +- Move delegation column to badge (Thanks to https://github.com/Tbaut) +- Display costs for preimage calls +- Add buttons for bid/unbid on Society +- Allow tip endorsements while in countdown +- Flatten events to group by same-kind in the same block +- Adjust identity validation to check for whitespacing +- Allow the use of VecFixed params with type detection/inputs +- Adjust controller changing to filter when stash === controller (no error, but warn) +- Allow the poll module via Governance proxy +- Expand proxy detection to deep-inspect batched calls +- Ensure various APIs are available (filtering) before attempting to render +- Ensure tooltips are correctly displayed on account hovers +- Cleanup council display for candidates +- Cleanup and simplify QR import logic (& always set genesisHash, even when not supplied) +- Always set genesisHash when accounts are derived +- Adjust breakpoints for `AccountName` via `AddressShort` +- Cleanup SUI dependencies with unused components, Progress, Responsive, Toggle +- Adjust module bundling splits, remove unused libraries & fonts +- Remove unmaintained page-123code (& references) +- Don't display finalized blocks when grandpa is not available + +## 0.49.1 Jul 13, 2020 + +- Update Subscan links with supported chains (https://github.com/carumusan) +- Enhance Electron desktop with CSP & best practices (Thanks to https://github.com/EthWorks) +- Activate Electron update feature by default (Thanks to https://github.com/EthWorks) +- Use external browser for embedded links in Electron (Thanks to https://github.com/EthWorks) +- Add testing around Electron features (Thanks to https://github.com/EthWorks) +- Support democracy account delegation (Thanks to https://github.com/Tbaut) +- Don't filter selected on multi account selector (Thanks to https://github.com/Tbaut) +- Add support for Polkadot denomination poll +- Allow input & display of OpaqueCall type from multisig +- Indicate own nominees on targets page (re-added with badges) +- Re-add indicator for own nominators in staking targets +- Add `?filter=` query param support on staking URLs +- Add generator for Kusama society designs +- Handle OpaqueCall in inputs and well as displays (multisig) +- Small layout adjustments for address display components +- Performance improvements on wrapped styles, component libraries +- Add support for display detected ASCII bytes as text +- Adjust type injection to override on-connect API defaults +- Adjust attestation display with no-balance filters + +## 0.48.1 Jul 6, 2020 + +- Fix for electron package build (Thanks to https://github.com/EthWorks) +- Allow for setting of sub identities via account action +- Adjust known account icons (Society & Treasury) +- Add Westend chain to Subscan link generator +- Display a warning with extensions and no injected accounts +- Retrieve all tips at once and sort by closing +- Fix identity set dialogs to never pass empty fields +- Optimize favorites retrieval & selection for staking (shared between) +- Support new registrar ProxyType in the signer +- Hide funds unbonding when non bonded +- Add withdraw action to staking menu (as available) +- Fix InputAddress component with state change warnings +- Bump to latest API and utilities + +## 0.47.1 Jul 1, 2020 + +- Update zh translation (Thanks to https://github.com/dushaobindoudou) +- Add DataHighway Harbour testnet endpoint (Thanks to https://github.com/ltfschoen) +- Small I18N key fix (Thanks to https://github.com/ltfschoen) +- Allow for Electron auto-update on Mac (Thanks to https://github.com/EthWorks) +- Swap to default conviction of 1x (Thanks to https://github.com/Tbaut) +- Make preimage hash selectable on FF (Thanks to https://github.com/Tbaut) +- show unbonding value in staking actions (Thanks to https://github.com/Tbaut) +- Default (via toggle) to only last 25% of eras for payouts +- Allow retracting of tips by proposer +- Allow tipping with new Substrate types (dual old/new support) +- Enable the full retrieval of all Map/Doublemap entries +- Support correct display of vesting with locks (& unlock via account) +- Adjust on-chain identity inputs with field validation +- Enable grouping of democracy locks by type +- Resolve identity links starting with https://twitter +- Display voted & unvoted council motions, referendums & tips +- Adjust toggles for file/bytes uploads +- Correct handling of recursive param structures in extrinsics +- Swap icons to use font-awesome directly, including official components +- Additional small UI cleanups and fixes + +## 0.46.1 Jun 22, 2020 + +- I18n for es (Thanks to https://github.com/wimel) +- Support for importing mini secrets via QR (Thanks to https://github.com/hanwencheng) +- Update SubstrateTEE types (Thanks to https://github.com/brenzi) +- Support for multisig calls with new weight parameters +- Split sign and send updates in the signer modal for better UI tracking +- Hide zero nonce of accounts/contracts pages +- Display API extrinsic construction errors in the extrinsics app +- Do not display signer proxies when there are none matching against accounts +- Sort recovery addresses to align with the Substrate implementation +- Check for funded controller on bonding +- Suggest max values for bonding (& bonding extra), adjusting checks +- Handle isForceEra to adjust era displays +- Display candidacy bond on council submission +- Adjust AddressMni & AddressSmall components to take advantage of bigger screens +- Display referendum & treasury tips voting status +- Add tips close buttons & countdown timer +- Disabled nominations via targets when in election +- Expand targets page to include waiting validators (full overview of all) +- Apply shared filters (name, toggles) on all validator lists +- Display balances in account view sidebar +- Adjust signer dialog ith split sign/send (better status displays) +- Adjust proxy checks for sudo calls to closer align with Polkadot +- Apply i18n caching, with no reload on translation page +- Add "Apply" i18n button to reflect editing changes in the UI +- Support Tuple inputs (params/extrinsics) for custom names +- `@polkadot/api` 1.20.1 +- `@polkadot/util` 2.15.1 + +## 0.45.2 Jun 16, 2020 + +- I18n for ja (Thanks to https://github.com/SotaWatanabe) +- I18n for pt (thanks to https://github.com/laurogripa) +- I18n for ru (Thanks to https://github.com/illlefr4u) +- Update Encointer types (thanks to https://github.com/brenzi) +- Improve Electron app security settings (Thanks to https://github.com/EthWorks) +- Rework signer dialog to cater for proxies (and multisig/proxy combinations) +- Construct payouts with oldest eras first (expire first) +- Show outstanding multisig approvals on accounts page +- Allow for addition of proxied accounts (access to proxy account only) +- Change claims to handle no statements required (new module now on Kusama) +- Publish docker image on release +- update collective calls to handle weights enhancements for latest Substrate +- Allow for tip endorsements with 0 value +- add Centrifuge live as a connection option +- Adjust Polkascan links with current active chains +- When collective proposal is in close state, hide vote buttons +- Cleanup technical committee display (header alignment) +- Adjust IPFS/IPNS network extraction for local gateways +- `@polkadot/api` 1.19.1 +- `@polkadot/util` 2.14.1 + +## 0.44.1 Jun 10, 2020 + +- Publish electron images on release (Thanks to https://github.com/EthWorks) +- Adjust with latest Arcardia types (Thanks to https://github.com/ETeissonniere) +- Extensions and fixes to the russian translations (Thanks to https://github.com/illlefr4u) +- Rewrite of the contracts app (Thanks to https://github.com/kwingram25) +- New types for SubstrateTEE (Thanks to https://github.com/brenzi) +- Adjust for new Polkadot CC1 & Kusama types +- Cater for new multisig module location +- Filter multisig signatories based on approvals, set final state based on threshold +- Adapt QR codes to cater for hashing on large payloads +- Adjust collective extrinsics to cater for weight & lengths +- Allow bonding with full free amount (this fixes bonding for vesting) +- Fixes for Kusama as well as Polkadot claims +- Allow Polkadot CC1 links to Polkascan & Subscan +- Update Polkascan links with new formats +- Don't display era progress when Forcing `isForceNone` +- Overall styling adjustments +- Cater for `{kusama,polkadot,westend}.dotapps.io` redirects +- `@polkadot/api` 1.18.1 +- `@polkadot/util` 2.13.1 + +## 0.43.1 May 26, 2020 + +- Support for Polkadot CC1 Claims (Thanks to https://github.com/amaurymartiny & https://github.com/Tbaut) +- Small typo fixes (Thanks to https://github.com/Swader) +- updates to russian translation (Thanks to https://github.com/illlefr4u) +- Adjustments to Electron build support (Thanks to https://github.com/EthWorks) +- Support for Polkadot CC1 types & RPC endpoints +- Detect & support new proposal close process in Substrate +- Adjust checks for on-click validator (immediate isActive) +- `@polkadot/api` 1.16.1 +- `@polkadot/util` 2.11.1 + +## 0.42.1 May 22, 2020 + +- Adjust Subscan proposal links (Thanks to https://github.com/illlefr4u) +- Add environment suport for docker images (Thanks to https://github.com/chevdor) +- Adjust overflows on small screens (Thanks to https://github.com/dushaobindoudou) +- Add links to Polkaassembly (Thanks to https://github.com/Tbaut) +- Address popup with detailed info (Thanks to https://github.com/kwingram25) +- Add Russian translation (Thanks to https://github.com/gregzaitsev) +- Russian translation adjustments (Thanks to https://github.com/illlefr4u) +- Add Nodle RPC endpoint (Thanks to https://github.com/ETeissonniere) +- Update Kulupu types (Thanks to https://github.com/sorpaas) +- Update Edgeware types (Thanks to https://github.com/drewstone) +- Update Encointer types (Thanks to https://github.com/brenzi) +- Update node-template types (Thanks to https://github.com/shawntabrizi) +- Update node-template types (Thanks to https://github.com/JoshOrndorff) +- Higher default contracts gas limit (Thanks to https://github.com/Stefie) +- Add block number display to event overview (Thanks to https://github.com/danforbes) +- Basic Electron support (Thanks to https://github.com/EthWorks) +- Documentation around IPFS pinning (Thanks to https://github.com/chevdor) +- Added IPFS/IPNS publishing (ipns via dotapps.io) +- Support for multisig wallets +- Ledger address on-wallet display option +- Add support for new per-staker payouts +- Allow for "best" selection in staking +- Simplified nominator & validator creation flows +- Display >64 nominators on staking pages (clipped payouts) +- Remove tooltips on staking and elsewhere (large number causes performance issues) +- Council isMember checks uses council in addition to elections +- Allow closing of council proposals +- Expand Treasury proposal inline in council (for approve/reject) +- Expand external proposals in council (preimage lookups) +- Allow for sudo with unchecked weight +- Adjust referendums to display turnout and sentiment +- Add columar modals with extra info +- Add table summaries with totals for free, bonded & stash payouts +- Add images to metadata update dropdowns +- Ecdsa keypair support +- Display delegations in voting breakdowns +- Adjust registrar modal with per-account filters +- Add i18n linting script +- Add i18n editor with translation file generator +- Custom i18n loader with caching +- Add JS sample for storage key generation +- Misc UI fixes & adjustments throughout +- Allow for tabes with aliasses (on renames) & redirects +- Align types and calls with latest substrate + +## 0.41.1 Apr 20, 2020 + +- Fix for searching child identities on parent name (Thanks to https://github.com/krogla) +- Support chains with no balances module (Thanks to https://github.com/Voxelot) +- Add out-of-the-box support for Encointer (Thanks to https://github.com/brenzi) +- Add ava.do endpoint for Kusama (Thanks to https://github.com/Swader) +- Show remaining time on staking payout actions, link payouts from actions +- Display per-validator nominators on waiting list +- Add support for Treasury tipping (display of available & creation) +- Adjust display of passing/failing calcs in democracy (incl. no display when other side is 0) +- Enable use of `system_chainType` to detect development chains +- Adjust Expander display for balances as used in accounts +- Adjust formatting outputs (via cleanup) for state queries +- Cleanup nowrap on Extender as part of tables +- Optimize retrieval of old-style validator/nominator payouts (not full historyDepth) +- Optimize AccountName with caching & when used in lists (no lookup information attached, but not shown) +- Optimize IdentityIcon with removal of extra queries +- Optimize Transfers, no unneeded useEffect +- Cleanups, remove unused components with no references (dropped in earlier refactoring) +- More components to functional, specific focus on TxModal extends +- Bumps to all @polkadot/* packages for latest support everywhere + +## 0.40.1 Apr 9, 2020 + +- Swap voting to aye/nay toggles (Thanks to https://github.com/Lowhearth) +- Cater for chains where no tip is present (Thanks to https://github.com/Sushisource) +- Export chain-specific settings via QR (thanks to https://github.com/hanwencheng) +- Improve support for WS_URL usage (Thanks to https://github.com/chevdor) +- Add out-of-the-box support for Centrifuge (Thanks to https://github.com/philipstanislaus) +- Cleanup docker image construction (Thanks to https://github.com/philipstanislaus) +- Add out-of-the-box support for node template (Thanks to https://github.com/JoshOrndorff) +- Text cleanups (Thanks to https://github.com/x5engine) +- Text cleanups (Thanks to https://github.com/ltfschoen) +- update Parachains to support latest Polkadot (Thanks to https://github.com/kwingram25) +- Rework multi address inputs (e.g. nominations & council) (Thanks to https://github.com/kwingram25) +- Introduce apps-config as a single source of config information +- Cater for metadata updates to extensions +- Rework explorer layouts, combining extrinsics & events into a single view +- Swap all layouts to be explicitly table-based (instead of table-like) +- Cater for latest Substrate referendum updates +- Allow for fast-tracking proposals +- Time countdowns where applicable, e.g. referendums +- Show referendum pass/fail status as well as change information +- Combine Accounts & Contacts into a single app +- Support for display of parent/child relationships in accounts +- Add ErrorBoundary around components +- Update Westend after reset +- Enable Subscan explorer +- Support for simple payouts on Substrate, with Payouts screen +- Extensive use of useCallback & React.memo for functional components +- Add Expander component for consistent UI +- Loading spinners used consistently +- Specific names for society & treasury addresses +- Cleanup all voting lock, consistent display +- ... loads of other under-the-hood improvements and cleanups + +## 0.39.1 Jan 31, 2020 + +- **Breaking** Drop support for V1 Substrate chains +- Translation into Chinese (Thanks to https://github.com/dushaobindoudou) +- Support for sign-only transactions (Thanks to https://github.com/mzolkiewski) +- Add support for WestEnd testnet +- Add support for social recovery in accounts +- Add counters for all proposal-based apps +- Disable spellcheck on all input fields (privacy) +- Query the paymentInfo API to get weight fee information +- Remove FF warning with https:// -> ws://localhost +- Staking now supports where the controller or stash accounts are not local +- Social app +- Add support for identity setting (via identity module) +- Add support for registrars to hand out identity judgements +- Use both internal and lib hooks as applicable (refactoring) +- Support QR codes (accounts) with optional names +- Cleanup all Modals, simplify +- Adjust balance display formats +- Update to latest libraries (incl. util 2.0 & api 1.0) + +## 0.38.1 + +- Fix summarybar in 123-code (Thanks to https://github.com/anakornk) +- Update Edgeware with correct keys (Thanks to https://github.com/drewstone) +- Add InputAddressMulti inputs, both to council and staking nominators +- Rework all layouts, removing cards for table-ike-layouts +- Technical comittee app +- Allow for external proposal and queued for dispatch in democracy +- Add pre-image support to democracy proposals (including imminent) +- Improved staking page rendering (background) +- Update to latest libraries + +## 0.37.1 + +- Support for Kusama CC3 +- Support for contracts with new ABI v2 (Thanks to https://github.com/kwingram25) +- Support for on-chain nicks +- Speed improvements for the staking pages +- Add account derivation from existing account +- Council voting with runner up & phragmen +- Allow favorites in validators pages +- Rework nominations to take favorites & current into account +- Enhance AddressCard with additional info (incl. vested) +- Move account/address actions to popup menu +- Convert a large number of components to use hooks +- Display validator graphs +- Refactor of backup modal (Thanks to @LukeSugiura) +- Enable language setting options (Thanks to @LukeSugiura) +- Allow for signRaw to be used in the signing toolbox (injected accounts) +- Display account names in status events +- Nomination targets dashboard +- Validator preferences are expressed as commission % as supported by chains +- Account locks are applied on a genesis range (e.g. CC2 & CC3 allow availability) +- ... lots of smaller enhancements & bug fixes + +## 0.36.1 - Api 0.95.1, Util 1.6.1, Extension 0.13.1 - Support latest contracts ABI (via API), incl. rework of contracts UI @@ -20,7 +374,7 @@ - Make the network selection clickable on network name (via bounty) - ... and a number of cleanups all around -# 0.35.1 +## 0.35.1 - Api 0.91.1, Util 1.2.1, Extension 0.10.1 - Support for accounts added via Qr (for instance, the Parity Signer) @@ -33,7 +387,7 @@ - Fix account derivation with `///password` - Lots of component & maintainability cleanups -# 0.34.1 +## 0.34.1 - Kusama support - Full support for Substrate 2.x & Polkadot 0.5.0 networks @@ -42,7 +396,7 @@ - Basic Council, Parachains & Treasury apps - Moved ui-* packages to react-* -# 0.33.1 +## 0.33.1 - Allow for externally injected accounts (i.e. via extension, polkadot-js & SingleSource) - Links to extrnisics & addresses on Polkascan @@ -60,39 +414,39 @@ - Latest @polkadot/util & @polkadot/api - A large number of optimizations and smaller fixes -# 0.32.1 +## 0.32.1 - Support for Substrate 1.0 release & metadata v4 - @polkadot/api 0.77.1 -# 0.31.1 +## 0.31.1 - Cleanups, fixes and features around the poc-4 staking module - Number of UI enhancements -# 0.30.1 +## 0.30.1 - Staking page indicator for offline nodes (count & block) - Rework page tabs and content layouts - Cleanup of all UI summary headers - Emberic Elem support (replaces Dried Danta) -# 0.29.1 +## 0.29.1 - @polkadot/util & @polkadot/api 0.75.1 -# 0.28.1 +## 0.28.1 - Support for substrate 1.0-rc -# 0.27.1 +## 0.27.1 - Bring in new staking & nominating functions - Swap default keyring accounts (on creation) to sr25519 - New faster crypto algorithms - Misc. bug fixes all around -# 0.26.1 +## 0.26.1 - Swap keyring to HDKD derivation, mnemonic keys are now not backwards compatible with those created earlier. (Defaults are still for ed25519) - Swap crypto to new WASM-backed version (and remove libsodium dependency) @@ -100,23 +454,23 @@ - New mobile-friendly sidebar - Fix issues with nominating (old non-bonds interface) -# 0.25.1 +## 0.25.1 - Swap to publishing -beta.x on merge (non-breaking testing) - # 0.24.1 + ## 0.24.1 Storage now handles Option type properly - # 0.23.1 + ## 0.23.1 JavaScript console introduced -# 0.22.1 +## 0.22.1 - Use new Compact transaction format - this requires the latest binaries from either Polkadot or Substrate -# 0.21.1 +## 0.21.1 - PoC-3 support with latest Substrate master & Polkadot master - Add support for Charred Cherry (Substrate) and Alexander (Polkadot) testnets diff --git a/pioneer/I18N.md b/pioneer/I18N.md new file mode 100644 index 0000000000..112e3b81ff --- /dev/null +++ b/pioneer/I18N.md @@ -0,0 +1,22 @@ +# I18N + +The apps UI allows all strings to be translated. Additionally it has a basic UI that allows for the creation of the required translation files, which will give an overview on the progress for a specific language. + +## Updating translations + +To update translations, the following process is required. + +- launch the apps UI, either locally or via https://polkadot.js.org/apps +- explicitly navigate to the i18n page, https://polkadot.js.org/apps/#/settings/i18n + +Here you will find a dropdown of all the available languages and all the modules that maps to the UI. On a single screen you will be able to see all the available strings for a specific module. + +- adjust any strings as required +- once completed with the changes, click the `Generate translation.json` button to download the translation file +- this file can now be added to the repo with a PR to https://github.com/polkadot-js/apps/tree/master/packages/apps/public/locales + +## Adding a new language (if not in dropdown above) + +The process is similar for the above, but does require a new folder with the language identifier to be added. Create [packages/apps/public/locales/](https://github.com/polkadot-js/apps/tree/master/packages/apps/public/locales) folder with an empty `translation.json` (containing only `{}`). After addition of the folder, run `yarn build:i18n` and then the new language will be available for update as per the process in the previous section. + +In addition to the language folder, the language also needs to be added to the dropdown for available languages, this can be found in [packages/apps-config/src/settings.languages.ts](https://github.com/polkadot-js/apps/blob/master/packages/apps-config/src/settings/languages.ts) diff --git a/pioneer/README.md b/pioneer/README.md index 2e54f5f110..b1640de317 100644 --- a/pioneer/README.md +++ b/pioneer/README.md @@ -11,16 +11,17 @@ This can be accessed as a hosted application via [https://testnet.joystream.org] The repo is split into a number of packages, each representing an application. These are - - [apps](packages/apps/) This is the main entry point. It handles the selection sidebar and routing to the specific application being displayed. -- [app-accounts](packages/app-accounts/) A basic account management app. -- [app-address-book](packages/app-address-book/) A basic address management app. -- [app-explorer](packages/app-explorer/) A simple block explorer. It only shows the most recent blocks, updating as they become available. -- [app-extrinsics](packages/app-extrinsics/) Submission of extrinsics to a node. -- [app-js](packages/app-js/) An online code editor with [@polkadot-js/api](https://github.com/polkadot-js/api/tree/master/packages/api) access to the currently connected node. -- [app-settings](packages/app-settings/) A basic settings management app, allowing choice of language, node to connect to, and theme -- [app-staking](packages/app-staking/) A basic staking management app, allowing staking and nominations. -- [app-storage](packages/app-storage/) A simple node storage query application. Multiple queries can be queued and updates as new values become available. -- [app-toolbox](packages/app-toolbox/) Submission of raw data to RPC endpoints and utility hashing functions. -- [app-transfer](packages/app-transfer/) A basic account management app, allowing transfer of Units/DOTs between accounts. +- [apps-electron](packages/apps-electron/) Desktop app running [apps](packages/apps/). +- [page-accounts](packages/page-accounts/) A basic account management app. +- [page-address-book](packages/page-address-book/) A basic address management app. +- [page-explorer](packages/page-explorer/) A simple block explorer. It only shows the most recent blocks, updating as they become available. +- [page-extrinsics](packages/page-extrinsics/) Submission of extrinsics to a node. +- [page-js](packages/page-js/) An online code editor with [@polkadot-js/api](https://github.com/polkadot-js/api/tree/master/packages/api) access to the currently connected node. +- [page-settings](packages/page-settings/) A basic settings management app, allowing choice of language, node to connect to, and theme +- [page-staking](packages/page-staking/) A basic staking management app, allowing staking and nominations. +- [page-storage](packages/page-storage/) A simple node storage query application. Multiple queries can be queued and updates as new values become available. +- [page-toolbox](packages/page-toolbox/) Submission of raw data to RPC endpoints and utility hashing functions. +- [page-transfer](packages/page-transfer/) A basic account management app, allowing transfer of Units/DOTs between accounts. In addition the following libraries are also included in the repo. These are to be moved to the [@polkadot/ui](https://github.com/polkadot-js/ui/) repository once it reaches a base level of stability and usability. (At this point with the framework being tested on the apps above, it makes development easier having it close) diff --git a/pioneer/babel.config.js b/pioneer/babel.config.js index 92ce3bd506..5b479645c9 100644 --- a/pioneer/babel.config.js +++ b/pioneer/babel.config.js @@ -1,4 +1,5 @@ -module.exports = { - extends: '@polkadot/dev-react/config/babel', - sourceType: 'unambiguous' -}; +// Copyright 2017-2020 @polkadot/apps authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +module.exports = require('@polkadot/dev/config/babel'); diff --git a/pioneer/docker/nginx.conf b/pioneer/docker/nginx.conf new file mode 100644 index 0000000000..dce1ffbd61 --- /dev/null +++ b/pioneer/docker/nginx.conf @@ -0,0 +1,27 @@ +user nginx; +worker_processes 1; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + keepalive_timeout 65; + gzip on; + include /etc/nginx/conf.d/*.conf; +} diff --git a/pioneer/env.sh b/pioneer/env.sh new file mode 100755 index 0000000000..e01e134aad --- /dev/null +++ b/pioneer/env.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# This script is used when the docker container starts and does the magic to +# bring the ENV variables to the generated static UI. + +TARGET=./env-config.js + +# Recreate config file +echo -n > $TARGET + +declare -a vars=( + "WS_URL" + "SAMPLE" +) + +echo "window.process_env = {" >> $TARGET +for VAR in ${vars[@]}; do + echo " $VAR: \"${!VAR}\"," >> $TARGET +done +echo "}" >> $TARGET diff --git a/pioneer/i18next-scanner.config.js b/pioneer/i18next-scanner.config.js index fedbd1b1a4..62c25d27da 100644 --- a/pioneer/i18next-scanner.config.js +++ b/pioneer/i18next-scanner.config.js @@ -1,7 +1,44 @@ +// Copyright 2017-2020 @polkadot/apps authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + const fs = require('fs'); const path = require('path'); const typescript = require('typescript'); +const findPackages = require('./scripts/findPackages'); + +function transform (file, enc, done) { + const { ext } = path.parse(file.path); + + if (ext === '.tsx') { + const content = fs.readFileSync(file.path, enc); + + const { outputText } = typescript.transpileModule(content, { + compilerOptions: { + target: 'es2018' + }, + fileName: path.basename(file.path) + }); + + const parserHandler = (key, options) => { + options.defaultValue = key; + + if (process.platform !== 'win32') { + options.ns = /packages\/(.*?)\/src/g.exec(file.path)[1].replace('page-', 'app-'); + } else { + options.ns = /packages\\(.*?)\\src/g.exec(file.path)[1].replace('page-', 'app-'); + } + + this.parser.set(key, options); + }; + + this.parser.parseFuncFromString(outputText, parserHandler); + } + + done(); +} + module.exports = { input: [ 'packages/*/src/**/*.{ts,tsx}', @@ -10,80 +47,27 @@ module.exports = { '!packages/*/src/i18n/**', '!**/node_modules/**' ], - output: './', options: { debug: true, + defaultLng: 'en', func: { - list: ['t', 'i18next.t', 'i18n.t'], - extensions: ['.tsx'] - }, - trans: { - component: 'Trans' + extensions: ['.tsx', '.ts'], + list: ['t', 'i18next.t', 'i18n.t'] }, + keySeparator: false, // key separator lngs: ['en'], - defaultLng: 'en', - ns: [ - 'app-123code', - 'app-accounts', - 'app-address-book', - 'app-claims', - 'app-contracts', - 'app-council', - 'app-dashboard', - 'app-democracy', - 'app-explorer', - 'app-extrinsics', - 'app-generic-asset', - 'app-js', - 'app-parachains', - 'app-settings', - 'app-staking', - 'app-storage', - 'app-sudo', - 'app-toolbox', - 'app-transfer', - 'app-treasury', - 'apps', - 'apps-routing', - 'react-api', - 'react-components', - 'react-params', - 'react-query', - 'react-signer', - 'ui' - ], - defaultNs: 'ui', + ns: findPackages().map(({ dir }) => dir.replace('page-', 'app-')), + nsSeparator: false, // namespace separator resource: { - loadPath: 'packages/apps/public/locales/{{lng}}/{{ns}}.json', - savePath: 'packages/apps/public/locales/{{lng}}/{{ns}}.json', jsonIndent: 2, - lineEnding: '\n' + lineEnding: '\n', + loadPath: 'packages/apps/public/locales/{{lng}}/{{ns}}.json', + savePath: 'packages/apps/public/locales/{{lng}}/{{ns}}.json' }, - nsSeparator: false, // namespace separator - keySeparator: false // key separator - }, - transform: function transform (file, enc, done) { - const { ext } = path.parse(file.path); - - if (ext === '.tsx') { - const content = fs.readFileSync(file.path, enc); - - const { outputText } = typescript.transpileModule(content, { - compilerOptions: { - target: 'es2018' - }, - fileName: path.basename(file.path) - }); - - const parserHandler = (key, options) => { - options.defaultValue = key; - options.ns = /packages\/(.*?)\/src/g.exec(file.path)[1]; - this.parser.set(key, options); - }; - - this.parser.parseFuncFromString(outputText, parserHandler); + trans: { + component: 'Trans' } - - done(); - } + }, + output: './', + transform }; diff --git a/pioneer/jest.config.js b/pioneer/jest.config.js index 643163e06d..342de2be88 100644 --- a/pioneer/jest.config.js +++ b/pioneer/jest.config.js @@ -1,17 +1,26 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -const config = require('@polkadot/dev-react/config/jest'); +// Copyright 2017-2020 @polkadot/apps authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +const config = require('@polkadot/dev/config/jest'); + const findPackages = require('./scripts/findPackages'); -const internalModules = findPackages().reduce((modules, { dir, name }) => { - modules[`${name}(.*)$`] = `/packages/${dir}/src/$1`; +const internalModules = findPackages() + .filter(({ name }) => !['@polkadot/apps'].includes(name)) + .reduce((modules, { dir, name }) => { + modules[`${name}(.*)$`] = `/packages/${dir}/src/$1`; - return modules; -}, {}); + return modules; + }, {}); module.exports = Object.assign({}, config, { moduleNameMapper: { ...internalModules, - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': 'empty/object', - '\\.(css|less)$': 'empty/object' - } + '\\.(css|less)$': 'empty/object', + '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': 'empty/object' + }, + transformIgnorePatterns: [ + '/node_modules' + ] }); diff --git a/pioneer/lerna.json b/pioneer/lerna.json index 717f6b57c5..be98869ad3 100644 --- a/pioneer/lerna.json +++ b/pioneer/lerna.json @@ -10,5 +10,5 @@ "packages": [ "packages/*" ], - "version": "0.37.0-beta.63" + "version": "0.51.1" } diff --git a/pioneer/package.json b/pioneer/package.json index d4ba9cab30..91a97d68d7 100644 --- a/pioneer/package.json +++ b/pioneer/package.json @@ -1,77 +1,87 @@ { - "version": "0.37.0-beta.63", + "version": "0.51.1", + "license": "Apache-2", "private": true, "engines": { - "node": ">=10.13.0", - "yarn": "^1.10.1" + "node": ">=12.18.0", + "yarn": "^1.22.0" }, "homepage": ".", "name": "pioneer", "scripts": { - "analyze": "yarn run build && cd packages/apps && yarn run source-map-explorer build/main.*.js", - "build": "yarn run build:code && yarn run build:i18n", - "build:code": "NODE_ENV=production polkadot-dev-build-ts", - "build:i18n": "i18next-scanner --config i18next-scanner.config.js", + "analyze": "yarn clean && BUILD_ANALYZE=1 yarn run build:code && yarn source-map-explorer packages/apps/build/main.*.js", + "build": "yarn run build:i18n && yarn run build:code", + "build:code": "NODE_ENV=production node ./scripts/dev-build-ts.js", + "build:i18n": "i18next-scanner --config i18next-scanner.config.js && node ./scripts/i18nSort.js", + "build:www": "rm -rf packages/apps/build && mkdir -p packages/apps/build && yarn run build:i18n && cd packages/apps && NODE_ENV=production webpack --config webpack.config.js", "docs": "echo \"skipping docs\"", "clean": "polkadot-dev-clean-build", "clean:i18n": "rm -rf packages/apps/public/locales/en && mkdir -p packages/apps/public/locales/en", "lint": "eslint --ext .js,.jsx,.ts,.tsx . && tsc --noEmit --pretty", + "lint:css": "stylelint './packages/**/src/**/*.tsx'", "lint-only-errors": "eslint --quiet --ext .js,.jsx,.ts,.tsx . && tsc --noEmit --pretty", "lint-autofix": "eslint --fix --ext .js,.jsx,.ts,.tsx . && tsc --noEmit --pretty", "postinstall": "polkadot-dev-yarn-only", "test": "echo \"skipping tests\"", "vanitygen": "node packages/app-accounts/scripts/vanitygen.js", - "start": "cd packages/apps && webpack --config webpack.config.js", - "generate-schemas": "json2ts -i packages/joy-types/src/schemas/role.schema.json -o packages/joy-types/src/schemas/role.schema.ts", + "start": "yarn clean && cd packages/apps && webpack --config webpack.config.js", "build-storybook": "build-storybook -c .storybook", "storybook": "start-storybook -s ./packages/apps/public -p 3001" }, "devDependencies": { - "@babel/core": "^7.7.0", - "@babel/runtime": "^7.7.1", - "@babel/cli": "^7.7.4", - "@polkadot/dev-react": "^0.32.0-beta.13", - "@polkadot/ts": "^0.1.84", - "@polkadot/dev": "^0.32.0-beta.15", + "@babel/core": "^7.10.5", + "@babel/register": "^7.10.5", + "@babel/runtime": "^7.10.5", + "@pinata/sdk": "^1.1.10", + "@polkadot/dev": "^0.55.28", + "@polkadot/ts": "^0.3.29", + "@types/bn.js": "^4.11.6", + "@types/chart.js": "^2.9.23", + "@types/file-saver": "^2.0.1", + "@types/i18next": "^13.0.0", + "@types/jest": "^26.0.10", + "@types/react-beautiful-dnd": "^13.0.0", + "@types/react-copy-to-clipboard": "^4.3.0", + "@types/react-dom": "^16.9.8", + "@types/react-router-dom": "^5.1.5", + "@types/react-tooltip": "^4.2.4", + "@types/store": "^2.0.2", + "@types/styled-components": "^5.1.1", + "@types/styled-theming": "^2.2.4", + "concurrently": "^5.2.0", + "devtron": "^1.4.0", + "dnslink-cloudflare": "^2.0.4", + "electron": "^9.1.1", + "electron-builder": "^22.8.0", + "electron-builder-notarize": "^1.2.0", + "i18next-scanner": "^2.11.0", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "source-map-explorer": "^2.4.2", + "stylelint": "^13.6.1", + "stylelint-config-recommended": "^3.0.0", + "stylelint-config-styled-components": "^0.1.1", + "terser-webpack-plugin": "^3.0.7", + "webpack": "^4.44.0", + "webpack-cli": "^3.3.12", + "webpack-merge": "^4.2.2", + "webpack-plugin-serve": "^1.0.1", + "//": "Joystream-specific", + "react-i18next": "^11.7.0", "@storybook/addon-knobs": "^5.2.5", "@storybook/addon-storysource": "^5.2.5", - "@types/jest": "^24.0.22", - "@types/react-router-dom": "^5.1.4", - "@types/yup": "^0.26.36", - "autoprefixer": "^9.7.1", - "empty": "^0.10.1", - "html-loader": "^0.5.5", - "i18next-scanner": "^2.10.3", - "json-schema-to-typescript": "^7.1.0", - "markdown-loader": "^5.1.0", - "postcss": "^7.0.21", - "postcss-clean": "^1.1.0", - "postcss-flexbugs-fixes": "^4.1.0", - "postcss-import": "^12.0.0", - "postcss-loader": "^3.0.0", - "postcss-nested": "^4.2.1", - "postcss-sass": "^0.4.1", - "postcss-simple-vars": "^5.0.0", - "precss": "^4.0.0", - "source-map-explorer": "^2.0.1", - "storybook-react-router": "^1.0.8", - "ts-jest": "^24.1.0", - "tsconfig-paths-webpack-plugin": "^3.2.0", - "webpack": "^4.33.0", - "typescript": "3.7.2", - "cpx": "^1.5.0", - "eslint-config-semistandard": "^15.0.0", - "eslint-config-standard": "^14.1.1", - "eslint-plugin-import": "^2.20.2", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^4.0.1" - }, - "dependencies": { - "@polkadot/ui-settings": "^0.47.0-beta.3", "@storybook/addon-actions": "^5.2.5", "@storybook/addon-console": "^1.2.1", "@storybook/react": "^5.2.5", + "storybook-react-router": "^1.0.8", + "typescript": "^3.9.7", + "eslint-plugin-header": "^3.0.0", + "eslint-plugin-sort-destructure-keys": "^1.3.5", + "jest": "^26.4.1", + "ts-jest": "^26.2.0", + "tsconfig-paths-webpack-plugin": "^3.2.0" + }, + "dependencies": { "@types/lodash": "^4.14.138", "@types/marked": "^0.7.0", "ajv": "^6.10.2", @@ -82,6 +92,6 @@ "node-sass": "^4.13.0", "sass-loader": "^8.0.0", "style-loader": "^1.0.0", - "@joystream/types": "^0.10.0" + "@joystream/types": "link:../types" } } diff --git a/pioneer/packages/app-123code/README.md b/pioneer/packages/app-123code/README.md deleted file mode 100644 index fe01a1661a..0000000000 --- a/pioneer/packages/app-123code/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# @polkadot/app-123code - -A simple template to get started with adding an "app" to this UI. It contains the bare minimum for a nicely hackable app (if you just want to code _somewhere_) and the steps needed to create, add and register an new app that appears in the UI. - -## adding an app - -If you want to add a new app to the UI, this is the place to start. - -1. Duplicate this `app-123code` folder and give it an appropriate name, in this case we will select `app-example` to keep things clear. -2. Edit the `apps-example/package.json` app description, i.e. the name, author and relevant overview. - -And we have the basic app source setup, time to get the tooling correct. - -3. Add the new app to the TypeScript config in root, `tsconfig.json`, i.e. an entry such as `"@polkadot/app-example/*": [ "packages/app-example/src/*" ],` - -At this point the app should be buildable, but not quite reachable. The final step is to add it to the actual sidebar in `apps`. - -4. In `apps-routing/src` duplicate the `123code.ts` file to `example.ts` and edit it with the appropriate information, including the hash link, name and icon (any icon name from semantic-ui-react/font-awesome 4 should be appropriate). -5. In the above description file, the `isHidden` field needs to be toggled to make it appear - the base template is hidden by default. -6. Finally add the `template` to the `apps-routing/src/index.ts` file at the appropriate place for both full and light mode (either optional) - -Yes. After all that we have things hooked up. Run `yarn start` and your new app (non-coded) should show up. Now start having fun and building something great. diff --git a/pioneer/packages/app-123code/package.json b/pioneer/packages/app-123code/package.json deleted file mode 100644 index 35ab2dfe86..0000000000 --- a/pioneer/packages/app-123code/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "@polkadot/app-123code", - "version": "0.37.0-beta.63", - "description": "A basic app that shows the ropes on customisation", - "main": "index.js", - "scripts": {}, - "author": "Jaco Greeff ", - "maintainers": [ - "Jaco Greeff " - ], - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.7.1", - "@polkadot/react-components": "^0.37.0-beta.63" - } -} diff --git a/pioneer/packages/app-123code/src/AccountSelector.tsx b/pioneer/packages/app-123code/src/AccountSelector.tsx deleted file mode 100644 index 289b60b869..0000000000 --- a/pioneer/packages/app-123code/src/AccountSelector.tsx +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2017-2019 @polkadot/app-123code authors & contributors -// This software may be modified and distributed under the terms -// of the Apache-2.0 license. See the LICENSE file for details. - -import React, { useEffect, useState } from 'react'; -import styled from 'styled-components'; -import { Bubble, InputAddress } from '@polkadot/react-components'; -import { AccountIndex, Balance, Nonce } from '@polkadot/react-query'; - -interface Props { - className?: string; - onChange: (accountId: string | null) => void; -} - -function AccountSelector ({ className, onChange }: Props): React.ReactElement { - const [accountId, setAccountId] = useState(null); - - useEffect((): void => onChange(accountId), [accountId]); - - return ( -

- -
- - - - - - - - - -
-
- ); -} - -export default styled(AccountSelector)` - align-items: flex-end; - - .summary { - text-align: center; - } -`; diff --git a/pioneer/packages/app-123code/src/Summary.tsx b/pioneer/packages/app-123code/src/Summary.tsx deleted file mode 100644 index 3bd84f13db..0000000000 --- a/pioneer/packages/app-123code/src/Summary.tsx +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2017-2019 @polkadot/app-123code authors & contributors -// This software may be modified and distributed under the terms -// of the Apache-2.0 license. See the LICENSE file for details. - -import { BareProps } from '@polkadot/react-components/types'; - -import React from 'react'; -import styled from 'styled-components'; - -interface Props extends BareProps { - children: React.ReactNode; -} - -function Summary ({ children, className, style }: Props): React.ReactElement { - return ( -
- {children} -
- ); -} - -export default styled(Summary)` - opacity: 0.5; - padding: 1rem 1.5rem; -`; diff --git a/pioneer/packages/app-123code/src/SummaryBar.tsx b/pioneer/packages/app-123code/src/SummaryBar.tsx deleted file mode 100644 index 9242644597..0000000000 --- a/pioneer/packages/app-123code/src/SummaryBar.tsx +++ /dev/null @@ -1,65 +0,0 @@ -/* eslint-disable @typescript-eslint/camelcase */ -// Copyright 2017-2019 @polkadot/app-123code authors & contributors -// This software may be modified and distributed under the terms -// of the Apache-2.0 license. See the LICENSE file for details. - -import { AccountId } from '@polkadot/types/interfaces'; -import { BareProps, I18nProps } from '@polkadot/react-components/types'; - -import BN from 'bn.js'; -import React, { useContext } from 'react'; -import { ApiContext, withCalls } from '@polkadot/react-api'; -import { Bubble, IdentityIcon } from '@polkadot/react-components'; -import { formatBalance, formatNumber } from '@polkadot/util'; - -import translate from './translate'; - -interface Props extends BareProps, I18nProps { - balances_totalIssuance?: BN; - chain_bestNumber?: BN; - chain_bestNumberLag?: BN; - staking_validators?: AccountId[]; -} - -function SummaryBar ({ balances_totalIssuance, chain_bestNumber, chain_bestNumberLag, staking_validators }: Props): React.ReactElement { - const { api, systemChain, systemName, systemVersion } = useContext(ApiContext); - - return ( - -
- - {systemName} v{systemVersion} - - - {systemChain} - - - {api.runtimeVersion.implName} v{api.runtimeVersion.implVersion} - - - {formatNumber(chain_bestNumber)} ({formatNumber(chain_bestNumberLag)} lag) - - {staking_validators && ( - { - staking_validators.map((accountId, index): React.ReactNode => ( - - )) - } - )} - - {formatBalance(balances_totalIssuance)} - -
-
- ); -} - -// inject the actual API calls automatically into props -export default translate( - withCalls( - 'derive.chain.bestNumber', - 'derive.chain.bestNumberLag', - 'derive.staking.validators', - 'query.balances.totalIssuance' - )(SummaryBar) -); diff --git a/pioneer/packages/app-123code/src/Transfer.tsx b/pioneer/packages/app-123code/src/Transfer.tsx deleted file mode 100644 index 35ccce6f8b..0000000000 --- a/pioneer/packages/app-123code/src/Transfer.tsx +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2017-2019 @polkadot/app-123code authors & contributors -// This software may be modified and distributed under the terms -// of the Apache-2.0 license. See the LICENSE file for details. - -import BN from 'bn.js'; -import React, { useState } from 'react'; -import { Button, InputAddress, InputBalance, TxButton } from '@polkadot/react-components'; - -import Summary from './Summary'; - -interface Props { - accountId?: string | null; -} - -export default function Transfer ({ accountId }: Props): React.ReactElement { - const [amount, setAmount] = useState(null); - const [recipientId, setRecipientId] = useState(null); - - return ( -
-

transfer

-
-
- - - - - -
- Make a transfer from any account you control to another account. Transfer fees and per-transaction fees apply and will be calculated upon submission. -
-
- ); -} diff --git a/pioneer/packages/app-123code/src/index.tsx b/pioneer/packages/app-123code/src/index.tsx deleted file mode 100644 index de0de71b2c..0000000000 --- a/pioneer/packages/app-123code/src/index.tsx +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2017-2019 @polkadot/app-123code authors & contributors -// This software may be modified and distributed under the terms -// of the Apache-2.0 license. See the LICENSE file for details. - -// some types, AppProps for the app and I18nProps to indicate -// translatable strings. Generally the latter is quite "light", -// `t` is inject into props (see the HOC export) and `t('any text') -// does the translation -import { AppProps, I18nProps } from '@polkadot/react-components/types'; - -// external imports (including those found in the packages/* -// of this repo) -import React, { useState } from 'react'; - -// local imports and components -import AccountSelector from './AccountSelector'; -import SummaryBar from './SummaryBar'; -import Transfer from './Transfer'; -import translate from './translate'; - -// define our internal types -interface Props extends AppProps, I18nProps {} - -function App ({ className }: Props): React.ReactElement { - const [accountId, setAccountId] = useState(null); - - return ( - // in all apps, the main wrapper is setup to allow the padding - // and margins inside the application. (Just from a consistent pov) -
- - - -
- ); -} - -export default translate(App); diff --git a/pioneer/packages/app-123code/src/translate.ts b/pioneer/packages/app-123code/src/translate.ts deleted file mode 100644 index 417da6ef17..0000000000 --- a/pioneer/packages/app-123code/src/translate.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2017-2019 @polkadot/app-123code authors & contributors -// This software may be modified and distributed under the terms -// of the Apache-2.0 license. See the LICENSE file for details. - -import { withTranslation } from 'react-i18next'; - -export default withTranslation(['app-123code']); diff --git a/pioneer/packages/app-accounts/README.md b/pioneer/packages/app-accounts/README.md deleted file mode 100644 index 6adfe80b58..0000000000 --- a/pioneer/packages/app-accounts/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# @polkadot/app-accounts - -## vanity - -Running `yarn run vanitygen --match ` runs the generator as a Node CLI app. (Orders of a magnitude faster due to the use of libsoldium bindings) diff --git a/pioneer/packages/app-accounts/package.json b/pioneer/packages/app-accounts/package.json deleted file mode 100644 index b878755133..0000000000 --- a/pioneer/packages/app-accounts/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "@polkadot/app-accounts", - "version": "0.37.0-beta.63", - "main": "index.js", - "repository": "https://github.com/polkadot-js/apps.git", - "author": "Jaco Greeff ", - "maintainers": [ - "Jaco Greeff " - ], - "contributors": [], - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.7.1", - "@polkadot/react-components": "^0.37.0-beta.63", - "@polkadot/react-qr": "^0.47.0-beta.3", - "@types/file-saver": "^2.0.0", - "@types/yargs": "^13.0.2", - "babel-plugin-module-resolver": "^3.1.1", - "detect-browser": "^4.8.0", - "file-saver": "^2.0.0", - "yargs": "^14.2.0" - } -} diff --git a/pioneer/packages/app-accounts/scripts/vanitygen.js b/pioneer/packages/app-accounts/scripts/vanitygen.js deleted file mode 100755 index 32fc07b1d3..0000000000 --- a/pioneer/packages/app-accounts/scripts/vanitygen.js +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable @typescript-eslint/no-var-requires */ -// Copyright 2017-2019 @polkadot/app-accounts authors & contributors -// This software may be modified and distributed under the terms -// of the Apache-2.0 license. See the LICENSE file for details. - -const fs = require('fs'); -const path = require('path'); - -const [compiled] = ['../vanitygen/cli.js'] - .map((file) => path.join(__dirname, file)) - .filter((file) => fs.existsSync(file)); - -if (compiled) { - require(compiled); -} else { - require('@babel/register')({ - extensions: ['.js', '.ts'], - plugins: [ - ['module-resolver', { - alias: {} - }] - ] - }); - require('../src/vanitygen/cli.ts'); -} diff --git a/pioneer/packages/app-accounts/src/Account.tsx b/pioneer/packages/app-accounts/src/Account.tsx deleted file mode 100644 index 91529679a9..0000000000 --- a/pioneer/packages/app-accounts/src/Account.tsx +++ /dev/null @@ -1,227 +0,0 @@ -// Copyright 2017-2019 @polkadot/app-staking authors & contributors -// This software may be modified and distributed under the terms -// of the Apache-2.0 license. See the LICENSE file for details. - -import { ActionStatus } from '@polkadot/react-components/Status/types'; -import { I18nProps } from '@polkadot/react-components/types'; - -import React, { useState, useEffect } from 'react'; -import { Popup } from 'semantic-ui-react'; -import styled from 'styled-components'; -import { AddressCard, AddressInfo, Button, ChainLock, Forget, Menu } from '@polkadot/react-components'; -import keyring from '@polkadot/ui-keyring'; - -import Backup from './modals/Backup'; -import ChangePass from './modals/ChangePass'; -import Derive from './modals/Derive'; -import Transfer from './modals/Transfer'; -import translate from './translate'; - -interface Props extends I18nProps { - address: string; - className?: string; -} - -function Account ({ address, className, t }: Props): React.ReactElement { - const [genesisHash, setGenesisHash] = useState(null); - const [isBackupOpen, setIsBackupOpen] = useState(false); - const [{ isDevelopment, isEditable, isExternal }, setFlags] = useState({ isDevelopment: false, isEditable: false, isExternal: false }); - const [isDeriveOpen, setIsDeriveOpen] = useState(false); - const [isForgetOpen, setIsForgetOpen] = useState(false); - const [isPasswordOpen, setIsPasswordOpen] = useState(false); - const [isSettingPopupOpen, setIsSettingPopupOpen] = useState(false); - const [isTransferOpen, setIsTransferOpen] = useState(false); - - useEffect((): void => { - const account = keyring.getAccount(address); - - setGenesisHash((account && account.meta.genesisHash) || null); - setFlags({ - isDevelopment: (account && account.meta.isTesting) || false, - isEditable: (account && !(account.meta.isInjected || account.meta.isHardware)) || false, - isExternal: (account && account.meta.isExternal) || false - }); - }, [address]); - - const _toggleBackup = (): void => setIsBackupOpen(!isBackupOpen); - const _toggleDerive = (): void => setIsDeriveOpen(!isDeriveOpen); - const _toggleForget = (): void => setIsForgetOpen(!isForgetOpen); - const _togglePass = (): void => setIsPasswordOpen(!isPasswordOpen); - const _toggleTransfer = (): void => setIsTransferOpen(!isTransferOpen); - const _toggleSettingPopup = (): void => setIsSettingPopupOpen(!isSettingPopupOpen); - const _onForget = (): void => { - if (!address) { - return; - } - - const status: Partial = { - account: address, - action: 'forget' - }; - - try { - keyring.forgetAccount(address); - status.status = 'success'; - status.message = t('account forgotten'); - } catch (error) { - status.status = 'error'; - status.message = error.message; - } - }; - const _onGenesisChange = (genesisHash: string | null): void => { - const account = keyring.getPair(address); - - account && keyring.saveAccountMeta(account, { ...account.meta, genesisHash }); - - setGenesisHash(genesisHash); - }; - - // FIXME It is a bit heavy-handled switching of being editable here completely - // (and removing the tags, however the keyring cannot save these) - return ( - -
- {isEditable && !isDevelopment && ( -
- {isEditable && !isExternal && ( -
- -
- )} - - } - className={className} - isEditable={isEditable} - type='account' - value={address} - withExplorer - withIndexOrAddress={false} - withTags - > - {address && ( - <> - {isBackupOpen && ( - - )} - {isDeriveOpen && ( - - )} - {isForgetOpen && ( - - )} - {isPasswordOpen && ( - - )} - {isTransferOpen && ( - - )} - - )} - -
- ); -} - -export default translate( - styled(Account)` - .accounts--Account-buttons { - text-align: right; - - .others { - margin-right: 0.125rem; - margin-top: 0.25rem; - } - } - ` -); diff --git a/pioneer/packages/app-accounts/src/Banner.tsx b/pioneer/packages/app-accounts/src/Banner.tsx deleted file mode 100644 index d2dad1eeb9..0000000000 --- a/pioneer/packages/app-accounts/src/Banner.tsx +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright 2017-2019 @polkadot/app-accounts authors & contributors -// This software may be modified and distributed under the terms -// of the Apache-2.0 license. See the LICENSE file for details. - -import { I18nProps } from '@polkadot/react-components/types'; - -import { detect } from 'detect-browser'; -import React from 'react'; -import styled from 'styled-components'; -import { isWeb3Injected } from '@polkadot/extension-dapp'; -import { stringUpperFirst } from '@polkadot/util'; - -import translate from './translate'; - -// it would have been really good to import this from detect, however... not exported -type Browser = 'chrome' | 'firefox'; - -interface Extension { - desc: string; - link: string; - name: string; -} - -interface Props extends I18nProps { - className?: string; -} - -const available: Record = { - chrome: [], - firefox: [] -}; - -[ - { - browsers: { - chrome: 'https://chrome.google.com/webstore/detail/polkadot%7Bjs%7D-extension/mopnmbcafieddcagagdcbnhejhlodfdd', - firefox: 'https://addons.mozilla.org/en-US/firefox/addon/polkadot-js-extension/' - }, - desc: 'Basic account injection and signer', - name: 'polkadot-js extension' - } -].forEach(({ browsers, desc, name }): void => { - Object.entries(browsers).forEach(([browser, link]): void => { - available[browser as Browser].push({ link, desc, name }); - }); -}); - -const browserInfo = detect(); -const browserName: Browser | null = (browserInfo && (browserInfo.name as Browser)) || null; -const isSupported = browserName && Object.keys(available).includes(browserName); - -function Banner ({ className, t }: Props): React.ReactElement | null { - if (isWeb3Injected || !isSupported || !browserName) { - return null; - } - - return ( -
-
-
-

{t('It is recommended that you create/store your accounts securely and externally from the app. On {{yourBrowser}} the following browser extensions are available for use -', { - replace: { - yourBrowser: stringUpperFirst(browserName) - } - })}

-
    {available[browserName].map(({ desc, name, link }): React.ReactNode => ( -
  • - - {name} - ({desc}) -
  • - )) - }
-

{t('Accounts injected from any of these extensions will appear in this application and be available for use. The above list is updated as more extensions with external signing capability become available.')} {t('Learn more...')}

-
-
-
- ); -} - -export default translate( - styled(Banner)` - padding: 0 0.5rem 0.5rem; - - .box { - background: #fff6e5; - border-left: 0.25rem solid darkorange; - border-radius: 0 0.25rem 0.25rem 0; - box-sizing: border-box; - padding: 1rem 1.5rem; - - .info { - max-width: 50rem; - } - } - ` -); diff --git a/pioneer/packages/app-accounts/src/MemoForm.tsx b/pioneer/packages/app-accounts/src/MemoForm.tsx deleted file mode 100644 index 7775641cf9..0000000000 --- a/pioneer/packages/app-accounts/src/MemoForm.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import { Labelled } from '@polkadot/react-components/index'; - -import MemoEdit from '@polkadot/joy-utils/memo/MemoEdit'; -import TxButton from '@polkadot/joy-utils/TxButton'; -import { withMyAccount, MyAccountProps } from '@polkadot/joy-utils/MyAccount'; -import { Text } from '@polkadot/types'; - -type Props = MyAccountProps & {}; - -type State = { - memo: string; - modified: boolean; -}; - -class Component extends React.PureComponent { - state: State = { - memo: '', - modified: false - }; - - render () { - const { myAddress } = this.props; - const { memo, modified } = this.state; - return ( - <> - - - - - - ); - } - - onChangeMemo = (memo: string): void => { - this.setState({ memo, modified: true }); - } - - onResetMemo = (memo: string): void => { - this.setState({ memo, modified: false }); - } -} - -export default withMyAccount(Component); diff --git a/pioneer/packages/app-accounts/src/Overview.tsx b/pioneer/packages/app-accounts/src/Overview.tsx deleted file mode 100644 index 5a88cca8f9..0000000000 --- a/pioneer/packages/app-accounts/src/Overview.tsx +++ /dev/null @@ -1,104 +0,0 @@ -// Copyright 2017-2019 @polkadot/app-staking authors & contributors -// This software may be modified and distributed under the terms -// of the Apache-2.0 license. See the LICENSE file for details. - -import { I18nProps } from '@polkadot/react-components/types'; -import { SubjectInfo } from '@polkadot/ui-keyring/observable/types'; -import { ComponentProps } from './types'; - -import React, { useState } from 'react'; -import keyring from '@polkadot/ui-keyring'; -import accountObservable from '@polkadot/ui-keyring/observable/accounts'; -import { getLedger, isLedger, withMulti, withObservable } from '@polkadot/react-api'; -import { Button, CardGrid } from '@polkadot/react-components'; - -import CreateModal from './modals/Create'; -import ImportModal from './modals/Import'; -import Account from './Account'; -import translate from './translate'; - -interface Props extends ComponentProps, I18nProps { - accounts?: SubjectInfo[]; -} - -// query the ledger for the address, adding it to the keyring -async function queryLedger (): Promise { - const ledger = getLedger(); - - try { - const { address } = await ledger.getAddress(); - - keyring.addHardware(address, 'ledger', { name: 'ledger' }); - } catch (error) { - console.error(error); - } -} - -function Overview ({ accounts, onStatusChange, t }: Props): React.ReactElement { - const [isCreateOpen, setIsCreateOpen] = useState(false); - const [isImportOpen, setIsImportOpen] = useState(false); - const emptyScreen = !(isCreateOpen || isImportOpen) && accounts && (Object.keys(accounts).length === 0); - - const _toggleCreate = (): void => setIsCreateOpen(!isCreateOpen); - const _toggleImport = (): void => setIsImportOpen(!isImportOpen); - - return ( - - } + +
+ { + !otherVotes.length + ? No votes submitted by other accounts yet. + : this.renderVotes(otherVotes, false) + } +
; } } diff --git a/pioneer/packages/joy-election/src/SidebarSubtitle.tsx b/pioneer/packages/joy-election/src/SidebarSubtitle.tsx new file mode 100644 index 0000000000..82e63d39bf --- /dev/null +++ b/pioneer/packages/joy-election/src/SidebarSubtitle.tsx @@ -0,0 +1,35 @@ +/** Component providing election stage subtitle for SideBar menu **/ +import React from 'react'; +import { ElectionStage } from '@joystream/types/council'; +import { Option } from '@polkadot/types/codec'; +import { useApi, useCall } from '@polkadot/react-hooks'; +import styled from 'styled-components'; + +const colorByStage = { + Announcing: '#4caf50', + Voting: '#2196f3', + Revealing: '#ff5722' +} as const; + +type StyledSubtitleProps = { + stage?: keyof typeof colorByStage; +} +const StyledSubtitle = styled.div` + display: block; + font-size: 0.85rem; + color: ${(props: StyledSubtitleProps) => props.stage ? colorByStage[props.stage] : 'grey'}; +`; + +export default function SidebarSubtitle () { + const apiProps = useApi(); + const electionStage = useCall>(apiProps.isApiReady && apiProps.api.query.councilElection.stage, []); + + if (electionStage) { + const stageName = electionStage.unwrapOr(undefined)?.type; + const text = stageName ? `${stageName} stage` : 'No active election'; + + return {text}; + } + + return null; +} diff --git a/pioneer/packages/joy-election/src/VoteForm.tsx b/pioneer/packages/joy-election/src/VoteForm.tsx index 63fbb78b17..418c4bd6d0 100644 --- a/pioneer/packages/joy-election/src/VoteForm.tsx +++ b/pioneer/packages/joy-election/src/VoteForm.tsx @@ -4,9 +4,9 @@ import uuid from 'uuid/v4'; import React from 'react'; import { Message, Table } from 'semantic-ui-react'; -import { AppProps, I18nProps } from '@polkadot/react-components/types'; +import { I18nProps } from '@polkadot/react-components/types'; import { ApiProps } from '@polkadot/react-api/types'; -import { withCalls, withMulti } from '@polkadot/react-api/with'; +import { withCalls, withMulti } from '@polkadot/react-api/hoc'; import { AccountId, Balance } from '@polkadot/types/interfaces'; import { Button, Input, Labelled } from '@polkadot/react-components/index'; import { SubmittableResult } from '@polkadot/api'; @@ -14,14 +14,16 @@ import { formatBalance } from '@polkadot/util'; import translate from './translate'; import { hashVote } from './utils'; -import { queryToProp, ZERO, getUrlParam, nonEmptyStr } from '@polkadot/joy-utils/index'; -import TxButton from '@polkadot/joy-utils/TxButton'; -import InputStake from '@polkadot/joy-utils/InputStake'; +import { queryToProp, ZERO, getUrlParam, nonEmptyStr } from '@polkadot/joy-utils/functions/misc'; +import TxButton from '@polkadot/joy-utils/react/components/TxButton'; +import InputStake from '@polkadot/joy-utils/react/components/InputStake'; import CandidatePreview from './CandidatePreview'; -import { MyAccountProps, withOnlyMembers } from '@polkadot/joy-utils/MyAccount'; -import MembersDropdown from '@polkadot/joy-utils/MembersDropdown'; +import { MyAccountProps } from '@polkadot/joy-utils/react/hocs/accounts'; +import { withOnlyMembers } from '@polkadot/joy-utils/react/hocs/guards'; +import MembersDropdown from '@polkadot/joy-utils/react/components/MembersDropdown'; import { saveVote, NewVote } from './myVotesStore'; import { TxFailedCallback } from '@polkadot/react-components/Status/types'; +import { RouteProps } from 'react-router-dom'; // TODO use a crypto-prooven generator instead of UUID 4. function randomSalt () { @@ -29,11 +31,10 @@ function randomSalt () { } // AppsProps is needed to get a location from the route. -type Props = AppProps & ApiProps & I18nProps & MyAccountProps & { +type Props = RouteProps & ApiProps & I18nProps & MyAccountProps & { applicantId?: string | null; minVotingStake?: Balance; applicants?: AccountId[]; - location?: any; }; type State = { @@ -49,7 +50,8 @@ class Component extends React.PureComponent { super(props); let { applicantId, location } = this.props; - applicantId = applicantId || getUrlParam(location, 'applicantId'); + + applicantId = applicantId || (location && getUrlParam(location, 'applicantId')); this.state = { applicantId, @@ -103,14 +105,11 @@ class Component extends React.PureComponent { - - + + } + + + + + + + ; }; + const replyLinkSearch = new URLSearchParams(search); + + replyLinkSearch.set(ReplyIdxQueryParam, reply.nr_in_thread.toString()); + return ( - - - - {renderActions()} - -
- {showModerateForm && - setShowModerateForm(false)} /> - } + + + + + + + + + #{reply.nr_in_thread.toNumber()} + + + + + {reply.moderated ? renderModerationRationale() : renderReplyDetails() } -
-
+ + + + {renderActions()} + {showModerateForm && + setShowModerateForm(false)} /> + } + + ); -} +}); diff --git a/pioneer/packages/joy-forum/src/ViewThread.tsx b/pioneer/packages/joy-forum/src/ViewThread.tsx index 27502cc7be..bc49862253 100644 --- a/pioneer/packages/joy-forum/src/ViewThread.tsx +++ b/pioneer/packages/joy-forum/src/ViewThread.tsx @@ -1,23 +1,27 @@ -import React, { useState, useEffect } from 'react'; -import { Link } from 'react-router-dom'; +import React, { useState, useEffect, useRef } from 'react'; +import { Link, RouteComponentProps } from 'react-router-dom'; import ReactMarkdown from 'react-markdown'; -import { Table, Button, Label } from 'semantic-ui-react'; -import { History } from 'history'; +import styled from 'styled-components'; +import { Table, Button, Label, Icon } from 'semantic-ui-react'; import BN from 'bn.js'; -import { Category, Thread, ThreadId, Post, PostId } from '@joystream/types/forum'; -import { Pagination, RepliesPerPage, CategoryCrumbs } from './utils'; +import { ThreadId } from '@joystream/types/common'; +import { Category, Thread, Post } from '@joystream/types/forum'; +import { Pagination, RepliesPerPage, CategoryCrumbs, TimeAgoDate, usePagination, useQueryParam, ReplyIdxQueryParam, ReplyEditIdQueryParam } from './utils'; import { ViewReply } from './ViewReply'; import { Moderate } from './Moderate'; -import { MutedSpan } from '@polkadot/joy-utils/MutedText'; -import { JoyWarn } from '@polkadot/joy-utils/JoyStatus'; +import { MutedSpan, JoyWarn } from '@polkadot/joy-utils/react/components'; + import { withForumCalls } from './calls'; import { withApi, withMulti } from '@polkadot/react-api'; import { ApiProps } from '@polkadot/react-api/types'; import { orderBy } from 'lodash'; -import { bnToStr } from '@polkadot/joy-utils/index'; +import { bnToStr } from '@polkadot/joy-utils/functions/misc'; import { IfIAmForumSudo } from './ForumSudo'; -import { MemberPreview } from '@polkadot/joy-members/MemberPreview'; +import MemberPreview from '@polkadot/joy-utils/react/components/MemberByAccountPreview'; +import { formatDate } from '@polkadot/joy-utils/functions/date'; +import { NewReply, EditReply } from './EditReply'; +import { useApi } from '@polkadot/react-hooks'; type ThreadTitleProps = { thread: Thread; @@ -26,6 +30,7 @@ type ThreadTitleProps = { function ThreadTitle (props: ThreadTitleProps) { const { thread, className } = props; + return {/* {thread.pinned && ; } +const ThreadHeader = styled.div` + margin: 1rem 0; + + h1 { + margin: 0; + } +`; + +const ThreadInfoAndActions = styled.div` + display: flex; + justify-content: space-between; + align-items: center; + + margin-top: .3rem; + + h1 { + margin: 0; + } +`; + +const ThreadInfo = styled.span` + display: inline-flex; + align-items: center; + + font-size: .85rem; + color: rgba(0, 0, 0, 0.5); +`; + +const ThreadInfoMemberPreview = styled(MemberPreview)` + margin: 0 .5rem; +`; + +const ReplyEditContainer = styled.div` + margin-top: 30px; + padding-bottom: 60px; +`; + +type ThreadPreviewProps = { + thread: Thread; + repliesCount: number; +} + +const ThreadPreview: React.FC = ({ thread, repliesCount }) => { + const title = ; + + return ( + + + + { + thread.moderated + ? ( + + {title} + + ) + : title + } + + + + {repliesCount} + + + + + + {formatDate(thread.created_at.momentDate)} + + + ); +}; + type InnerViewThreadProps = { category: Category; thread: Thread; - page?: number; preview?: boolean; - history?: History; }; type ViewThreadProps = ApiProps & InnerViewThreadProps & { @@ -50,88 +126,165 @@ type ViewThreadProps = ApiProps & InnerViewThreadProps & { function InnerViewThread (props: ViewThreadProps) { const [showModerateForm, setShowModerateForm] = useState(false); - const { history, category, thread, page = 1, preview = false } = props; - - if (!thread) { - return Loading thread details...; - } + const [displayedPosts, setDisplayedPosts] = useState([]); + const [quotedPost, setQuotedPost] = useState(null); - const renderThreadNotFound = () => ( - preview ? null : Thread not found - ); + const postsRefs = useRef>>({}); + const replyFormRef = useRef(null); - if (thread.isEmpty) { - return renderThreadNotFound(); - } + const [rawSelectedPostIdx, setSelectedPostIdx] = useQueryParam(ReplyIdxQueryParam); + const [rawEditedPostId, setEditedPostId] = useQueryParam(ReplyEditIdQueryParam); + const [currentPage, setCurrentPage] = usePagination(); - const { id } = thread; - const totalPostsInThread = thread.num_posts_ever_created.toNumber(); + const parsedSelectedPostIdx = rawSelectedPostIdx ? parseInt(rawSelectedPostIdx) : null; + const selectedPostIdx = (parsedSelectedPostIdx && !Number.isNaN(parsedSelectedPostIdx)) ? parsedSelectedPostIdx : null; - if (!category) { - return {'Thread\'s category was not found.'}; - } else if (category.deleted) { - return renderThreadNotFound(); - } + const { category, thread, preview = false, api, nextPostId } = props; - if (preview) { - const title = ; - const repliesCount = totalPostsInThread - 1; - return ( - - - {thread.moderated - ? {title} - : title - } - - - {repliesCount} - - - - - - ); - } + const editedPostId = rawEditedPostId && api.createType('PostId', rawEditedPostId); - if (!history) { - return History propoerty is undefined; - } + const { id } = thread; + const totalPostsInThread = thread.num_posts_ever_created.toNumber(); - const { api, nextPostId } = props; const [loaded, setLoaded] = useState(false); const [posts, setPosts] = useState(new Array()); + // fetch posts useEffect(() => { const loadPosts = async () => { - if (!nextPostId || totalPostsInThread === 0) return; + if (!nextPostId || totalPostsInThread === 0 || thread.isEmpty) return; - const newId = (id: number | BN) => new PostId(id); + const newId = (id: number | BN) => api.createType('PostId', id); const apiCalls: Promise[] = []; let id = newId(1); + while (nextPostId.gt(id)) { apiCalls.push(api.query.forum.postById(id) as Promise); id = newId(id.add(newId(1))); } const allPosts = await Promise.all(apiCalls); - const postsInThisThread = allPosts.filter(item => + const postsInThisThread = allPosts.filter((item) => !item.isEmpty && item.thread_id.eq(thread.id) ); const sortedPosts = orderBy( postsInThisThread, - [x => x.nr_in_thread.toNumber()], + [(x) => x.nr_in_thread.toNumber()], ['asc'] ); + // initialize refs for posts + postsRefs.current = sortedPosts.reduce((acc, reply) => { + const refKey = reply.nr_in_thread.toNumber(); + + acc[refKey] = React.createRef(); + + return acc; + }, postsRefs.current); + setPosts(sortedPosts); setLoaded(true); }; - loadPosts(); + void loadPosts(); }, [bnToStr(thread.id), bnToStr(nextPostId)]); + // handle selected post + useEffect(() => { + if (!selectedPostIdx) return; + + const selectedPostPage = Math.ceil(selectedPostIdx / RepliesPerPage); + + if (currentPage !== selectedPostPage) { + setCurrentPage(selectedPostPage); + } + + if (!loaded) return; + + if (selectedPostIdx > posts.length) { + // eslint-disable-next-line no-console + console.warn(`Tried to open nonexistent reply with idx: ${selectedPostIdx}`); + + return; + } + + const postRef = postsRefs.current[selectedPostIdx]; + + // postpone scrolling for one render to make sure the ref is set + setTimeout(() => { + if (postRef.current) { + postRef.current.scrollIntoView(); + } else { + // eslint-disable-next-line no-console + console.warn('Ref for selected post empty'); + } + }); + }, [loaded, selectedPostIdx, currentPage]); + + // handle displayed posts based on pagination + useEffect(() => { + if (!loaded) return; + const minIdx = (currentPage - 1) * RepliesPerPage; + const maxIdx = minIdx + RepliesPerPage - 1; + const postsToDisplay = posts.filter((_id, i) => i >= minIdx && i <= maxIdx); + + setDisplayedPosts(postsToDisplay); + }, [loaded, posts, currentPage]); + + const renderThreadNotFound = () => ( + preview ? null : Thread not found + ); + + if (thread.isEmpty) { + return renderThreadNotFound(); + } + + if (!category) { + return {'Thread\'s category was not found.'}; + } else if (category.deleted) { + return renderThreadNotFound(); + } + + if (preview) { + return ; + } + + const changePageAndClearSelectedPost = (page?: number | string) => { + setSelectedPostIdx(null); + setCurrentPage(page, [ReplyIdxQueryParam]); + }; + + const scrollToReplyForm = () => { + if (!replyFormRef.current) return; + replyFormRef.current.scrollIntoView(); + }; + + const clearEditedPost = () => { + setEditedPostId(null); + }; + + const onThreadReplyClick = () => { + clearEditedPost(); + setQuotedPost(null); + scrollToReplyForm(); + }; + + const onPostEditSuccess = async () => { + if (!editedPostId) { + // eslint-disable-next-line no-console + console.error('editedPostId not set!'); + + return; + } + + const updatedPost = await api.query.forum.postById(editedPostId) as Post; + const updatedPosts = posts.map((post) => post.id.eq(editedPostId) ? updatedPost : post); + + setPosts(updatedPosts); + clearEditedPost(); + }; + // console.log({ nextPostId: bnToStr(nextPostId), loaded, posts }); const renderPageOfPosts = () => { @@ -139,29 +292,44 @@ function InnerViewThread (props: ViewThreadProps) { return Loading posts...; } - const onPageChange = (activePage?: string | number) => { - history.push(`/forum/threads/${id.toString()}/page/${activePage}`); - }; - - const itemsPerPage = RepliesPerPage; - const minIdx = (page - 1) * RepliesPerPage; - const maxIdx = minIdx + RepliesPerPage - 1; - const pagination = ; - const pageOfItems = posts - .filter((_id, i) => i >= minIdx && i <= maxIdx) - .map((reply, i) => ); + const renderedReplies = displayedPosts.map((reply) => { + const replyIdx = reply.nr_in_thread.toNumber(); + + const onReplyEditClick = () => { + setEditedPostId(reply.id.toString()); + scrollToReplyForm(); + }; + + const onReplyQuoteClick = () => { + setQuotedPost(reply); + scrollToReplyForm(); + }; + + return ( + + ); + }); return <> {pagination} - {pageOfItems} + {renderedReplies} {pagination} ; }; @@ -170,14 +338,12 @@ function InnerViewThread (props: ViewThreadProps) { if (thread.moderated || category.archived || category.deleted) { return null; } + return - - + {/* TODO show 'Edit' button only if I am owner */} {/* -

- - {renderActions()} -

+ +

+ +

+ + + Created by + + + + {renderActions()} + +
+ {category.archived && No new replies can be posted. @@ -227,6 +403,15 @@ function InnerViewThread (props: ViewThreadProps) { ? renderModerationRationale() : renderPageOfPosts() } + + { + editedPostId ? ( + + ) : ( + + ) + } + ; } @@ -238,41 +423,23 @@ export const ViewThread = withMulti( ) ); -type ViewThreadByIdProps = ApiProps & { - history: History; - match: { - params: { - id: string; - page?: string; - }; - }; -}; +type ViewThreadByIdProps = RouteComponentProps<{ id: string }>; -function InnerViewThreadById (props: ViewThreadByIdProps) { - const { api, history, match: { params: { id, page: pageStr } } } = props; +export function ViewThreadById (props: ViewThreadByIdProps) { + const { api } = useApi(); + const { match: { params: { id } } } = props; + const [loaded, setLoaded] = useState(false); + const [thread, setThread] = useState(api.createType('Thread', {})); + const [category, setCategory] = useState(api.createType('Category', {})); - let page = 1; - if (pageStr) { - try { - // tslint:disable-next-line:radix - page = parseInt(pageStr); - } catch (err) { - console.log('Failed to parse page number form URL'); - } - } + let threadId: ThreadId | undefined; - let threadId: ThreadId; try { - threadId = new ThreadId(id); + threadId = api.createType('ThreadId', id); } catch (err) { console.log('Failed to parse thread id form URL'); - return Invalid thread ID: {id}; } - const [loaded, setLoaded] = useState(false); - const [thread, setThread] = useState(Thread.newEmpty()); - const [category, setCategory] = useState(Category.newEmpty()); - useEffect(() => { const loadThreadAndCategory = async () => { if (!threadId) return; @@ -285,8 +452,12 @@ function InnerViewThreadById (props: ViewThreadByIdProps) { setLoaded(true); }; - loadThreadAndCategory(); - }, [id, page]); + void loadThreadAndCategory(); + }, [id]); + + if (threadId === undefined) { + return Invalid thread ID: {id}; + } // console.log({ threadId: id, page }); @@ -302,7 +473,5 @@ function InnerViewThreadById (props: ViewThreadByIdProps) { return { 'Thread\'s category was not found' }; } - return ; + return ; } - -export const ViewThreadById = withApi(InnerViewThreadById); diff --git a/pioneer/packages/joy-forum/src/calls.tsx b/pioneer/packages/joy-forum/src/calls.tsx index 34c462205a..ac183bf870 100644 --- a/pioneer/packages/joy-forum/src/calls.tsx +++ b/pioneer/packages/joy-forum/src/calls.tsx @@ -1,14 +1,12 @@ import React from 'react'; import { ApiProps, SubtractProps } from '@polkadot/react-api/types'; -import { Options } from '@polkadot/react-api/with/types'; -import { withApi, withCall as withSubstrateCall } from '@polkadot/react-api'; -import { Option } from '@polkadot/types/codec'; -import { AccountId } from '@polkadot/types/interfaces'; +import { Options } from '@polkadot/react-api/hoc/types'; +import { withApi, withCall as withSubstrateCall } from '@polkadot/react-api/hoc'; import { u64 } from '@polkadot/types'; -import { Constructor } from '@polkadot/types/types'; -import { Category, Thread, Reply } from '@joystream/types/forum'; +import { InterfaceTypes } from '@polkadot/types/types/registry'; import { useForum, ForumState } from './Context'; +import { createType } from '@joystream/types'; type Call = string | [string, Options]; @@ -18,18 +16,20 @@ const storage: StorageType = 'substrate'; type EntityMapName = 'categoryById' | 'threadById' | 'replyById'; -const getReactValue = (state: ForumState, endpoint: string, paramValue: any): any => { - const getEntityById = (mapName: EntityMapName, constructor: Constructor): any => { +const getReactValue = (state: ForumState, endpoint: string, paramValue: any) => { + function getEntityById + (mapName: EntityMapName, type: T): InterfaceTypes[T] { const id = (paramValue as u64).toNumber(); const entity = state[mapName].get(id); - return new constructor(entity); - }; + + return createType(type, entity); + } switch (endpoint) { - case 'forumSudo': return new Option('AccountId', state.sudo); - case 'categoryById': return getEntityById(endpoint, Category); - case 'threadById': return getEntityById(endpoint, Thread); - case 'replyById': return getEntityById(endpoint, Reply); + case 'forumSudo': return createType('Option', state.sudo); + case 'categoryById': return getEntityById(endpoint, 'Category'); + case 'threadById': return getEntityById(endpoint, 'Thread'); + case 'replyById': return getEntityById(endpoint, 'Reply'); default: throw new Error('Unknown endpoint for Forum storage'); } }; @@ -38,13 +38,14 @@ function withReactCall

(endpoint: string, { paramName, propN return (Inner: React.ComponentType): React.ComponentType> => { const SetProp = (props: P) => { const { state } = useForum(); - const paramValue = paramName ? (props as any)[paramName] : undefined; + const paramValue = paramName ? (props as Record)[paramName] : undefined; const propValue = getReactValue(state, endpoint, paramValue); const _propName = propName || endpoint; const _props = { ...props, [_propName]: propValue }; + return ; }; @@ -56,10 +57,12 @@ function withForumCall

(endpoint: string, opts: Options = {} if (!opts.propName) { opts.propName = endpoint; } + if (storage === 'react') { return withReactCall(endpoint, opts); } else { endpoint = 'query.forum.' + endpoint; + return withSubstrateCall(endpoint, opts); } } diff --git a/pioneer/packages/joy-forum/src/index.css b/pioneer/packages/joy-forum/src/index.css deleted file mode 100644 index 63d4f32640..0000000000 --- a/pioneer/packages/joy-forum/src/index.css +++ /dev/null @@ -1,23 +0,0 @@ -.forum--App { - .ui.segment { - background-color: #fff; - } - - .ForumPageTitle { - display: flex; - margin-top: 1rem; - - .TitleText { - margin-right: 1rem; - } - } -} - -.EditEntityBox { - width: 100%; - max-width: 600px; - - .EditEntityForm { - width: 100%; - } -} diff --git a/pioneer/packages/joy-forum/src/index.tsx b/pioneer/packages/joy-forum/src/index.tsx index b9dc1ba16b..a4dd6131c4 100644 --- a/pioneer/packages/joy-forum/src/index.tsx +++ b/pioneer/packages/joy-forum/src/index.tsx @@ -1,76 +1,53 @@ import React from 'react'; import { Route, Switch } from 'react-router'; +import styled from 'styled-components'; -import { AppProps, I18nProps } from '@polkadot/react-components/types'; -import Tabs, { TabItem } from '@polkadot/react-components/Tabs'; - -import './index.css'; +import { RouteProps as AppMainRouteProps } from '@polkadot/apps-routing/types'; +import { I18nProps } from '@polkadot/react-components/types'; +import style from './style'; import translate from './translate'; import { ForumProvider } from './Context'; -import { EditForumSudo, ForumSudoProvider } from './ForumSudo'; -import { NewCategory, NewSubcategory, EditCategory } from './EditCategory'; +import { ForumSudoProvider } from './ForumSudo'; +import { NewSubcategory, NewCategory, EditCategory } from './EditCategory'; import { NewThread, EditThread } from './EditThread'; -import { NewReply, EditReply } from './EditReply'; import { CategoryList, ViewCategoryById } from './CategoryList'; import { ViewThreadById } from './ViewThread'; +import { LegacyPagingRedirect } from './LegacyPagingRedirect'; +import ForumRoot from './ForumRoot'; -type Props = AppProps & I18nProps & {}; +const ForumMain = styled.main`${style}`; -class App extends React.PureComponent { - private buildTabs (): TabItem[] { - const { t } = this.props; - return [ - { - isRoot: true, - name: 'forum', - text: t('Forum') - }, - { - // TODO show this tab only if current user is the sudo: - name: 'categories/new', - text: t('New category') - }, - { - name: 'sudo', - text: t('Forum sudo') - } - ]; - } +type Props = AppMainRouteProps & I18nProps; +class App extends React.PureComponent { render () { const { basePath } = this.props; - const tabs = this.buildTabs(); + return ( -

-
- -
+ - - + {/* routes for handling legacy format of forum paging within the routing path */} + {/* translate page param to search query */} + + + - - - - - {/* */} - - + -
+ ); diff --git a/pioneer/packages/joy-forum/src/style.ts b/pioneer/packages/joy-forum/src/style.ts new file mode 100644 index 0000000000..0b4a7ed873 --- /dev/null +++ b/pioneer/packages/joy-forum/src/style.ts @@ -0,0 +1,27 @@ +import { css } from 'styled-components'; + +export default css` + padding-top: 1.5rem; + + .ui.segment { + background-color: #fff; + } + + .ForumPageTitle { + display: flex; + margin-top: 1rem; + + .TitleText { + margin-right: 1rem; + } + } + + .EditEntityBox { + width: 100%; + max-width: 600px; + + .EditEntityForm { + width: 100%; + } + } +`; diff --git a/pioneer/packages/joy-forum/src/utils.tsx b/pioneer/packages/joy-forum/src/utils.tsx index 9bad0e1092..41591b0f94 100644 --- a/pioneer/packages/joy-forum/src/utils.tsx +++ b/pioneer/packages/joy-forum/src/utils.tsx @@ -1,13 +1,22 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; +import { useHistory, useLocation } from 'react-router'; import { Link } from 'react-router-dom'; -import { Pagination as SuiPagination } from 'semantic-ui-react'; +import { Breadcrumb, Pagination as SuiPagination } from 'semantic-ui-react'; +import styled from 'styled-components'; +import moment from 'moment'; +import Tooltip from 'react-tooltip'; -import { Category, CategoryId, Thread, ThreadId } from '@joystream/types/forum'; +import { ThreadId } from '@joystream/types/common'; +import { Category, CategoryId, Thread } from '@joystream/types/forum'; import { withForumCalls } from './calls'; import { withMulti } from '@polkadot/react-api'; export const ThreadsPerPage = 10; export const RepliesPerPage = 10; +export const RecentActivityPostsCount = 7; +export const ReplyIdxQueryParam = 'replyIdx'; +export const ReplyEditIdQueryParam = 'editReplyId'; +export const PagingQueryParam = 'page'; type PaginationProps = { currentPage?: number; @@ -36,6 +45,7 @@ type CategoryCrumbsProps = { category?: Category; threadId?: ThreadId; thread?: Thread; + root?: boolean; }; function InnerCategoryCrumb (p: CategoryCrumbsProps) { @@ -44,10 +54,11 @@ function InnerCategoryCrumb (p: CategoryCrumbsProps) { if (category) { try { const url = `/forum/categories/${category.id.toString()}`; + return <> {category.parent_id ? : null} - - {category.title} + + {category.title} ; } catch (err) { console.log('Failed to create a category breadcrumb', err); @@ -70,10 +81,11 @@ function InnerThreadCrumb (p: CategoryCrumbsProps) { if (thread) { try { const url = `/forum/threads/${thread.id.toString()}`; + return <> - - {thread.title} + + {thread.title} ; } catch (err) { console.log('Failed to create a thread breadcrumb', err); @@ -90,16 +102,45 @@ const ThreadCrumb = withMulti( ) ); -export const CategoryCrumbs = (p: CategoryCrumbsProps) => { +const StyledBreadcrumbs = styled(Breadcrumb)` + && { + font-size: 1.3rem; + line-height: 1.2; + } +`; + +export const CategoryCrumbs = ({ categoryId, threadId, root }: CategoryCrumbsProps) => { return ( -
- Top categories - - -
+ + Forum + {!root && ( + <> + + Top categories + + + + )} + ); }; +type TimeAgoDateProps = { + date: moment.Moment; + id: string | number; +}; + +export const TimeAgoDate: React.FC = ({ date, id }) => ( + <> + + {date.fromNow()} + + + {date.toLocaleString()} + + +); + // It's used on such routes as: // /categories/:id // /categories/:id/edit @@ -112,3 +153,66 @@ export type UrlHasIdProps = { }; }; }; + +type QueryValueType = string | null; +type QuerySetValueType = (value?: QueryValueType | number, paramsToReset?: string[]) => void; +type QueryReturnType = [QueryValueType, QuerySetValueType]; + +export const useQueryParam = (queryParam: string): QueryReturnType => { + const { pathname, search } = useLocation(); + const history = useHistory(); + const [value, setValue] = useState(null); + + useEffect(() => { + const params = new URLSearchParams(search); + const paramValue = params.get(queryParam); + + if (paramValue !== value) { + setValue(paramValue); + } + }, [search, setValue, queryParam]); + + const setParam: QuerySetValueType = (rawValue, paramsToReset = []) => { + let parsedValue: string | null; + + if (!rawValue && rawValue !== 0) { + parsedValue = null; + } else { + parsedValue = rawValue.toString(); + } + + const params = new URLSearchParams(search); + + if (parsedValue) { + params.set(queryParam, parsedValue); + } else { + params.delete(queryParam); + } + + paramsToReset.forEach((p) => params.delete(p)); + + setValue(parsedValue); + history.push({ pathname, search: params.toString() }); + }; + + return [value, setParam]; +}; + +export const usePagination = (): [number, QuerySetValueType] => { + const [rawCurrentPage, setCurrentPage] = useQueryParam(PagingQueryParam); + + let currentPage = 1; + + if (rawCurrentPage) { + const parsedPage = Number.parseInt(rawCurrentPage); + + if (!Number.isNaN(parsedPage)) { + currentPage = parsedPage; + } else { + // eslint-disable-next-line no-console + console.warn('Failed to parse URL page idx'); + } + } + + return [currentPage, setCurrentPage]; +}; diff --git a/pioneer/packages/joy-forum/src/validation.tsx b/pioneer/packages/joy-forum/src/validation.tsx index a6d3b8aef1..e2693509f7 100644 --- a/pioneer/packages/joy-forum/src/validation.tsx +++ b/pioneer/packages/joy-forum/src/validation.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { withMulti } from '@polkadot/react-api/with'; -import { InputValidationLengthConstraint } from '@joystream/types/forum'; +import { withMulti } from '@polkadot/react-api/hoc'; +import { InputValidationLengthConstraint } from '@joystream/types/common'; import { withForumCalls } from './calls'; import { componentName } from '@polkadot/joy-utils/react/helpers'; @@ -28,14 +28,18 @@ function waitForRequiredConstraints ( return function (Component: React.ComponentType) { const ResultComponent: React.FunctionComponent = (props: ValidationProps) => { const nonEmptyProps = requiredConstraintNames - .filter(name => props[name] !== undefined) + .filter((name) => props[name] !== undefined) .length; + if (nonEmptyProps !== requiredConstraintNames.length) { return Loading validation constraints...; } + return ; }; + ResultComponent.displayName = `waitForRequiredConstraints(${componentName(Component)})`; + return ResultComponent; }; } diff --git a/pioneer/packages/joy-help/README.md b/pioneer/packages/joy-help/README.md deleted file mode 100644 index e06d693025..0000000000 --- a/pioneer/packages/joy-help/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Help module for Joystream node - -Here you can find a help and the latest news related to Joystream community and software. diff --git a/pioneer/packages/joy-help/package.json b/pioneer/packages/joy-help/package.json deleted file mode 100644 index 405e351b01..0000000000 --- a/pioneer/packages/joy-help/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "@polkadot/joy-help", - "version": "0.1.1", - "description": "Help module for Joystream node", - "main": "index.js", - "scripts": {}, - "author": "Joystream contributors", - "maintainers": [], - "dependencies": { - "@babel/runtime": "^7.7.1", - "@polkadot/react-components": "0.37.0-beta.63", - "@polkadot/react-query": "0.37.0-beta.63", - "@polkadot/joy-utils": "^0.1.1" - } -} diff --git a/pioneer/packages/joy-help/src/Help.tsx b/pioneer/packages/joy-help/src/Help.tsx deleted file mode 100644 index 510a838182..0000000000 --- a/pioneer/packages/joy-help/src/Help.tsx +++ /dev/null @@ -1,53 +0,0 @@ - -import React from 'react'; -import { Grid } from 'semantic-ui-react'; - -import { I18nProps } from '@polkadot/react-components/types'; - -// our app-specific styles -import './index.css'; - -// local imports and components -import translate from './translate'; -import MemoView from '@polkadot/joy-utils/memo/MemoView'; -import { Link } from 'react-router-dom'; - -const validatorsAccId = '5EoFVV4HrmyxF8xWNYL7rYJPEcDrW8kv3bHkb1ueGchBcZ1k'; -const electionsAccId = '5CFW8VgJiM4jKSwskNzVVYfytcPcU7ppRtGKVBLgwpddTSjK'; -const bugsAccId = '5H4RgAjmTBoNMrysDXJpac5KRURFnNYBHKC2FNmGoLXvv1LK'; -const newsAccId = '5FvjTdBbyk7QqHcGHbwtc1RLiw6SUkzegdCWbppdtb63tmzi'; - -type Props = I18nProps & {}; - -const renderMemo = (accId: string) => { - return <> - - - Memo of account - {accId} - - ; -}; - -export const Component = (_props: Props) => { - return (<> -
- Visit our helpdesk{' '} - for instructions and guides to get started! -
- - - {renderMemo(newsAccId)} - {renderMemo(validatorsAccId)} - - - {renderMemo(electionsAccId)} - {renderMemo(bugsAccId)} - - - ); -}; - -export default translate( - Component -); diff --git a/pioneer/packages/joy-help/src/index.css b/pioneer/packages/joy-help/src/index.css deleted file mode 100644 index 0d0141ba1d..0000000000 --- a/pioneer/packages/joy-help/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -.JoyHelp { - .column{ - flex: auto; - } - .AccountId { - display: block; - font-size: 0.85rem; - border-top: 1px solid #ddd; - margin-top: 1.25rem; - padding-top: .25rem; - - } -} \ No newline at end of file diff --git a/pioneer/packages/joy-help/src/index.tsx b/pioneer/packages/joy-help/src/index.tsx deleted file mode 100644 index a94c16a77d..0000000000 --- a/pioneer/packages/joy-help/src/index.tsx +++ /dev/null @@ -1,52 +0,0 @@ - -import React from 'react'; -import { Route, Switch } from 'react-router'; - -import { AppProps, I18nProps } from '@polkadot/react-components/types'; -import Tabs, { TabItem } from '@polkadot/react-components/Tabs'; - -// our app-specific styles -import './index.css'; - -// local imports and components -import translate from './translate'; -import Help from './Help'; - -// define out internal types -type Props = AppProps & I18nProps & {}; - -type State = {}; - -class App extends React.PureComponent { - state: State = {}; - - private buildTabs (): TabItem[] { - const { t } = this.props; - return [ - { - isRoot: true, - name: 'help', - text: t('Help and News') - } - ]; - } - - render () { - const { basePath } = this.props; - const tabs = this.buildTabs(); - return ( -
-
- -
- - - -
- ); - } -} - -export default translate( - App -); diff --git a/pioneer/packages/joy-help/src/translate.ts b/pioneer/packages/joy-help/src/translate.ts deleted file mode 100644 index c2027c8d9d..0000000000 --- a/pioneer/packages/joy-help/src/translate.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { withTranslation } from 'react-i18next'; - -export default withTranslation(['help', 'ui']); diff --git a/pioneer/packages/joy-media/aplayer.d.ts b/pioneer/packages/joy-media/aplayer.d.ts new file mode 100644 index 0000000000..87c1fa0b95 --- /dev/null +++ b/pioneer/packages/joy-media/aplayer.d.ts @@ -0,0 +1,2 @@ +// No offical definitions available +declare module 'react-aplayer'; diff --git a/pioneer/packages/joy-media/dplayer.d.ts b/pioneer/packages/joy-media/dplayer.d.ts new file mode 100644 index 0000000000..675b3837c3 --- /dev/null +++ b/pioneer/packages/joy-media/dplayer.d.ts @@ -0,0 +1,2 @@ +// No offical definitions available +declare module 'react-dplayer'; diff --git a/pioneer/packages/joy-media/package.json b/pioneer/packages/joy-media/package.json index 45056f41c3..d4d5541bba 100644 --- a/pioneer/packages/joy-media/package.json +++ b/pioneer/packages/joy-media/package.json @@ -7,14 +7,14 @@ "author": "Joystream contributors", "maintainers": [], "dependencies": { - "@babel/runtime": "^7.7.1", + "@babel/runtime": "^7.10.5", "@polkadot/joy-utils": "^0.1.1", - "@polkadot/react-components": "0.37.0-beta.63", - "@polkadot/react-query": "0.37.0-beta.63", + "@polkadot/react-components": "0.51.1", + "@polkadot/react-query": "0.51.1", "@types/mime-types": "^2.1.0", "@types/react-beautiful-dnd": "^11.0.3", "aplayer": "^1.10.1", - "dplayer": "^1.25.0", + "dplayer": "1.25.0", "ipfs-only-hash": "^1.0.2", "iso-639-1": "^2.1.0", "lodash": "^4.17.11", diff --git a/pioneer/packages/joy-media/src/DiscoveryProvider.tsx b/pioneer/packages/joy-media/src/DiscoveryProvider.tsx index 1e13449f7d..f1378fb2b7 100644 --- a/pioneer/packages/joy-media/src/DiscoveryProvider.tsx +++ b/pioneer/packages/joy-media/src/DiscoveryProvider.tsx @@ -2,21 +2,22 @@ import React, { useState, useEffect, useContext, createContext } from 'react'; import { Message } from 'semantic-ui-react'; import axios, { CancelToken } from 'axios'; -import { AccountId } from '@polkadot/types/interfaces'; +import { StorageProviderId } from '@joystream/types/working-group'; import { Vec } from '@polkadot/types'; import { Url } from '@joystream/types/discovery'; import ApiContext from '@polkadot/react-api/ApiContext'; import { ApiProps } from '@polkadot/react-api/types'; -import { JoyInfo } from '@polkadot/joy-utils/JoyStatus'; +import { JoyInfo } from '@polkadot/joy-utils/react/components'; import { componentName } from '@polkadot/joy-utils/react/helpers'; +import { isObjectWithProperties } from '@polkadot/joy-utils/functions/misc'; export type BootstrapNodes = { bootstrapNodes?: Url[]; }; export type DiscoveryProvider = { - resolveAssetEndpoint: (provider: AccountId, contentId?: string, cancelToken?: CancelToken) => Promise; - reportUnreachable: (provider: AccountId) => void; + resolveAssetEndpoint: (provider: StorageProviderId, contentId?: string, cancelToken?: CancelToken) => Promise; + reportUnreachable: (provider: StorageProviderId) => void; }; export type DiscoveryProviderProps = { @@ -26,9 +27,11 @@ export type DiscoveryProviderProps = { // return string Url with last `/` removed function normalizeUrl (url: string | Url): string { const st: string = url.toString(); + if (st.endsWith('/')) { return st.substring(0, st.length - 1); } + return st.toString(); } @@ -39,9 +42,13 @@ type ProviderStats = { } function newDiscoveryProvider ({ bootstrapNodes }: BootstrapNodes): DiscoveryProvider { - const stats: Map = new Map(); + const stats = new Map(); - const resolveAssetEndpoint = async (storageProvider: AccountId, contentId?: string, cancelToken?: CancelToken) => { + const resolveAssetEndpoint = async ( + storageProvider: StorageProviderId, + contentId?: string, + cancelToken?: CancelToken + ) => { const providerKey = storageProvider.toString(); let stat = stats.get(providerKey); @@ -65,23 +72,41 @@ function newDiscoveryProvider ({ bootstrapNodes }: BootstrapNodes): DiscoveryPro try { console.log(`Resolving ${providerKey} using ${discoveryUrl}`); - const serviceInfo = await axios.get(serviceInfoQuery, { cancelToken }) as any; + const serviceInfo = await axios.get(serviceInfoQuery, { cancelToken }); if (!serviceInfo) { continue; } + const { data } = serviceInfo; + + if (!isObjectWithProperties(data, 'serialized') || typeof data.serialized !== 'string') { + continue; + } + + const dataParsed = JSON.parse(data.serialized) as unknown; + + if ( + !isObjectWithProperties(dataParsed, 'asset') || + !isObjectWithProperties(dataParsed.asset, 'endpoint') || + typeof dataParsed.asset.endpoint !== 'string' + ) { + continue; + } + stats.set(providerKey, { - assetApiEndpoint: normalizeUrl(JSON.parse(serviceInfo.data.serialized).asset.endpoint), + assetApiEndpoint: normalizeUrl(dataParsed.asset.endpoint), unreachableReports: 0, resolvedAt: Date.now() }); break; } catch (err) { console.log(err); + if (axios.isCancel(err)) { throw err; } + continue; } } @@ -98,9 +123,10 @@ function newDiscoveryProvider ({ bootstrapNodes }: BootstrapNodes): DiscoveryPro throw new Error('Resolving failed.'); }; - const reportUnreachable = (provider: AccountId) => { + const reportUnreachable = (provider: StorageProviderId) => { const key = provider.toString(); const stat = stats.get(key); + if (stat) { stat.unreachableReports = stat.unreachableReports + 1; } @@ -111,7 +137,7 @@ function newDiscoveryProvider ({ bootstrapNodes }: BootstrapNodes): DiscoveryPro const DiscoveryProviderContext = createContext(undefined as unknown as DiscoveryProvider); -export const DiscoveryProviderProvider = (props: React.PropsWithChildren<{}>) => { +export const DiscoveryProviderProvider = (props: React.PropsWithChildren>) => { const api: ApiProps = useContext(ApiContext); const [provider, setProvider] = useState(); const [loaded, setLoaded] = useState(); @@ -122,12 +148,13 @@ export const DiscoveryProviderProvider = (props: React.PropsWithChildren<{}>) => console.log('Discovery Provider: Loading bootstrap node from Substrate...'); const bootstrapNodes = await api.api.query.discovery.bootstrapEndpoints() as Vec; + setProvider(newDiscoveryProvider({ bootstrapNodes })); setLoaded(true); console.log('Discovery Provider: Initialized'); }; - load(); + void load(); }, [loaded]); if (!api || !api.isApiReady) { @@ -157,8 +184,9 @@ export const useDiscoveryProvider = () => useContext(DiscoveryProviderContext); export function withDiscoveryProvider (Component: React.ComponentType) { - const ResultComponent: React.FunctionComponent<{}> = (props: React.PropsWithChildren<{}>) => { + const ResultComponent: React.FunctionComponent> = (props: React.PropsWithChildren>) => { const discoveryProvider = useDiscoveryProvider(); + if (!discoveryProvider) { return Loading discovery provider.; } @@ -169,6 +197,8 @@ export function withDiscoveryProvider (Component: React.ComponentType ); }; + ResultComponent.displayName = `withDiscoveryProvider(${componentName(Component)})`; + return ResultComponent; } diff --git a/pioneer/packages/joy-media/src/IterableFile.ts b/pioneer/packages/joy-media/src/IterableFile.ts index 5b7885fd60..6d9c4cd2e2 100644 --- a/pioneer/packages/joy-media/src/IterableFile.ts +++ b/pioneer/packages/joy-media/src/IterableFile.ts @@ -32,10 +32,11 @@ export class IterableFile implements AsyncIterable { readBlobAsBuffer (blob: Blob): Promise { return new Promise((resolve, reject) => { - this.reader.onload = (e: any) => { - e.target.result && resolve(Buffer.from(e.target.result)); - e.target.error && reject(e.target.error); + this.reader.onload = (e) => { + e.target?.result && resolve(typeof e.target.result === 'string' ? Buffer.from(e.target.result) : Buffer.from(e.target.result)); + e.target?.error && reject(e.target.error); }; + this.reader.readAsArrayBuffer(blob); }); } diff --git a/pioneer/packages/joy-media/src/MediaView.tsx b/pioneer/packages/joy-media/src/MediaView.tsx index d5968d2326..31c4932500 100644 --- a/pioneer/packages/joy-media/src/MediaView.tsx +++ b/pioneer/packages/joy-media/src/MediaView.tsx @@ -1,9 +1,12 @@ import React, { useState, useEffect } from 'react'; import { MediaTransport } from './transport'; import { MemberId } from '@joystream/types/members'; -import { useMyMembership } from '@polkadot/joy-utils/MyMembershipContext'; +import { useMyMembership } from '@polkadot/joy-utils/react/hooks'; import { useTransportContext } from './TransportContext'; -import { withMembershipRequired } from '@polkadot/joy-utils/MyAccount'; +import { withMembershipRequired } from '@polkadot/joy-utils/react/hocs/guards'; +import { useApi } from '@polkadot/react-hooks'; +import { ApiPromise } from '@polkadot/api'; +import { isObjectWithProperties } from '@polkadot/joy-utils/functions/misc'; type InitialPropsWithMembership = A & { myAddress?: string; @@ -12,6 +15,7 @@ type InitialPropsWithMembership = A & { type ResolverProps = InitialPropsWithMembership & { transport: MediaTransport; + api: ApiPromise; } type BaseProps = { @@ -29,28 +33,29 @@ type BaseProps = { membersOnly?: boolean; } -function serializeTrigger (val: any): any { +function serializeTrigger (val: unknown): number | boolean | string | undefined { if (['number', 'boolean', 'string'].includes(typeof val)) { - return val; - } else if (typeof val === 'object' && typeof val.toString === 'function') { - return val.toString(); + return val as number | boolean | string; + } else if (isObjectWithProperties(val, 'toString') && typeof val.toString === 'function') { + return val.toString() as string; } else { return undefined; } } -export function MediaView (baseProps: BaseProps) { +export function MediaView = Record, B extends Record = Record> (baseProps: BaseProps) { function InnerView (initialProps: A & B) { const { component: Component, resolveProps, triggers = [], unresolvedView = null } = baseProps; const transport = useTransportContext(); const { myAddress, myMemberId } = useMyMembership(); - const resolverProps = { ...initialProps, transport, myAddress, myMemberId }; + const { api } = useApi(); + const resolverProps = { ...initialProps, transport, api, myAddress, myMemberId }; const [resolvedProps, setResolvedProps] = useState({} as B); const [propsResolved, setPropsResolved] = useState(false); - const initialDeps = triggers.map(propName => serializeTrigger(initialProps[propName])); + const initialDeps = triggers.map((propName) => serializeTrigger(initialProps[propName])); const rerenderDeps = [...initialDeps, myAddress]; useEffect(() => { @@ -70,7 +75,7 @@ export function MediaView (baseProps: BaseProps) { if (!transport) { console.error('Transport is not defined'); } else { - doResolveProps(); + void doResolveProps(); } }, rerenderDeps); diff --git a/pioneer/packages/joy-media/src/TransportContext.tsx b/pioneer/packages/joy-media/src/TransportContext.tsx index aed0b34fed..ad628c4aa2 100644 --- a/pioneer/packages/joy-media/src/TransportContext.tsx +++ b/pioneer/packages/joy-media/src/TransportContext.tsx @@ -10,12 +10,12 @@ export const TransportContext = createContext(undefined as unkno export const useTransportContext = () => useContext(TransportContext); -export const MockTransportProvider = (props: React.PropsWithChildren<{}>) => +export const MockTransportProvider = (props: React.PropsWithChildren>) => {props.children} ; -export const SubstrateTransportProvider = (props: React.PropsWithChildren<{}>) => { +export const SubstrateTransportProvider = (props: React.PropsWithChildren>) => { const api: ApiProps = useContext(ApiContext); const [transport, setTransport] = useState(); const [loaded, setLoaded] = useState(); diff --git a/pioneer/packages/joy-media/src/Upload.tsx b/pioneer/packages/joy-media/src/Upload.tsx index 1dcdee3742..df3600d2f5 100644 --- a/pioneer/packages/joy-media/src/Upload.tsx +++ b/pioneer/packages/joy-media/src/Upload.tsx @@ -1,34 +1,37 @@ import React from 'react'; import BN from 'bn.js'; -import axios, { CancelTokenSource } from 'axios'; +import axios, { CancelTokenSource, AxiosError, AxiosRequestConfig } from 'axios'; import { History } from 'history'; import { Progress, Message } from 'semantic-ui-react'; -import { InputFileAsync } from '@polkadot/react-components/index'; +import { registry } from '@joystream/types'; +import { InputFileAsync, TxButton, JoyInfo, Loading } from '@polkadot/joy-utils/react/components'; import { ApiProps } from '@polkadot/react-api/types'; import { I18nProps } from '@polkadot/react-components/types'; import { SubmittableResult } from '@polkadot/api'; import { Option } from '@polkadot/types/codec'; import { withMulti, withApi } from '@polkadot/react-api'; import { formatNumber } from '@polkadot/util'; -import { AccountId } from '@polkadot/types/interfaces'; import translate from './translate'; import { fileNameWoExt } from './utils'; import { ContentId, DataObject } from '@joystream/types/media'; -import { withMembershipRequired } from '@polkadot/joy-utils/MyAccount'; +import { MyAccountProps } from '@polkadot/joy-utils/react/hocs/accounts'; +import { withOnlyMembers } from '@polkadot/joy-utils/react/hocs/guards'; import { DiscoveryProviderProps, withDiscoveryProvider } from './DiscoveryProvider'; -import TxButton from '@polkadot/joy-utils/TxButton'; + import IpfsHash from 'ipfs-only-hash'; import { ChannelId } from '@joystream/types/content-working-group'; import { EditVideoView } from './upload/EditVideo.view'; -import { JoyInfo } from '@polkadot/joy-utils/JoyStatus'; + import { IterableFile } from './IterableFile'; +import { StorageProviderId } from '@joystream/types/working-group'; +import { normalizeError, isObjectWithProperties } from '@polkadot/joy-utils/functions/misc'; const MAX_FILE_SIZE_MB = 500; const MAX_FILE_SIZE_BYTES = MAX_FILE_SIZE_MB * 1024 * 1024; -type Props = ApiProps & I18nProps & DiscoveryProviderProps & { +type Props = ApiProps & I18nProps & DiscoveryProviderProps & MyAccountProps & { channelId: ChannelId; history?: History; match: { @@ -39,13 +42,14 @@ type Props = ApiProps & I18nProps & DiscoveryProviderProps & { }; type State = { - error?: any; + error?: string; file?: File; computingHash: boolean; ipfs_cid?: string; newContentId: ContentId; discovering: boolean; uploading: boolean; + sendingTx: boolean; progress: number; cancelSource: CancelTokenSource; }; @@ -55,14 +59,15 @@ const defaultState = (): State => ({ file: undefined, computingHash: false, ipfs_cid: undefined, - newContentId: ContentId.generate(), + newContentId: ContentId.generate(registry), discovering: false, uploading: false, + sendingTx: false, progress: 0, cancelSource: axios.CancelToken.source() }); -class Component extends React.PureComponent { +class Upload extends React.PureComponent { state = defaultState(); componentWillUnmount () { @@ -72,6 +77,7 @@ class Component extends React.PureComponent { }); const { cancelSource } = this.state; + cancelSource.cancel('unmounting'); } @@ -84,21 +90,21 @@ class Component extends React.PureComponent { } private renderContent () { - const { error, uploading, discovering, computingHash } = this.state; + const { error, uploading, discovering, computingHash, sendingTx } = this.state; - if (error) return this.renderError(); + if (error) return this.renderError(error); else if (discovering) return this.renderDiscovering(); else if (uploading) return this.renderUploading(); else if (computingHash) return this.renderComputingHash(); + else if (sendingTx) return this.renderSendingTx(); else return this.renderFileInput(); } - private renderError () { - const { error } = this.state; + private renderError (error: string) { return ( Failed to upload your file -

{error.toString()}

+

{error}

); @@ -106,24 +112,26 @@ class Component extends React.PureComponent { private resetForm = () => { const { cancelSource } = this.state; + this.setState({ - cancelSource, - ...defaultState() + ...defaultState(), + cancelSource }); } private renderUploading () { const { file, newContentId, progress, error } = this.state; + if (!file || !file.name) return ; const success = !error && progress >= 100; - const { history, match: { params: { channelId } } } = this.props; + const { history, match: { params: { channelId } }, api } = this.props; return
{this.renderProgress()} {success && {
; } + private renderSendingTx () { + return ; + } + private renderDiscovering () { return Contacting storage provider.; } @@ -142,6 +154,7 @@ class Component extends React.PureComponent { const success = !error && progress >= 100; let label = ''; + if (active) { label = 'Your file is uploading. Please keep this page open until it\'s done.'; } else if (success) { @@ -165,7 +178,7 @@ class Component extends React.PureComponent { return
{ /> {file_name &&
{ + this.setState({ sendingTx: true }); + sendTx(); + }} + txSuccessCb={ this.onDataObjectCreated } + txFailedCb={() => { this.setState({ sendingTx: false }); }} />
}
; @@ -205,7 +222,7 @@ class Component extends React.PureComponent { }); } else { this.setState({ file, computingHash: true }); - this.startComputingHash(); + void this.startComputingHash(); } } @@ -218,7 +235,8 @@ class Component extends React.PureComponent { try { const iterableFile = new IterableFile(file, { chunkSize: 65535 }); - const ipfs_cid = await IpfsHash.of(iterableFile); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call + const ipfs_cid = (await IpfsHash.of(iterableFile)) as string; this.hashComputationComplete(ipfs_cid); } catch (err) { @@ -244,27 +262,31 @@ class Component extends React.PureComponent { private buildTxParams = () => { const { file, newContentId, ipfs_cid } = this.state; + if (!file || !ipfs_cid) return []; // TODO get corresponding data type id based on file content const dataObjectTypeId = new BN(1); + const { myMemberId } = this.props; - return [newContentId, dataObjectTypeId, new BN(file.size), ipfs_cid]; + return [myMemberId, newContentId, dataObjectTypeId, new BN(file.size), ipfs_cid]; } private onDataObjectCreated = async (_txResult: SubmittableResult) => { - this.setState({ discovering: true }); + this.setState({ sendingTx: false, discovering: true }); const { api } = this.props; const { newContentId } = this.state; let dataObject: Option; + try { dataObject = await api.query.dataDirectory.dataObjectByContentId(newContentId) as Option; } catch (err) { this.setState({ - error: err, + error: normalizeError(err), discovering: false }); + return; } @@ -276,27 +298,30 @@ class Component extends React.PureComponent { if (dataObject.isSome) { const storageProvider = dataObject.unwrap().liaison; - this.uploadFileTo(storageProvider); + + void this.uploadFileTo(storageProvider); } else { this.setState({ - error: new Error('No Storage Provider assigned to process upload'), + error: 'No Storage Provider assigned to process upload', discovering: false }); } } - private uploadFileTo = async (storageProvider: AccountId) => { + private uploadFileTo = async (storageProvider: StorageProviderId) => { const { file, newContentId, cancelSource } = this.state; + if (!file || !file.size) { this.setState({ - error: new Error('No file to upload!'), + error: 'No file to upload!', discovering: false }); + return; } const contentId = newContentId.encode(); - const config = { + const config: AxiosRequestConfig = { headers: { // TODO uncomment this once the issue fixed: // https://github.com/Joystream/storage-node-joystream/issues/16 @@ -304,8 +329,17 @@ class Component extends React.PureComponent { 'Content-Type': '' // <-- this is a temporary hack }, cancelToken: cancelSource.token, - onUploadProgress: (progressEvent: any) => { + onUploadProgress: (progressEvent: unknown) => { + if ( + !isObjectWithProperties(progressEvent, 'loaded', 'total') || + typeof progressEvent.loaded !== 'number' || + typeof progressEvent.total !== 'number' + ) { + return; + } + const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total); + this.setState({ progress: percentCompleted }); @@ -314,11 +348,12 @@ class Component extends React.PureComponent { const { discoveryProvider } = this.props; let url: string; + try { url = await discoveryProvider.resolveAssetEndpoint(storageProvider, contentId, cancelSource.token); } catch (err) { return this.setState({ - error: new Error(`Failed to contact storage provider: ${err.message}`), + error: `Failed to contact storage provider: ${normalizeError(err)}`, discovering: false }); } @@ -335,12 +370,20 @@ class Component extends React.PureComponent { try { await axios.put<{ message: string }>(url, file, config); - } catch (err) { - this.setState({ progress: 0, error: err, uploading: false }); + } catch (e) { + const err = e as unknown; + + this.setState({ progress: 0, error: normalizeError(err), uploading: false }); + if (axios.isCancel(err)) { return; } - if (!err.response || (err.response.status >= 500 && err.response.status <= 504)) { + + const response = isObjectWithProperties(err, 'response') + ? (err as AxiosError).response + : undefined; + + if (!response || (response.status >= 500 && response.status <= 504)) { // network connection error discoveryProvider.reportUnreachable(storageProvider); } @@ -349,9 +392,9 @@ class Component extends React.PureComponent { } export const UploadWithRouter = withMulti( - Component, + Upload, translate, withApi, - withMembershipRequired, + withOnlyMembers, withDiscoveryProvider ); diff --git a/pioneer/packages/joy-media/src/channels/ChannelAvatar.tsx b/pioneer/packages/joy-media/src/channels/ChannelAvatar.tsx index f1416df962..48d3d59f35 100644 --- a/pioneer/packages/joy-media/src/channels/ChannelAvatar.tsx +++ b/pioneer/packages/joy-media/src/channels/ChannelAvatar.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Link } from 'react-router-dom'; import { ChannelEntity } from '../entities/ChannelEntity'; import { BgImg } from '../common/BgImg'; -import { DEFAULT_THUMBNAIL_URL } from '@polkadot/joy-utils/images'; +import { DEFAULT_THUMBNAIL_URL } from '../common/images'; const defaultSizePx = 75; diff --git a/pioneer/packages/joy-media/src/channels/ChannelAvatarAndName.tsx b/pioneer/packages/joy-media/src/channels/ChannelAvatarAndName.tsx index ca553c6b1f..16f9f06aac 100644 --- a/pioneer/packages/joy-media/src/channels/ChannelAvatarAndName.tsx +++ b/pioneer/packages/joy-media/src/channels/ChannelAvatarAndName.tsx @@ -9,6 +9,7 @@ type Props = { export const ChannelAvatarAndName = (props: Props) => { const { channel } = props; + return (
diff --git a/pioneer/packages/joy-media/src/channels/ChannelHelpers.ts b/pioneer/packages/joy-media/src/channels/ChannelHelpers.ts index 9e3558e5bf..6ea47c8253 100644 --- a/pioneer/packages/joy-media/src/channels/ChannelHelpers.ts +++ b/pioneer/packages/joy-media/src/channels/ChannelHelpers.ts @@ -4,7 +4,7 @@ import { ChannelPublicationStatusAllValues } from '@joystream/types/content-work export const ChannelPublicationStatusDropdownOptions = ChannelPublicationStatusAllValues - .map(x => ({ key: x, value: x, text: x })); + .map((x) => ({ key: x, value: x, text: x })); export const isVideoChannel = (channel: ChannelType) => { return channel.content === 'Video'; diff --git a/pioneer/packages/joy-media/src/channels/ChannelNameAsLink.tsx b/pioneer/packages/joy-media/src/channels/ChannelNameAsLink.tsx index d794b57602..884516a00d 100644 --- a/pioneer/packages/joy-media/src/channels/ChannelNameAsLink.tsx +++ b/pioneer/packages/joy-media/src/channels/ChannelNameAsLink.tsx @@ -10,6 +10,7 @@ type Props = { export const ChannelNameAsLink = (props: Props) => { const { channel, className, style } = props; + return ( {channel.title || channel.handle} diff --git a/pioneer/packages/joy-media/src/channels/ChannelPreview.tsx b/pioneer/packages/joy-media/src/channels/ChannelPreview.tsx index 7c0e19372a..98e0369e37 100644 --- a/pioneer/packages/joy-media/src/channels/ChannelPreview.tsx +++ b/pioneer/packages/joy-media/src/channels/ChannelPreview.tsx @@ -6,8 +6,8 @@ import { ChannelEntity } from '../entities/ChannelEntity'; import { ChannelAvatar, ChannelAvatarSize } from './ChannelAvatar'; import { isPublicChannel, isMusicChannel, isVideoChannel, isAccountAChannelOwner, isVerifiedChannel } from './ChannelHelpers'; -import { useMyMembership } from '@polkadot/joy-utils/MyMembershipContext'; -import { nonEmptyStr } from '@polkadot/joy-utils/index'; +import { useMyMembership } from '@polkadot/joy-utils/react/hooks'; +import { nonEmptyStr } from '@polkadot/joy-utils/functions/misc'; import { CurationPanel } from './CurationPanel'; import { ChannelNameAsLink } from './ChannelNameAsLink'; @@ -52,8 +52,6 @@ export const ChannelPreview = (props: ChannelPreviewProps) => {

- - {isAccountAChannelOwner(channel, myAccountId) &&
@@ -101,6 +99,8 @@ export const ChannelPreview = (props: ChannelPreviewProps) => { }
+ + {withDescription && nonEmptyStr(channel.description) && } diff --git a/pioneer/packages/joy-media/src/channels/ChannelPreviewStats.tsx b/pioneer/packages/joy-media/src/channels/ChannelPreviewStats.tsx index cee1016479..12835cd3b8 100644 --- a/pioneer/packages/joy-media/src/channels/ChannelPreviewStats.tsx +++ b/pioneer/packages/joy-media/src/channels/ChannelPreviewStats.tsx @@ -13,6 +13,7 @@ export const ChannelPreviewStats = (props: Props) => { const statSize = 'tiny'; let itemsPublishedLabel = ''; + if (channel.content === 'Video') { itemsPublishedLabel = 'Videos'; } else if (channel.content === 'Music') { diff --git a/pioneer/packages/joy-media/src/channels/ChannelsByOwner.tsx b/pioneer/packages/joy-media/src/channels/ChannelsByOwner.tsx index 4e29d3420f..08d1d60a0d 100644 --- a/pioneer/packages/joy-media/src/channels/ChannelsByOwner.tsx +++ b/pioneer/packages/joy-media/src/channels/ChannelsByOwner.tsx @@ -19,7 +19,8 @@ const TabsAndChannels = (props: ChannelsByOwnerProps) => { let videoChannelsCount = 0; let musicChannelsCount = 0; - allChannels.forEach(x => { + + allChannels.forEach((x) => { if (x.content === 'Video') { videoChannelsCount++; } else if (x.content === 'Music') { @@ -38,6 +39,7 @@ const TabsAndChannels = (props: ChannelsByOwnerProps) => { const switchTab = (activeIndex: number) => { const activeContentType = contentTypeByTabIndex[activeIndex]; + if (activeContentType === undefined) { setChannels(allChannels); } else { diff --git a/pioneer/packages/joy-media/src/channels/ChannelsByOwner.view.tsx b/pioneer/packages/joy-media/src/channels/ChannelsByOwner.view.tsx index 9200d6d778..a60863e7ef 100644 --- a/pioneer/packages/joy-media/src/channels/ChannelsByOwner.view.tsx +++ b/pioneer/packages/joy-media/src/channels/ChannelsByOwner.view.tsx @@ -1,10 +1,10 @@ import React from 'react'; import { RouteComponentProps } from 'react-router'; -import { GenericAccountId } from '@polkadot/types'; import { MediaView } from '../MediaView'; import { ChannelsByOwnerProps, ChannelsByOwner } from './ChannelsByOwner'; -import { JoyError } from '@polkadot/joy-utils/JoyStatus'; +import { JoyError } from '@polkadot/joy-utils/react/components'; +import { useApi } from '@polkadot/react-hooks'; type Props = ChannelsByOwnerProps; @@ -13,16 +13,18 @@ export const ChannelsByOwnerView = MediaView({ resolveProps: async (props) => { const { transport, accountId } = props; const channels = await transport.channelsByAccount(accountId); + return { channels }; } }); -export const ChannelsByOwnerWithRouter = (props: Props & RouteComponentProps) => { +export const ChannelsByOwnerWithRouter = (props: Props & RouteComponentProps>) => { const { match: { params: { account } } } = props; + const { api } = useApi(); if (account) { try { - return ; + return ; } catch (err) { console.log('ChannelsByOwnerWithRouter failed:', err); } diff --git a/pioneer/packages/joy-media/src/channels/CurationPanel.tsx b/pioneer/packages/joy-media/src/channels/CurationPanel.tsx index ce2279a537..145341b799 100644 --- a/pioneer/packages/joy-media/src/channels/CurationPanel.tsx +++ b/pioneer/packages/joy-media/src/channels/CurationPanel.tsx @@ -1,16 +1,18 @@ import React from 'react'; import { ChannelEntity } from '../entities/ChannelEntity'; import { isVerifiedChannel, isCensoredChannel } from './ChannelHelpers'; -import { useMyMembership } from '@polkadot/joy-utils/MyMembershipContext'; -import TxButton from '@polkadot/joy-utils/TxButton'; -import { ChannelCurationStatus } from '@joystream/types/content-working-group'; +import { useMyMembership } from '@polkadot/joy-utils/react/hooks'; +import { SemanticTxButton } from '@polkadot/joy-utils/react/components/TxButton'; import { AccountId } from '@polkadot/types/interfaces'; +import { useApi } from '@polkadot/react-hooks'; +import { Icon } from 'semantic-ui-react'; type ChannelCurationPanelProps = { channel: ChannelEntity; }; export const CurationPanel = (props: ChannelCurationPanelProps) => { + const { api } = useApi(); const { curationActor, allAccounts } = useMyMembership(); const { channel } = props; @@ -34,17 +36,16 @@ export const CurationPanel = (props: ChannelCurationPanelProps) => { const isCensored = isCensoredChannel(channel); - const new_curation_status = new ChannelCurationStatus( + const new_curation_status = api.createType('ChannelCurationStatus', isCensored ? 'Normal' : 'Censored' ); - return { new_curation_status // toggled curation status ]} tx={'contentWorkingGroup.updateChannelAsCurationActor'} - />; + > + + { isCensored ? 'Un-Censor' : 'Censor' } + ; }; const renderToggleVerifiedButton = () => { @@ -62,13 +66,12 @@ export const CurationPanel = (props: ChannelCurationPanelProps) => { const accountAvailable = canUseAccount(role_account); const isVerified = isVerifiedChannel(channel); - return { null // not changing curation status ]} tx={'contentWorkingGroup.updateChannelAsCurationActor'} - />; + > + + { isVerified ? 'Remove Verification' : 'Verify' } + ; }; return <> -
+
{renderToggleCensorshipButton()} {renderToggleVerifiedButton()}
diff --git a/pioneer/packages/joy-media/src/channels/EditChannel.tsx b/pioneer/packages/joy-media/src/channels/EditChannel.tsx index d3dddc0d48..29fc3e64c2 100644 --- a/pioneer/packages/joy-media/src/channels/EditChannel.tsx +++ b/pioneer/packages/joy-media/src/channels/EditChannel.tsx @@ -3,20 +3,21 @@ import { Button } from 'semantic-ui-react'; import { Form, withFormik } from 'formik'; import { History } from 'history'; -import { Text, Option } from '@polkadot/types'; -import TxButton from '@polkadot/joy-utils/TxButton'; -import { onImageError } from '@polkadot/joy-utils/images'; +import { Option } from '@polkadot/types'; +import { TxButton, JoyError, Section } from '@polkadot/joy-utils/react/components'; +import { onImageError } from '../common/images'; import { withMediaForm, MediaFormProps } from '../common/MediaForms'; import { ChannelType, ChannelClass as Fields, buildChannelValidationSchema, ChannelFormValues, ChannelToFormValues, ChannelGenericProp } from '../schemas/channel/Channel'; import { MediaDropdownOptions } from '../common/MediaDropdownOptions'; -import { ChannelId, ChannelContentType, ChannelPublicationStatus, OptionalText } from '@joystream/types/content-working-group'; -import { newOptionalText, findFirstParamOfSubstrateEvent } from '@polkadot/joy-utils/index'; -import { useMyMembership } from '@polkadot/joy-utils/MyMembershipContext'; +import { ChannelId, OptionalText } from '@joystream/types/content-working-group'; +import { findFirstParamOfSubstrateEvent } from '@polkadot/joy-utils/functions/misc'; +import { useMyMembership } from '@polkadot/joy-utils/react/hooks'; import { ChannelPublicationStatusDropdownOptions, isAccountAChannelOwner } from './ChannelHelpers'; import { TxCallback } from '@polkadot/react-components/Status/types'; import { SubmittableResult } from '@polkadot/api'; import { ChannelValidationConstraints } from '../transport'; -import { JoyError } from '@polkadot/joy-utils/JoyStatus'; + +import { useApi } from '@polkadot/react-hooks'; export type OuterProps = { history?: History; @@ -55,6 +56,7 @@ const InnerForm = (props: MediaFormProps) => { } = props; const { myAccountId, myMemberId } = useMyMembership(); + const { api } = useApi(); if (entity && !isAccountAChannelOwner(entity, myAccountId)) { return ; @@ -82,52 +84,49 @@ const InnerForm = (props: MediaFormProps) => { const buildTxParams = () => { if (!isValid) return []; - // TODO get value from the form: - const publicationStatus = new ChannelPublicationStatus('Public'); - if (!entity) { // Create a new channel const channelOwner = myMemberId; const roleAccount = myAccountId; - const contentType = new ChannelContentType(values.content); + const contentType = api.createType('ChannelContentType', values.content); return [ channelOwner, roleAccount, contentType, - new Text(values.handle), - newOptionalText(values.title), - newOptionalText(values.description), - newOptionalText(values.avatar), - newOptionalText(values.banner), - publicationStatus + values.handle, + values.title || null, + values.description || null, + values.avatar || null, + values.banner || null, + values.publicationStatus ]; } else { // Update an existing channel const updOptText = (field: ChannelGenericProp): Option => { - return new Option(OptionalText, + return api.createType('Option', isFieldChanged(field) - ? newOptionalText(values[field.id]) + ? api.createType('Option', values[field.id]) : null ); }; - const updHandle = new Option(Text, + const updHandle = api.createType('Option', isFieldChanged(Fields.handle) ? values[Fields.handle.id] : null ); - const updPublicationStatus = new Option(ChannelPublicationStatus, + const updPublicationStatus = api.createType('Option', isFieldChanged(Fields.publicationStatus) - ? new ChannelPublicationStatus(values[Fields.publicationStatus.id] as any) + ? api.createType('ChannelPublicationStatus', values[Fields.publicationStatus.id]) : null ); return [ - new ChannelId(entity.id), + entity.id, updHandle, updOptText(Fields.title), updOptText(Fields.description), @@ -155,7 +154,6 @@ const InnerForm = (props: MediaFormProps) => { const renderMainButton = () => ) => { {avatar && }
-
- - {formFields()} - - - {renderMainButton()} -

; }; @@ -199,11 +199,13 @@ export const EditForm = withFormik({ // Transform outer props into form values mapPropsToValues: (props): FormValues => { const { entity } = props; + return ChannelToFormValues(entity); }, validationSchema: (props: OuterProps): any => { const { constraints } = props; + if (!constraints) return null; return buildChannelValidationSchema(constraints); diff --git a/pioneer/packages/joy-media/src/channels/EditChannel.view.tsx b/pioneer/packages/joy-media/src/channels/EditChannel.view.tsx index b05582a965..3776a0155a 100644 --- a/pioneer/packages/joy-media/src/channels/EditChannel.view.tsx +++ b/pioneer/packages/joy-media/src/channels/EditChannel.view.tsx @@ -2,8 +2,8 @@ import React from 'react'; import { RouteComponentProps } from 'react-router'; import { MediaView } from '../MediaView'; import { OuterProps, EditForm } from './EditChannel'; -import { ChannelId } from '@joystream/types/content-working-group'; -import { JoyError } from '@polkadot/joy-utils/JoyStatus'; +import { JoyError } from '@polkadot/joy-utils/react/components'; +import { useApi } from '@polkadot/react-hooks'; type Props = OuterProps; @@ -15,18 +15,20 @@ export const EditChannelView = MediaView({ const { transport, id } = props; const entity = id && await transport.channelById(id); const constraints = await transport.channelValidationConstraints(); + return { entity, constraints }; } }); -type WithRouterProps = Props & RouteComponentProps +type WithRouterProps = Props & RouteComponentProps> export const EditChannelWithRouter = (props: WithRouterProps) => { const { match: { params: { id } } } = props; + const { api } = useApi(); if (id) { try { - return ; + return ; } catch (err) { console.log('EditChannelWithRouter failed:', err); } diff --git a/pioneer/packages/joy-media/src/channels/ViewChannel.tsx b/pioneer/packages/joy-media/src/channels/ViewChannel.tsx index f55af16abf..7f35b05331 100644 --- a/pioneer/packages/joy-media/src/channels/ViewChannel.tsx +++ b/pioneer/packages/joy-media/src/channels/ViewChannel.tsx @@ -8,7 +8,7 @@ import { ViewVideoChannel } from './ViewVideoChannel'; import { ViewMusicChannel } from './ViewMusicChannel'; import { toVideoPreviews } from '../video/VideoPreview'; import { isVideoChannel, isMusicChannel } from './ChannelHelpers'; -import { JoyError } from '@polkadot/joy-utils/JoyStatus'; +import { JoyError } from '@polkadot/joy-utils/react/components'; export type ViewChannelProps = { id: ChannelId; @@ -31,6 +31,7 @@ export function ViewChannel (props: ViewChannelProps) { if (isVideoChannel(channel)) { const previews = toVideoPreviews(videos); + return ; } else if (isMusicChannel(channel)) { return ; diff --git a/pioneer/packages/joy-media/src/channels/ViewChannel.view.tsx b/pioneer/packages/joy-media/src/channels/ViewChannel.view.tsx index d44432c73a..8a05504706 100644 --- a/pioneer/packages/joy-media/src/channels/ViewChannel.view.tsx +++ b/pioneer/packages/joy-media/src/channels/ViewChannel.view.tsx @@ -2,8 +2,8 @@ import React from 'react'; import { RouteComponentProps } from 'react-router'; import { MediaView } from '../MediaView'; import { ViewChannelProps, ViewChannel } from './ViewChannel'; -import { ChannelId } from '@joystream/types/content-working-group'; -import { JoyError } from '@polkadot/joy-utils/JoyStatus'; +import { JoyError } from '@polkadot/joy-utils/react/components'; +import { useApi } from '@polkadot/react-hooks'; type Props = ViewChannelProps; @@ -14,16 +14,18 @@ export const ViewChannelView = MediaView({ const { transport, id } = props; const channel = await transport.channelById(id); const videos = await transport.videosByChannelId(id); + return { channel, videos }; } }); -export const ViewChannelWithRouter = (props: Props & RouteComponentProps) => { +export const ViewChannelWithRouter = (props: Props & RouteComponentProps>) => { const { match: { params: { id } } } = props; + const { api } = useApi(); if (id) { try { - return ; + return ; } catch (err) { console.log('ViewChannelWithRouter failed:', err); } diff --git a/pioneer/packages/joy-media/src/channels/ViewMusicChannel.tsx b/pioneer/packages/joy-media/src/channels/ViewMusicChannel.tsx index f3526e7b49..3fd24d1c1c 100644 --- a/pioneer/packages/joy-media/src/channels/ViewMusicChannel.tsx +++ b/pioneer/packages/joy-media/src/channels/ViewMusicChannel.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { ChannelEntity } from '../entities/ChannelEntity'; -import Section from '@polkadot/joy-utils/Section'; +import { Section } from '@polkadot/joy-utils/react/components'; import { ChannelHeader } from './ChannelHeader'; import { MusicAlbumPreviewProps, MusicAlbumPreview } from '../music/MusicAlbumPreview'; import { MusicTrackReaderPreview, MusicTrackReaderPreviewProps } from '../music/MusicTrackReaderPreview'; @@ -27,7 +27,7 @@ export function ViewMusicChannel (props: Props) { !albums.length ? :
- {albums.map(x => )} + {albums.map((x) => )}
); @@ -35,7 +35,7 @@ export function ViewMusicChannel (props: Props) { !tracks.length ? :
- {tracks.map(x => )} + {tracks.map((x) => )}
); diff --git a/pioneer/packages/joy-media/src/channels/ViewVideoChannel.tsx b/pioneer/packages/joy-media/src/channels/ViewVideoChannel.tsx index 0d330f7810..ad089ed4c0 100644 --- a/pioneer/packages/joy-media/src/channels/ViewVideoChannel.tsx +++ b/pioneer/packages/joy-media/src/channels/ViewVideoChannel.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import Section from '@polkadot/joy-utils/Section'; +import { Section } from '@polkadot/joy-utils/react/components'; import { ChannelEntity } from '../entities/ChannelEntity'; import { ChannelHeader } from './ChannelHeader'; import { VideoPreview, VideoPreviewProps } from '../video/VideoPreview'; diff --git a/pioneer/packages/joy-media/src/common/BgImg.tsx b/pioneer/packages/joy-media/src/common/BgImg.tsx index 6913c7e2ec..9b73866f22 100644 --- a/pioneer/packages/joy-media/src/common/BgImg.tsx +++ b/pioneer/packages/joy-media/src/common/BgImg.tsx @@ -13,7 +13,7 @@ type Props = { export function BgImg (props: Props) { let { url, width, height, size, circle, className, style } = props; - const fullClass = 'JoyBgImg ' + className; + const fullClass = `JoyBgImg ${className || ''}`; let fullStyle: CSSProperties = { backgroundImage: `url(${url})` diff --git a/pioneer/packages/joy-media/src/common/FormTabs.tsx b/pioneer/packages/joy-media/src/common/FormTabs.tsx index 1d1b32c1df..01610afb20 100644 --- a/pioneer/packages/joy-media/src/common/FormTabs.tsx +++ b/pioneer/packages/joy-media/src/common/FormTabs.tsx @@ -20,7 +20,7 @@ export function FormTabs (props: FormTabsProps) { return { + panes={panes.map((tab) => { const { id, fields = [], @@ -29,8 +29,10 @@ export function FormTabs (props: FormTabsProps) { } = tab; const tabErrors: any[] = []; - fields.forEach(f => { + + fields.forEach((f) => { const err = errors[f.id]; + if (err) { tabErrors.push(err); } diff --git a/pioneer/packages/joy-media/src/common/MediaDropdownOptions.tsx b/pioneer/packages/joy-media/src/common/MediaDropdownOptions.tsx index 0fd9b77b0b..a9ec671ba0 100644 --- a/pioneer/packages/joy-media/src/common/MediaDropdownOptions.tsx +++ b/pioneer/packages/joy-media/src/common/MediaDropdownOptions.tsx @@ -5,10 +5,10 @@ import { TextValueEntity } from '@joystream/types/versioned-store/EntityCodec'; import { InternalEntities } from '../transport'; const buildOptions = (entities: TextValueEntity[]): DropdownItemProps[] => - entities.map(x => ({ key: x.id, value: x.id, text: x.value })); + entities.map((x) => ({ key: x.id, value: x.id, text: x.value })); const buildLanguageOptions = (entities: LanguageType[]): DropdownItemProps[] => - entities.map(x => ({ key: x.id, value: x.id, text: ISO6391.getName(x.value) })); + entities.map((x) => ({ key: x.id, value: x.id, text: ISO6391.getName(x.value) })); export class MediaDropdownOptions { public languageOptions: DropdownItemProps[] diff --git a/pioneer/packages/joy-media/src/common/MediaForms.tsx b/pioneer/packages/joy-media/src/common/MediaForms.tsx index 0607e27095..fc7e0fced7 100644 --- a/pioneer/packages/joy-media/src/common/MediaForms.tsx +++ b/pioneer/packages/joy-media/src/common/MediaForms.tsx @@ -1,16 +1,21 @@ import React from 'react'; import { Dropdown, DropdownItemProps, DropdownProps } from 'semantic-ui-react'; import { FormikProps, Field } from 'formik'; -import * as JoyForms from '@polkadot/joy-utils/forms'; +import * as JoyForms from '@polkadot/joy-utils/react/components/forms'; import { SubmittableResult } from '@polkadot/api'; import { TxFailedCallback, TxCallback } from '@polkadot/react-components/Status/types'; import { MediaDropdownOptions } from './MediaDropdownOptions'; -import { OnTxButtonClick } from '@polkadot/joy-utils/TxButton'; +import { OnTxButtonClick } from '@polkadot/joy-utils/react/components/TxButton'; import isEqual from 'lodash/isEqual'; import { componentName } from '@polkadot/joy-utils/react/helpers'; export const datePlaceholder = 'Date in format yyyy-mm-dd'; +export const boolOptions: DropdownItemProps[] = [ + { value: 'true', text: 'Yes' }, + { value: 'false', text: 'No' } +]; + export type FormCallbacks = { onSubmit: OnTxButtonClick; onTxSuccess: TxCallback; @@ -40,7 +45,7 @@ type MediaTextProps = type MediaFieldProps = BaseFieldProps & JoyForms.LabelledProps & { - fieldProps: any; + fieldProps: Record; } type MediaDropdownProps = @@ -78,6 +83,7 @@ export function withMediaForm function MediaText (props: MediaTextProps) { const { field: f } = props; + return !f ? null : ; } @@ -105,8 +111,8 @@ export function withMediaForm const MediaDropdown = (props: MediaDropdownProps) => { const { field: f, options = [] } = props; - const id = f.id as string; - const value = (props.values as any)[id] || ''; + const id = f.id; + const value = props.values[id] || ''; return options, value, onBlur: (_event: any, _data: DropdownProps) => { - props.setFieldTouched(id, true); + props.setFieldTouched(id as string, true); }, onChange: (_event: any, data: DropdownProps) => { - props.setFieldValue(id, data.value); + props.setFieldValue(id as string, data.value); } }} />; }; @@ -138,6 +144,7 @@ export function withMediaForm const isFieldChanged = (field: FieldName | FieldObject): boolean => { const fieldName = typeof field === 'string' ? field : (field as FieldObject).id; + return ( dirty && touched[fieldName] === true && @@ -159,6 +166,7 @@ export function withMediaForm const onTxFailed: TxFailedCallback = (txResult: SubmittableResult | null) => { setSubmitting(false); + if (txResult === null) { // Tx cancelled @@ -187,6 +195,8 @@ export function withMediaForm return ; }; + ResultComponent.displayName = `withMediaForm(${componentName(Component)})`; + return ResultComponent; } diff --git a/pioneer/packages/joy-media/src/common/MediaPlayerView.tsx b/pioneer/packages/joy-media/src/common/MediaPlayerView.tsx index ff0d7a2193..959b18f1fc 100644 --- a/pioneer/packages/joy-media/src/common/MediaPlayerView.tsx +++ b/pioneer/packages/joy-media/src/common/MediaPlayerView.tsx @@ -5,7 +5,7 @@ import APlayer from 'react-aplayer'; import { ApiProps } from '@polkadot/react-api/types'; import { I18nProps } from '@polkadot/react-components/types'; -import { withCalls, withMulti } from '@polkadot/react-api/with'; +import { withCalls, withMulti } from '@polkadot/react-api/hoc'; import { Option } from '@polkadot/types/codec'; import translate from '../translate'; @@ -14,8 +14,8 @@ import { DataObject, ContentId } from '@joystream/types/media'; import { VideoType } from '../schemas/video/Video'; import { isAccountAChannelOwner } from '../channels/ChannelHelpers'; import { ChannelEntity } from '../entities/ChannelEntity'; -import { useMyMembership } from '@polkadot/joy-utils/MyMembershipContext'; -import { JoyError } from '@polkadot/joy-utils/JoyStatus'; +import { useMyMembership } from '@polkadot/joy-utils/react/hooks'; +import { JoyError } from '@polkadot/joy-utils/react/components'; const PLAYER_COMMON_PARAMS = { lang: 'en', @@ -41,7 +41,7 @@ export type RequiredMediaPlayerProps = { type ContentProps = { contentType?: string; dataObjectOpt?: Option; - resolvedAssetUrl?: string; + resolvedAssetUrl: string; } type MediaPlayerViewProps = ApiProps & I18nProps & @@ -78,6 +78,7 @@ function Player (props: PlayerProps) { if (prefix === 'video') { const video = { url, name, pic: cover }; + return ; } else if (prefix === 'audio') { const audio = { url, name, cover }; + return (); const [resolvedAssetUrl, setResolvedAssetUrl] = useState(); @@ -33,27 +35,35 @@ function InnerComponent (props: Props) { setError(undefined); setCancelSource(newCancelSource()); - const rids: DataObjectStorageRelationshipId[] = await api.query.dataObjectStorageRegistry.relationshipsByContentId(contentId) as any; + const rids = await api.query.dataObjectStorageRegistry.relationshipsByContentId>(contentId); - const allRelationships: Option[] = await Promise.all(rids.map((id) => api.query.dataObjectStorageRegistry.relationships(id))) as any; + const allRelationships = await Promise.all( + rids.map((id) => + api.query.dataObjectStorageRegistry.relationships>(id) + ) + ); - let readyProviders = allRelationships.filter(r => r.isSome).map(r => r.unwrap()) - .filter(r => r.ready) - .map(r => r.storage_provider); + // Providers that have signalled onchain that they have the asset + let readyProviders = allRelationships.filter((r) => r.isSome).map((r) => r.unwrap()) + .filter((r) => r.ready) + .map((r) => r.storage_provider); // runtime doesn't currently guarantee unique set - readyProviders = _.uniqBy(readyProviders, provider => provider.toString()); + readyProviders = _.uniqBy(readyProviders, (provider) => provider.toString()); if (!readyProviders.length) { setError(new Error('No Storage Providers found storing this content')); + return; } - // filter out providers no longer in actors list - const stakedActors = await api.query.actors.actorAccountIds() as unknown as AccountId[]; + const activeProviders = (await transport.workingGroups.allWorkers('Storage')).map(([id]) => id); + + // filter out providers no longer active - relationships of providers that have left + // are not pruned onchain. + readyProviders = _.intersectionBy(activeProviders, readyProviders, (provider) => provider.toString()); - readyProviders = _.intersectionBy(stakedActors, readyProviders, provider => provider.toString()); - console.log(`Found ${readyProviders.length} providers ready to serve content: ${readyProviders}`); + console.log(`Found ${readyProviders.length} providers ready to serve content: ${readyProviders.join(', ')}`); // shuffle to spread the load readyProviders = _.shuffle(readyProviders); @@ -64,9 +74,11 @@ function InnerComponent (props: Props) { // loop over providers until we find one that responds while (readyProviders.length) { const provider = readyProviders.shift(); + if (!provider) continue; let assetUrl: string | undefined; + try { assetUrl = await discoveryProvider.resolveAssetEndpoint(provider, contentId.encode(), cancelSource.token); } catch (err) { @@ -80,16 +92,23 @@ function InnerComponent (props: Props) { try { console.log('Check URL of resolved asset:', assetUrl); const response = await axios.head(assetUrl, { cancelToken: cancelSource.token }); + const headers = response.headers as Record; - setContentType(response.headers['content-type'] || 'video/video'); + setContentType(headers['content-type'] || 'video/video'); setResolvedAssetUrl(assetUrl); return; - } catch (err) { + } catch (e) { + const err = e as unknown; + if (axios.isCancel(err)) { return; } else { - if (!err.response || (err.response.status >= 500 && err.response.status <= 504)) { + const response = isObjectWithProperties(err, 'response') + ? (err as AxiosError).response + : undefined; + + if (!response || (response.status >= 500 && response.status <= 504)) { // network connection error discoveryProvider.reportUnreachable(provider); } @@ -104,7 +123,7 @@ function InnerComponent (props: Props) { }; useEffect(() => { - resolveAsset(); + void resolveAsset(); return () => { cancelSource.cancel(); @@ -129,6 +148,7 @@ function InnerComponent (props: Props) { } const playerProps = { ...props, contentType, resolvedAssetUrl }; + return ; } diff --git a/pioneer/packages/joy-media/src/common/TypeHelpers.ts b/pioneer/packages/joy-media/src/common/TypeHelpers.ts index 4feaa33d92..8a83388b4f 100644 --- a/pioneer/packages/joy-media/src/common/TypeHelpers.ts +++ b/pioneer/packages/joy-media/src/common/TypeHelpers.ts @@ -1,4 +1,5 @@ import BN from 'bn.js'; +import { createType } from '@joystream/types'; import { ChannelId } from '@joystream/types/content-working-group'; import { EntityId, ClassId } from '@joystream/types/versioned-store'; @@ -16,9 +17,9 @@ export function asChannelId (id: AnyChannelId): ChannelId { if (id instanceof ChannelId) { return id; } else if (canBeId(id)) { - return new ChannelId(id); + return createType('ChannelId', id); } else { - throw new Error(`Not supported format for Channel id: ${id}`); + throw new Error(`Not supported format for Channel id: ${typeof id === 'object' ? id.constructor.name : id}`); } } @@ -26,9 +27,9 @@ export function asEntityId (id: AnyEntityId): EntityId { if (id instanceof EntityId) { return id; } else if (canBeId(id)) { - return new EntityId(id); + return createType('EntityId', id); } else { - throw new Error(`Not supported format for Entity id: ${id}`); + throw new Error(`Not supported format for Entity id: ${typeof id === 'object' ? id.constructor.name : id}`); } } @@ -36,8 +37,8 @@ export function asClassId (id: AnyClassId): ClassId { if (id instanceof ClassId) { return id; } else if (canBeId(id)) { - return new ClassId(id); + return createType('ClassId', id); } else { - throw new Error(`Not supported format for Class id: ${id}`); + throw new Error(`Not supported format for Class id: ${typeof id === 'object' ? id.constructor.name : id}`); } } diff --git a/pioneer/packages/joy-media/src/common/images.tsx b/pioneer/packages/joy-media/src/common/images.tsx new file mode 100644 index 0000000000..859dedbe78 --- /dev/null +++ b/pioneer/packages/joy-media/src/common/images.tsx @@ -0,0 +1,17 @@ +import React from 'react'; + +export const DEFAULT_THUMBNAIL_URL = 'images/default-thumbnail.png'; + +// This is a hack to just satisfy TypeScript compiler. +type ImageOnErrorEvent = EventTarget & { + src: string; + onerror?: (e: any) => void; +}; + +export function onImageError (event: React.SyntheticEvent) { + const target = event.target as ImageOnErrorEvent; + + // Set onerror callback to undefined to prevent infinite callbacks when image src path fails: + target.onerror = undefined; + target.src = DEFAULT_THUMBNAIL_URL; +} diff --git a/pioneer/packages/joy-media/src/common/index.css b/pioneer/packages/joy-media/src/common/index.scss similarity index 100% rename from pioneer/packages/joy-media/src/common/index.css rename to pioneer/packages/joy-media/src/common/index.scss diff --git a/pioneer/packages/joy-media/src/explore/AllChannels.tsx b/pioneer/packages/joy-media/src/explore/AllChannels.tsx index 86a3cf5046..dffbf7d14d 100644 --- a/pioneer/packages/joy-media/src/explore/AllChannels.tsx +++ b/pioneer/packages/joy-media/src/explore/AllChannels.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import Section from '@polkadot/joy-utils/Section'; +import { Section } from '@polkadot/joy-utils/react/components'; import { MediaView } from '../MediaView'; import { ChannelEntity } from '../entities/ChannelEntity'; import { ChannelPreview } from '../channels/ChannelPreview'; diff --git a/pioneer/packages/joy-media/src/explore/AllVideos.tsx b/pioneer/packages/joy-media/src/explore/AllVideos.tsx index 588981f2d5..83fdda698d 100644 --- a/pioneer/packages/joy-media/src/explore/AllVideos.tsx +++ b/pioneer/packages/joy-media/src/explore/AllVideos.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import Section from '@polkadot/joy-utils/Section'; +import { Section } from '@polkadot/joy-utils/react/components'; import { VideoPreviewProps, VideoPreview } from '../video/VideoPreview'; import { MediaView } from '../MediaView'; diff --git a/pioneer/packages/joy-media/src/explore/ExploreContent.tsx b/pioneer/packages/joy-media/src/explore/ExploreContent.tsx index b8a1aba49e..286d92e828 100644 --- a/pioneer/packages/joy-media/src/explore/ExploreContent.tsx +++ b/pioneer/packages/joy-media/src/explore/ExploreContent.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Link } from 'react-router-dom'; -import Section from '@polkadot/joy-utils/Section'; +import { Section } from '@polkadot/joy-utils/react/components'; import { VideoPreviewProps, VideoPreview } from '../video/VideoPreview'; import { ChannelEntity } from '../entities/ChannelEntity'; import { ChannelPreview } from '../channels/ChannelPreview'; diff --git a/pioneer/packages/joy-media/src/explore/PlayContent.tsx b/pioneer/packages/joy-media/src/explore/PlayContent.tsx index 96f28b7cf3..dd5e86225b 100644 --- a/pioneer/packages/joy-media/src/explore/PlayContent.tsx +++ b/pioneer/packages/joy-media/src/explore/PlayContent.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import { MusicAlbumPreviewProps, MusicAlbumPreview } from '../music/MusicAlbumPreview'; import { MusicTrackReaderPreviewProps, MusicTrackReaderPreview } from '../music/MusicTrackReaderPreview'; -import { Pluralize } from '@polkadot/joy-utils/Pluralize'; +import { Pluralize } from '@polkadot/joy-utils/react/components'; import { Table } from 'semantic-ui-react'; import { ChannelEntity } from '../entities/ChannelEntity'; import { ChannelPreview } from '../channels/ChannelPreview'; @@ -85,7 +85,7 @@ export function PlayContent (props: Props) { {featuredAlbums.length > 0 &&

Featured albums

- {featuredAlbums.map(x => )} + {featuredAlbums.map((x) => )}
} ; diff --git a/pioneer/packages/joy-media/src/index.css b/pioneer/packages/joy-media/src/index.css deleted file mode 100644 index 9abf0a9a20..0000000000 --- a/pioneer/packages/joy-media/src/index.css +++ /dev/null @@ -1,131 +0,0 @@ -.JoyPaperWidth { - max-width: 900px; - margin: 0 auto; -} - -.UploadBox { - display: flex; - flex-direction: row; - justify-content: center; - - .UploadSelectForm { - max-width: 500px; - width: 100%; - } - - .UploadInputFile { - padding: 2rem 3rem; - margin-bottom: 1rem; - text-align: center; - height: auto; - - &:hover, - &.FileSelected { - border: 1px solid #2185d0 !important; - .label { - color: #2185d0 !important; - } - } - - i.cloud.icon { - font-size: 3rem; - } - } - - .UploadButtonBox { - text-align: center; - } - - .UploadProgress { - margin-left: calc(210px + 1rem) !important; - width: 100%; - max-width: 600px; - } -} - -.PlayBox { - max-width: 700px; - margin-bottom: 1rem; - h1, h2 { - text-transform: none; - margin: 0; - } - .ContentHeader { - margin-top: 1.5rem; - margin-bottom: .5rem; - } - .DownloadBtn { - float: right; - margin-left: .5rem; - } - .ContentDesc { - margin-top: 1rem; - } -} - -.MediaGrid { - display: flex; - flex-direction: row; - flex-wrap: wrap; - width: 880px; - - .MediaCell { - width: 25%; - - &.MyContent { - /* background-color: #fff8e1; */ - } - &:hover { - background-color: #deeffc; - } - .CellContent { - padding: 5px; - margin-bottom: 15px; - overflow: hidden; - - h3 { - font-size: 1rem; - font-weight: bold; - margin: 1rem 0 .5rem 0; - } - } - - .ThumbBox { - display: flex; - flex-direction: row; - justify-content: center; - margin-bottom: 5px; - - .ThumbImg { - width: 210px; - max-height: 118px; - display: block; - } - } - } -} - -.EditMetaBox { - display: flex; - flex-direction: row; - flex-wrap: wrap; - /* width: 880px; */ - - .EditMetaThumb { - width: 100%; - max-width: 210px; - max-height: 118px; - margin-right: 1rem; - - img { - width: 100%; - max-width: 210px; - max-height: 118px; - } - } - - .EditMetaForm { - width: 100%; - max-width: 600px; - } -} diff --git a/pioneer/packages/joy-media/src/index.scss b/pioneer/packages/joy-media/src/index.scss new file mode 100644 index 0000000000..6b4a55e972 --- /dev/null +++ b/pioneer/packages/joy-media/src/index.scss @@ -0,0 +1,133 @@ +.JoyPaperWidth { + max-width: 900px; + margin: 0 auto; +} + +.UploadBox { + display: flex; + flex-direction: row; + justify-content: center; + + .UploadSelectForm { + max-width: 500px; + width: 100%; + } + + .UploadInputFile { + padding: 2rem 3rem; + margin-bottom: 1rem; + text-align: center; + height: auto; + + &:hover, + &.FileSelected { + border: 1px solid #2185d0 !important; + .label { + color: #2185d0 !important; + } + } + + i.cloud.icon { + font-size: 3rem; + } + } + + .UploadButtonBox { + text-align: center; + } + + .UploadProgress { + margin-left: calc(210px + 1rem) !important; + width: 100%; + max-width: 600px; + } + + .EditMetaForm { + flex-grow: 1; + max-width: 600px; + } +} + +.PlayBox { + max-width: 700px; + margin-bottom: 1rem; + h1, h2 { + text-transform: none; + margin: 0; + } + .ContentHeader { + margin-top: 1.5rem; + margin-bottom: .5rem; + } + .DownloadBtn { + float: right; + margin-left: .5rem; + } + .ContentDesc { + margin-top: 1rem; + } +} + +.MediaGrid { + display: flex; + flex-direction: row; + flex-wrap: wrap; + width: 880px; + + .MediaCell { + width: 25%; + + &:hover { + background-color: #deeffc; + } + .CellContent { + padding: 5px; + margin-bottom: 15px; + overflow: hidden; + + h3 { + font-size: 1rem; + font-weight: bold; + margin: 1rem 0 .5rem 0; + } + } + + .ThumbBox { + display: flex; + flex-direction: row; + justify-content: center; + margin-bottom: 5px; + + .ThumbImg { + width: 210px; + max-height: 118px; + display: block; + } + } + } +} + +.EditMetaBox { + display: flex; + flex-direction: row; + flex-wrap: wrap; + /* width: 880px; */ + + .EditMetaThumb { + width: 100%; + max-width: 210px; + max-height: 118px; + margin-right: 1rem; + + img { + width: 100%; + max-width: 210px; + max-height: 118px; + } + } + + .JoySection { + width: 100%; + max-width: 600px; + } +} diff --git a/pioneer/packages/joy-media/src/index.tsx b/pioneer/packages/joy-media/src/index.tsx index 1aefc5818b..5a2fd2b17e 100644 --- a/pioneer/packages/joy-media/src/index.tsx +++ b/pioneer/packages/joy-media/src/index.tsx @@ -3,15 +3,16 @@ import React from 'react'; import { Route, Switch } from 'react-router'; import { AppProps, I18nProps } from '@polkadot/react-components/types'; -import Tabs, { TabItem } from '@polkadot/react-components/Tabs'; +import Tabs from '@polkadot/react-components/Tabs'; +import { TabItem } from '@polkadot/react-components/Tabs/types'; import { ApiProps } from '@polkadot/react-api/types'; -import { withMulti } from '@polkadot/react-api/with'; +import { withMulti } from '@polkadot/react-api/hoc'; -import './index.css'; -import './common/index.css'; +import './index.scss'; +import './common/index.scss'; import translate from './translate'; -import { useMyAccount } from '@polkadot/joy-utils/MyAccountContext'; +import { useMyAccount } from '@polkadot/joy-utils/react/hooks'; import { UploadWithRouter } from './Upload'; import { DiscoveryProviderProps, DiscoveryProviderProvider } from './DiscoveryProvider'; import { SubstrateTransportProvider } from './TransportContext'; @@ -25,7 +26,7 @@ import { AllVideosView } from './explore/AllVideos'; import { AllChannelsView } from './explore/AllChannels'; // import { VideosByOwner } from './video/VideosByOwner'; -type Props = AppProps & I18nProps & ApiProps & DiscoveryProviderProps & {}; +type Props = AppProps & I18nProps & ApiProps & DiscoveryProviderProps; function App (props: Props) { const { t, basePath } = props; @@ -40,16 +41,12 @@ function App (props: Props) { !myAddress ? undefined : { name: `account/${myAddress}/channels`, text: t('My channels') - }, - { - name: 'channels/new', - text: t('New channel') } // !myAddress ? undefined : { // name: `account/${myAddress}/videos`, // text: t('My videos') // } - ].filter(x => x !== undefined) as TabItem[]; + ].filter((x) => x !== undefined) as TabItem[]; return ( diff --git a/pioneer/packages/joy-media/src/mocks/ContentLicense.mock.ts b/pioneer/packages/joy-media/src/mocks/ContentLicense.mock.ts index e9c5ffc99d..09eb0f4525 100644 --- a/pioneer/packages/joy-media/src/mocks/ContentLicense.mock.ts +++ b/pioneer/packages/joy-media/src/mocks/ContentLicense.mock.ts @@ -9,6 +9,6 @@ const values = [ ]; export const AllContentLicenses: ContentLicenseType[] = - values.map(value => ({ id: newEntityId(), value })) as unknown as ContentLicenseType[]; // A hack to fix TS compilation. + values.map((value) => ({ id: newEntityId(), value })) as unknown as ContentLicenseType[]; // A hack to fix TS compilation. export const ContentLicense = AllContentLicenses[0]; diff --git a/pioneer/packages/joy-media/src/mocks/Language.mock.ts b/pioneer/packages/joy-media/src/mocks/Language.mock.ts index 70ebd051fe..c4ecfc380f 100644 --- a/pioneer/packages/joy-media/src/mocks/Language.mock.ts +++ b/pioneer/packages/joy-media/src/mocks/Language.mock.ts @@ -6,6 +6,6 @@ const values = [ ]; export const AllLanguages: LanguageType[] = - values.map(value => ({ id: newEntityId(), value })) as unknown as LanguageType[]; // A hack to fix TS compilation. + values.map((value) => ({ id: newEntityId(), value })) as unknown as LanguageType[]; // A hack to fix TS compilation. export const Language = AllLanguages[0]; diff --git a/pioneer/packages/joy-media/src/mocks/MediaObject.mock.ts b/pioneer/packages/joy-media/src/mocks/MediaObject.mock.ts index 7fce1ed0ee..bfd0cac211 100644 --- a/pioneer/packages/joy-media/src/mocks/MediaObject.mock.ts +++ b/pioneer/packages/joy-media/src/mocks/MediaObject.mock.ts @@ -12,6 +12,6 @@ const values = [ ]; export const AllMediaObjects: MediaObjectType[] = - values.map(value => ({ id: newEntityId(), value })) as unknown as MediaObjectType[]; // A hack to fix TS compilation. + values.map((value) => ({ id: newEntityId(), value })) as unknown as MediaObjectType[]; // A hack to fix TS compilation. export const MediaObject = AllMediaObjects[0]; diff --git a/pioneer/packages/joy-media/src/mocks/MusicGenre.mock.ts b/pioneer/packages/joy-media/src/mocks/MusicGenre.mock.ts index 9c005ed01d..c412d95ed9 100644 --- a/pioneer/packages/joy-media/src/mocks/MusicGenre.mock.ts +++ b/pioneer/packages/joy-media/src/mocks/MusicGenre.mock.ts @@ -26,6 +26,6 @@ const values = [ ]; export const AllMusicGenres: MusicGenreType[] = - values.map(value => ({ id: newEntityId(), value })) as unknown as MusicGenreType[]; // A hack to fix TS compilation. + values.map((value) => ({ id: newEntityId(), value })) as unknown as MusicGenreType[]; // A hack to fix TS compilation. export const MusicGenre = AllMusicGenres[0]; diff --git a/pioneer/packages/joy-media/src/mocks/MusicMood.mock.ts b/pioneer/packages/joy-media/src/mocks/MusicMood.mock.ts index b2624c0176..b7c871ad61 100644 --- a/pioneer/packages/joy-media/src/mocks/MusicMood.mock.ts +++ b/pioneer/packages/joy-media/src/mocks/MusicMood.mock.ts @@ -294,6 +294,6 @@ const values = [ ]; export const AllMusicMoods: MusicMoodType[] = - values.map(value => ({ id: newEntityId(), value })) as unknown as MusicMoodType[]; // A hack to fix TS compilation. + values.map((value) => ({ id: newEntityId(), value })) as unknown as MusicMoodType[]; // A hack to fix TS compilation. export const MusicMood = AllMusicMoods[0]; diff --git a/pioneer/packages/joy-media/src/mocks/MusicTheme.mock.ts b/pioneer/packages/joy-media/src/mocks/MusicTheme.mock.ts index 20373fb812..af1db48ad6 100644 --- a/pioneer/packages/joy-media/src/mocks/MusicTheme.mock.ts +++ b/pioneer/packages/joy-media/src/mocks/MusicTheme.mock.ts @@ -187,6 +187,6 @@ const values = [ ]; export const AllMusicThemes: MusicThemeType[] = - values.map(value => ({ id: newEntityId(), value })) as unknown as MusicThemeType[]; // A hack to fix TS compilation. + values.map((value) => ({ id: newEntityId(), value })) as unknown as MusicThemeType[]; // A hack to fix TS compilation. export const MusicTheme = AllMusicThemes[0]; diff --git a/pioneer/packages/joy-media/src/mocks/PublicationStatus.mock.ts b/pioneer/packages/joy-media/src/mocks/PublicationStatus.mock.ts index 084b3dcfbd..acd9fe0937 100644 --- a/pioneer/packages/joy-media/src/mocks/PublicationStatus.mock.ts +++ b/pioneer/packages/joy-media/src/mocks/PublicationStatus.mock.ts @@ -6,7 +6,7 @@ function newEntity (value: string): PublicationStatusType { } export const PublicationStatus = { - Publiс: newEntity('Publiс'), + Publiс: newEntity('Public'), Unlisted: newEntity('Unlisted') }; diff --git a/pioneer/packages/joy-media/src/mocks/VideoCategory.mock.ts b/pioneer/packages/joy-media/src/mocks/VideoCategory.mock.ts index d235004232..8eada98733 100644 --- a/pioneer/packages/joy-media/src/mocks/VideoCategory.mock.ts +++ b/pioneer/packages/joy-media/src/mocks/VideoCategory.mock.ts @@ -20,6 +20,6 @@ const values = [ ]; export const AllVideoCategories: VideoCategoryType[] = - values.map(value => ({ id: newEntityId(), value })) as unknown as VideoCategoryType[]; // A hack to fix TS compilation. + values.map((value) => ({ id: newEntityId(), value })) as unknown as VideoCategoryType[]; // A hack to fix TS compilation. export const VideoCategory = AllVideoCategories[0]; diff --git a/pioneer/packages/joy-media/src/music/EditMusicAlbum.tsx b/pioneer/packages/joy-media/src/music/EditMusicAlbum.tsx index 4d8cd00f27..67c11868a1 100644 --- a/pioneer/packages/joy-media/src/music/EditMusicAlbum.tsx +++ b/pioneer/packages/joy-media/src/music/EditMusicAlbum.tsx @@ -3,8 +3,8 @@ import { Button, Tab } from 'semantic-ui-react'; import { Form, withFormik } from 'formik'; import { History } from 'history'; -import TxButton from '@polkadot/joy-utils/TxButton'; -import { onImageError } from '@polkadot/joy-utils/images'; +import { TxButton } from '@polkadot/joy-utils/react/components'; +import { onImageError } from '../common/images'; import { ReorderableTracks } from './ReorderableTracks'; import { MusicAlbumValidationSchema, MusicAlbumType, MusicAlbumClass as Fields, MusicAlbumFormValues, MusicAlbumToFormValues } from '../schemas/music/MusicAlbum'; import { withMediaForm, MediaFormProps, datePlaceholder } from '../common/MediaForms'; @@ -123,7 +123,6 @@ const InnerForm = (props: MediaFormProps) => { const renderMainButton = () => ) => { {tabs} - + {renderMainButton()} + + + + { proposalsBatch && (<> + + { proposalsBatch.totalBatches > 1 && ( + , icon: true }} + firstItem={{ content: , icon: true }} + lastItem={{ content: , icon: true }} + prevItem={{ content: , icon: true }} + nextItem={{ content: , icon: true }} + totalPages={ proposalsBatch.totalBatches } + onPageChange={ (e, data) => setCurrentPage((data.activePage && parseInt(data.activePage.toString())) || 1) } + /> + ) } + + { proposalsBatch.proposals.length + ? ( + + {proposalsBatch.proposals.map((prop: ParsedProposal, idx: number) => ( + + ))} + + ) + : `There are currently no ${activeFilter !== 'All' ? activeFilter.toLocaleLowerCase() : 'submitted'} proposals.` + } + ) } ); diff --git a/pioneer/packages/joy-proposals/src/Proposal/ProposalTypePreview.tsx b/pioneer/packages/joy-proposals/src/Proposal/ProposalTypePreview.tsx index bd5d320e1a..994faf34bf 100644 --- a/pioneer/packages/joy-proposals/src/Proposal/ProposalTypePreview.tsx +++ b/pioneer/packages/joy-proposals/src/Proposal/ProposalTypePreview.tsx @@ -3,11 +3,10 @@ import React from 'react'; import { History } from 'history'; import { Item, Icon, Button, Label } from 'semantic-ui-react'; -import { Category } from './ChooseProposalType'; -import { ProposalType } from '@polkadot/joy-utils/types/proposals'; +import { ProposalType, Category } from '@polkadot/joy-utils/types/proposals'; import _ from 'lodash'; import styled from 'styled-components'; -import useVoteStyles from './useVoteStyles'; +import getVoteStyles from './getVoteStyles'; import { formatBalance } from '@polkadot/util'; import './ProposalType.css'; @@ -63,9 +62,9 @@ type ProposalTypePreviewProps = { }; const ProposalTypeDetail = (props: { title: string; value: string }) => ( -
-
{ `${props.title}:` }
-
{ props.value }
+
+
{ `${props.title}:` }
+
{ props.value }
); @@ -91,7 +90,7 @@ export default function ProposalTypePreview (props: ProposalTypePreviewProps) { }; return ( - + {/* TODO: We can add it once we have the actual assets @@ -99,51 +98,51 @@ export default function ProposalTypePreview (props: ProposalTypePreviewProps) { {_.startCase(type)} {description} -
+
1 ? 's' : ''}` : 'NONE' } /> 1 ? 's' : ''}` : 'NONE' } />
{ approvalQuorum && ( - - + + Approval Quorum: { approvalQuorum }% ) } { approvalThreshold && ( - - + + Approval Threshold: { approvalThreshold }% ) } { slashingQuorum && ( - - + + Slashing Quorum: { slashingQuorum }% ) } { slashingThreshold && ( - - + + Slashing Threshold: { slashingThreshold }% ) } -
- +
+ Create - +
diff --git a/pioneer/packages/joy-proposals/src/Proposal/Votes.tsx b/pioneer/packages/joy-proposals/src/Proposal/Votes.tsx index 04d40ae370..20cea5011d 100644 --- a/pioneer/packages/joy-proposals/src/Proposal/Votes.tsx +++ b/pioneer/packages/joy-proposals/src/Proposal/Votes.tsx @@ -1,52 +1,68 @@ import React from 'react'; import { Header, Divider, Table, Icon } from 'semantic-ui-react'; -import useVoteStyles from './useVoteStyles'; -import { ProposalVote } from '@polkadot/joy-utils/types/proposals'; +import getVoteStyles from './getVoteStyles'; import { VoteKind } from '@joystream/types/proposals'; import { VoteKindStr } from './VotingSection'; -import ProfilePreview from '@polkadot/joy-utils/MemberProfilePreview'; +import ProfilePreview from '@polkadot/joy-utils/react/components/MemberProfilePreview'; +import { useTransport, usePromise } from '@polkadot/joy-utils/react/hooks'; +import { ParsedProposal, ProposalVotes } from '@polkadot/joy-utils/types/proposals'; +import PromiseComponent from '@polkadot/joy-utils/react/components/PromiseComponent'; type VotesProps = { - votes: ProposalVote[]; + proposal: ParsedProposal; }; -export default function Votes ({ votes }: VotesProps) { - const nonEmptyVotes = votes.filter(proposalVote => proposalVote.vote !== null); - - if (!nonEmptyVotes.length) { - return
No votes has been submitted!
; - } +export default function Votes ({ proposal: { id, votingResults } }: VotesProps) { + const transport = useTransport(); + const [votes, error, loading] = usePromise( + () => transport.proposals.votes(id), + null, + [votingResults] + ); return ( - <> -
- All Votes: ({nonEmptyVotes.length} / {votes.length}) -
- - - - {nonEmptyVotes.map((proposalVote, idx) => { - const { vote, member } = proposalVote; - const voteStr = (vote as VoteKind).type.toString() as VoteKindStr; - const { icon, textColor } = useVoteStyles(voteStr); - return ( - - - - {voteStr} - - - - - - ); - })} - -
- + + { (votes && votes.votes.length > 0) + ? ( + <> +
+ All Votes: ({votes.votes.length}/{votes.councilMembersLength}) +
+ + + + {votes.votes.map((proposalVote, idx) => { + const { vote, member } = proposalVote; + const voteStr = (vote as VoteKind).type.toString() as VoteKindStr; + const { icon, textColor } = getVoteStyles(voteStr); + + return ( + + + + {voteStr} + + + + + + ); + })} + +
+ + ) + : ( +
No votes have been submitted!
+ ) + } +
); } diff --git a/pioneer/packages/joy-proposals/src/Proposal/VotingSection.tsx b/pioneer/packages/joy-proposals/src/Proposal/VotingSection.tsx index 7e10d4b1fb..2908792788 100644 --- a/pioneer/packages/joy-proposals/src/Proposal/VotingSection.tsx +++ b/pioneer/packages/joy-proposals/src/Proposal/VotingSection.tsx @@ -1,8 +1,8 @@ import React, { useState } from 'react'; -import { Icon, Button, Message, Divider, Header } from 'semantic-ui-react'; -import useVoteStyles from './useVoteStyles'; -import TxButton from '@polkadot/joy-utils/TxButton'; +import { Icon, Message, Divider, Header } from 'semantic-ui-react'; +import getVoteStyles from './getVoteStyles'; +import { SemanticTxButton } from '@polkadot/joy-utils/react/components/TxButton'; import { MemberId } from '@joystream/types/members'; import { ProposalId, VoteKind, VoteKinds } from '@joystream/types/proposals'; import { useTransport, usePromise } from '@polkadot/joy-utils/react/hooks'; @@ -32,27 +32,28 @@ type VoteButtonProps = { proposalId: ProposalId; onSuccess: () => void; } + function VoteButton ({ voteKind, proposalId, memberId, onSuccess }: VoteButtonProps) { - const { icon, color } = useVoteStyles(voteKind); + const { icon, color } = getVoteStyles(voteKind); + return ( - // Button.Group "cheat" to force TxButton color - - sendTx() } - txFailedCb={ () => null } - txSuccessCb={ onSuccess } - className={'icon left labeled'}> - - { voteKind } - - + sendTx() } + txFailedCb={ () => null } + txSuccessCb={ onSuccess } + color={color} + style={{ marginRight: '5px' }} + icon + labelPosition={ 'left' }> + + { voteKind } + ); } @@ -82,13 +83,13 @@ export default function VotingSection ({ const voteStr: VoteKindStr | null = voted || (vote && vote.type.toString() as VoteKindStr); if (voteStr) { - const { icon, color } = useVoteStyles(voteStr); + const { icon, color } = getVoteStyles(voteStr); return ( - You voted {`"${voteStr}"`} + You voted {`"${voteStr}"`} ); @@ -98,7 +99,7 @@ export default function VotingSection ({ return ( <> -
Sumbit your vote
+
Sumbit your vote
{ VoteKinds.map((voteKind) => diff --git a/pioneer/packages/joy-proposals/src/Proposal/discussion/DiscussionPost.tsx b/pioneer/packages/joy-proposals/src/Proposal/discussion/DiscussionPost.tsx index 40d3125e22..b1c26fdea5 100644 --- a/pioneer/packages/joy-proposals/src/Proposal/discussion/DiscussionPost.tsx +++ b/pioneer/packages/joy-proposals/src/Proposal/discussion/DiscussionPost.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import { Button, Icon } from 'semantic-ui-react'; import { ParsedPost } from '@polkadot/joy-utils/types/proposals'; -import MemberProfilePreview from '@polkadot/joy-utils/MemberProfilePreview'; +import MemberProfilePreview from '@polkadot/joy-utils/react/components/MemberProfilePreview'; import DiscussionPostForm from './DiscussionPostForm'; import { MemberId } from '@joystream/types/members'; import { useTransport } from '@polkadot/joy-utils/react/hooks'; @@ -61,6 +61,7 @@ export default function DiscussionPost ({ authorId.toNumber() === memberId.toNumber() && editsCount < constraints.maxPostEdits ); + const onEditSuccess = () => { setEditing(false); refreshDiscussion(); @@ -98,9 +99,9 @@ export default function DiscussionPost ({ setEditing(true)} primary - size="tiny" + size='tiny' icon> - + ) } diff --git a/pioneer/packages/joy-proposals/src/Proposal/discussion/DiscussionPostForm.tsx b/pioneer/packages/joy-proposals/src/Proposal/discussion/DiscussionPostForm.tsx index aa20a2ea76..b57bd7f48c 100644 --- a/pioneer/packages/joy-proposals/src/Proposal/discussion/DiscussionPostForm.tsx +++ b/pioneer/packages/joy-proposals/src/Proposal/discussion/DiscussionPostForm.tsx @@ -2,13 +2,13 @@ import React from 'react'; import { Form, Field, withFormik, FormikProps } from 'formik'; import * as Yup from 'yup'; -import TxButton from '@polkadot/joy-utils/TxButton'; -import * as JoyForms from '@polkadot/joy-utils/forms'; +import TxButton from '@polkadot/joy-utils/react/components/TxButton'; +import * as JoyForms from '@polkadot/joy-utils/react/components/forms'; import { SubmittableResult } from '@polkadot/api'; import { Button } from 'semantic-ui-react'; import { TxFailedCallback, TxCallback } from '@polkadot/react-components/Status/types'; import { ParsedPost, DiscussionContraints } from '@polkadot/joy-utils/types/proposals'; -import { ThreadId } from '@joystream/types/forum'; +import { ThreadId } from '@joystream/types/common'; import { MemberId } from '@joystream/types/members'; type OuterProps = { @@ -76,7 +76,7 @@ const DiscussionPostFormInner = (props: InnerProps) => { }; return ( -
+ { rows={5} placeholder='Content of the post...' /> - + { /> { isEditForm ? ( )} -
-
+ ); }; diff --git a/pioneer/packages/joy-proposals/src/forms/GenericWorkingGroupProposalForm.tsx b/pioneer/packages/joy-proposals/src/forms/GenericWorkingGroupProposalForm.tsx new file mode 100644 index 0000000000..98bc9dfaa3 --- /dev/null +++ b/pioneer/packages/joy-proposals/src/forms/GenericWorkingGroupProposalForm.tsx @@ -0,0 +1,115 @@ +import React from 'react'; +import { getFormErrorLabelsProps } from './errorHandling'; +import { GenericProposalForm, + GenericFormValues, + genericFormDefaultValues, + ProposalFormExportProps, + ProposalFormContainerProps, + ProposalFormInnerProps } from './GenericProposalForm'; +import { FormField } from './FormFields'; +import { ProposalType } from '@polkadot/joy-utils/types/proposals'; +import { WorkingGroupKey, WorkingGroupDef } from '@joystream/types/common'; +import { Dropdown, Message } from 'semantic-ui-react'; +import { usePromise, useTransport } from '@polkadot/joy-utils/react/hooks'; +import PromiseComponent from '@polkadot/joy-utils/react/components/PromiseComponent'; +import { WorkerData } from '@polkadot/joy-utils/types/workingGroups'; +import { LeadInfo } from '@polkadot/joy-utils/react/components/working-groups/LeadInfo'; + +export type FormValues = GenericFormValues & { + workingGroup: WorkingGroupKey; +}; + +export const defaultValues: FormValues = { + ...genericFormDefaultValues, + workingGroup: 'Storage' +}; + +// Aditional props coming all the way from export comonent into the inner form. +type FormAdditionalProps = { + txMethod: string; + submitParams: any[]; + proposalType: ProposalType; + showLead?: boolean; + leadRequired?: boolean; + leadStakeRequired?: boolean; + leadRewardRequired?: boolean; + onLeadChange?: (lead: WorkerData | null) => void; + disabled?: boolean; +}; + +// We don't exactly use "container" and "export" components here, but those types are useful for +// generiting the right "FormInnerProps" +type ExportComponentProps = ProposalFormExportProps; +type FormContainerProps = ProposalFormContainerProps; +export type FormInnerProps = ProposalFormInnerProps; + +export const GenericWorkingGroupProposalForm: React.FunctionComponent = (props) => { + const { + handleChange, + errors, + touched, + values, + showLead = true, + leadRequired = false, + leadStakeRequired = false, + leadRewardRequired = false, + onLeadChange, + disabled = false + } = props; + const transport = useTransport(); + const [lead, error, loading] = usePromise( + () => transport.workingGroups.currentLead(values.workingGroup), + null, + [values.workingGroup], + onLeadChange + ); + const leadRes = { lead, error, loading }; + const leadMissing = leadRequired && (!leadRes.loading && !leadRes.error) && !leadRes.lead; + const stakeMissing = leadStakeRequired && (!leadRes.loading && !leadRes.error) && (leadRes.lead && !leadRes.lead.stake); + const rewardMissing = leadRewardRequired && (!leadRes.loading && !leadRes.error) && (leadRes.lead && !leadRes.lead.reward); + const isDisabled = disabled || leadMissing || stakeMissing || rewardMissing || Boolean(leadRes.error); + + const errorLabelsProps = getFormErrorLabelsProps(errors, touched); + + return ( + + + ({ text: wgKey + ' Working Group', value: wgKey }))} + value={values.workingGroup} + onChange={ handleChange } + /> + + { showLead && ( + + + + ) } + { leadMissing && ( + + Leader required + Selected working group has no active leader. An active leader is required in order to create this proposal. + + ) } + { stakeMissing && ( + + No role stake + Selected working group leader has no associated role stake, which is required in order to create this proposal. + + ) } + { rewardMissing && ( + + No reward relationship + Selected working group leader has no reward relationship, which is required in order to create this proposal. + + ) } + { props.children } + + ); +}; diff --git a/pioneer/packages/joy-proposals/src/forms/LabelWithHelp.tsx b/pioneer/packages/joy-proposals/src/forms/LabelWithHelp.tsx index d8880ba5bc..deb9be8c0d 100644 --- a/pioneer/packages/joy-proposals/src/forms/LabelWithHelp.tsx +++ b/pioneer/packages/joy-proposals/src/forms/LabelWithHelp.tsx @@ -5,6 +5,7 @@ type LabelWithHelpProps = { text: string; help: string }; export default function LabelWithHelp (props: LabelWithHelpProps) { const [open, setOpen] = useState(false); + return (