sequoia-wot-0.11.0/.cargo_vcs_info.json0000644000000001360000000000100133700ustar { "git": { "sha1": "e622a77cff38687b7bd5d7036ee59ac4127324fb" }, "path_in_vcs": "" }sequoia-wot-0.11.0/.ci/all_commits.sh000075500000000000000000000022711046102023000154750ustar 00000000000000#!/usr/bin/env bash # Test all commits on this branch but the last one. # # Used in the all_commits ci job to ensure all commits build # and tests pass at least for the sequoia-openpgp crate. # NOTE: under gitlab's Settings, "CI/CD", General Pipelines ensure # that the "git shallow clone" setting is set to 0. Otherwise other # branch are not fetched. set -e set -x # Use dummy identity to make git rebase happy. git config user.name "C.I. McTestface" git config user.email "ci.mctestface@example.com" # Make sure the gitlab project is configured. if ! git describe --all origin/main then echo "origin/main is not present. Configure the gitlab project (see .ci/all_commits.sh)." exit 1 fi # If the previous commit already is on main we're done. git merge-base --is-ancestor HEAD~ origin/main && echo "All commits tested already" && exit 0 # Leave out the last commit - it has already been checked. git checkout HEAD~ git status git rebase origin/main \ --exec 'echo ===; echo ===; echo ===; git log -n 1;' \ --exec 'cargo test --all' && echo "All commits passed tests" && exit 0 # The rebase failed - probably because a test failed. git rebase --abort; exit 1 sequoia-wot-0.11.0/.codespellrc000064400000000000000000000004051046102023000144570ustar 00000000000000[codespell] skip = *.bin,*.gpg,*.pgp,./.git,data,highlight.js,*/target,Makefile,*.html,*/cargo,*.xml,*.xmlv2,Cargo.lock, ignore-words-list = crate,ede,iff,mut,nd,te,uint,KeyServer,keyserver,Keyserver,keyservers,Keyservers,keypair,keypairs,KeyPair,fpr,dedup,ba, sequoia-wot-0.11.0/.gitignore000064400000000000000000000000741046102023000141510ustar 00000000000000/target *~ spec/.refcache spec/draft-* spec/metadata.min.js sequoia-wot-0.11.0/.gitlab-ci.yml000064400000000000000000000114141046102023000146150ustar 00000000000000# Only ever create pipelines for tags or branches. # Avoid creation of detached pipelines for merge requests. workflow: rules: - if: $CI_COMMIT_TAG - if: $CI_COMMIT_BRANCH stages: - lint - test - deploy # These stanzas do some common management tasks before and after the # job-specific before_script and after_script stanzas are run. # before_script_start configures any default global state. The # job-specific before_script can override this state, if required. # before_script_end prints out information about the environment to # improve debugging; it does not modify the environment. # after_script_end does some common management tasks after the # job-specific after_script is run. It prints information about the # environment, and does some clean up. # # Add this to your stanza as follows: # # before_script: # - *before_script_start # - *** YOUR CODE HERE *** # - *before_script_end # after_script: # - *** YOUR CODE HERE *** # - *after_script_end .before_script_start: &before_script_start - 'if test "x${RUSTFLAGS+SET}" = xSET; then echo "\$RUSTFLAGS is set ($RUSTFLAGS)"; exit 1; fi' # The test rely on gpg. Make sure it is available. - apt update -y -qq && apt install -y gpg .before_script_end: &before_script_end - 'if test "x${RUSTFLAGS+SET}" = xSET; then echo "WARNING: before_script set \$RUSTFLAGS ($RUSTFLAGS)"; fi' - rustc --version --verbose - cargo --version - clang -v - if [ -d $CARGO_TARGET_DIR ]; then find $CARGO_TARGET_DIR | wc --lines; du -sh $CARGO_TARGET_DIR; fi - if [ -d $CARGO_HOME ]; then find $CARGO_HOME | wc --lines; du -sh $CARGO_HOME; fi .after_script_end: &after_script_end - if [ -d $CARGO_TARGET_DIR ]; then du -sh $CARGO_TARGET_DIR; fi - if [ -d $CARGO_HOME ]; then du -sh $CARGO_HOME; fi before_script: - *before_script_start - *before_script_end after_script: - *after_script_end cache: &general_cache_config # default key is default # default policy is pull-push paths: - $CARGO_TARGET_DIR - $CARGO_HOME .rust-stable: image: 192.168.122.1:5000/sequoia-pgp/build-docker-image/rust-stable:latest before_script: - *before_script_start - *before_script_end after_script: - *after_script_end cache: # inherit all general cache settings <<: *general_cache_config # override the key key: "rust-stable" .trixie: image: 192.168.122.1:5000/sequoia-pgp/build-docker-image/trixie:latest before_script: - *before_script_start - *before_script_end after_script: - *after_script_end cache: # inherit all general cache settings <<: *general_cache_config # override the key key: "trixie" codespell: stage: lint interruptible: true extends: .trixie before_script: - *before_script_start - codespell --version - *before_script_end script: - codespell --config .codespellrc --summary after_script: [] test-trixie: stage: test interruptible: true extends: .trixie script: - cargo test --all test-rust-stable: stage: test interruptible: true extends: .rust-stable script: - cargo test --all deny: stage: lint interruptible: true extends: .rust-stable script: - cargo deny check rules: - if: '$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' when: manual allow_failure: true - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' allow_failure: false cache: [] all_commits: # Test each commit up to main, to facilitate bisecting. stage: test interruptible: true extends: .trixie script: - .ci/all_commits.sh variables: GIT_STRATEGY: clone pages: stage: deploy image: 192.168.122.1:5000/sequoia-pgp/build-docker-image/trixie:latest before_script: - find /etc/apt -name '*.list' -exec sed -i 's/main/main non-free/' {} \; # xml2rfc is non-free - "find /etc/apt -name '*.sources' -exec sed -i 's/^Components:/Components: non-free/' {} ';'" - apt update -y -qq && apt install -y -qq --no-install-recommends weasyprint xml2rfc ruby-kramdown-rfc2629 - if [ -d target ]; then find target | wc --lines; du -sh target; fi - if [ -d cargo ]; then find cargo | wc --lines; du -sh cargo; fi - rustc --version - cargo --version script: - cargo doc --features "sequoia-openpgp/crypto-nettle" --no-deps - mv target/doc public - make -Cspec draft-sequoia-wot.html - cp spec/draft-sequoia-wot.html public/index.html - echo "/sequoia-wot/api /sequoia-wot/sequoia_wot/index.html 302" > public/_redirects cache: # inherit all general cache settings <<: *general_cache_config # override the key key: "trixie" artifacts: paths: - public rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' variables: CARGO_HOME: cargo/ CARGO_FLAGS: --color always CARGO_INCREMENTAL: 0 CARGO_TARGET_DIR: target/ sequoia-wot-0.11.0/CONTRIBUTING.md000064400000000000000000000033071046102023000144140ustar 00000000000000Sequoia PGP is owned by the [p≡p foundation] and licensed under the terms of the LGPLv2+. [p≡p foundation]: https://pep.foundation/ To finance its mission, privacy by default, the [p≡p foundation] allows third parties (currently only [p≡p security]) to relicense its software. Consistent with the rules of a foundation, the money collected by the foundation in this manner is fully reinvested in the foundation's mission, which includes further development of Sequoia PGP. [p≡p security]: https://www.pep.security/ To do this, the [p≡p foundation] needs permission from all contributors to relicense their changes. In return, the [p≡p foundation] guarantees that *all* releases of Sequoia PGP (and any other software it owns) will also be released under a GNU-approved license. That is, even if Foo Corp is granted a license to use Sequoia PGP in a proprietary product, the exact code that Foo Corp uses will also be licensed under a GNU-approved license. If you want to contribute to Sequoia PGP, and you agree to the above, please sign the [p≡p foundation]'s [CLA]. This is an electronic assignment; no paper work is required. You'll need to provide a valid email address. After clicking on a link to verify your email address, you'll receive a second email, which contains the contract between you and the [p≡p foundation]. Be sure to keep it for future reference. The maintainers of Sequoia PGP will also receive a notification. At that point, we can merge patches from you into Sequoia PGP. [CLA]: https://contribution.pep.foundation/contribute/ Please direct questions regarding the CLA to [contribution@pep.foundation]. [contribution@pep.foundation]: mailto:contribution@pep.foundation sequoia-wot-0.11.0/Cargo.lock0000644000002311620000000000100113500ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 3 [[package]] name = "addr2line" version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] [[package]] name = "adler" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aead" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", "generic-array", ] [[package]] name = "aes" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", "cpufeatures", ] [[package]] name = "aes-gcm" version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" dependencies = [ "aead", "aes", "cipher", "ctr", "ghash", "subtle", ] [[package]] name = "ahash" version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b79b82693f705137f8fb9b37871d99e4f9a7df12b917eed79c3d3954830a60b" dependencies = [ "cfg-if", "once_cell", "version_check", "zerocopy", ] [[package]] name = "aho-corasick" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] [[package]] name = "allocator-api2" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "android-tzdata" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" [[package]] name = "android_system_properties" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ "libc", ] [[package]] name = "anstream" version = "0.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", "utf8parse", ] [[package]] name = "anstyle" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" [[package]] name = "anstyle-parse" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "anstyle-wincon" version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" dependencies = [ "anstyle", "windows-sys 0.52.0", ] [[package]] name = "anyhow" version = "1.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59d2a3357dde987206219e78ecfbbb6e8dad06cbb65292758d3270e6254f7355" [[package]] name = "ascii-canvas" version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" dependencies = [ "term", ] [[package]] name = "assert_cmd" version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00ad3f3a942eee60335ab4342358c161ee296829e0d16ff42fc1d6cb07815467" dependencies = [ "anstyle", "bstr", "doc-comment", "predicates", "predicates-core", "predicates-tree", "wait-timeout", ] [[package]] name = "async-trait" version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", "syn 2.0.51", ] [[package]] name = "autocfg" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "backtrace" version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", ] [[package]] name = "base64" version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bindgen" version = "0.68.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078" dependencies = [ "bitflags 2.4.2", "cexpr", "clang-sys", "lazy_static", "lazycell", "peeking_take_while", "proc-macro2", "quote", "regex", "rustc-hash", "shlex", "syn 2.0.51", ] [[package]] name = "bit-set" version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ "bit-vec", ] [[package]] name = "bit-vec" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] name = "bitflags" version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" [[package]] name = "block-buffer" version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array", ] [[package]] name = "block-padding" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" dependencies = [ "generic-array", ] [[package]] name = "bstr" version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" dependencies = [ "memchr", "regex-automata", "serde", ] [[package]] name = "buffered-reader" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b9b0a25eb06e83579bc985d836e1e3b957a7201301b48538764d2b2e78090d4" dependencies = [ "lazy_static", "libc", ] [[package]] name = "bumpalo" version = "3.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" [[package]] name = "byteorder" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" [[package]] name = "cc" version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02f341c093d19155a6e41631ce5971aac4e9a868262212153124c15fa22d1cdc" [[package]] name = "cexpr" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ "nom", ] [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", "windows-targets 0.52.3", ] [[package]] name = "cipher" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", "zeroize", ] [[package]] name = "clang-sys" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" dependencies = [ "glob", "libc", "libloading", ] [[package]] name = "clap" version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" dependencies = [ "clap_builder", "clap_derive", ] [[package]] name = "clap_builder" version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" dependencies = [ "anstream", "anstyle", "clap_lex", "strsim", "terminal_size", ] [[package]] name = "clap_complete" version = "4.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb745187d7f4d76267b37485a65e0149edd0e91a4cfcdd3f27524ad86cee9f3" dependencies = [ "clap", ] [[package]] name = "clap_derive" version = "4.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" dependencies = [ "heck", "proc-macro2", "quote", "syn 2.0.51", ] [[package]] name = "clap_lex" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" [[package]] name = "clap_mangen" version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e35a078f3aae828c9b7ad58e1631dab87e9dac40da19418f2219bbf3198aa5c" dependencies = [ "clap", "roff", ] [[package]] name = "cmac" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8543454e3c3f5126effff9cd44d562af4e31fb8ce1cc0d3dcd8f084515dbc1aa" dependencies = [ "cipher", "dbl", "digest", ] [[package]] name = "colorchoice" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "const-oid" version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" [[package]] name = "core-foundation" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "core-foundation-sys" version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "cpufeatures" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] [[package]] name = "crossbeam" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-epoch", "crossbeam-queue", "crossbeam-utils", ] [[package]] name = "crossbeam-channel" version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-queue" version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-common" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", "rand_core", "typenum", ] [[package]] name = "ctr" version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ "cipher", ] [[package]] name = "curve25519-dalek" version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a677b8922c94e01bdbb12126b0bc852f00447528dee1782229af9c720c3f348" dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", "digest", "fiat-crypto", "platforms", "rustc_version", "subtle", "zeroize", ] [[package]] name = "curve25519-dalek-derive" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", "syn 2.0.51", ] [[package]] name = "data-encoding" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "dbl" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd2735a791158376708f9347fe8faba9667589d82427ef3aed6794a8981de3d9" dependencies = [ "generic-array", ] [[package]] name = "der" version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" dependencies = [ "const-oid", "zeroize", ] [[package]] name = "diff" version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" [[package]] name = "difflib" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", "subtle", ] [[package]] name = "dirs" version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-next" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ "cfg-if", "dirs-sys-next", ] [[package]] name = "dirs-sys" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ "libc", "option-ext", "redox_users", "windows-sys 0.48.0", ] [[package]] name = "dirs-sys-next" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", "redox_users", "winapi", ] [[package]] name = "doc-comment" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "dot-writer" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d1b11bd5e7e98406c6ff39fbc94d6e910a489b978ce7f17c19fce91a1195b7a" [[package]] name = "dyn-clone" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "eax" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9954fabd903b82b9d7a68f65f97dc96dd9ad368e40ccc907a7c19d53e6bfac28" dependencies = [ "aead", "cipher", "cmac", "ctr", "subtle", ] [[package]] name = "ed25519" version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ "pkcs8", "signature", ] [[package]] name = "ed25519-dalek" version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ "curve25519-dalek", "ed25519", "rand_core", "serde", "sha2", "subtle", "zeroize", ] [[package]] name = "either" version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" [[package]] name = "ena" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" dependencies = [ "log", ] [[package]] name = "encoding_rs" version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if", ] [[package]] name = "endian-type" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "enum-as-inner" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" dependencies = [ "heck", "proc-macro2", "quote", "syn 2.0.51", ] [[package]] name = "enumber" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa35b49b30d8f4219e279f22c4b7c899aa7f98f475da4eff84b75f17ba11ed19" dependencies = [ "quote", "syn 1.0.109", ] [[package]] name = "equivalent" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ "libc", "windows-sys 0.52.0", ] [[package]] name = "fallible-iterator" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" [[package]] name = "fallible-streaming-iterator" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fd-lock" version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e5768da2206272c81ef0b5e951a41862938a6070da63bcea197899942d3b947" dependencies = [ "cfg-if", "rustix", "windows-sys 0.52.0", ] [[package]] name = "fiat-crypto" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1676f435fc1dadde4d03e43f5d62b259e1ce5f40bd4ffb21db2b42ebe59c1382" [[package]] name = "fixedbitset" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "float-cmp" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" dependencies = [ "num-traits", ] [[package]] name = "fnv" version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "foreign-types" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ "foreign-types-shared", ] [[package]] name = "foreign-types-shared" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "futures-channel" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", ] [[package]] name = "futures-core" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-io" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-macro" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", "syn 2.0.51", ] [[package]] name = "futures-sink" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", "futures-macro", "futures-task", "pin-project-lite", "pin-utils", "slab", ] [[package]] name = "generic-array" version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", ] [[package]] name = "getrandom" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "js-sys", "libc", "wasi", "wasm-bindgen", ] [[package]] name = "ghash" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" dependencies = [ "opaque-debug", "polyval", ] [[package]] name = "gimli" version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glob" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "h2" version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" dependencies = [ "bytes", "fnv", "futures-core", "futures-sink", "futures-util", "http", "indexmap", "slab", "tokio", "tokio-util", "tracing", ] [[package]] name = "hashbrown" version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" dependencies = [ "ahash", "allocator-api2", ] [[package]] name = "hashlink" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "692eaaf7f7607518dd3cef090f1474b61edc5301d8012f09579920df68b725ee" dependencies = [ "hashbrown", ] [[package]] name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "379dada1584ad501b383485dd706b8afb7a70fcbc7f4da7d780638a5a6124a60" [[package]] name = "hickory-client" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f3e08124cf0ddda93b1186d4af73599de401f3b52f14cd9aaa719049379462e" dependencies = [ "cfg-if", "data-encoding", "futures-channel", "futures-util", "hickory-proto", "once_cell", "radix_trie", "rand", "thiserror", "tokio", "tracing", ] [[package]] name = "hickory-proto" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "091a6fbccf4860009355e3efc52ff4acf37a63489aad7435372d44ceeb6fbbcf" dependencies = [ "async-trait", "cfg-if", "data-encoding", "enum-as-inner", "futures-channel", "futures-io", "futures-util", "idna 0.4.0", "ipnet", "once_cell", "openssl", "rand", "thiserror", "tinyvec", "tokio", "tracing", "url", ] [[package]] name = "hickory-resolver" version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35b8f021164e6a984c9030023544c57789c51760065cd510572fedcfb04164e8" dependencies = [ "cfg-if", "futures-util", "hickory-proto", "ipconfig", "lru-cache", "once_cell", "parking_lot", "rand", "resolv-conf", "smallvec", "thiserror", "tokio", "tracing", ] [[package]] name = "hostname" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" dependencies = [ "libc", "match_cfg", "winapi", ] [[package]] name = "http" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes", "fnv", "itoa", ] [[package]] name = "http-body" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", "pin-project-lite", ] [[package]] name = "httparse" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", "h2", "http", "http-body", "httparse", "httpdate", "itoa", "pin-project-lite", "socket2", "tokio", "tower-service", "tracing", "want", ] [[package]] name = "hyper-tls" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", "hyper", "native-tls", "tokio", "tokio-native-tls", ] [[package]] name = "iana-time-zone" version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", "windows-core", ] [[package]] name = "iana-time-zone-haiku" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ "cc", ] [[package]] name = "idna" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", ] [[package]] name = "idna" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", ] [[package]] name = "indexmap" version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", "hashbrown", ] [[package]] name = "inout" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ "block-padding", "generic-array", ] [[package]] name = "ipconfig" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ "socket2", "widestring", "windows-sys 0.48.0", "winreg", ] [[package]] name = "ipnet" version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "is-terminal" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f23ff5ef2b80d608d61efee834934d862cd92461afc0560dedf493e4c033738b" dependencies = [ "hermit-abi", "libc", "windows-sys 0.52.0", ] [[package]] name = "itertools" version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itoa" version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "js-sys" version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" dependencies = [ "wasm-bindgen", ] [[package]] name = "lalrpop" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8" dependencies = [ "ascii-canvas", "bit-set", "diff", "ena", "is-terminal", "itertools", "lalrpop-util", "petgraph", "regex", "regex-syntax 0.7.5", "string_cache", "term", "tiny-keccak", "unicode-xid", ] [[package]] name = "lalrpop-util" version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d" [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" dependencies = [ "spin", ] [[package]] name = "lazycell" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libloading" version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" dependencies = [ "cfg-if", "windows-sys 0.48.0", ] [[package]] name = "libm" version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libredox" version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" dependencies = [ "bitflags 2.4.2", "libc", "redox_syscall", ] [[package]] name = "libsqlite3-sys" version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" dependencies = [ "cc", "pkg-config", "vcpkg", ] [[package]] name = "linked-hash-map" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "lock_api" version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", ] [[package]] name = "log" version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[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 = "match_cfg" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" [[package]] name = "memchr" version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "memsec" version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fa0916b001582d253822171bd23f4a0229d32b9507fae236f5da8cad515ba7c" [[package]] name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minimal-lexical" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ "adler", ] [[package]] name = "mio" version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "wasi", "windows-sys 0.48.0", ] [[package]] name = "native-tls" version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" dependencies = [ "lazy_static", "libc", "log", "openssl", "openssl-probe", "openssl-sys", "schannel", "security-framework", "security-framework-sys", "tempfile", ] [[package]] name = "nettle" version = "7.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9fdccf3eae7b161910d2daa2f0155ca35041322e8fe5c5f1f2c9d0b12356336" dependencies = [ "getrandom", "libc", "nettle-sys", "thiserror", "typenum", ] [[package]] name = "nettle-sys" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b495053a10a19a80e3a26bf1212e92e29350797b5f5bdc58268c3f3f818e66ec" dependencies = [ "bindgen", "cc", "libc", "pkg-config", "tempfile", "vcpkg", ] [[package]] name = "new_debug_unreachable" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" [[package]] name = "nibble_vec" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" dependencies = [ "smallvec", ] [[package]] name = "nom" version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", ] [[package]] name = "normalize-line-endings" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" [[package]] name = "num-bigint-dig" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" dependencies = [ "byteorder", "lazy_static", "libm", "num-integer", "num-iter", "num-traits", "smallvec", ] [[package]] name = "num-integer" version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ "num-traits", ] [[package]] name = "num-iter" version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" dependencies = [ "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-traits" version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ "hermit-abi", "libc", ] [[package]] name = "object" version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] [[package]] name = "once_cell" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" [[package]] name = "openpgp-cert-d" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c2c3b55a1bd2b7b15b1d969fcde543bf6b679294f9efd3c2360459d49ae62ce" dependencies = [ "anyhow", "dirs", "fd-lock", "libc", "sha1collisiondetection", "tempfile", "thiserror", "walkdir", ] [[package]] name = "openssl" version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ "bitflags 2.4.2", "cfg-if", "foreign-types", "libc", "once_cell", "openssl-macros", "openssl-sys", ] [[package]] name = "openssl-macros" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", "syn 2.0.51", ] [[package]] name = "openssl-probe" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" version = "0.9.101" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" dependencies = [ "cc", "libc", "pkg-config", "vcpkg", ] [[package]] name = "option-ext" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "parking_lot" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", "parking_lot_core", ] [[package]] name = "parking_lot_core" version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", "windows-targets 0.48.5", ] [[package]] name = "peeking_take_while" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "percent-encoding" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", "indexmap", ] [[package]] name = "phf_shared" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" dependencies = [ "siphasher", ] [[package]] name = "pin-project-lite" version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkcs8" version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" dependencies = [ "der", "spki", ] [[package]] name = "pkg-config" version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "platforms" version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" [[package]] name = "polyval" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb" dependencies = [ "cfg-if", "cpufeatures", "opaque-debug", "universal-hash", ] [[package]] name = "ppv-lite86" version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "precomputed-hash" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "predicates" version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68b87bfd4605926cdfefc1c3b5f8fe560e3feca9d5552cf68c466d3d8236c7e8" dependencies = [ "anstyle", "difflib", "float-cmp", "normalize-line-endings", "predicates-core", "regex", ] [[package]] name = "predicates-core" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", ] [[package]] name = "proc-macro2" version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] [[package]] name = "quick-error" version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quickcheck" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6" dependencies = [ "rand", ] [[package]] name = "quote" version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] [[package]] name = "radix_trie" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" dependencies = [ "endian-type", "nibble_vec", ] [[package]] name = "rand" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", "rand_core", ] [[package]] name = "rand_chacha" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", "rand_core", ] [[package]] name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] [[package]] name = "rayon" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4963ed1bc86e4f3ee217022bd855b297cef07fb9eac5dfa1f788b220b49b3bd" dependencies = [ "either", "rayon-core", ] [[package]] name = "rayon-core" version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", ] [[package]] name = "redox_syscall" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ "bitflags 1.3.2", ] [[package]] name = "redox_users" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ "getrandom", "libredox", "thiserror", ] [[package]] name = "regex" version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", "regex-automata", "regex-syntax 0.8.2", ] [[package]] name = "regex-automata" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" dependencies = [ "aho-corasick", "memchr", "regex-syntax 0.8.2", ] [[package]] name = "regex-syntax" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "regex-syntax" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "reqwest" version = "0.11.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6920094eb85afde5e4a138be3f2de8bbdf28000f0029e72c45025a56b042251" dependencies = [ "base64", "bytes", "encoding_rs", "futures-core", "futures-util", "h2", "http", "http-body", "hyper", "hyper-tls", "ipnet", "js-sys", "log", "mime", "native-tls", "once_cell", "percent-encoding", "pin-project-lite", "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "winreg", ] [[package]] name = "resolv-conf" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" dependencies = [ "hostname", "quick-error", ] [[package]] name = "roff" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" [[package]] name = "rusqlite" version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" dependencies = [ "bitflags 2.4.2", "fallible-iterator", "fallible-streaming-iterator", "hashlink", "libsqlite3-sys", "smallvec", ] [[package]] name = "rustc-demangle" version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "rustc-hash" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc_version" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ "semver", ] [[package]] name = "rustix" version = "0.38.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" dependencies = [ "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", "windows-sys 0.52.0", ] [[package]] name = "rustls-pemfile" version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ "base64", ] [[package]] name = "rustversion" version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "same-file" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" dependencies = [ "winapi-util", ] [[package]] name = "schannel" version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ "windows-sys 0.52.0", ] [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", "security-framework-sys", ] [[package]] name = "security-framework-sys" version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "semver" version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" [[package]] name = "sequoia-cert-store" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e65486e541400d9d08559bfa6a57d9bb33e4678a378b9240cd7c370e2d9b4ae6" dependencies = [ "anyhow", "crossbeam", "dirs", "num_cpus", "openpgp-cert-d", "rayon", "rusqlite", "sequoia-net", "sequoia-openpgp", "smallvec", "thiserror", "tokio", ] [[package]] name = "sequoia-net" version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6abf810ba698339f332b946b485cc815c13a0f750189009bc10514c71fba814b" dependencies = [ "anyhow", "base64", "futures-util", "hickory-client", "hickory-resolver", "http", "hyper", "hyper-tls", "libc", "percent-encoding", "reqwest", "sequoia-openpgp", "tempfile", "thiserror", "tokio", "url", "z-base-32", ] [[package]] name = "sequoia-openpgp" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebf154ce4af3d7983de8fded403f98ff9eb3ee38dffccea0472ac38aa4276df4" dependencies = [ "aes-gcm", "anyhow", "base64", "buffered-reader", "chrono", "cipher", "dyn-clone", "eax", "ed25519", "ed25519-dalek", "getrandom", "idna 0.5.0", "lalrpop", "lalrpop-util", "lazy_static", "libc", "memsec", "nettle", "num-bigint-dig", "once_cell", "rand_core", "regex", "regex-syntax 0.8.2", "sha1collisiondetection", "thiserror", "win-crypto-ng", "winapi", "xxhash-rust", ] [[package]] name = "sequoia-policy-config" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "757d45d308f2bd9c0d6fdd640f320998ad24856bdf2890ddd28d3c3b85808274" dependencies = [ "anyhow", "chrono", "sequoia-openpgp", "serde", "thiserror", "toml", ] [[package]] name = "sequoia-wot" version = "0.11.0" dependencies = [ "anyhow", "assert_cmd", "chrono", "clap", "clap_complete", "clap_mangen", "crossbeam", "dot-writer", "enumber", "num_cpus", "predicates", "quickcheck", "sequoia-cert-store", "sequoia-openpgp", "sequoia-policy-config", "tempfile", "thiserror", ] [[package]] name = "serde" version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", "syn 2.0.51", ] [[package]] name = "serde_json" version = "1.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" dependencies = [ "itoa", "ryu", "serde", ] [[package]] name = "serde_urlencoded" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", "itoa", "ryu", "serde", ] [[package]] name = "sha1collisiondetection" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1d5c4be690002e8a5d7638b0b7323f03c268c7a919bd8af69ce963a4dc83220" dependencies = [ "digest", "generic-array", ] [[package]] name = "sha2" version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", "digest", ] [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signature" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "rand_core", ] [[package]] name = "siphasher" version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" [[package]] name = "slab" version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "socket2" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" dependencies = [ "libc", "windows-sys 0.52.0", ] [[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spki" version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ "base64ct", "der", ] [[package]] name = "string_cache" version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" dependencies = [ "new_debug_unreachable", "once_cell", "parking_lot", "phf_shared", "precomputed-hash", ] [[package]] name = "strsim" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "subtle" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "syn" version = "2.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ab617d94515e94ae53b8406c628598680aa0c9587474ecbe58188f7b345d66c" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] [[package]] name = "sync_wrapper" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "system-configuration" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" dependencies = [ "core-foundation-sys", "libc", ] [[package]] name = "tempfile" version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", "fastrand", "rustix", "windows-sys 0.52.0", ] [[package]] name = "term" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" dependencies = [ "dirs-next", "rustversion", "winapi", ] [[package]] name = "terminal_size" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" dependencies = [ "rustix", "windows-sys 0.48.0", ] [[package]] name = "termtree" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" dependencies = [ "proc-macro2", "quote", "syn 2.0.51", ] [[package]] name = "tiny-keccak" version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" dependencies = [ "crunchy", ] [[package]] name = "tinyvec" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" dependencies = [ "backtrace", "bytes", "libc", "mio", "num_cpus", "pin-project-lite", "socket2", "tokio-macros", "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", "syn 2.0.51", ] [[package]] name = "tokio-native-tls" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", ] [[package]] name = "tokio-util" version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", "tracing", ] [[package]] name = "toml" version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" dependencies = [ "serde", ] [[package]] name = "tower-service" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "pin-project-lite", "tracing-attributes", "tracing-core", ] [[package]] name = "tracing-attributes" version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", "syn 2.0.51", ] [[package]] name = "tracing-core" version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] [[package]] name = "try-lock" version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "unicode-bidi" version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] name = "unicode-xid" version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "universal-hash" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" dependencies = [ "crypto-common", "subtle", ] [[package]] name = "url" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna 0.5.0", "percent-encoding", ] [[package]] name = "utf8parse" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "vcpkg" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "wait-timeout" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" dependencies = [ "libc", ] [[package]] name = "walkdir" version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" dependencies = [ "same-file", "winapi-util", ] [[package]] name = "want" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ "try-lock", ] [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" dependencies = [ "cfg-if", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", "syn 2.0.51", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" dependencies = [ "cfg-if", "js-sys", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" dependencies = [ "quote", "wasm-bindgen-macro-support", ] [[package]] name = "wasm-bindgen-macro-support" version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" dependencies = [ "proc-macro2", "quote", "syn 2.0.51", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" version = "0.2.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" [[package]] name = "web-sys" version = "0.3.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" dependencies = [ "js-sys", "wasm-bindgen", ] [[package]] name = "widestring" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" [[package]] name = "win-crypto-ng" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99abfb435a71e54ab2971d8d8c32f1a7e006cdbf527f71743b1d45b93517bb92" dependencies = [ "cipher", "doc-comment", "rand_core", "winapi", "zeroize", ] [[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", ] [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" dependencies = [ "winapi", ] [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ "windows-targets 0.52.3", ] [[package]] name = "windows-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ "windows-targets 0.48.5", ] [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ "windows-targets 0.52.3", ] [[package]] name = "windows-targets" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm 0.48.5", "windows_aarch64_msvc 0.48.5", "windows_i686_gnu 0.48.5", "windows_i686_msvc 0.48.5", "windows_x86_64_gnu 0.48.5", "windows_x86_64_gnullvm 0.48.5", "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows-targets" version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d380ba1dc7187569a8a9e91ed34b8ccfc33123bbacb8c0aed2d1ad7f3ef2dc5f" dependencies = [ "windows_aarch64_gnullvm 0.52.3", "windows_aarch64_msvc 0.52.3", "windows_i686_gnu 0.52.3", "windows_i686_msvc 0.52.3", "windows_x86_64_gnu 0.52.3", "windows_x86_64_gnullvm 0.52.3", "windows_x86_64_msvc 0.52.3", ] [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68e5dcfb9413f53afd9c8f86e56a7b4d86d9a2fa26090ea2dc9e40fba56c6ec6" [[package]] name = "windows_aarch64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8dab469ebbc45798319e69eebf92308e541ce46760b49b18c6b3fe5e8965b30f" [[package]] name = "windows_i686_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a4e9b6a7cac734a8b4138a4e1044eac3404d8326b6c0f939276560687a033fb" [[package]] name = "windows_i686_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28b0ec9c422ca95ff34a78755cfa6ad4a51371da2a5ace67500cf7ca5f232c58" [[package]] name = "windows_x86_64_gnu" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "704131571ba93e89d7cd43482277d6632589b18ecf4468f591fbae0a8b101614" [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42079295511643151e98d61c38c0acc444e52dd42ab456f7ccfd5152e8ecf21c" [[package]] name = "windows_x86_64_msvc" version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" version = "0.52.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0770833d60a970638e989b3fa9fd2bb1aaadcf88963d1659fd7d9990196ed2d6" [[package]] name = "winreg" version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ "cfg-if", "windows-sys 0.48.0", ] [[package]] name = "xxhash-rust" version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "927da81e25be1e1a2901d59b81b37dd2efd1fc9c9345a55007f09bf5a2d3ee03" [[package]] name = "z-base-32" version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21bf7b4a78668416e1e8a332334e26fb2f377afe707f0c6feaf6ed5f9100133b" [[package]] name = "zerocopy" version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", "syn 2.0.51", ] [[package]] name = "zeroize" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" sequoia-wot-0.11.0/Cargo.toml0000644000000054240000000000100113730ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2021" rust-version = "1.70" name = "sequoia-wot" version = "0.11.0" authors = ["Neal H. Walfield "] description = "An implementation of OpenPGP's web of trust." homepage = "https://sequoia-pgp.org/" readme = "README.md" keywords = [ "cryptography", "openpgp", "trust-model", "authentication", "web-of-trust", ] categories = [ "cryptography", "authentication", "email", "command-line-utilities", ] license = "LGPL-2.0-or-later" repository = "https://gitlab.com/sequoia-pgp/sequoia-wot" [package.metadata.docs.rs] features = ["sequoia-openpgp/default"] [lib] name = "sequoia_wot" path = "src/lib.rs" [[bin]] name = "sq-wot" path = "src/sq-wot.rs" required-features = ["cli"] [dependencies.anyhow] version = "1.0.18" [dependencies.chrono] version = "0.4" [dependencies.clap] version = "4.0" features = [ "derive", "wrap_help", ] optional = true [dependencies.crossbeam] version = "0.8.1" [dependencies.dot-writer] version = "0.1.3" optional = true [dependencies.enumber] version = "0.3" [dependencies.num_cpus] version = "1" [dependencies.sequoia-cert-store] version = "0.5" [dependencies.sequoia-openpgp] version = "1.17" default-features = false [dependencies.sequoia-policy-config] version = "0.6" [dependencies.thiserror] version = "1.0.2" [dev-dependencies.assert_cmd] version = "2.0.2" [dev-dependencies.predicates] version = ">=2.1.0, <4" [dev-dependencies.quickcheck] version = "1" default-features = false [dev-dependencies.tempfile] version = "3" [build-dependencies.anyhow] version = "1.0.18" [build-dependencies.clap] version = "4.0" features = [ "derive", "wrap_help", ] optional = true [build-dependencies.clap_complete] version = "4.0" optional = true [build-dependencies.clap_mangen] version = "0.2" optional = true [features] cli = [ "clap", "clap_complete", "clap_mangen", ] default = [ "cli", "dot-writer", ] [target."cfg(not(windows))".dev-dependencies.sequoia-openpgp] version = "1" features = [ "crypto-nettle", "__implicit-crypto-backend-for-tests", ] default-features = false [target."cfg(windows)".dev-dependencies.sequoia-openpgp] version = "1" features = [ "crypto-cng", "__implicit-crypto-backend-for-tests", ] default-features = false [badges.maintenance] status = "actively-developed" sequoia-wot-0.11.0/Cargo.toml.orig000064400000000000000000000042401046102023000150470ustar 00000000000000[package] name = "sequoia-wot" description = "An implementation of OpenPGP's web of trust." version = "0.11.0" authors = ["Neal H. Walfield "] homepage = "https://sequoia-pgp.org/" repository = "https://gitlab.com/sequoia-pgp/sequoia-wot" readme = "README.md" keywords = ["cryptography", "openpgp", "trust-model", "authentication", "web-of-trust"] categories = ["cryptography", "authentication", "email", "command-line-utilities"] license = "LGPL-2.0-or-later" edition = "2021" rust-version = "1.70" [badges] maintenance = { status = "actively-developed" } [dependencies] anyhow = "1.0.18" chrono = "0.4" crossbeam = "0.8.1" enumber = "0.3" num_cpus = "1" sequoia-cert-store = "0.5" sequoia-policy-config = "0.6" sequoia-openpgp = { version = "1.17", default-features = false } thiserror = "1.0.2" # These dependencies are for the CLI frontend. clap = { version = "4.0", optional = true, features = [ "derive", "wrap_help" ] } dot-writer = { version = "0.1.3", optional = true } [dev-dependencies] assert_cmd = "2.0.2" predicates = ">=2.1.0, <4" quickcheck = { version = "1", default-features = false } tempfile = "3" [build-dependencies] anyhow = "1.0.18" # These dependencies are for the CLI frontend. clap = { version = "4.0", optional = true, features = [ "derive", "wrap_help" ] } clap_complete = { version = "4.0", optional = true } clap_mangen = { version = "0.2", optional = true } [lib] name = "sequoia_wot" path = "src/lib.rs" [[bin]] name = "sq-wot" path = "src/sq-wot.rs" required-features = ["cli"] [features] default = ["cli", "dot-writer"] cli = ["clap", "clap_complete", "clap_mangen"] [target.'cfg(not(windows))'.dev-dependencies] # Enables a crypto backend for the tests: sequoia-openpgp = { version = "1", default-features = false, features = ["crypto-nettle", "__implicit-crypto-backend-for-tests"] } [target.'cfg(windows)'.dev-dependencies] # Enables a crypto backend for the tests: sequoia-openpgp = { version = "1", default-features = false, features = ["crypto-cng", "__implicit-crypto-backend-for-tests"] } [package.metadata.docs.rs] # Enables a crypto backend for the docs.rs generation: features = ["sequoia-openpgp/default"] sequoia-wot-0.11.0/LICENSE.txt000064400000000000000000000627341046102023000140170ustar 00000000000000Sequoia PGP is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Sequoia PGP 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --- GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library 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 Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey 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 library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! sequoia-wot-0.11.0/README.md000064400000000000000000000554271046102023000134540ustar 00000000000000# Sequoia Web of Trust A Rust library for authenticating bindings between User IDs and certificates using OpenPGP's web of trust. This library is designed around OpenPGP's data structures, but it does not require OpenPGP data. Instead, it is possible to manually describe a web of trust. This crate also includes a CLI tool, `sq-wot`, for authenticating bindings and exploring a web of trust. ## Introduction The [web of trust] is a decentralized trust model popularized by PGP. It is [a superset] of [X.509], which is a hierarchical trust model, and is the most popular trust model on the public internet today. As used on the public internet, however, X.509 relies on a handful of global [certification authorities] (CAs) who often [undermine its security]. [web of trust]: https://en.wikipedia.org/wiki/Web_of_trust [a superset]: https://www.oreilly.com/library/view/beautiful-security/9780596801786/ch07.html [X.509]: https://de.wikipedia.org/wiki/X.509 [certification authorities]: https://en.wikipedia.org/wiki/Certificate_authority [undermine its security]: https://sslmate.com/resources/certificate_authority_failures The web of trust is more nuanced than X.509. Using the web of trust, require multiple, independent paths to authenticate a binding by only partially trusting CAs. This prevents a single bad actor from compromising their security. And those who have stronger security requirements can use the web of trust in a completely decentralized manner where only the individuals they select---who are not necessarily institutions---act as trusted introducers. Today, the tooling around the web of trust is primitive at best. Many people interpret this lack of good tooling as a sign that the web of trust is intrinsically difficult to use. We disagree and think that efforts like our [OpenPGP CA] provide evidence that this is not the case. [OpenPGP CA]: https://openpgp-ca.org/ See the [spec] for an in-depth discussion of semantics and implementation. [spec]: https://sequoia-pgp.gitlab.io/sequoia-wot This library provides functionality to find arbitrary paths in a web-of-trust network, and to validate and lint specific paths. This functionality is also exposed via a command-line tool, `sq-wot`. ## Usage To use `sequoia-wot` from your project, you should add the following to your crate's `Cargo.toml`: ```toml [dependencies] sequoia-wot = "0.8" sequoia-cert-store = "0.3" sequoia-openpgp = { version = "1.0.0", default-features = false } ``` To compile your crate you would then run: ``` $ cargo build --release --features sequoia-openpgp/default $ cargo test --features sequoia-openpgp/default $ cargo doc --no-deps --features sequoia-openpgp/default ``` If you do not disable the use of `sequoia-openpgp`'s default features, then `sequoia-openpgp` will select the default cryptographic backend, and your users won't be able to easily compile your crate with a different cryptographic backend. `sequoia-openpgp` currently uses Nettle as its default cryptographic backend. `sequoia-openpgp` also supports OpenSSL (`sequoia-openpgp/crypto-openssl`), Botan 3 (`sequoia-openpgp/crypto-botan`), Botan 2 (`sequoia-openpgp/crypto-botan2`), Windows CNG (`sequoia-openpgp/crypto-cng`), and Rust Crypto (`sequoia-openpgp/crypto-rust`). For more information about building `sequoia-openpgp`, please refer to [`sequoia-openpgp`'s README]. This also includes information about the different backends' [build requirements]. [`sequoia-openpgp`'s README]: https://gitlab.com/sequoia-pgp/sequoia#features [build requirements]: https://gitlab.com/sequoia-pgp/sequoia#building-sequoia ## sq-wot `sq-wot` is a CLI to the library. It implements five subcommands: `authenticate`, `lookup`, `identify`, `list`, and `path`. All commands authenticate something. In this context, *authenticate* means to establish the degree to which an identity should be associated with an OpenPGP certificate based on assertions that the user and others have made. Typically, there is a minimal trust threshold, and if the aggregate trust amount is below that, then the command fails. The first four subcommands authenticate bindings by looking for paths in a web-of-trust network. This is done by computing the maximum flow between trust roots and a binding. Due to the complexity, this can be computationally expensive, but it is quite fast in practice: queries tend to take less than a millisecond. The computation cost is normally dwarfed by the time it takes to parse and validate certificates. The last subcommand authenticates and lints a path. Because the path is known, this is very fast. In short, `authenticate` works with a specific binding; `lookup` finds certificates that have been authenticated for a specific User ID or email address; `identify` finds User IDs that can be authenticated with a particular certificate; `list` finds all authenticated bindings; and, `path` checks a path's authenticity. ### `authenticate` a binding A binding is a pair consisting of a certificate and a User ID. The certificate is usually denoted by its fingerprint or Key ID. An example of a binding is: `8F17777118A33DDA9BA48E62AACB3243630052D9` and `Neal H. Walfield `. Another example is `CBCD8F030588653EEDD7E2659B7DD433F254904A` and `Justus Winter `. A binding is authentic if there is a valid path from a trust root, via intermediate introducers, to a target binding. A trust root is a certificate that you rely on to assert the authenticity of bindings. A trust root is also sometimes called a trust anchor. Intermediate introducers are certificates that a trust root or other intermediate introducer delegates its introduction capability to. They are also called certification authorities. Trust roots and intermediate introducers are collectively referred to as trusted introducers. An example of a path is: `8F17777118A33DDA9BA48E62AACB3243630052D9`, `CBCD8F030588653EEDD7E2659B7DD433F254904A`, `Justus Winter `. This path includes a root and a target binding, but it does not have any intermediate introducers. `sq-wot authenticate` tries to authenticate a binding. It looks like this: ```text $ sq-wot --gpg authenticate CBCD8F030588653EEDD7E2659B7DD433F254904A 'Justus Winter ' [✓] CBCD8F030588653EEDD7E2659B7DD433F254904A Justus Winter : fully authenticated (133%) Path #1 of 2, trust amount 40: ◯ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " Path #2 of 2, trust amount 120: ◯ F7173B3C7C685CD9ECC4191B74E445BA0E15C957 ("Neal H. Walfield (Code Signing Key) ") │ certified the following binding on 2022-02-04 └ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " ``` `sq-wot` prints out the paths from the trust roots to the specified binding. Because, I also marked the certificate that I'm trying to authenticate as a partially trusted trusted root in `gpg`, it partially authenticates itself, as the first path shows. The second path is valid, because I directly certified the binding. The `--gpg` option tells `sq-wot` to read my trust roots from `gpg` and to read `gpg`'s keyring. Trust roots can also be specified explicitly using the `--trust-root` or `-r` option. Keyrings can be specified using the `--keyring` option. For instance, I can confirm that Clint Adams certified dkg's certificate for the User ID ``: ``` $ sq-wot -r F6D3495BB0AE9A02 --keyring /usr/share/keyrings/debian-keyring.gpg authenticate C29F8A0C01F35E34D816AA5CE092EB3A5CA10DBA "" [✓] C29F8A0C01F35E34D816AA5CE092EB3A5CA10DBA : fully authenticated (100%) ◯ 2100A32C46F895AF3A08783AF6D3495BB0AE9A02 ("Clint Adams (GNU) ") │ certified the following binding on 2021-01-01 (expiry: 2023-12-24) └ C29F8A0C01F35E34D816AA5CE092EB3A5CA10DBA "" ``` Note that in the above examples, I used the whole User ID, not just the email address. `sq-wot` also has an `--email` flag, which causes it to consider all User IDs that contain the specified email address. For instance: ``` $ sq-wot --gpg authenticate CBCD8F030588653EEDD7E2659B7DD433F254904A --email justus@sequoia-pgp.org ... ``` Sometimes it is not possible to authenticate a binding. In that case, there are several things that you can try: you can use a public key server to augment your keyring; you can relax the authentication criteria by treating the web of trust as a certification network instead of an authentication network; and, you can query the web of trust to find out what others, who you haven't directly or indirectly designated as trusted introducers, think of a particular binding. #### Using a Public Certificate Store By default, `sq-wot` only uses the certificates that you explicitly supply to it. It may be that a missing certificate is preventing you from authenticating a binding. If you specify `--network` then `sq-wot` will look for missing certificates on a keyserver. (This defaults to `hkps://keyserver.ubuntu.com`, which is part of the SKS network, and which delivers third-party certifications.) Note: `sq-wot` does not check for updates, even if a certificate is expired; if the key is present locally, it is used as is. You can keep your gpg keyring up to date by running [parcimonie], or by periodically running something like: [parcimonie]: https://github.com/EtiennePerot/parcimonie.sh ```shell $ gpg --export \ | sq keyring list \ | awk '{ print $2}' \ | while read fpr; do \ sq keyserver -s hkps://keyserver.ubuntu.com get $fpr; \ done \ | gpg --import ``` If `--network` is provided, `sq-wot` will also consult a WKD, but it currently only does so for the target certificate. #### Certification Networks Normally, `sq-wot` works with an authentication network. In an authentication network, there is a difference between Alice asserting that someone, say Mallory, controls a particular key, and Alice asserting that Mallory can be relied upon to make assertions. That is, in an authentication network, verifying someone's identity is fundamentally different from delegating to them, and unconditionally believing what they claim. In a certification network, all certifications are treated as delegations. Specifically, all certifications are treated as if they have an infinite trust depth, and no regular expressions. Using a certification network can be dangerous. If you certified Mallory's certificate, then Mallory can cause you to consider any binding to be authenticated. Nevertheless, there are uses for certification networks. Because trust is earned over time, a certification network provides insight into who potentially useful trusted introducers may be, and their certifications can then be upgraded individually. For instance, Alice may have certified Bob's certificate when she first met him years ago. Now Alice wants to authenticate Carol's certificate. Alice may discover that there is no path to Alice in her authentication network, but she may discover that Bob certified Alice in her certification network. As Alice has known Bob for years, and he has proven reliable, she might decide to make Bob a trusted introducer. That would then allow her to authenticate Carol using her authentication network. Another use for certification networks is in small closed communities, like the Linux kernel developers, Debian maintainers, or Arch maintainers. Here it is assumed that all members are more or less trusted. Using a certification network, it is possible to see who has vetted whom. Certification networks are also used by so-called PGP path finding algorithms. This mode matches their behavior. To tell `sq-wot` to treat the web of trust as a certification network instead of an authentication network, use the `--certification-network` option. Note: this can be used for all of `sq-wot`'s subcommands, not just `sq-wot authenticate`. Using this option with our first example, we find additional paths from Neal to Justus including: ``` $ sq-wot --gpg --certification-network authenticate CBCD8F030588653EEDD7E2659B7DD433F254904A 'Justus Winter ' ... Path #4 of 4, trust amount 120: ◯ 8F17777118A33DDA9BA48E62AACB3243630052D9 ("Neal H. Walfield ") │ certified the following certificate on 2022-10-07 ├ 653909A2F0E37C106F5FAF546C8857E0D8E8F074 ("Wiktor Kwapisiewicz ") │ certified the following certificate on 2018-02-06 ├ 7420DF86BCE15A458DCE997639278DA8109E6244 ("Guilhem Moulin") │ certified the following certificate on 2018-02-10 ├ 7845120B07CBD8D6ECE5FF2B2A1743EDA91A35B6 ("Darshit Shah ") │ certified the following certificate on 2015-11-09 ├ D4AB192964F76A7F8F8A9B357BD18320DEADFA11 ("Valodim Skywalker ") │ certified the following certificate on 2017-11-19 ├ CBCD8F030588653EEDD7E2659B7DD433F254904A ("") │ certified the following binding on 2023-01-24 └ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " ``` #### Gossip Sometimes there are no paths from a trust root to the binding that you are trying to authenticate in the certification network. In that case, it may still be helpful to find out who has certified a particular certificate. That is, it may be helpful to listen to other's gossip. The `--gossip` option finds arbitrary paths to a particular certificate by treating all certificates as if they were trust roots albeit with zero trust. Gossip is useful for identifying alternate ways to authenticate a certificate. For instance, imagine Ed wants to authenticate Laura's certificate, but asking her directly is inconvenient. Ed discovers that Micah has certified Laura's certificate, but Ed hasn't yet authenticated Micah's certificate. If Ed is willing to rely on Micah as a trusted introducer, and authenticating Micah's certificate is easier than authenticating Laura's certificate, then Ed has learned about an easier way to authenticate Laura's certificate. In the following example, we see that a certificate with the self-signed user ID `OpenPGP CA ` has certified Justus's certificate: ``` $ sq-wot --gpg --gossip authenticate CBCD8F030588653EEDD7E2659B7DD433F254904A 'Justus Winter ' ... [ ] CBCD8F030588653EEDD7E2659B7DD433F254904A Justus Winter : not authenticated (0%) ◯ 34F9E4B6A0A70BFEC5AE45198356989DF1977575 ("OpenPGP CA ") │ certified the following binding on 2022-02-09 └ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " ``` Note: By default, `--gossip` uses an authentication network. `--gossip` can be combined with `--certification-network` for even more unreliable information. ### `lookup` by User ID or email address The `lookup` subcommand finds certificates that are authenticated for the specified User ID. This is useful when you want to find someone's certificate. As before, we can use the `--email` option: ``` $ sq-wot --gpg lookup --email justus@sequoia-pgp.org [✓] CBCD8F030588653EEDD7E2659B7DD433F254904A Justus Winter : fully authenticated (133%) Path #1 of 2, trust amount 40: ◯ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " Path #2 of 2, trust amount 120: ◯ F7173B3C7C685CD9ECC4191B74E445BA0E15C957 ("Neal H. Walfield (Code Signing Key) ") │ certified the following binding on 2022-02-04 └ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " ``` The `lookup` subcommand is also a useful tool to evaluate the degree to which the same User ID is authenticated for different certificates. This can help distinguish if a certificate is a forgery, or a legitimate replacement. This is visualized in the following image, which was created using `sq-wot`'s [DOT](https://graphviz.org/doc/info/lang.html) output format option, and converted to SVG using Graphiz's DOT compiler: ``` $ sq-wot \ -r 2AC0A42EFB0B5CBC7A0402ED4DC95B6D7BE9892E \ -r D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C \ -r 75BD80E4D834509F6E740257B1B73B02CC52A02A \ -r 91FFE0700E80619CEB73235CA88E23E377514E00 \ -r 0E8B644079F599DFC1DDC3973348882F6AC6A4C2 \ -r 69E6471E3AE065297529832E6BA0F5A2037F4F41 \ -k archlinux.pgp \ -f dot \ -a 500 \ lookup \ --email dvzrv@archlinux.org | dot -Tsvg ``` ![A graph showing various trust roots of the Arch Linux distribution with certifications towards two packager keys](./doc/lookup_dvzrv.svg) ### `identify` by certificate The `identify` subcommand finds all bindings that can be authenticated for a given certificate. This is useful when you want to figure out who a certificate belongs to: ``` $ sq-wot --gpg identify CBCD8F030588653EEDD7E2659B7DD433F254904A [✓] CBCD8F030588653EEDD7E2659B7DD433F254904A Justus Winter : fully authenticated (133%) Path #1 of 2, trust amount 40: ◯ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " Path #2 of 2, trust amount 120: ◯ F7173B3C7C685CD9ECC4191B74E445BA0E15C957 ("Neal H. Walfield (Code Signing Key) ") │ certified the following binding on 2022-02-04 └ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " [✓] CBCD8F030588653EEDD7E2659B7DD433F254904A Justus Winter : fully authenticated (133%) Path #1 of 2, trust amount 40: ◯ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " Path #2 of 2, trust amount 120: ◯ F7173B3C7C685CD9ECC4191B74E445BA0E15C957 ("Neal H. Walfield (Code Signing Key) ") │ certified the following binding on 2022-02-04 └ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " ... ``` The `identify` subcommand also shows that different User IDs on the same certificate may not all be authenticated to the same degree. This is illustrated in the following graphic, which was created using the [DOT](https://graphviz.org/doc/info/lang.html) output format: ``` $ sq-wot \ -r 2AC0A42EFB0B5CBC7A0402ED4DC95B6D7BE9892E \ -r D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C \ -r 75BD80E4D834509F6E740257B1B73B02CC52A02A \ -r 91FFE0700E80619CEB73235CA88E23E377514E00 \ -r 0E8B644079F599DFC1DDC3973348882F6AC6A4C2 \ -r 69E6471E3AE065297529832E6BA0F5A2037F4F41 \ -k archlinux.pgp \ -f dot \ -a 500 \ identify \ B5971F2C5C10A9A08C60030F786C63F330D7CB92 | dot -Tsvg ``` ![A graph showing various trust roots of the Arch Linux distribution with certifications towards a packager key](./doc/identify_felixonmars.svg) ### `list` all authenticated bindings The `list` subcommand finds all bindings that can be authenticated for all certificates. This is useful for seeing everyone you can authenticate, and why: ``` $ sq-wot --gpg list [✓] 8F17777118A33DDA9BA48E62AACB3243630052D9 Neal H. Walfield : fully authenticated (100%) ◯ 8F17777118A33DDA9BA48E62AACB3243630052D9 "Neal H. Walfield " [✓] 8F17777118A33DDA9BA48E62AACB3243630052D9 Neal H. Walfield : fully authenticated (100%) ◯ 8F17777118A33DDA9BA48E62AACB3243630052D9 "Neal H. Walfield " ... [✓] CBCD8F030588653EEDD7E2659B7DD433F254904A Justus Winter : fully authenticated (133%) Path #1 of 2, trust amount 40: ◯ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " Path #2 of 2, trust amount 120: ◯ F7173B3C7C685CD9ECC4191B74E445BA0E15C957 ("Neal H. Walfield (Code Signing Key) ") │ certified the following binding on 2022-02-04 └ CBCD8F030588653EEDD7E2659B7DD433F254904A "Justus Winter " ... ``` This can also be helpful for examining connections within a community. The following graph was generated using `sq-wot`'s DOT output, and shows bindings that can be authenticated using the [Linux kernel's keyring](https://git.kernel.org/pub/scm/docs/kernel/pgpkeys.git) from three community members. ``` $ sq-wot \ -f dot \ -r ABAF11C65A2970B130ABE3C479BE3E4300411886 \ -r 647F28654894E3BD457199BE38DBBDC86092693E \ -r CA30110FD5285DE49BB238CD17212997986C5765 \ -k kernel.pgp \ list | dot -Tsvg ``` ![A graph showing three Linux kernel developers and the keys they are signing](./doc/list_kernel_keyring.svg) ### Verify a `path` The `path` subcommand verifies and lints a path. This is particularly useful when you think that a path should be valid, but `sq-wot authenticate` silently disagrees. The path is passed to `sq-wot path` as a list of fingerprints starting with the root's fingerprint or Key ID and ending with the target certificate's fingerprint or Key ID, and a User ID. If the path is valid, it returns success. If it is not valid, it lints the path. In the following transcript, we first see that `sq-wot authenticate` unhelpfully tells us that there are no paths from hpa to Greg Kroah-Hartman's certificate. But when we use `sq-wot path`, we find out that hpa did certify Greg Kroah-Hartman's certificate, but the certification uses SHA-1, which is no longer trusted: ``` $ sq-wot --keyring kernel.pgp -r BDA06085493BACE4 authenticate 38DBBDC86092693E "Greg Kroah-Hartman (Linux kernel stable release signing key) " No paths found. $ sq-wot --keyring kernel.pgp path BDA06085493BACE4 38DBBDC86092693E "Greg Kroah-Hartman (Linux kernel stable release signing key) " [ ] 647F28654894E3BD457199BE38DBBDC86092693E Greg Kroah-Hartman (Linux kernel stable release signing key) : not authenticated (0%) ◯ 7EAAC9693E7D220546BE576CBDA06085493BACE4 ("H. Peter Anvin (hpa) ") │ No adequate certification found. │ BDA06085493BACE4 did not certify <38DBBDC86092693E, "Greg Kroah-Hartman (Linux kernel stable release signing key) "> │ No active certifications by BDA06085493BACE4 for <38DBBDC86092693E, "Greg Kroah-Hartman (Linux kernel stable release signing key) "> had a trust amount of at least 120 │ Certification (B122 by BDA06085493BACE4 on 38DBBDC86092693E at 2011-09-23 18:42.09) is adequate, but it is not valid │ B122 by BDA06085493BACE4 on 38DBBDC86092693E at 2011-09-23 18:42.09: policy violation │ Policy rejected non-revocation signature (GenericCertification) requiring collision resistance │ SHA1 is not considered secure since 2013-02-01T00:00:00Z └ 647F28654894E3BD457199BE38DBBDC86092693E "Greg Kroah-Hartman (Linux kernel stable release signing key) " ``` # License sequoia-wot is distributed under the terms of LGPL 2.0 or later. See [LICENSE.txt](LICENSE.txt) and [CONTRIBUTING.md](CONTRIBUTING.md) for details. sequoia-wot-0.11.0/build.rs000064400000000000000000000100621046102023000136240ustar 00000000000000use std::env; use std::fs; use std::io::{self, Write}; use std::path::PathBuf; fn main() { include_test_data().unwrap(); build_man_pages().unwrap(); build_shell_completions().unwrap(); } /// Builds the index of the test data for use with the `::tests` /// module. fn include_test_data() -> io::Result<()> { let cwd = env::current_dir()?; let mut sink = fs::File::create( PathBuf::from(env::var_os("OUT_DIR").unwrap()) .join("tests.index.rs.inc")).unwrap(); writeln!(&mut sink, "{{")?; let mut dirs = vec![PathBuf::from("tests/data")]; while let Some(dir) = dirs.pop() { println!("rerun-if-changed={}", dir.to_str().unwrap()); for entry in fs::read_dir(dir).unwrap() { let entry = entry?; let path = entry.path(); if path.is_file() { writeln!( &mut sink, " add!({:?}, {:?});", path.components().skip(2) .map(|c| c.as_os_str().to_str().expect("valid UTF-8")) .collect::>().join("/"), cwd.join(path))?; } else if path.is_dir() { dirs.push(path.clone()); } } } writeln!(&mut sink, "}}")?; Ok(()) } // We include cli.rs, which depends on a few data structures from // sequoia_openpgp. To avoid adding sequoia_openpgp as a build // dependency, we provide stubs for the functionality that cli.rs // uses. #[cfg(feature = "cli")] mod openpgp { pub type Result = anyhow::Result; pub mod packet { use super::*; #[derive(Clone, Debug)] pub struct UserID {} impl From<&[u8]> for UserID { fn from(_: &[u8]) -> Self { UserID {} } } impl std::str::FromStr for UserID { type Err = anyhow::Error; fn from_str(_: &str) -> Result { Ok(UserID {}) } } } #[derive(Clone, Debug)] pub struct KeyHandle { } impl std::str::FromStr for KeyHandle { type Err = anyhow::Error; fn from_str(_: &str) -> Result { Ok(KeyHandle {}) } } } #[cfg(feature = "cli")] #[allow(unused)] mod cli { include!("src/cli.rs"); } #[cfg(not(feature = "cli"))] fn build_man_pages() -> io::Result<()> { Ok(()) } #[cfg(feature = "cli")] fn build_man_pages() -> io::Result<()> { // Man page support. let out_dir = std::path::PathBuf::from( std::env::var_os("OUT_DIR").ok_or(std::io::ErrorKind::NotFound)?); use clap::CommandFactory; let man = clap_mangen::Man::new(cli::Cli::command()); let mut buffer: Vec = Default::default(); man.render(&mut buffer)?; let filename = out_dir.join("sq-wot.1"); println!("cargo:warning=writing man page to {}", filename.display()); std::fs::write(filename, buffer)?; for sc in cli::Cli::command().get_subcommands() { let man = clap_mangen::Man::new(sc.clone()); let mut buffer: Vec = Default::default(); man.render(&mut buffer)?; let filename = out_dir.join(format!("sq-wot-{}.1", sc.get_name())); println!("cargo:warning=writing man page to {}", filename.display()); std::fs::write(filename, buffer)?; } Ok(()) } #[cfg(not(feature = "cli"))] fn build_shell_completions() -> io::Result<()> { Ok(()) } #[cfg(feature = "cli")] fn build_shell_completions() -> io::Result<()> { use clap_complete::Shell; let out_dir = std::path::PathBuf::from( std::env::var_os("OUT_DIR").ok_or(std::io::ErrorKind::NotFound)?); fs::create_dir_all(&out_dir).unwrap(); use clap::CommandFactory; let mut sq_wot = cli::Cli::command(); for shell in &[Shell::Bash, Shell::Fish, Shell::Zsh, Shell::PowerShell, Shell::Elvish] { let path = clap_complete::generate_to( *shell, &mut sq_wot, "sq-wot", &out_dir) .unwrap(); println!("cargo:warning=completion file is generated: {:?}", path); }; Ok(()) } sequoia-wot-0.11.0/deny.toml000064400000000000000000000221011046102023000140100ustar 00000000000000# This template contains all of the possible sections and their default values # Note that all fields that take a lint level have these possible values: # * deny - An error will be produced and the check will fail # * warn - A warning will be produced, but the check will not fail # * allow - No warning or error will be produced, though in some cases a note # will be # The values provided in this template are the default values that will be used # when any section or field is not specified in your own configuration # If 1 or more target triples (and optionally, target_features) are specified, # only the specified targets will be checked when running `cargo deny check`. # This means, if a particular package is only ever used as a target specific # dependency, such as, for example, the `nix` crate only being used via the # `target_family = "unix"` configuration, that only having windows targets in # this list would mean the nix crate, as well as any of its exclusive # dependencies not shared by any other crates, would be ignored, as the target # list here is effectively saying which targets you are building for. targets = [ # The triple can be any string, but only the target triples built in to # rustc (as of 1.40) can be checked against actual config expressions #{ triple = "x86_64-unknown-linux-musl" }, # You can also specify which target_features you promise are enabled for a # particular target. target_features are currently not validated against # the actual valid features supported by the target architecture. #{ triple = "wasm32-unknown-unknown", features = ["atomics"] }, ] # This section is considered when running `cargo deny check advisories` # More documentation for the advisories section can be found here: # https://embarkstudios.github.io/cargo-deny/checks/advisories/cfg.html [advisories] # The path where the advisory database is cloned/fetched into db-path = "~/.cargo/advisory-db" # The url(s) of the advisory databases to use db-urls = ["https://github.com/rustsec/advisory-db"] # The lint level for security vulnerabilities vulnerability = "deny" # The lint level for unmaintained crates unmaintained = "warn" # The lint level for crates that have been yanked from their source registry yanked = "warn" # The lint level for crates with security notices. Note that as of # 2019-12-17 there are no security notice advisories in # https://github.com/rustsec/advisory-db notice = "warn" # A list of advisory IDs to ignore. Note that ignored advisories will still # output a note when they are encountered. ignore = [ "RUSTSEC-2020-0159", # We do not use local timezones (only UTC). So we are not # impacted by this. "RUSTSEC-2020-0071", ] # Threshold for security vulnerabilities, any vulnerability with a CVSS score # lower than the range specified will be ignored. Note that ignored advisories # will still output a note when they are encountered. # * None - CVSS Score 0.0 # * Low - CVSS Score 0.1 - 3.9 # * Medium - CVSS Score 4.0 - 6.9 # * High - CVSS Score 7.0 - 8.9 # * Critical - CVSS Score 9.0 - 10.0 #severity-threshold = # This section is considered when running `cargo deny check licenses` # More documentation for the licenses section can be found here: # https://embarkstudios.github.io/cargo-deny/checks/licenses/cfg.html [licenses] # The lint level for crates which do not have a detectable license unlicensed = "deny" # List of explicitly allowed licenses # See https://spdx.org/licenses/ for list of possible licenses # [possible values: any SPDX 3.7 short identifier (+ optional exception)]. allow = [ #"MIT", #"Apache-2.0", #"Apache-2.0 WITH LLVM-exception", ] # List of explicitly disallowed licenses # See https://spdx.org/licenses/ for list of possible licenses # [possible values: any SPDX 3.7 short identifier (+ optional exception)]. deny = [ #"Nokia", ] # Lint level for licenses considered copyleft copyleft = "warn" # Blanket approval or denial for OSI-approved or FSF Free/Libre licenses # * both - The license will be approved if it is both OSI-approved *AND* FSF # * either - The license will be approved if it is either OSI-approved *OR* FSF # * osi-only - The license will be approved if is OSI-approved *AND NOT* FSF # * fsf-only - The license will be approved if is FSF *AND NOT* OSI-approved # * neither - This predicate is ignored and the default lint level is used allow-osi-fsf-free = "either" # Lint level used when no other predicates are matched # 1. License isn't in the allow or deny lists # 2. License isn't copyleft # 3. License isn't OSI/FSF, or allow-osi-fsf-free = "neither" default = "deny" # The confidence threshold for detecting a license from license text. # The higher the value, the more closely the license text must be to the # canonical license text of a valid SPDX license file. # [possible values: any between 0.0 and 1.0]. confidence-threshold = 0.95 # Allow 1 or more licenses on a per-crate basis, so that particular licenses # aren't accepted for every possible crate as with the normal allow list exceptions = [ # Each entry is the crate and version constraint, and its specific allow # list #{ allow = ["Zlib"], name = "adler32", version = "*" }, ] # Some crates don't have (easily) machine readable licensing information, # adding a clarification entry for it allows you to manually specify the # licensing information #[[licenses.clarify]] # The name of the crate the clarification applies to #name = "ring" # The optional version constraint for the crate #version = "*" # The SPDX expression for the license requirements of the crate #expression = "MIT AND ISC AND OpenSSL" # One or more files in the crate's source used as the "source of truth" for # the license expression. If the contents match, the clarification will be used # when running the license check, otherwise the clarification will be ignored # and the crate will be checked normally, which may produce warnings or errors # depending on the rest of your configuration #license-files = [ # Each entry is a crate relative path, and the (opaque) hash of its contents #{ path = "LICENSE", hash = 0xbd0eed23 } #] [licenses.private] # If true, ignores workspace crates that aren't published, or are only # published to private registries ignore = true # One or more private registries that you might publish crates to, if a crate # is only published to private registries, and ignore is true, the crate will # not have its license(s) checked registries = [ #"https://sekretz.com/registry ] # This section is considered when running `cargo deny check bans`. # More documentation about the 'bans' section can be found here: # https://embarkstudios.github.io/cargo-deny/checks/bans/cfg.html [bans] # Lint level for when multiple versions of the same crate are detected multiple-versions = "warn" # Lint level for when a crate version requirement is `*` wildcards = "deny" # The graph highlighting used when creating dotgraphs for crates # with multiple versions # * lowest-version - The path to the lowest versioned duplicate is highlighted # * simplest-path - The path to the version with the fewest edges is highlighted # * all - Both lowest-version and simplest-path are used highlight = "all" # List of crates that are allowed. Use with care! allow = [ #{ name = "ansi_term", version = "=0.11.0" }, ] # List of crates to deny deny = [ # Each entry the name of a crate and a version range. If version is # not specified, all versions will be matched. #{ name = "ansi_term", version = "=0.11.0" }, # # Wrapper crates can optionally be specified to allow the crate when it # is a direct dependency of the otherwise banned crate #{ name = "ansi_term", version = "=0.11.0", wrappers = [] }, ] # Certain crates/versions that will be skipped when doing duplicate detection. skip = [ #{ name = "ansi_term", version = "=0.11.0" }, ] # Similarly to `skip` allows you to skip certain crates during duplicate # detection. Unlike skip, it also includes the entire tree of transitive # dependencies starting at the specified crate, up to a certain depth, which is # by default infinite skip-tree = [ #{ name = "ansi_term", version = "=0.11.0", depth = 20 }, ] # This section is considered when running `cargo deny check sources`. # More documentation about the 'sources' section can be found here: # https://embarkstudios.github.io/cargo-deny/checks/sources/cfg.html [sources] # Lint level for what to happen when a crate from a crate registry that is not # in the allow list is encountered unknown-registry = "warn" # Lint level for what to happen when a crate from a git repository that is not # in the allow list is encountered unknown-git = "warn" # List of URLs for allowed crate registries. Defaults to the crates.io index # if not specified. If it is specified but empty, no registries are allowed. allow-registry = ["https://github.com/rust-lang/crates.io-index"] # List of URLs for allowed Git repositories allow-git = [] [sources.allow-org] # 1 or more github.com organizations to allow git sources for #github = [""] # 1 or more gitlab.com organizations to allow git sources for #gitlab = [""] # 1 or more bitbucket.org organizations to allow git sources for #bitbucket = [""] sequoia-wot-0.11.0/doc/identify_felixonmars.svg000064400000000000000000000702471046102023000177020ustar 00000000000000 cluster_0 cluster_1 cluster_2 cluster_3 cluster_4 cluster_5 cluster_6 cluster_7 Graph legend B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@archlinux.org> Felix Yan <felixonmars@archlinux.org> (500%) B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@163.com> Felix Yan <felixonmars@163.com> (100%) B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@archlinuxcn.org> Felix Yan <felixonmars@archlinuxcn.org> (100%) B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@gmail.com> Felix Yan <felixonmars@gmail.com> (100%) B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@nyaa.cat> Felix Yan <felixonmars@nyaa.cat> (100%) B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixyan@bbtechgroup.com> Felix Yan <felixyan@bbtechgroup.com> (100%) B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <i@felixc.at> Felix Yan <i@felixc.at> (100%) B5971F2C5C10A9A08C60030F786C63F330D7CB92_Yan, Ran (Name on Passport) <felixonmars@gmail.com> Yan, Ran (Name on Passport) <felixonmars@gmail.com> (100%) B5971F2C5C10A9A08C60030F786C63F330D7CB92_keybase.io/felixonmars <felixonmars@keybase.io> keybase.io/felixonmars <felixonmars@keybase.io> (100%) B5971F2C5C10A9A08C60030F786C63F330D7CB92 B5971F2C5C10A9A08C60030F786C63F330D7CB92 91FFE0700E80619CEB73235CA88E23E377514E00_Florian Pritz (Arch Linux Master Key) <florian@master-key.archlinux.org> Florian Pritz (Arch Linux Master Key) <florian@master-key.archlinux.org> 91FFE0700E80619CEB73235CA88E23E377514E00 91FFE0700E80619CEB73235CA88E23E377514E00 91FFE0700E80619CEB73235CA88E23E377514E00->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@archlinux.org> certified on 2015-12-23 91FFE0700E80619CEB73235CA88E23E377514E00->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@163.com> certified on 2015-12-23 91FFE0700E80619CEB73235CA88E23E377514E00->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@archlinuxcn.org> certified on 2015-12-23 91FFE0700E80619CEB73235CA88E23E377514E00->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@gmail.com> certified on 2015-12-23 91FFE0700E80619CEB73235CA88E23E377514E00->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@nyaa.cat> certified on 2015-12-23 91FFE0700E80619CEB73235CA88E23E377514E00->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixyan@bbtechgroup.com> certified on 2015-12-23 91FFE0700E80619CEB73235CA88E23E377514E00->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <i@felixc.at> certified on 2015-12-23 91FFE0700E80619CEB73235CA88E23E377514E00->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Yan, Ran (Name on Passport) <felixonmars@gmail.com> certified on 2015-12-23 91FFE0700E80619CEB73235CA88E23E377514E00->B5971F2C5C10A9A08C60030F786C63F330D7CB92_keybase.io/felixonmars <felixonmars@keybase.io> certified on 2015-12-23 D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C_Levente Polyak (Arch Linux Master Key) <anthraxx@master-key.archlinux.org> Levente Polyak (Arch Linux Master Key) <anthraxx@master-key.archlinux.org> D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@archlinux.org> certified on 2018-12-09 75BD80E4D834509F6E740257B1B73B02CC52A02A_Jonas Witschel (Arch Linux Master Key) <diabonas@master-key.archlinux.org> Jonas Witschel (Arch Linux Master Key) <diabonas@master-key.archlinux.org> 75BD80E4D834509F6E740257B1B73B02CC52A02A 75BD80E4D834509F6E740257B1B73B02CC52A02A 75BD80E4D834509F6E740257B1B73B02CC52A02A->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@archlinux.org> certified on 2022-07-17 69E6471E3AE065297529832E6BA0F5A2037F4F41_Johannes Löthberg (Arch Linux Master Key) <demize@master-key.archlinux.org> Johannes Löthberg (Arch Linux Master Key) <demize@master-key.archlinux.org> 69E6471E3AE065297529832E6BA0F5A2037F4F41 69E6471E3AE065297529832E6BA0F5A2037F4F41 69E6471E3AE065297529832E6BA0F5A2037F4F41->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@archlinux.org> certified on 2022-11-30 2AC0A42EFB0B5CBC7A0402ED4DC95B6D7BE9892E_David Runge (Arch Linux Master Key) <dvzrv@master-key.archlinux.org> David Runge (Arch Linux Master Key) <dvzrv@master-key.archlinux.org> 2AC0A42EFB0B5CBC7A0402ED4DC95B6D7BE9892E 2AC0A42EFB0B5CBC7A0402ED4DC95B6D7BE9892E 2AC0A42EFB0B5CBC7A0402ED4DC95B6D7BE9892E->B5971F2C5C10A9A08C60030F786C63F330D7CB92_Felix Yan <felixonmars@archlinux.org> certified on 2021-10-11 Trust root Trust root Intermediate introducer Intermediate introducer Authenticated target Authenticated target Unauthenticated target Unauthenticated target target trust amount: 416% target trust amount: 416% sequoia-wot-0.11.0/doc/list_kernel_keyring.svg000064400000000000000000001562061046102023000175230ustar 00000000000000 cluster_0 cluster_1 cluster_2 cluster_3 cluster_4 cluster_5 cluster_6 cluster_7 cluster_8 cluster_9 cluster_10 cluster_11 cluster_12 cluster_13 cluster_14 cluster_15 cluster_16 cluster_17 Graph legend 2079C80A45FEBD9BA0951AF2CB2312E1ECF73F57_Moritz Fischer <mdf@kernel.org> Moritz Fischer <mdf@kernel.org> (100%) 2079C80A45FEBD9BA0951AF2CB2312E1ECF73F57 2079C80A45FEBD9BA0951AF2CB2312E1ECF73F57 CA30110FD5285DE49BB238CD17212997986C5765_Benson Leung (kernel.org) <bleung@kernel.org> Benson Leung (kernel.org) <bleung@kernel.org> CA30110FD5285DE49BB238CD17212997986C5765 CA30110FD5285DE49BB238CD17212997986C5765 CA30110FD5285DE49BB238CD17212997986C5765->2079C80A45FEBD9BA0951AF2CB2312E1ECF73F57_Moritz Fischer <mdf@kernel.org> certified on 2019-06-26 36C6A1367D6F2126534162C682704BBB30DDCBC6_Tzung-Bi Shih (Google work) <tzungbi@google.com> Tzung-Bi Shih (Google work) <tzungbi@google.com> (100%) CA30110FD5285DE49BB238CD17212997986C5765->36C6A1367D6F2126534162C682704BBB30DDCBC6_Tzung-Bi Shih (Google work) <tzungbi@google.com> certified on 2022-02-14 36C6A1367D6F2126534162C682704BBB30DDCBC6_Tzung-Bi Shih (Personal 2) <tzungbi@gmail.com> Tzung-Bi Shih (Personal 2) <tzungbi@gmail.com> (100%) CA30110FD5285DE49BB238CD17212997986C5765->36C6A1367D6F2126534162C682704BBB30DDCBC6_Tzung-Bi Shih (Personal 2) <tzungbi@gmail.com> certified on 2022-02-14 36C6A1367D6F2126534162C682704BBB30DDCBC6_Tzung-Bi Shih (Personal) <penvirus@gmail.com> Tzung-Bi Shih (Personal) <penvirus@gmail.com> (100%) CA30110FD5285DE49BB238CD17212997986C5765->36C6A1367D6F2126534162C682704BBB30DDCBC6_Tzung-Bi Shih (Personal) <penvirus@gmail.com> certified on 2022-02-14 3E46049A87496A351921CAEDD89D81132578E73D_Stephen Boyd <bebarino@gmail.com> Stephen Boyd <bebarino@gmail.com> (100%) CA30110FD5285DE49BB238CD17212997986C5765->3E46049A87496A351921CAEDD89D81132578E73D_Stephen Boyd <bebarino@gmail.com> certified on 2019-05-17 3E46049A87496A351921CAEDD89D81132578E73D_Stephen Boyd <sboyd@kernel.org> Stephen Boyd <sboyd@kernel.org> (100%) CA30110FD5285DE49BB238CD17212997986C5765->3E46049A87496A351921CAEDD89D81132578E73D_Stephen Boyd <sboyd@kernel.org> certified on 2019-05-17 3E46049A87496A351921CAEDD89D81132578E73D_Stephen Boyd <swboyd@chromium.org> Stephen Boyd <swboyd@chromium.org> (100%) CA30110FD5285DE49BB238CD17212997986C5765->3E46049A87496A351921CAEDD89D81132578E73D_Stephen Boyd <swboyd@chromium.org> certified on 2019-05-17 7DB9B58F4A107ACC525AC3B57EF4F96F2BE9962A_Dmitry Torokhov <dtor@kernel.org> Dmitry Torokhov <dtor@kernel.org> (100%) CA30110FD5285DE49BB238CD17212997986C5765->7DB9B58F4A107ACC525AC3B57EF4F96F2BE9962A_Dmitry Torokhov <dtor@kernel.org> certified on 2019-05-17 82F5AC96733EA94CBEB20560E67D96630E933C10_Micah Morton <mortonm@chromium.org> Micah Morton <mortonm@chromium.org> (100%) CA30110FD5285DE49BB238CD17212997986C5765->82F5AC96733EA94CBEB20560E67D96630E933C10_Micah Morton <mortonm@chromium.org> certified on 2019-05-16 82F5AC96733EA94CBEB20560E67D96630E933C10_Micah Morton <mortonm@google.com> Micah Morton <mortonm@google.com> (100%) CA30110FD5285DE49BB238CD17212997986C5765->82F5AC96733EA94CBEB20560E67D96630E933C10_Micah Morton <mortonm@google.com> certified on 2019-05-16 F51DFD864C136816E7B57F0E858D892E300DB03F_Prashant Malani <p.malani@gmail.com> Prashant Malani <p.malani@gmail.com> (100%) CA30110FD5285DE49BB238CD17212997986C5765->F51DFD864C136816E7B57F0E858D892E300DB03F_Prashant Malani <p.malani@gmail.com> certified on 2021-09-09 F51DFD864C136816E7B57F0E858D892E300DB03F_Prashant Malani <pmalani@chromium.org> Prashant Malani <pmalani@chromium.org> (100%) CA30110FD5285DE49BB238CD17212997986C5765->F51DFD864C136816E7B57F0E858D892E300DB03F_Prashant Malani <pmalani@chromium.org> certified on 2021-09-09 F51DFD864C136816E7B57F0E858D892E300DB03F_Prashant Malani <pmalani@google.com> Prashant Malani <pmalani@google.com> (100%) CA30110FD5285DE49BB238CD17212997986C5765->F51DFD864C136816E7B57F0E858D892E300DB03F_Prashant Malani <pmalani@google.com> certified on 2021-09-09 36C6A1367D6F2126534162C682704BBB30DDCBC6 36C6A1367D6F2126534162C682704BBB30DDCBC6 3E46049A87496A351921CAEDD89D81132578E73D 3E46049A87496A351921CAEDD89D81132578E73D 41F7B31A929D0CDB5FF03D017B87A618123D80DB_Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Sergey Senozhatsky <sergey.senozhatsky@gmail.com> (100%) 41F7B31A929D0CDB5FF03D017B87A618123D80DB 41F7B31A929D0CDB5FF03D017B87A618123D80DB 647F28654894E3BD457199BE38DBBDC86092693E_Greg Kroah-Hartman <gregkh@kernel.org> Greg Kroah-Hartman <gregkh@kernel.org> 647F28654894E3BD457199BE38DBBDC86092693E_Greg Kroah-Hartman <gregkh@linuxfoundation.org> Greg Kroah-Hartman <gregkh@linuxfoundation.org> 647F28654894E3BD457199BE38DBBDC86092693E 647F28654894E3BD457199BE38DBBDC86092693E 647F28654894E3BD457199BE38DBBDC86092693E->41F7B31A929D0CDB5FF03D017B87A618123D80DB_Sergey Senozhatsky <sergey.senozhatsky@gmail.com> certified on 2020-05-05 7F3D64824AC0B6B8009E50504BC0896FB5693595_Harald Hoyer <harald@hoyer.xyz> Harald Hoyer <harald@hoyer.xyz> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->7F3D64824AC0B6B8009E50504BC0896FB5693595_Harald Hoyer <harald@hoyer.xyz> certified on 2020-03-27 7F3D64824AC0B6B8009E50504BC0896FB5693595_Harald Hoyer <harald@redhat.com> Harald Hoyer <harald@redhat.com> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->7F3D64824AC0B6B8009E50504BC0896FB5693595_Harald Hoyer <harald@redhat.com> certified on 2020-03-27 92645A857052BAB30883562F4705B4CB4706DB31_Gustavo A. R. Silva <gustavo@embeddedor.com> Gustavo A. R. Silva <gustavo@embeddedor.com> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->92645A857052BAB30883562F4705B4CB4706DB31_Gustavo A. R. Silva <gustavo@embeddedor.com> certified on 2019-01-17 A1EA0673EAD8B74F17D2B9E17C31E21A98D21E0D_Hans de Goede <hdegoede@redhat.com> Hans de Goede <hdegoede@redhat.com> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->A1EA0673EAD8B74F17D2B9E17C31E21A98D21E0D_Hans de Goede <hdegoede@redhat.com> certified on 2020-09-08 B3CF9C1533BE75299CB01D362DFBF4523E542FD9_Will Deacon <will@arm64.dev> Will Deacon <will@arm64.dev> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->B3CF9C1533BE75299CB01D362DFBF4523E542FD9_Will Deacon <will@arm64.dev> certified on 2019-05-21 B3CF9C1533BE75299CB01D362DFBF4523E542FD9_Will Deacon <will@kernel.org> Will Deacon <will@kernel.org> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->B3CF9C1533BE75299CB01D362DFBF4523E542FD9_Will Deacon <will@kernel.org> certified on 2019-05-21 B6ACBF1CE9558A22EC4D649FD052EC8D6F0CCF55_Julia Lawall <Julia.Lawall@inria.fr> Julia Lawall <Julia.Lawall@inria.fr> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->B6ACBF1CE9558A22EC4D649FD052EC8D6F0CCF55_Julia Lawall <Julia.Lawall@inria.fr> certified on 2019-10-11 B6ACBF1CE9558A22EC4D649FD052EC8D6F0CCF55_Julia Lawall <Julia.Lawall@lip6.fr> Julia Lawall <Julia.Lawall@lip6.fr> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->B6ACBF1CE9558A22EC4D649FD052EC8D6F0CCF55_Julia Lawall <Julia.Lawall@lip6.fr> certified on 2019-10-11 D42657F65BEB9D45A004FCFAA6CD9F096F642CB3_Alexandre Belloni (Free Electrons) <alexandre.belloni@free-electrons.com> Alexandre Belloni (Free Electrons) <alexandre.belloni@free-electrons.com> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->D42657F65BEB9D45A004FCFAA6CD9F096F642CB3_Alexandre Belloni (Free Electrons) <alexandre.belloni@free-electrons.com> certified on 2019-09-23 D42657F65BEB9D45A004FCFAA6CD9F096F642CB3_Alexandre Belloni <abelloni@kernel.org> Alexandre Belloni <abelloni@kernel.org> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->D42657F65BEB9D45A004FCFAA6CD9F096F642CB3_Alexandre Belloni <abelloni@kernel.org> certified on 2019-09-23 D42657F65BEB9D45A004FCFAA6CD9F096F642CB3_Alexandre Belloni <alexandre.belloni@bootlin.com> Alexandre Belloni <alexandre.belloni@bootlin.com> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->D42657F65BEB9D45A004FCFAA6CD9F096F642CB3_Alexandre Belloni <alexandre.belloni@bootlin.com> certified on 2019-09-23 D42657F65BEB9D45A004FCFAA6CD9F096F642CB3_Alexandre Belloni <alexandre.belloni@piout.net> Alexandre Belloni <alexandre.belloni@piout.net> (100%) 647F28654894E3BD457199BE38DBBDC86092693E->D42657F65BEB9D45A004FCFAA6CD9F096F642CB3_Alexandre Belloni <alexandre.belloni@piout.net> certified on 2019-09-23 7DB9B58F4A107ACC525AC3B57EF4F96F2BE9962A 7DB9B58F4A107ACC525AC3B57EF4F96F2BE9962A 7F3D64824AC0B6B8009E50504BC0896FB5693595 7F3D64824AC0B6B8009E50504BC0896FB5693595 82F5AC96733EA94CBEB20560E67D96630E933C10 82F5AC96733EA94CBEB20560E67D96630E933C10 92645A857052BAB30883562F4705B4CB4706DB31 92645A857052BAB30883562F4705B4CB4706DB31 A1EA0673EAD8B74F17D2B9E17C31E21A98D21E0D A1EA0673EAD8B74F17D2B9E17C31E21A98D21E0D ABAF11C65A2970B130ABE3C479BE3E4300411886_Linus Torvalds <torvalds@kernel.org> Linus Torvalds <torvalds@kernel.org> ABAF11C65A2970B130ABE3C479BE3E4300411886 ABAF11C65A2970B130ABE3C479BE3E4300411886 B3CF9C1533BE75299CB01D362DFBF4523E542FD9 B3CF9C1533BE75299CB01D362DFBF4523E542FD9 B6ACBF1CE9558A22EC4D649FD052EC8D6F0CCF55 B6ACBF1CE9558A22EC4D649FD052EC8D6F0CCF55 D42657F65BEB9D45A004FCFAA6CD9F096F642CB3 D42657F65BEB9D45A004FCFAA6CD9F096F642CB3 F51DFD864C136816E7B57F0E858D892E300DB03F F51DFD864C136816E7B57F0E858D892E300DB03F Trust root Trust root Intermediate introducer Intermediate introducer Authenticated target Authenticated target Unauthenticated target Unauthenticated target target trust amount: 100% target trust amount: 100% sequoia-wot-0.11.0/doc/lookup_dvzrv.svg000064400000000000000000000450531046102023000162210ustar 00000000000000 cluster_0 cluster_1 cluster_2 cluster_3 cluster_4 cluster_5 cluster_6 cluster_7 cluster_8 Graph legend 991F6E3F0765CF6295888586139B09DA5BF0D338_David Runge <dvzrv@archlinux.org> David Runge <dvzrv@archlinux.org> (500%) 991F6E3F0765CF6295888586139B09DA5BF0D338 991F6E3F0765CF6295888586139B09DA5BF0D338 D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C_Levente Polyak (Arch Linux Master Key) <anthraxx@master-key.archlinux.org> Levente Polyak (Arch Linux Master Key) <anthraxx@master-key.archlinux.org> D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C->991F6E3F0765CF6295888586139B09DA5BF0D338_David Runge <dvzrv@archlinux.org> certified on 2022-08-02 C7E7849466FE2358343588377258734B41C31549_David Runge <dvzrv@archlinux.org> David Runge <dvzrv@archlinux.org> (300%) D8AFDDA07A5B6EDFA7D8CCDAD6D055F927843F1C->C7E7849466FE2358343588377258734B41C31549_David Runge <dvzrv@archlinux.org> certified on 2019-10-17 91FFE0700E80619CEB73235CA88E23E377514E00_Florian Pritz (Arch Linux Master Key) <florian@master-key.archlinux.org> Florian Pritz (Arch Linux Master Key) <florian@master-key.archlinux.org> 91FFE0700E80619CEB73235CA88E23E377514E00 91FFE0700E80619CEB73235CA88E23E377514E00 91FFE0700E80619CEB73235CA88E23E377514E00->991F6E3F0765CF6295888586139B09DA5BF0D338_David Runge <dvzrv@archlinux.org> certified on 2022-06-05 91FFE0700E80619CEB73235CA88E23E377514E00->C7E7849466FE2358343588377258734B41C31549_David Runge <dvzrv@archlinux.org> certified on 2019-10-06 75BD80E4D834509F6E740257B1B73B02CC52A02A_Jonas Witschel (Arch Linux Master Key) <diabonas@master-key.archlinux.org> Jonas Witschel (Arch Linux Master Key) <diabonas@master-key.archlinux.org> 75BD80E4D834509F6E740257B1B73B02CC52A02A 75BD80E4D834509F6E740257B1B73B02CC52A02A 75BD80E4D834509F6E740257B1B73B02CC52A02A->991F6E3F0765CF6295888586139B09DA5BF0D338_David Runge <dvzrv@archlinux.org> certified on 2022-07-09 69E6471E3AE065297529832E6BA0F5A2037F4F41_Johannes Löthberg (Arch Linux Master Key) <demize@master-key.archlinux.org> Johannes Löthberg (Arch Linux Master Key) <demize@master-key.archlinux.org> 69E6471E3AE065297529832E6BA0F5A2037F4F41 69E6471E3AE065297529832E6BA0F5A2037F4F41 69E6471E3AE065297529832E6BA0F5A2037F4F41->991F6E3F0765CF6295888586139B09DA5BF0D338_David Runge <dvzrv@archlinux.org> certified on 2022-11-29 2AC0A42EFB0B5CBC7A0402ED4DC95B6D7BE9892E_David Runge (Arch Linux Master Key) <dvzrv@master-key.archlinux.org> David Runge (Arch Linux Master Key) <dvzrv@master-key.archlinux.org> 2AC0A42EFB0B5CBC7A0402ED4DC95B6D7BE9892E 2AC0A42EFB0B5CBC7A0402ED4DC95B6D7BE9892E 2AC0A42EFB0B5CBC7A0402ED4DC95B6D7BE9892E->991F6E3F0765CF6295888586139B09DA5BF0D338_David Runge <dvzrv@archlinux.org> certified on 2022-05-19 2AC0A42EFB0B5CBC7A0402ED4DC95B6D7BE9892E->C7E7849466FE2358343588377258734B41C31549_David Runge <dvzrv@archlinux.org> certified on 2021-06-05 C7E7849466FE2358343588377258734B41C31549 C7E7849466FE2358343588377258734B41C31549 Trust root Trust root Intermediate introducer Intermediate introducer Authenticated target Authenticated target Unauthenticated target Unauthenticated target target trust amount: 416% target trust amount: 416% sequoia-wot-0.11.0/doc/release-checklist.md000064400000000000000000000032301046102023000166340ustar 00000000000000This is a checklist for doing releases. 1. Start from origin/main, create a branch `staging` 1. Bump the version in Cargo.toml to XXX. 1. Bump the version in README.md to XXX. 1. Update dependencies and run tests. - Use the exact Rust toolchain version of the current Sequoia MSRV (refer to `README.md`): `rustup default 1.xx` - Update the dependencies and run the tests: ``` cargo update cargo build --release --features sequoia-openpgp/crypto-nettle cargo test --release --features sequoia-openpgp/crypto-nettle cargo doc --no-deps --release --features sequoia-openpgp/crypto-nettle ``` - If some dependency is updated and breaks due to our MSRV, find a good version of that dependency and select it using e.g. `cargo update -p backtrace --precise 3.46`. 1. Make a commit with the message `Release XXX.`. - Push this to gitlab as `staging`, create a merge request, wait for CI. 1. Make sure `cargo publish` works: - `mkdir /tmp/sequoia-wot-staging` - `cd /tmp/sequoia-wot-staging` - `git clone git@gitlab.com:sequoia-pgp/sequoia-wot.git` - `cd sequoia-wot` - `git checkout origin/staging` - `cargo publish --dry-run --features sequoia-openpgp/crypto-nettle` 1. Wait until CI and `cargo publish --dry-run` are successful. In case of errors, correct them, and go back to the step creating the release commit. 1. Merge the merge request 1. Run `cargo publish` 1. Make a tag `vXXX` with the message `Release XXX.` signed with an offline key, which has been certified by our `openpgp-ca@sequoia-pgp.org` key. 1. Push the signed tag `vXXX`. sequoia-wot-0.11.0/spec/.gitignore000064400000000000000000000000501046102023000150750ustar 00000000000000/.refcache /draft-*.* /metadata.min.js sequoia-wot-0.11.0/spec/Makefile000064400000000000000000000010001046102023000145410ustar 00000000000000#!/usr/bin/make -f # dependencies: # apt install weasyprint xml2rfc ruby-kramdown-rfc2629 draft = draft-sequoia-wot OUTPUT = $(draft).txt $(draft).html $(draft).xml $(draft).pdf all: $(OUTPUT) %.xmlv2: sequoia-wot.md kramdown-rfc2629 < $< > $@.tmp mv $@.tmp $@ %.xml: %.xmlv2 xml2rfc --v2v3 $< -o $@ %.html: %.xml xml2rfc $< --html -o $@ %.txt: %.xml xml2rfc $< --text -o $@ %.pdf: %.xml xml2rfc $< --pdf -o $@ clean: -rm -rf $(OUTPUT) $(draft).xmlv2 .PRECIOUS: $(draft).xmlv2 .PHONY: clean all sequoia-wot-0.11.0/spec/sequoia-wot.md000064400000000000000000001073101046102023000157130ustar 00000000000000--- title: OpenPGP Web of Trust docname: draft-nhw-web-of-trust-00 date: 2022-02-03 category: info ipr: trust200902 area: int workgroup: openpgp keyword: Internet-Draft stand_alone: yes pi: [toc, sortrefs, symrefs] author: - ins: N.H. Walfield name: Neal H. Walfield org: Sequoia PGP email: neal@sequoia-pgp.org normative: RFC2119: RFC4880: RFC8174: --- abstract The web of trust is a flexible, decentralized trust model created for PGP. PGP and GnuPG include implementations of the web of trust, and OpenPGP defines a number of authentication mechanisms that form the basis of both implementations. Unfortunately, PGP and GnuPG implement different semantics, neither documents their semantics, and OpenPGP does not specify how a web of trust implementation should work. This draft defines the semantics of the web of trust as implemented by Sequoia. Sequoia models the web of trust as a flow network, and authentication as a maximum flow problem. Although its semantics differ from both PGP's and GnuPG's semantics, in practice, it is largely compatible with both implementations. By publishing this draft we hope to save developers of other OpenPGP implementations the time needed to design and specify a web of trust algorithm, and we hope to increase interoperability. --- middle # Introduction ## Requirements Language The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 {{RFC2119}} {{RFC8174}} when, and only when, they appear in all capitals, as shown here. ## Terminology - "OpenPGP certificate" or just "certificate" is the data structure that section 11.2 of {{RFC4880}} defines as a "Transferable Public Key". A certificate is sometimes called a key, but this is confusing, because a certificate contains components that are also called keys. - "User ID" is an OpenPGP packet. In this document, this term also encompasses OpenPGP's "User Attribute" packets. A User ID contains an identifier, which is typically a name and an email address. - "Binding" is a tuple consisting of a certificate and a User ID. - "Self signature" is a cryptographic signature that associates some data, e.g., a User ID or a subkey, with the signing certificate. - "Self certification" is a self signature over a User ID. - "Third-party certification" is a cryptographic signature that associates a User ID with a certificate different from the one doing the signing. A third-party certification is a type of vouch. - "Certification" is either a self certification or a third-party certification of a binding. - "Delegation" is like a certification, but it only certifies a certificate; it does not also certify a User ID. A delegation is used to indicate that certifications and delegations made by the target certificate should be considered valid. - "Trust root" is a certificate that the user directly relies on to make certifications and delegations. "Trust anchor" is another name for "trust root". - "Trusted introducer" or "certification authority" or "CA" is a certificate that is authorized to make certifications, and may be authorized to make delegations. Trust roots and the target of delegations are trusted introducers. - "Scope" is a set of constraints. - "In scope" is a property of a certificate, certification, User ID, etc. which holds if all constraints on it are satisfied. - "Liveness" is a property of a certificate, a certification, etc. An object is considered live with respect to some reference time if, as of the reference time, its creation time is in the past, and it has not expired. - "Authentication" is the process of determining whether a binding should be considered authentic. - "Trust model" is a process for doing authentication. - "Web of trust" is a decentralized trust model, which was created for PGP. - "X.509" is a hierarchical trust model. It is the most popular trust model used on the public Internet. It is a subset of the web of trust. # Problem Statement The web of trust was designed for grass root activists who are not always willing to trust a central authority, and whose trust roots and certifications may be private. This is different from X.509, which largely assumes that there are a handful of globally trusted roots, and certifications are public. Authentication in X.509 is relatively straightforward. A certificate normally includes a trust chain, which is anchored at a well-known trust root. Thus, authentication in X.509 means validating a trust chain. In the web of trust, every user has their own set of roots, and certifications may not be public. So, authentication in the web of trust means building a certification network using the information that is available locally, and then finding a valid path from the user's trust roots to the binding. Since users need not unconditionally trust a certification authority, it may be necessary to find and combine multiple paths to have sufficient evidence to authenticate a binding. This draft specifies a path finding algorithm for a web of trust using the mechanisms specified by {{RFC4880}}. Insofar as authentication mechanisms are specified by {{RFC4880}}, they are used accordingly in this draft. {{RFC4880}}, however, leaves many details unspecified including but not limited to: how to handle different Trust Signatures by the same issuer on multiple User IDs on the same certificate; the semantics of a Trust Signature on a third-party direct-key signature; and whether regular expressions need to match certifications of trusted introducers. This draft fills in the missing details. The web of trust is a network in which the nodes are certificates, and the edges are certifications. Because a certificate may certify multiple User IDs on the same certificate, a network may include multi edges. We view the network as a [flow network] in which an edge's capacity is the corresponding certification's trust amount. In this model, the trust amount parameter can be understood as an amount of evidence. We explicitly don't consider the trust amount to be a probability of correctness. First, humans are not good at reasoning about probability. Second, it is hard to reconcile this model with an adversary who does not make mistakes, but lies when it is to their advantage. [flow network]: https://en.wikipedia.org/wiki/Flow_network Using this model, authenticating a binding is a question of finding a flow from a set of trust roots to the binding with sufficient capacity. Unfortunately, OpenPGP certifications can impose constraints on the rest of the path. This means that most path finding algorithms cannot be used as-is. This draft describes how to use a variant of [Dijkstra's shortest path algorithm] to do path finding in this type of network. # OpenPGP's Authentication Mechanisms OpenPGP provides four simple, yet powerful and flexible mechanisms to facilitate authentication. These are [third-party certifications], a [trust amount] parameter, a [trust depth] parameter, and a [regular expression] parameter. This section describes the semantics that this specification assigns to these mechanisms. This specification explicitly ignores the [Signer's User ID] subpacket, which is not meaningful for authentication. [third-party certifications]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.1 [trust amount]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.3.13 [trust depth]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.3.13 [regular expression]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.3.14 [Signer's User ID]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.3.22 ## Certifications and Delegations A certification is a special type of OpenPGP Signature packet. It says that the issuer is convinced that the specified binding (User ID and certificate) is correct. When the issuer and the target certificate are the same, the certification is called a self signature or self certification. Otherwise, the certification is referred to as a third-party certification. OpenPGP distinguishes four types of certifications (signature types 0x10 through 0x13). This specification treats all of these signature types identically. In common practice, a persona certification (signature type 0x11) is often treated as an invalid certification. This specification ignores this distinction. It is possible to certify a certificate without also certifying a User ID by using a direct key signature (signature type 0x1F) over the primary key of the signature. This specification refers to such certifications as delegations. If the trust depth parameter (described below) is non-zero, this means that the target certificate should be treated as a trusted introducer. ## Trust Amount The `trust amount` parameter is controlled by the [Trust Signature] subpacket. It is the degree to which the issuer of a certification is convinced that the binding is correct. This can vary from 0 to 255. Values that are 120 or larger mean that the issuer is fully convinced. Traditionally, an issuer uses 60 to indicate that they are partially (aka marginally) convinced, however, any value between 1 and 119 can be used. A value of 0 means that the target should not be considered as certified. A certification whose trust amount is 0 should not be ignored: it overrides earlier certifications. If edges along a path have different trust amounts, then the path's trust amount is the minimum trust amount of any of the edges. Consider the following network: ~~~text alice | 1/60 v bob | 120 v carol ~~~ alice says that bob is a partially trusted (`trust amount = 60`) trusted introducer (`trust depth = 1`). Even though bob has certified carol's key with a trust amount of 120, alice only assigns the path `alice - bob - carol` a trust amount of 60. This draft interprets trust amount as an amount of evidence. It assumes that evidence is independent and can be combined linearly. That is, if a trust root partially (`trust amount < 120`) trusts two certification authorities and they both certify a binding, the two paths can be added together. [Trust Signature]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.3.13 ## Trust Depth The `trust depth` parameter is controlled by the [Trust Signature] subpacket. It is used to indicate that a certification's target should be considered a trusted introducer. The trust depth parameter ranges from 0 to 255. A value of 0 means that this certification is just a normal certification, and the target is not a trusted introducer. A value of 1 means that the target is a trusted introducer. A value of 2 means that the target is a trusted introducer and can designate level 1 trusted introducers. In general, a value of `n` means that the target of a certification can designate level `n-1` trusted introducers. The value 255 is special and means infinity (i.e., it does not impose a constraint). If a certificate designates a level `n` trusted introducer, but it is only allowed to delegate level `m` trusted introducers where `m < n`, then the trust depth parameter is limited to `m`. ### Example Consider the following network where the number is the certification's trust depth parameter: ~~~text alice | 2/120 v bob | 2/120 v carol | 2/120 v dave | 2/120 v ed ~~~ alice certifies bob with a trust depth of 2. This means that she considers bob to be a trusted introducer and that he can designate level 1 trusted introducers. Likewise, bob certifies carol with a trust depth of 2. This means that he considers carol to be a trusted introducer and that she can designate level 1 trusted introducers. From alice's perspective, however, bob's certification of carol extends too much authority to carol: she has only allowed bob to designate level 1 trusted introducers, but bob has designated carol as a level 2 trusted introducer. Instead of ignoring certifications that extend too much authority, the trust depth of any certification is capped by constraints imposed by any preceding certifications in the path. So, in this case, alice is willing to consider carol to be a level 1 trusted introducer. carol certifies dave with a trust depth of 2. alice, however, only considers carol to be a level 1 trusted introducer. As with bob, carol's delegation is capped and, from alice's perspective, she is only allowed to certify other bindings. As such, alice considers dave's binding to be authenticated, but she does not consider him to be a trusted introducer. Finally, dave certifies ed with a trust depth of 2. Clearly, there is a path from alice to ed: `alice - bob - carol - dave - ed`. However, because alice does not consider dave to be a trusted introducer, this path is not valid, and alice does not consider ed to be authenticated. ## Regular Expressions The regular expression parameter controls the scope of a delegation. A certification can include zero or more regular expressions. If it includes at least one regular expression, then at least one of them MUST match the User ID of the binding that is being authenticated for the path to be valid. A regular expression does *not* need to match intermediate trusted introducers. ### Example Regular expressions are a mechanism for a user to make use of a CA in a limited way. For instance, ed might be willing to rely on `ca@nsa.gov` to certify other `nsa.gov` User IDs, but doesn't want to rely on `ca@nsa.gov` to make a statement about any other User IDs. Consider the following example in which the edges are labeled with the trust depth, trust amount, and optionally a domain, which corresponds to a regular expression that matches email addresses with that domain: ~~~text ed@lavabit.com | 255/120/nsa.gov v ca@nsa.gov | 1/120 v ca@fbi.gov | 0/120 v paul@nsa.gov ~~~ ed considers `ca@nsa.gov` to be a fully trusted (`trust amount = 120`) trusted introducer (`trust depth 255`) for User IDs that are in `nsa.gov`. `ca@nsa.gov` delegates to `ca@fbi.gov`, which has certified `paul@nsa.gov`. Even though the regular expression doesn't match the `ca@fbi.gov`, it does match the target User ID (`paul@nsa.gov`) so ed can authenticate `paul@nsa.gov`. ### Rationale A User ID identifies an entity. Because an entity may have multiple aliases or roles, it is reasonable and possible for a certificate to have multiple valid User IDs. A certification's trustworthiness depends not on an identity, but on the entity. If an entity acts in conflicting ways depending on their role, then this draft takes the position that either they should not be trusted, or they should have multiple certificates. # Authentication Authenticating a binding is a two-phase process. First, a network is built. Then, one or more paths starting at the trust roots and ending at the binding are located in the network. ## Network A web of trust network is built with respect to a reference time as follows: - A node is created for each non-revoked live certificate. - A node MAY be created for a revoked trust root, if the secret key material was not compromised. - A directed edge from the issuer to the target certificate is created for each non-revoked live certification and non-revoked live delegation. - Self certifications result in self loops. - If there are multiple live certifications for the same issuer and binding, or multiple live delegations for the same issuer and target certificate, then an edge is only created for the newest certifications or delegations. If there are multiple such certifications or delegations, then an edge is created for each one of them. - A third-party certification is valid even if the certified User ID does not have a self signature. - Edges are labeled with their certification's or delegation's parameters. In particular, edges are labelled with the trust amount, the trust depth, and any regular expressions. - If there is no trust amount, the trust amount defaults to 120. - If the trust amount exceeds 120, the trust amount is lowered to 120. - If there is no trust depth, the trust depth defaults to 0. - As an exception: self certifications always have a trust depth of 0. - The trust roots are set by the user. They are assigned an infinite trust depth, and a trust amount of 120. ## Certification Validity In addition to being well formed, and cryptographically valid, there are several additional conditions that must hold for a certification or delegation to be considered valid. These additional conditions are evaluated with respect to a reference time. Usually the reference time is the current time. However, when authenticating a signature, it may make sense to also consider a reference time in the past. Consider a signed message that Alice sent to Bob a while ago, and which Bob is reviewing today. Assume that at the time Bob received the message, Bob found a valid certification path to Alice's certificate, but that that path is no longer valid, because one or more certifications have since expired. In this case, Bob's implementation MAY evaluate the validity of Alice's certificate by falling back to the signature's creation time, but it SHOULD fallback to the the earliest time at which the signature was known to exist, e.g., the time the message was recorded on a trusted storage medium. Using the time that the message was recorded prevents an attacker from backdating a signature to make it appear valid. If a certificate can't be validated now, but can be validated in the past, then the user's implementation SHOULD signal the user that the certificate was valid in the past, but is not valid anymore. ~~~text o Alice signs a message and sends it to Bob | v o Bob receives message and validates Alice's certificate | v o A certification that Bob used to validate Alice's certificate expires | v o Bob reviews Alice's message ~~~ The additional constraints are: - The certification must be valid as of the reference time: - The certification's signature creation time (its Signature Creation Time signature subpacket), `c`, is not later than the reference time, `r`, i.e., `c <= r`. - The certification's expiration time (its Signature Expiration Time signature subpacket), `e`, if any, is after the reference time, `r`, i.e., `r < e`. - The certification has not been revoked either before the reference time or at any other time. - The certificate that issued the certification (the issuer) must be valid as of the certification time (the certification's Signature Creation Time signature subpacket): - The certificate's creation time (the primary key's Key Creation Time field), `c`, is not later than the reference time, `r`, i.e., `c <= r`. - The certificate's expiration time (the Key Expiration Time of the active binding signature as of the certification time), `e`, if any, is after the reference time, `r`, i.e., `r < e`. - If the certificate was revoked, and the reason for revocation was either 'Key is superseded' or 'Key is retired and no longer used' (reasons 0x1 and 0x3 in the Reason for Revocation signature subpacket), then the time the revocation was created (the revocation's Signature Creation Time's signature subpacket), `v`, is after the certification time, `c`, i.e., `c < v`. - The certificate was not revoked for any other reason at any time. - The target of the certification, the target certificate and the target User ID, if any, must be valid: - The target of the certification must be valid in the same way as the issuer of the certification, as described above. - If the target of the certification includes a User ID, i.e., the certification is being used as a certification and not a delegation, then to also be valid as a certification and not just a delegation, it must: - The target of the certification, must be valid in the same way as the issuer of the certification, as described above, but at the reference time. - The User ID must not be revoked as of the certification time. - The User ID must not be revoked as of the reference time. - Note: Unlike certificates and keys, User IDs do not have creation times, do not expire, and do not require a self signature to be considered valid. ## Authentication To authenticate a binding, it is necessary to find one or more valid paths from the roots to the binding in the network. A path is valid if it starts from a trust root, ends at the target certificate, the last edge is a certification over the target User ID, all certificates, certifications, and the target User ID are in scope (that is, any trust depth parameters are respected, and for each edge that has regular expressions, at last one regular expression matches the target User ID), and the target User ID is not revoked. Note: a self certification counts as an edge and thus is only in scope if the certificate is a trusted introducer. A path SHOULD be minimal in the sense that it should not have any cycles. A path's trust amount is the minimum trust amount of the trust amount of each edge in the path. Multiple paths can be combined if they use the same edge in any multi-edges. The trust amount of multiple paths is the [maximum flow] of the network induced by the paths. [maximum flow]: https://en.wikipedia.org/wiki/Maximum_flow_problem A binding is fully authenticated if the trust amount of the valid paths is at least 120. It is partially authenticated if the trust amount is between 1 and 119. # Implementation Strategy The following text is non-normative. It motivates and describes one possible implementation strategy, which satisfies the above constraints. An implementation is free to implement this draft as it sees fit. A simple algorithm to find the shortest path in a network is to enumerate all valid paths from the roots to the binding, and then select the best path. This algorithm is in NP (there are an exponential number of paths) however, and is thus only tractable for small networks. Path finding algorithms like [Dijkstra's shortest path algorithm] are more efficient. Dijkstra's algorithm computes a shortest-path tree (the shortest distance from one node to every other node in the network) while visiting each node and each edge at most once. Its run time is `O((N + E) * log(N))` where `N` is the number of nodes and `E` is the number of edges. In practice, this is fast even for large, highly connected graphs. [Dijkstra's shortest path algorithm]: https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm Unfortunately, Dijkstra's algorithm cannot be used as is. Dijkstra's algorithm assumes that edges do not impose constraints on the rest of the path. This is typically the case for a network of cities and roads. But, edges in a web of trust may have a finite trust depth, which may render some of the paths they are on invalid, and they may include regular expressions, which the target User ID has to match. Let's say that we are applying Dijkstra's algorithm to a network that looks like this: ~~~text root | v ... | | v v s t 2/120 \ / 3/60 v v u | v ... | v target ~~~ Say we are considering the edge `t - u`, and `u`'s current back pointer is `s - u`. At this point, we have to decide if we prefer the edge `s - u`, which has a trust depth of 2 and a trust amount of 120, or the edge `t - u`, which has a trust depth of 3 and a trust amount of 60. We need to get this decision right now. As explained above, Dijkstra's algorithm only visits each edge once, so we won't have a chance to try the alternative later. Unfortunately, neither `s - u` nor `t - u` is strictly better than the other. `s - u` has a larger trust amount, but `t - u` has a higher trust depth. Let's assume that we choose `s - u`, the edge with the higher trust amount. As we continue to apply Dijkstra's algorithm, we might find that the only paths to the target are too long for `s - u`'s trust depth. But now it is too late; we can't go back and revise our decision. More importantly, we can't even be sure that there is a valid path. With a few tricks, however, we can still use Dijkstra's algorithm. First, we need to limit the search from finding a shortest-path tree to finding a shortest path from a root to the target binding. Then we can easily satisfy any regular expression constraints by simply ignoring edges that have regular expressions that don't match the target User ID. Second, as shown above, a cost function that prefers edges with a higher trust amount does not always return a path when there is one. But, we can construct a cost function that always returns a path if there is one, and then use the [Ford Fulkerson algorithm] to find a maximum flow. (The Ford Fulkerson algorithm finds a path, computes a residual network by subtracting that path, and then loops until no paths remain.) In some situations, this may mean that we have more paths than strictly necessary. However, because we have to deal with multiple paths anyway as there is not always a single path that can authenticate a binding, this doesn't actually increase the complexity. [Ford Fulkerson algorithm]: https://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm We can actually do better than this. Through the use of a priority queue, Dijkstra's algorithm ensures that when a node is visited, the optimal path to that node is known. Thus, we know the constraints that a path will impose on the following node, and we can use that information to select the best edge. Consider again the above network. If the path leading to `t` constrains `t` to be a level 3 trusted introducer, then it doesn't matter that `t` certifies `u` to be a level 3 trusted introducer: the previous path limits `t`'s certification of `u` to be at most a level 2 trusted introducer. Thus, we can safely prefer the edge `s - u`, since it has the same effective trust depth. In fact, this isn't an optimization; we have to consider any path constraints. Otherwise, we may not find a path when there is a valid path. Imagine now that the path leading to `t` constraints `t` to be a level 2 trusted introducer. In this case, the edge `s - u` is strictly better (it's effective trust depth is greater), and preferring it may be necessary to find a valid path to the target. We recommend running the algorithm backwards, i.e., from the source towards the roots. We refer to this as backwards propagation. This has the advantage that we often don't have to explore as much of the network. Concretely, if the network is divided into multiple components, then only the component with the target needs to be explored. This is more often the case when working backwards, because we don't have to consider any paths via a root. Consider the following network: ~~~text root / \ v v left right / \ / \ v v v v ... ... ... ... ~~~ When running the algorithm forwards we start at the root and we need to explore the whole network. But when running the algorithm backwards we only need to explore the left side or the right side (and often less) as the root does not not connect the two sides. When using backwards propagation, we use the following cost function: given two path suffixes, we prefer the path suffix that is shorter. This guarantees that if there is a valid path, we will find it. If the two path suffixes are the same length, we prefer the one with the higher trust amount. When using backwards propagation, we sometimes come up with a better solution than when using forward propagation. Consider the following network: ~~~text root 255/120 | v a 255/1 / \ 2/120 v v b c 255/120 \ / 1/120 v v d | 120 v target ~~~ When using forward propagation (i.e., starting at root and working towards the target), we set `d`'s backpointer to `b`, because that path prefix is less constrained (via `b` the trust depth is unconstrained, but via `c`, `d` is only a level 1 trusted introducer). This means that we would find the path `root - a - b - d - target`, which has a trust amount of 1. Using backwards propagation (i.e., reversing the edges, starting at the target, and working towards the root), when visiting `a`, we would see that both possible path suffixes are valid, and the paths are the same length, so we'd choose the path via `c`, because its trust amount is higher. Thus, backwards propagation would find `root - a - c - d - target`, which has a trust amount of 120. But, forward propagation would perform better on this network: ~~~text root 3/120 | v a 2/120 / \ v | b | 1/60 1/120 \ / v v c | 120 v target ~~~ Finally, when using backwards propagation, we recommend not stopping when we visit a root. This is because our cost function does not actually optimize for what we really want to optimize for: we are interested in the valid path with the highest trust amount, but the cost function optimizes for the shortest, valid path. By not stopping when we reach a root, we open up the possibility that we find a longer path with a higher trust amount. ## Example Consider the following web of trust: ~~~text alice | 2/100 v bob 255/120 / \ v ` carol | 255/120 | | 0/30 v | dave , 0/120 \ / v v ed ~~~ Let's walk through authenticating ed with alice as the sole trusted root using the algorithm described above. Dijkstra's algorithm maintains two data structures: a priority queue of nodes that have not yet been visited ordered by their cost (best first); and, a list of back pointers. (Since we are reversing the direction, the back pointers are actually forward pointers in the original network, and that's how we name the variable below.) Initially the priority queue consists of the target. ~~~text queue = [ (ed; 0; 120) ]; forward_pointers = [ ]; ~~~ Each node in the queue includes the cost of the path suffix starting at that node. The cost is the path suffix's length and its trust amount. These values may be updated while the node is in the queue, but once the node is visited, they won't be updated further; at that point we've found the optimal path from that node to the target. We start with ed, and consider each certification made on ed: `dave - ed` and `bob - ed`. Say we start with `dave - ed` (the order doesn't matter). Since dave doesn't yet have a forward pointer, we set his forward pointer to ed and add dave to the queue. Then we consider `bob - ed`. Since bob also doesn't have a forward pointer, we also just set his forward pointer to ed, and we add him to the queue. ~~~text queue = [ (dave; 1; 120), (bob; 1; 30) ]; forward_pointers = [ (bob -> ed), (dave -> ed) ]; ~~~ Next, we pop the certificate with the best path suffix from the queue. Because bob's and dave's current paths are the same length (1), we compare the trust amount of each path suffix. dave's trust amount is 120 whereas bob's is only 30. So, we pop dave. dave is only certified by carol. Looking at carol, we see that she doesn't yet have a forward pointer so we set her forward pointer to dave, and we add carol to the queue. ~~~text queue = [ (bob; 1; 30), (carol; 2; 120) ]; forward_pointers = [ bob -> ed; carol -> dave; dave -> ed ]; ~~~ The queue now contains bob and carol. We prefer bob, because his current path is shorter (1 vs 2). bob is certified by alice. Since alice's forward pointer is empty, we set it to point to bob. We don't add alice to the queue, because alice is a root, and we don't consider paths via alice. And, as described above, although we would have a valid path when we visit alice, there may be a path with a higher trust amount, but is longer. ~~~text queue = [ (carol; 2; 120) ]; forward_pointers = [ alice -> bob; bob -> ed; carol -> dave; dave -> ed ]; ~~~ We now pop carol from the queue. carol is certified by bob. We compare bob's current path to the one via carol. - bob's current path: length: 1, amount: 30 - `bob - carol` + carol's current path: length: 3, amount: 120 We prefer the existing forward pointer because the path is shorter *even though the amount of trust is smaller*. If we had taken the longer path, then any forward pointers pointing to bob might become invalid. In fact, that is the case here: the edge `alice - bob` has a trust depth of 2, which means that `alice - bob - carol - dave - ed` is not valid. Thus, because we never replace an existing forward pointer with a forward pointer with a longer path, all forward pointers remain---by construction---valid. We don't add bob to the queue, because bob has already been visited. ~~~text queue = [ ]; forward_pointers = [ alice -> bob; bob -> ed; carol -> dave; dave -> ed ]; ~~~ Since the queue is empty, we must have visited every node reachable from ed. Now we just need to extract the path, which we do by looking at the forward pointers: the best path is `alice - bob - ed`. # Reference implementation A Rust implementation of this specification is part of Sequoia. See https://gitlab.com/sequoia-pgp/sequoia-wot for the source code. In practice, this algorithm is able to solve the web of trust problem within milliseconds even for large networks that include large cliques. # Security Concerns This specification assumes that certifications by different certificates are independent. This only holds if an entity has at most a single certificate. But, there are legitimate reasons for this not to be the case. For instance, a user may create a new certificate using newer algorithms, and not revoke their old certificate so that they can continue to communicate with people who use software that can only handle the older certificate. This can result in the following scenario: ~~~text alice 1/60 / \ 1/60 v v bob 1 bob 2 120 \ / 120 v v carol ~~~ Bob has two certificates and Alice certifies both of them as partially trusted introducers. Now any binding that bob signs with both certificates will be fully trusted by alice. This was not Alice's intent. Similarly, certifications that use similar verification methods are not actually independent. Consider two Let's Encrypt-like CAs for OpenPGP certificates. If both verify bindings using an email challenge, then the security of both largely relies on the same mechanism. Conceptually, it still makes sense to combine them if the CAs are in different trust domains, but the trust amounts should probably not simply be added together. One way to improve this situation would be to introduce a set of notations that allow the signer to indicate in a machine-readable way how a binding was verified. Then software could place limits on different types of authentication mechanisms, and better control how they combine. # Document Considerations \[ RFC Editor: please remove this section before publication ] This document is currently edited as markdown. Minor editorial changes can be suggested via merge requests at https://gitlab.com/sequoia-pgp/sequoia-wot or by e-mail to the authors. Please direct all significant commentary to the public IETF OpenPGP mailing list: openpgp@ietf.org ## Document History This is a first draft that has not been published. # Acknowledgements My thanks go---in particular, but not only---to Justus Winter, Daniel Kahn Gillmor, and Heiko Schaefer for many fruitful discussions about trust models, authentication, and OpenPGP. sequoia-wot-0.11.0/src/backward_propagation.rs000064400000000000000000002742171046102023000175130ustar 00000000000000use std::cmp::Ordering; use std::collections::HashMap; use std::collections::hash_map::Entry; use std::fmt; use sequoia_openpgp as openpgp; use openpgp::Fingerprint; use openpgp::packet::prelude::*; use sequoia_cert_store as cert_store; use cert_store::store::StoreError; use crate::Certification; use crate::FULLY_TRUSTED; use crate::network::filter::CertificationFilter; use crate::CertificationSet; use crate::Path; use crate::PriorityQueue; use crate::Query; use crate::store::Store; use super::TRACE; // A path's cost. // // This is needed to do a Dijkstra. #[derive(Debug, Eq, Clone)] struct Cost { // The path's depth (i.e., the number of hops to the target). // *Less* is better. depth: usize, // The trust amount along this path. More is better. amount: usize, } impl Ord for Cost { fn cmp(&self, other: &Self) -> Ordering { self.depth.cmp(&other.depth).reverse() .then(self.amount.cmp(&self.amount)) } } impl PartialOrd for Cost { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } impl PartialEq for Cost { fn eq(&self, other: &Self) -> bool { self.cmp(other) == Ordering::Equal } } // We perform a Dijkstra in reserve from the target towards the roots. #[derive(Clone)] struct ForwardPointer { // If None, then the target. next: Option, } impl fmt::Debug for ForwardPointer { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let mut x = f.debug_struct("ForwardPointer"); let x = if let Some(ref c) = self.next { x.field("next", &format!("{}", c.target())) } else { x.field("next", &"target") }; x.finish() } } impl<'a, S> Query<'a, S> where S: Store { /// Performs backward propagation from a binding towards all other /// nodes. /// /// If there is a path in the network from a node to the target, /// this algorithm will find it. However, because it prefers /// shorter paths to longer paths, the path may not be optimal in /// terms of the amount of trust. /// /// # Return Value /// /// This function returns a hash from certificate fingerprints to /// paths to the target. /// /// If `roots` is specified, then only the best path from each /// root to the target is returned. If `roots` is empty, then the /// best path from each certificates to the target is returned. /// /// # Algorithm /// /// This algorithm reverses the edges in the network and then /// executes a variant of [Dijkstra's shortest path algorithm]. /// The algorithm sets the initial node to be the target and works /// outwards. Consider the following network: /// /// ```text /// .--> C ... v /// ... --> A target /// `--> D ... ^ /// ``` /// /// When visiting a certificate (say, `C`), the algorithm /// considers each certification on it (`A -> C`). If prepending /// to the current path suffix (`C ... target`) results in a valid /// path suffix (`A - C ... target`), and the path suffix is /// better than the issuer's current path suffix (say `A - D /// ... target'), we update the issuer's forward pointer to use /// the new path suffix. /// /// [Dijkstra's shortest path algorithm]: https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm /// /// A certification is valid if it has any regular expressions and /// they match the target User ID. Further, the certification's /// depth must be sufficient for the current path suffix. If a /// certification certifies the target, then it must certify the /// target User ID. /// /// When comparing two forward pointers, the one with the shorter /// path is preferred. If the two forward pointers have the same /// trust amount, then the one with the larger trust amount is /// preferred. /// /// # Examples /// /// Consider the following network: /// /// ```text /// 120/255 /// C D /// _ o ------> o /// 120/255 /| \ 120/0 /// / _\| /// o --------------> o --------------> o /// A 100/2 B 30/0 E /// ``` /// /// The tuples stand for the trust amount and the trust depth /// parameters. So 120/255 means the trust amount is 120 and the /// trust depth is 255. (In this case, both are maximal.) /// /// Let us assume that we want to authenticate E, and A is our only /// trust root. Using backward propagation, we start at the /// target, E, and consider each certification made on E: D-E and /// B-E. /// /// Say we start with D-E (the order doesn't matter). Since D /// doesn't yet have a forward pointer, we set its forward pointer /// to E and add D to the queue. Then we consider B-E. Since B /// doesn't yet have a forward pointer, we set its forward pointer /// to E, and we add B to the queue. /// /// ```text /// queue = [ D, B ]; /// forward_pointers = [ (B -> E), (D -> E) ]; /// ``` /// /// Next we pop the certificate with the best path suffix from the /// queue. Because B and D's provisional paths are the same /// length (1), we compare the amount of trust along each path. /// D's amount of trust is 120 whereas B's is only 30. So, we pop /// D. /// /// D is only certified by C. Looking at C, we see that it /// doesn't yet have a forward pointer so we set its forward /// pointer to D, and we add C to the queue. /// /// ```text /// queue = [ B, C ]; /// forward_pointers = [ (B -> E), (C -> D), (D -> E) ]; /// ``` /// /// The queue now contains B and C. We prefer B, because its path /// is shorter (1 vs 2). /// /// B is certified by A. Since A's forward pointer is empty, we /// set it to point to B and add it to the queue. /// /// ```text /// queue = [ C, A ]; /// forward_pointers = [ (A -> B), (B -> E), (C-> D), (D -> E) ]; /// ``` /// /// We now pop C from the queue: the paths starting at A and C /// have the same path length, but the trust amount for the /// current path starting at C is larger (120 vs 30). /// /// C is certified by B. We compare B's current path to the one /// via C. /// /// B' forward pointer: length: 1, amount: 30 /// B-C + C's forward pointer: length: 3, amount: 120 /// /// We prefer the existing forward pointer because the path is /// shorter *even though the amount of trust is smaller*. If we /// had taken the longer path, then any forward pointers pointing /// to B might become invalid. This is, in fact, the case here: /// A-B has a trust depth of 2. But to use B-C-D-E, A-B would /// need a trust depth of at least 3! /// /// Thus, because we never replace an existing forward pointer /// with a forward pointer with a longer path, all forward /// pointers remain---by construction---valid. /// /// # Arguments /// /// If `self_signed` is true, then the target User ID must be self /// signed and the target must be a trusted introducer. That is, /// if 0xB has two self-signed User IDs: `bob@example.org` and /// `bob@other.org`, and Alice certifies the first one, then only /// the first one would be considered authenticated. But if Alice /// consider Bob via a certification on `bob@example.org` to be a /// trusted introducer, then he can certify User IDs on his own /// certificate and Alice considers both of his self-signed User /// IDs to be authenticated. /// /// If `self_signed` is false, then self-signed User IDs are not /// considered at all. /// /// `cf` is a callback which returns the trust depth, and trust /// amount to use for the certification and whether any regular /// expressions should be respected. To simply use the values in /// the certification return None using the callback: `|_| None`. pub(crate) fn backward_propagate(&self, target_fpr: Fingerprint, target_userid: UserID, self_signed: bool, cf: &dyn CertificationFilter) -> HashMap { tracer!(TRACE, "Network::backward_propagate"); t!("Roots:\n{}", self.roots().iter().enumerate().map(|(i, r)| { let fpr = r.fingerprint(); match self.network().lookup_synopsis_by_fpr(fpr) { Ok(cert) => { format!(" {}. {}", i, cert) } Err(err) => { format!(" {}. {} (error: {})", i, fpr, err) } } }) .collect::>() .join("\n")); t!("target: {}, {}", target_fpr, String::from_utf8_lossy(target_userid.value())); t!("self signed: {}", self_signed); // If the node is not in the network, we're done. let target = match self.network().lookup_synopsis_by_fpr(&target_fpr) { Ok(target) => target, Err(err) => { t!("Target not in network: {}.", err); return HashMap::new(); } }; // Make sure the target is valid (not expired and not revoked // at the reference time). if let Some(e) = target.expiration_time() { if e <= self.network().reference_time() { t!("{}: Target certificate is expired at reference time.", target_fpr); return HashMap::new(); } } if target.revocation_status().in_effect(self.network().reference_time()) { t!("{}: Target certificate is revoked at reference time.", target_fpr); return HashMap::new(); } // Recall: the target doesn't need to have self signed the // User ID to authenticate the User ID. But if the target has // revoked it, then it can't be authenticated. let target_ua = target.userids().find(|u| u.userid() == &target_userid); if let Some(u) = target_ua { if u.revocation_status().in_effect(self.network().reference_time()) { t!("{}: Target user id is revoked at reference time.", target_fpr); return HashMap::new(); } } // Dijkstra. let mut distance: HashMap = HashMap::new(); let mut queue: PriorityQueue = PriorityQueue::new(); // Compute the "cost" of this path suffix. // // This is a macro, because lifetimes :/. macro_rules! fp_cost { ($fp:expr) => ({ let mut fp: &ForwardPointer = $fp; let mut amount = 120; let mut depth: usize = if self_signed { 1 } else { 0 }; while let Some(ref c) = fp.next { let mut a = c.amount(); let mut d = c.depth(); let r = cf.cost(c, &mut d, &mut a, true, &mut None); assert!(r, "cost function returned different result, \ but must be constant!"); amount = std::cmp::min(a, amount); depth += 1; fp = distance.get(&c.target().fingerprint()).unwrap(); } Cost { amount: amount as usize, depth: depth.into(), } }); } if self_signed { // If the target is a trusted introducer and has self signed // the User ID, then also consider that path. if target_ua.is_some() { t!("Target User ID is self signed."); let cost = Cost { depth: 1, amount: 120 }; queue.push(target_fpr.clone(), cost); distance.insert( target_fpr.clone(), ForwardPointer { next: None, }); } else { t!("Target User ID is not self-signed, but that is required."); return HashMap::new(); } } else { let cost = Cost { depth: 0, amount: 120 }; queue.push(target_fpr.clone(), cost); distance.insert( target_fpr.clone(), ForwardPointer { next: None, }); } // Iterate over each node in the priority queue. while let Some((signee_fpr, _)) = queue.pop() { if let Some(root) = self.roots().get(&signee_fpr) { // XXX: Technically, we could stop if the root's trust // amount is at least the required trust amount. // Since we don't know it, and the maximum is // `FULLY_TRUSTED`, we use that. if root.amount() >= FULLY_TRUSTED { t!("Skipping fully trust root: {}."); continue; } } let signee = self.network().lookup_synopsis_by_fpr(&signee_fpr) .expect("already looked up"); // Get the signee's current forward pointer. // // We need to clone this, because we want to manipulate // 'distance' and we can't do that if there is a reference // to something in it. let signee_fp: ForwardPointer = distance.get(&signee_fpr).expect("was queued").clone(); let signee_fp_cost = fp_cost!(&signee_fp); t!("{}'s forward pointer: {}", signee_fpr, signee_fp.next.as_ref() .map(|c| format!("{}", c.target())) .unwrap_or_else(|| String::from("target"))); // Get all the certifications over the signee's // certificate. let required_depth = if self.certification_network() { 0 } else { signee_fp_cost.depth.into() }.into(); let certification_sets: Vec = match self.network().certifications_of(&signee_fpr, required_depth) { Ok(cs) => cs, Err(ref err) => { if let Some(StoreError::NotFound(_)) = err.downcast_ref() { Vec::new() } else { t!("Reading third party certifications: {}", err); continue; } } }; if certification_sets.is_empty() { // Nothing certified it. The path is a dead end. t!("{} was not certified, dead end", signee_fpr); continue; } t!("Visiting {} ({}), certified {} times", signee.fingerprint(), signee.display(), certification_sets.len()); for certification in certification_sets.iter() .flat_map(|cs| cs.certifications()) .flat_map(|(_userid, certifications)| certifications) { let issuer_fpr = certification.issuer().fingerprint(); let mut certification_depth = certification.depth(); let mut certification_amount = certification.amount(); let mut certification_res = if let Some(re) = certification.regular_expressions() { Some(re.clone()) } else { // Invalid, skip. t!(" Skipping certification with invalid REs"); continue; }; if ! cf.cost(certification, &mut certification_depth, &mut certification_amount, false, &mut certification_res) { t!(" Cost function says to skip certification by {}", certification.issuer()); continue; } t!(" Considering certification by: \ {}, depth: {} (of {}), amount: {} (of {}), regexes: {:?}", certification.issuer(), certification_depth, certification.depth(), certification_amount, certification.amount(), if let Some(ref certification_res) = certification_res { if certification_res.matches_everything() { "*".into() } else { format!("{:?}", certification_res) } } else { "*".into() }); if certification_amount == 0 { t!(" Certification amount is 0, skipping"); continue; } if !self_signed && signee_fpr == target_fpr && certification.userid() != Some(&target_userid) { assert!(signee_fp.next.is_none()); t!(" Certification certifies target, but for the wrong \ user id (want: {}, got: {})", String::from_utf8_lossy(target_userid.value()), if let Some(ref userid) = certification.userid() { String::from_utf8_lossy(userid.value()) } else { "".into() }); continue; } if certification_depth < signee_fp_cost.depth.into() { t!(" Certification does not have enough depth \ ({}, needed: {}), skipping", certification_depth, signee_fp_cost.depth); continue; } if let Some(certification_res) = certification_res { if ! certification_res.matches_userid(&target_userid) { t!(" Certification's re does not match target User ID, \ skipping."); continue; } } let proposed_fp: ForwardPointer = ForwardPointer { next: Some(certification.clone()), }; let proposed_fp_cost = Cost { depth: signee_fp_cost.depth + 1, amount: std::cmp::min( certification_amount as usize, signee_fp_cost.amount), }; t!(" Forward pointer for {}:", certification.issuer()); t!(" Proposed: {}, amount: {}, depth: {}", proposed_fp.next.as_ref() .map(|c| format!("{}", c.target())) .unwrap_or_else(|| String::from("target")), proposed_fp_cost.amount, proposed_fp_cost.depth); // distance.entry takes a mutable ref, so we can't // compute the current fp's cost in the next block. let current_fp_cost = if let Some(current_fp) = distance.get(&issuer_fpr.clone()) { Some(fp_cost!(¤t_fp)) } else { None }; match distance.entry(issuer_fpr.clone()) { Entry::Occupied(mut oe) => { // We've visited this node in the past. Now // we need to determine whether using // certification and following the proposed // path is better than the current path. let current_fp_cost = current_fp_cost.unwrap(); let current_fp = oe.get_mut(); t!(" Current: {}, amount: {}, depth: {}", current_fp.next.as_ref() .map(|c| format!("{}", c.target())) .unwrap_or_else(|| String::from("target")), current_fp_cost.amount, current_fp_cost.depth); // We prefer a shorter path (in terms of // edges) as this allows us to reach more of // the graph. // // If the path length is equal, we prefer the // larger amount of trust. if proposed_fp_cost.depth < current_fp_cost.depth { if proposed_fp_cost.amount < current_fp_cost.amount { // We have two local optima: one // has a shorter path, the other a // higher trust amount. We prefer // the shorter path. t!(" Preferring proposed: \ current has a shorter path ({} < {}), \ but worse amount of trust ({} < {})", proposed_fp_cost.depth, current_fp_cost.depth, proposed_fp_cost.amount, current_fp_cost.amount); oe.insert(proposed_fp); } else { // Proposed fp is strictly better. t!(" Preferring proposed: \ current has a shorter path ({} < {}) \ and a better amount of trust ({} < {})", proposed_fp_cost.depth, current_fp_cost.depth, proposed_fp_cost.amount, current_fp_cost.amount); oe.insert(proposed_fp); } } else if proposed_fp_cost.depth == current_fp_cost.depth && proposed_fp_cost.amount > current_fp_cost.amount { // Strictly better. t!(" Preferring proposed fp: \ same path length ({}), better amount ({} > {})", proposed_fp_cost.depth, proposed_fp_cost.amount, current_fp_cost.amount); oe.insert(proposed_fp); } else if proposed_fp_cost.depth > current_fp_cost.depth && proposed_fp_cost.amount > current_fp_cost.amount { // There's another possible path through here. t!(" Preferring current fp: \ proposed has more trust ({} > {}), but a longer path ({} > {})", proposed_fp_cost.amount, current_fp_cost.amount, proposed_fp_cost.depth, current_fp_cost.depth); } else { t!(" Preferring current fp: \ it is strictly better \ (depth: {}, {}; amount: {}, {})", proposed_fp_cost.depth, current_fp_cost.depth, proposed_fp_cost.amount, current_fp_cost.amount); } } e @ Entry::Vacant(_) => { // We haven't seen this node before. t!(" Current: None"); t!(" Setting {}'s forward pointer to {}", certification.issuer(), signee); t!(" Queuing {}", certification.issuer()); queue.push(issuer_fpr, proposed_fp_cost); e.or_insert(proposed_fp); } } } } // Follow the forward pointers and reconstruct the paths. let mut auth_rpaths: HashMap = HashMap::new(); for (issuer_fpr, mut fp) in distance.iter() { // If roots were specified, then only return the optimal // paths from the roots. if !(self.roots().is_empty() || self.roots().is_root(issuer_fpr)) { continue; } let issuer = if let Some(ref c) = fp.next { c.issuer() } else { // The target. if ! self_signed { continue; } // Apply any policy to the self certification. // // XXX: Self-signatures should be first class and not // synthesized like this on the fly. let selfsig = Certification::new( target.clone(), Some(target_userid.clone()), target.clone(), target_ua.map(|ua| ua.binding_signature_creation_time()) .unwrap_or(self.network().reference_time())); let mut a = 120; let mut d = 0.into(); if cf.cost(&selfsig, &mut d, &mut a, true, &mut None) { t!("Policy on selfsig => amount: {}", a); if a == 0 { continue; } } else { t!("Policy says to ignore selfsig"); continue; } let p = Path::new(target.clone()); t!("Authenticated <{}, {}>: {:?}", target_fpr, target_userid, p); auth_rpaths.insert(issuer_fpr.clone(), (p, a)); continue; }; t!("Recovering path starting at {}", self.network().lookup_synopsis_by_fpr(issuer_fpr) .expect("already looked up")); let mut amount = 120; // nodes[0] is the root; nodes[nodes.len() - 1] is the target. let mut nodes: Vec = Vec::new(); while let Some(ref c) = fp.next { t!(" {:?}", fp); let mut d = c.depth(); let mut a = c.amount(); let r = cf.cost(c, &mut d, &mut a, true, &mut None); assert!(r, "cost function returned different result, \ but must be constant!"); amount = std::cmp::min(a, amount); nodes.push(c.clone()); fp = distance.get(&c.target().fingerprint()).expect("exists"); } if self_signed { let tail = nodes.last().unwrap(); if tail.userid() != Some(&target_userid) { let selfsig = Certification::new( target.clone(), Some(target_userid.clone()), target.clone(), std::time::SystemTime::now()); nodes.push(selfsig); } } t!(" {:?}", fp); t!("\nShortest path from {}:\n {}\n Target: <{}, {}>", issuer, nodes.iter() .enumerate() .map(|(i, n)| { format!("{}: {} ({}, {})", i, n.issuer(), n.amount(), n.depth()) }) .collect::>() .join("\n "), target_fpr, target_userid); assert!(nodes.len() > 0); let mut p = Path::new(issuer.clone()); for n in nodes.iter() { p.append(n.clone()).expect("valid path"); } t!("Authenticated <{}, {}>: {:?}", target_fpr, target_userid, p); auth_rpaths.insert(issuer_fpr.clone(), (p, amount as usize)); } if TRACE { t!("auth_rpaths:"); let mut v: Vec<_> = auth_rpaths.iter().collect(); v.sort_by(|(fpr_a, _), (fpr_b, _)| { let userid_a = self.network() .lookup_synopsis_by_fpr(*fpr_a).expect("already looked up") .primary_userid().map(|userid| { String::from_utf8_lossy(userid.value()).into_owned() }).unwrap_or("".into()); let userid_b = self.network() .lookup_synopsis_by_fpr(*fpr_b).expect("already looked up") .primary_userid().map(|userid| { String::from_utf8_lossy(userid.value()).into_owned() }).unwrap_or("".into()); userid_a.cmp(&userid_b). then(fpr_a.cmp(&fpr_b)) }); for (fpr, (path, amount)) in v { let userid = self.network() .lookup_synopsis_by_fpr(fpr).expect("already looked up") .primary_userid().map(|userid| { String::from_utf8_lossy(userid.value()).into_owned() }) .unwrap_or("".into()); t!(" <{}, {}>: {}", fpr, userid, format!("{} trust amount (max: {}), {} edges", amount, path.amount(), path.len() - 1)); } } auth_rpaths } } #[cfg(test)] mod tests { use super::*; use openpgp::KeyHandle; use openpgp::Result; use openpgp::cert::prelude::*; use openpgp::parse::Parse; use openpgp::policy::StandardPolicy; use crate::Depth; use crate::Network; use crate::Roots; use crate::network::filter::IdempotentCertificationFilter; use crate::store::Backend; // Compares a computed path and a trust amount with the expected // result. fn pcmp<'a, S, D>(q: &Query<'a, S>, result: &(Path, usize), residual_depth: D, amount: usize, expected_path: &[ &Fingerprint ]) where D: Into, S: Store + Backend<'a>, { let residual_depth = residual_depth.into(); let (got_path, got_amount) = result; let got_certs: Vec = got_path.certificates().map(|c| c.fingerprint()).collect(); if got_certs.len() != expected_path.len() || got_certs.iter().zip(expected_path.iter()).any(|(a, b)| &a != b) { panic!("Paths don't match. {}Got path:\n {:?}, expected:\n {}", if got_certs.len() != expected_path.len() { format!("Got {} certs, expected {}. ", got_certs.len(), expected_path.len()) } else { "".into() }, got_path, expected_path.iter().enumerate() .map(|(i, f)| format!(" {}. {}", i, f)) .collect::>() .join("\n ")); } assert_eq!(*got_amount, amount, "amount"); assert_eq!(got_path.residual_depth(), residual_depth, "residual amount"); // Make sure Network::path agrees that the path is good. if let Some(userid) = got_path .certifications() .last().expect("got one") .userid() { if let Err(err) = q.path( &got_certs .iter() .map(|fpr| KeyHandle::from(fpr)) .collect::>()[..], userid.clone(), amount, // XXX: This assumes that all tests use this policy. &StandardPolicy::new()) { panic!("Failed to validate expected path: {}.", err); } } } #[test] #[allow(unused)] fn simple() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "39A479816C934B9E0464F1F4BC1DCFDEADA4EE90" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D let carol_fpr: Fingerprint = "43530F91B450EDB269AA58821A1CF4DC7F500F04" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 39A479816C934B9E0464F1F4BC1DCFDEADA4EE90 let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 43530F91B450EDB269AA58821A1CF4DC7F500F04 let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 let frank_fpr: Fingerprint = "2693237D2CED0BB68F118D78DC86A97CD2C819D9" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("simple.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); let auth = q.backward_propagate(ellen_fpr.clone(), ellen_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&dave_fpr).unwrap(), 1, 100, &[ &dave_fpr, &ellen_fpr ]); pcmp(&q, auth.get(&carol_fpr).unwrap(), 0, 100, &[ &carol_fpr, &dave_fpr, &ellen_fpr ]); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); assert!(&auth.get(&ellen_fpr).is_none()); pcmp(&q, &auth.get(&carol_fpr).unwrap(), 1, 100, &[ &carol_fpr, &dave_fpr ]); pcmp(&q, &auth.get(&bob_fpr).unwrap(), 0, 100, &[ &bob_fpr, &carol_fpr, &dave_fpr ]); pcmp(&q, &auth.get(&alice_fpr).unwrap(), 0, 100, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr ]); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); assert!(&auth.get(&ellen_fpr).is_none()); pcmp(&q, &auth.get(&carol_fpr).unwrap(), 1, 100, &[ &carol_fpr, &dave_fpr ]); pcmp(&q, &auth.get(&bob_fpr).unwrap(), 0, 100, &[ &bob_fpr, &carol_fpr, &dave_fpr ]); // This should work even though Bob is the root and the path // is via Bob. pcmp(&q, &auth.get(&alice_fpr).unwrap(), 0, 100, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr ]); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); assert!(&auth.get(&ellen_fpr).is_none()); pcmp(&q, &auth.get(&carol_fpr).unwrap(), 1, 100, &[ &carol_fpr, &dave_fpr ]); // This should work even though Carol is the root is the path // is via Carol. pcmp(&q, &auth.get(&bob_fpr).unwrap(), 0, 100, &[ &bob_fpr, &carol_fpr, &dave_fpr ]); pcmp(&q, &auth.get(&alice_fpr).unwrap(), 0, 100, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr ]); // Try to authenticate dave's key for an User ID that no one // has certified. let auth = q.backward_propagate(dave_fpr.clone(), ellen_uid.clone(), false, &IdempotentCertificationFilter::new()); assert!(&auth.get(&ellen_fpr).is_none()); assert!(&auth.get(&dave_fpr).is_none()); assert!(&auth.get(&carol_fpr).is_none()); assert!(&auth.get(&bob_fpr).is_none()); assert!(&auth.get(&alice_fpr).is_none()); // Target is not in the network. let fpr: Fingerprint = "0123 4567 89AB CDEF 0123 4567 89AB CDEF".parse().expect("valid"); let auth = q.backward_propagate(fpr.clone(), ellen_uid.clone(), false, &IdempotentCertificationFilter::new()); assert!(&auth.get(&ellen_fpr).is_none()); assert!(&auth.get(&dave_fpr).is_none()); assert!(&auth.get(&carol_fpr).is_none()); assert!(&auth.get(&bob_fpr).is_none()); assert!(&auth.get(&alice_fpr).is_none()); Ok(()) } #[test] #[allow(unused)] fn cycle() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "BFC5CA10FB55A4B790E2A1DBA5CFAB9A9E34E183" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "A637747DCF876A7F6C9149F74D47846E24A20C0B" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 4458062DC7388909CF760E6823150D8E4408638A // Certified by: BFC5CA10FB55A4B790E2A1DBA5CFAB9A9E34E183 let carol_fpr: Fingerprint = "394B04774FDAB0CDBF4D6FFD7930EA0FB549E303" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: A637747DCF876A7F6C9149F74D47846E24A20C0B let dave_fpr: Fingerprint = "4458062DC7388909CF760E6823150D8E4408638A" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 394B04774FDAB0CDBF4D6FFD7930EA0FB549E303 let ed_fpr: Fingerprint = "78C3814EFD16E68F4F1AB4B874E30AE11FFCFB1B" .parse().expect("valid fingerprint"); let ed_uid = UserID::from(""); // Certified by: 4458062DC7388909CF760E6823150D8E4408638A let frank_fpr: Fingerprint = "A6219FF753AEAE2DE8A74E8487977DD568A08237" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // Certified by: 78C3814EFD16E68F4F1AB4B874E30AE11FFCFB1B let certs: Vec = CertParser::from_bytes( &crate::testdata::data("cycle.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); let auth = q.backward_propagate(frank_fpr.clone(), frank_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, &auth.get(&ed_fpr).unwrap(), 0, 120, &[ &ed_fpr, &frank_fpr ]); pcmp(&q, &auth.get(&dave_fpr).unwrap(), 0, 30, &[ &dave_fpr, &ed_fpr, &frank_fpr ]); pcmp(&q, &auth.get(&carol_fpr).unwrap(), 0, 30, &[ &carol_fpr, &dave_fpr, &ed_fpr, &frank_fpr ]); pcmp(&q, &auth.get(&bob_fpr).unwrap(), 0, 30, &[ &bob_fpr, &carol_fpr, &dave_fpr, &ed_fpr, &frank_fpr ]); assert!(&auth.get(&alice_fpr).is_none()); let auth = q.backward_propagate(frank_fpr.clone(), frank_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, &auth.get(&ed_fpr).unwrap(), 0, 120, &[ &ed_fpr, &frank_fpr ]); pcmp(&q, &auth.get(&dave_fpr).unwrap(), 0, 30, &[ &dave_fpr, &ed_fpr, &frank_fpr ]); pcmp(&q, &auth.get(&carol_fpr).unwrap(), 0, 30, &[ &carol_fpr, &dave_fpr, &ed_fpr, &frank_fpr ]); pcmp(&q, &auth.get(&bob_fpr).unwrap(), 0, 30, &[ &bob_fpr, &carol_fpr, &dave_fpr, &ed_fpr, &frank_fpr ]); assert!(&auth.get(&alice_fpr).is_none()); let auth = q.backward_propagate(ed_fpr.clone(), ed_uid.clone(), false, &IdempotentCertificationFilter::new()); assert!(&auth.get(&frank_fpr).is_none()); pcmp(&q, &auth.get(&dave_fpr).unwrap(), 1, 30, &[ &dave_fpr, &ed_fpr ]); pcmp(&q, &auth.get(&carol_fpr).unwrap(), 1, 30, &[ &carol_fpr, &dave_fpr, &ed_fpr ]); pcmp(&q, &auth.get(&bob_fpr).unwrap(), 1, 30, &[ &bob_fpr, &carol_fpr, &dave_fpr, &ed_fpr ]); pcmp(&q, &auth.get(&alice_fpr).unwrap(), 0, 30, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr, &ed_fpr ]); let auth = q.backward_propagate(carol_fpr.clone(), carol_uid.clone(), false, &IdempotentCertificationFilter::new()); assert!(&auth.get(&frank_fpr).is_none()); assert!(&auth.get(&ed_fpr).is_none()); pcmp(&q, &auth.get(&dave_fpr).unwrap(), Depth::unconstrained(), 90, &[ &dave_fpr, &bob_fpr, &carol_fpr ]); pcmp(&q, &auth.get(&bob_fpr).unwrap(), Depth::unconstrained(), 90, &[ &bob_fpr, &carol_fpr ]); // The backward propagation algorithm doesn't know that alice // is not reachable from the root (dave). pcmp(&q, &auth.get(&alice_fpr).unwrap(), 2, 90, &[ &alice_fpr, &bob_fpr, &carol_fpr ]); Ok(()) } #[test] #[allow(unused)] fn cliques() -> Result<()> { let p = &StandardPolicy::new(); let root_fpr: Fingerprint = "D2B0 C383 5C01 B0C1 20BC 540D A4AA 8F88 0BA5 12B5" .parse().expect("valid fingerprint"); let root_uid = UserID::from(""); let a_0_fpr: Fingerprint = "3630 82E9 EEB2 2E50 AD30 3D8B 1BFE 9BA3 F4AB D40E" .parse().expect("valid fingerprint"); let a_0_uid = UserID::from(""); let a_1_fpr: Fingerprint = "7974 C04E 8D5B 540D 23CD 4E62 DDFA 779D 91C6 9894" .parse().expect("valid fingerprint"); let a_1_uid = UserID::from(""); let b_0_fpr: Fingerprint = "25D8 EAAB 8947 05BB 64D4 A6A8 9649 EF81 AEFE 5162" .parse().expect("valid fingerprint"); let b_0_uid = UserID::from(""); let b_1_fpr: Fingerprint = "46D2 F5CE D9BD 3D63 A11D DFEE 1BA0 1950 6BE6 7FBB" .parse().expect("valid fingerprint"); let b_1_uid = UserID::from(""); let c_0_fpr: Fingerprint = "A0CD 8758 2C21 743C 0E30 637F 7FAD B1C3 FEFB FE59" .parse().expect("valid fingerprint"); let c_0_uid = UserID::from(""); let c_1_fpr: Fingerprint = "5277 C14F 9D37 A0F4 D615 DD9C CDCC 1AC8 464C 8FE5" .parse().expect("valid fingerprint"); let c_1_uid = UserID::from(""); let d_0_fpr: Fingerprint = "C24C C091 02D2 2E38 E839 3C55 1669 8256 1E14 0C03" .parse().expect("valid fingerprint"); let d_0_uid = UserID::from(""); let d_1_fpr: Fingerprint = "7A80 DB53 30B7 D900 D5BD 1F82 EAD7 2FF7 9140 78B2" .parse().expect("valid fingerprint"); let d_1_uid = UserID::from(""); let e_0_fpr: Fingerprint = "D1E9 F85C EF62 7169 9FBD E5AB 26EF E0E0 35AC 522E" .parse().expect("valid fingerprint"); let e_0_uid = UserID::from(""); let f_0_fpr: Fingerprint = "C0FF AEDE F092 8B18 1265 775A 222B 480E B43E 0AFF" .parse().expect("valid fingerprint"); let f_0_uid = UserID::from(""); let target_fpr: Fingerprint = "CE22 ECD2 82F2 19AA 9959 8BA3 B58A 7DA6 1CA9 7F55" .parse().expect("valid fingerprint"); let target_uid = UserID::from(""); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("cliques.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); let auth = q.backward_propagate(target_fpr.clone(), target_uid.clone(), false, &IdempotentCertificationFilter::new()); // root -> a-0 -> b-0 -> ... -> f-0 -> target pcmp(&q, &auth.get(&root_fpr).unwrap(), 90, 120, &[ &root_fpr, &a_0_fpr, &a_1_fpr, &b_0_fpr, &b_1_fpr, &c_0_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ]); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("cliques-local-optima.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); let auth = q.backward_propagate(target_fpr.clone(), target_uid.clone(), false, &IdempotentCertificationFilter::new()); // root -> a-0 -> b-0 -> ... -> f-0 -> target pcmp(&q, &auth.get(&root_fpr).unwrap(), 93, 30, &[ &root_fpr, &b_0_fpr, &b_1_fpr, &c_0_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ]); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("cliques-local-optima-2.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); let auth = q.backward_propagate(target_fpr.clone(), target_uid.clone(), false, &IdempotentCertificationFilter::new()); // root -> a-0 -> b-0 -> ... -> f-0 -> target pcmp(&q, &auth.get(&root_fpr).unwrap(), 94, 30, &[ &root_fpr, &b_0_fpr, &b_1_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ]); Ok(()) } #[test] #[allow(unused)] fn roundabout() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "41E9B069C96EB6D47525294B10BBBD00912BEA02" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "2E90AEE966DF28CB916439B20397E086E705AC1A" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 3267D46247D26101B3E5014CDF4F9BA5831D91DA // Certified by: 41E9B069C96EB6D47525294B10BBBD00912BEA02 let carol_fpr: Fingerprint = "92DDE8747C8E6ED09D41A4E1330D1190E858754C" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 41E9B069C96EB6D47525294B10BBBD00912BEA02 let dave_fpr: Fingerprint = "D4515E6619084ED8142DF8589059E3846A025611" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 92DDE8747C8E6ED09D41A4E1330D1190E858754C let elmar_fpr: Fingerprint = "E553C11DCFA777F3205E5090F5EE59C2795CDBA2" .parse().expect("valid fingerprint"); let elmar_uid = UserID::from(""); // Certified by: AE40578962411356F9609CAA9C2447E61FFDBB15 // Certified by: D4515E6619084ED8142DF8589059E3846A025611 let frank_fpr: Fingerprint = "3267D46247D26101B3E5014CDF4F9BA5831D91DA" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // Certified by: E553C11DCFA777F3205E5090F5EE59C2795CDBA2 let george_fpr: Fingerprint = "CCD5DB27BD7C4F8E2010083605EF17E8A93EB652" .parse().expect("valid fingerprint"); let george_uid = UserID::from(""); // Certified by: AE40578962411356F9609CAA9C2447E61FFDBB15 // Certified by: 2E90AEE966DF28CB916439B20397E086E705AC1A let henry_fpr: Fingerprint = "7F62EF97091AE1FCB4E1C67EC8D9E94C4731529B" .parse().expect("valid fingerprint"); let henry_uid = UserID::from(""); // Certified by: CCD5DB27BD7C4F8E2010083605EF17E8A93EB652 let isaac_fpr: Fingerprint = "32FD4D68B3227334CD0583E9FA0721F49D2F395D" .parse().expect("valid fingerprint"); let isaac_uid = UserID::from(""); // Certified by: 7F62EF97091AE1FCB4E1C67EC8D9E94C4731529B let jenny_fpr: Fingerprint = "AE40578962411356F9609CAA9C2447E61FFDBB15" .parse().expect("valid fingerprint"); let jenny_uid = UserID::from(""); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("roundabout.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); let auth = q.backward_propagate(isaac_fpr.clone(), isaac_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, &auth.get(&alice_fpr).unwrap(), 0, 60, &[ &alice_fpr, &bob_fpr, &george_fpr, &henry_fpr, &isaac_fpr ]); assert!(&auth.get(&carol_fpr).is_none()); assert!(&auth.get(&jenny_fpr).is_none()); let auth = q.backward_propagate(henry_fpr.clone(), henry_uid.clone(), false, &IdempotentCertificationFilter::new()); // The backward propagation algorithm doesn't know that jenny // is not reachable from the root (alice). pcmp(&q, &auth.get(&jenny_fpr).unwrap(), 0, 100, &[ &jenny_fpr, &george_fpr, &henry_fpr ]); Ok(()) } #[test] #[allow(unused)] fn local_optima() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "EAAE12F98D39F38BF0D1B4C5C46A428ADEFBB2F8" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "89C7A9FB7236A77ABBE4F29CB8180FBF6382F90F" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: EAAE12F98D39F38BF0D1B4C5C46A428ADEFBB2F8 // Certified by: EAAE12F98D39F38BF0D1B4C5C46A428ADEFBB2F8 let carol_fpr: Fingerprint = "E9DF94E389F529F8EF6AA223F6CC1F8544C0874D" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 89C7A9FB7236A77ABBE4F29CB8180FBF6382F90F // Certified by: 89C7A9FB7236A77ABBE4F29CB8180FBF6382F90F let dave_fpr: Fingerprint = "C2F822F17B68E946853A2DCFF55541D89F27F88B" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: E9DF94E389F529F8EF6AA223F6CC1F8544C0874D // Certified by: 89C7A9FB7236A77ABBE4F29CB8180FBF6382F90F let ellen_fpr: Fingerprint = "70507A9058A57FEAE18CC3CE6A398AC9051D9CA8" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: C2F822F17B68E946853A2DCFF55541D89F27F88B // Certified by: C2F822F17B68E946853A2DCFF55541D89F27F88B // Certified by: E9DF94E389F529F8EF6AA223F6CC1F8544C0874D let francis_fpr: Fingerprint = "D8DDA78A2297CA3C35B9377577E8B54B9350C082" .parse().expect("valid fingerprint"); let francis_uid = UserID::from(""); // Certified by: 70507A9058A57FEAE18CC3CE6A398AC9051D9CA8 // Certified by: 89C7A9FB7236A77ABBE4F29CB8180FBF6382F90F let georgina_fpr: Fingerprint = "C5D1B22FEC75911A04E1A5DC75B66B994E70ADE2" .parse().expect("valid fingerprint"); let georgina_uid = UserID::from(""); // Certified by: 70507A9058A57FEAE18CC3CE6A398AC9051D9CA8 let henry_fpr: Fingerprint = "F260739E3F755389EFC2FEE67F58AACB661D5120" .parse().expect("valid fingerprint"); let henry_uid = UserID::from(""); // Certified by: 70507A9058A57FEAE18CC3CE6A398AC9051D9CA8 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("local-optima.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); let auth = q.backward_propagate(henry_fpr.clone(), henry_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 0, 100, &[ &alice_fpr, &bob_fpr, &carol_fpr, &ellen_fpr, &henry_fpr ]); pcmp(&q, auth.get(&bob_fpr).unwrap(), 0, 100, &[ &bob_fpr, &carol_fpr, &ellen_fpr, &henry_fpr ]); pcmp(&q, auth.get(&carol_fpr).unwrap(), 0, 100, &[ &carol_fpr, &ellen_fpr, &henry_fpr ]); pcmp(&q, auth.get(&dave_fpr).unwrap(), 0, 50, &[ &dave_fpr, &ellen_fpr, &henry_fpr ]); pcmp(&q, auth.get(&ellen_fpr).unwrap(), 0, 120, &[ &ellen_fpr, &henry_fpr ]); assert!(auth.get(&francis_fpr).is_none()); assert!(auth.get(&georgina_fpr).is_none()); let auth = q.backward_propagate(francis_fpr.clone(), francis_uid.clone(), false, &IdempotentCertificationFilter::new()); // Recall: given a choice, we prefer the forward pointer that // has the least depth. pcmp(&q, auth.get(&alice_fpr).unwrap(), 149, 75, &[ &alice_fpr, &bob_fpr, &francis_fpr ]); pcmp(&q, auth.get(&bob_fpr).unwrap(), 200, 75, &[ &bob_fpr, &francis_fpr ]); pcmp(&q, auth.get(&carol_fpr).unwrap(), 49, 100, &[ &carol_fpr, &ellen_fpr, &francis_fpr ]); pcmp(&q, auth.get(&dave_fpr).unwrap(), 99, 50, &[ &dave_fpr, &ellen_fpr, &francis_fpr ]); pcmp(&q, auth.get(&ellen_fpr).unwrap(), 100, 120, &[ &ellen_fpr, &francis_fpr ]); assert!(auth.get(&georgina_fpr).is_none()); assert!(auth.get(&henry_fpr).is_none()); Ok(()) } #[test] #[allow(unused)] fn best_via_root() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "B95FF5B1D055D26F758FD4E3BF12C4D1D28FDFFB" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "6A8B9EC7D0A1B297B5D4A7A1C048DFF96601D9BD" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: B95FF5B1D055D26F758FD4E3BF12C4D1D28FDFFB let carol_fpr: Fingerprint = "77A6F7D4BEE0369F70B249579D2987669F792B35" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 6A8B9EC7D0A1B297B5D4A7A1C048DFF96601D9BD let target_fpr: Fingerprint = "2AB08C06FC795AC26673B23CAD561ABDCBEBFDF0" .parse().expect("valid fingerprint"); let target_uid = UserID::from(""); // Certified by: 77A6F7D4BEE0369F70B249579D2987669F792B35 // Certified by: 56D44411F982758169E4681B402E8D5D9D7D6567 let yellow_fpr: Fingerprint = "86CB4639D1FE096BA941D05822B8AF50198C49DD" .parse().expect("valid fingerprint"); let yellow_uid = UserID::from(""); // Certified by: B95FF5B1D055D26F758FD4E3BF12C4D1D28FDFFB let zebra_fpr: Fingerprint = "56D44411F982758169E4681B402E8D5D9D7D6567" .parse().expect("valid fingerprint"); let zebra_uid = UserID::from(""); // Certified by: 86CB4639D1FE096BA941D05822B8AF50198C49DD let certs: Vec = CertParser::from_bytes( &crate::testdata::data("best-via-root.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); /// Tests. let auth = q.backward_propagate(target_fpr.clone(), target_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&bob_fpr).unwrap(), 9, 120, &[ &bob_fpr, &carol_fpr, &target_fpr ]); pcmp(&q, auth.get(&carol_fpr).unwrap(), 10, 120, &[ &carol_fpr, &target_fpr ]); pcmp(&q, auth.get(&alice_fpr).unwrap(), 8, 120, &[ &alice_fpr, &bob_fpr, &carol_fpr, &target_fpr ]); let auth = q.backward_propagate(target_fpr.clone(), target_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 8, 120, &[ &alice_fpr, &bob_fpr, &carol_fpr, &target_fpr ]); pcmp(&q, auth.get(&bob_fpr).unwrap(), 9, 120, &[ &bob_fpr, &carol_fpr, &target_fpr ]); pcmp(&q, auth.get(&carol_fpr).unwrap(), 10, 120, &[ &carol_fpr, &target_fpr ]); // Again, but this time we specify the roots. let q = Query::new(&n, Roots::from(&[ alice_fpr.clone() ])); let auth = q.backward_propagate(target_fpr.clone(), target_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 8, 120, &[ &alice_fpr, &bob_fpr, &carol_fpr, &target_fpr ]); // As seen above, the best path from Alice to the target is // via Bob. But, when both Alice and Bob are both fully // trusted roots, the returned path is not via Bob, but one // that is less optimal. let q = Query::new(&n, Roots::from(&[ alice_fpr.clone(), bob_fpr.clone() ])); let auth = q.backward_propagate(target_fpr.clone(), target_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&bob_fpr).unwrap(), 9, 120, &[ &bob_fpr, &carol_fpr, &target_fpr ]); pcmp(&q, auth.get(&alice_fpr).unwrap(), 8, 50, &[ &alice_fpr, &yellow_fpr, &zebra_fpr, &target_fpr ]); Ok(()) } #[test] #[allow(unused)] fn regex_1() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "3AD1F297E4B150F75DBFC43476FB81BFE0665C3A" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "20C812117FB2A3940EAE9160FEE6B4E47A096FD1" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 3AD1F297E4B150F75DBFC43476FB81BFE0665C3A let carol_fpr: Fingerprint = "BC30978345D789CADECDE492F54B42E1625E1A1D" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 20C812117FB2A3940EAE9160FEE6B4E47A096FD1 let dave_fpr: Fingerprint = "319810FAD46CBE96DAD7F1F5B014902592999B21" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 20C812117FB2A3940EAE9160FEE6B4E47A096FD1 let ed_fpr: Fingerprint = "23D7418EA0C6A42A54C32DBE8D4FE4911ED08467" .parse().expect("valid fingerprint"); let ed_uid = UserID::from(""); // Certified by: 319810FAD46CBE96DAD7F1F5B014902592999B21 let frank_fpr: Fingerprint = "7FAE20D68EE87F74368AF275A0C40E741FC1C50F" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // Certified by: 319810FAD46CBE96DAD7F1F5B014902592999B21 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("regex-1.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); // Tests. // alice as root. let auth = q.backward_propagate(bob_fpr.clone(), bob_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 3, 100, &[ &alice_fpr, &bob_fpr ]); let auth = q.backward_propagate(carol_fpr.clone(), carol_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 1, 100, &[ &alice_fpr, &bob_fpr, &carol_fpr ]); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); // There is no path, because dave@example.org does not match // the constraint on bob (domain: example.org). assert!(auth.get(&alice_fpr).is_none()); let auth = q.backward_propagate(ed_fpr.clone(), ed_uid.clone(), false, &IdempotentCertificationFilter::new()); // There is no path, because ed@example.org does not match // the constraint on dave (domain: other.org). assert!(auth.get(&alice_fpr).is_none()); let auth = q.backward_propagate(frank_fpr.clone(), frank_uid.clone(), false, &IdempotentCertificationFilter::new()); // There is no path, because frank@other.org does not match // the constraint on bob (domain: example.org). assert!(auth.get(&alice_fpr).is_none()); // bob as root. let auth = q.backward_propagate(carol_fpr.clone(), carol_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&bob_fpr).unwrap(), 1, 100, &[ &bob_fpr, &carol_fpr ]); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&bob_fpr).unwrap(), 1, 100, &[ &bob_fpr, &dave_fpr ]); let auth = q.backward_propagate(ed_fpr.clone(), ed_uid.clone(), false, &IdempotentCertificationFilter::new()); // There is no path, because ed@example.org does not match // the constraint on dave (domain: other.org). assert!(auth.get(&bob_fpr).is_none()); let auth = q.backward_propagate(frank_fpr.clone(), frank_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&bob_fpr).unwrap(), 0, 100, &[ &bob_fpr, &dave_fpr, &frank_fpr ]); // dave as root. let auth = q.backward_propagate(ed_fpr.clone(), ed_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&dave_fpr).unwrap(), 1, 100, &[ &dave_fpr, &ed_fpr ]); let auth = q.backward_propagate(frank_fpr.clone(), frank_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&dave_fpr).unwrap(), 1, 100, &[ &dave_fpr, &frank_fpr ]); Ok(()) } #[test] #[allow(unused)] fn regex_2() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "5C396C920399898461F17CB747FDBF3EB3453919" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "584D195AD89CE0354D2CCBAEBCDD9EBC09692780" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 5C396C920399898461F17CB747FDBF3EB3453919 let carol_fpr: Fingerprint = "FC7A96D4810D0CF477031956AED58C644370C183" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 584D195AD89CE0354D2CCBAEBCDD9EBC09692780 let dave_fpr: Fingerprint = "58077E659732526C1B8BF9837EFC0EDE07B506A8" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: FC7A96D4810D0CF477031956AED58C644370C183 let ed_fpr: Fingerprint = "36089C49F18BF6FC6BCA35E3BB85877766C009E4" .parse().expect("valid fingerprint"); let ed_uid = UserID::from(""); // Certified by: 58077E659732526C1B8BF9837EFC0EDE07B506A8 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("regex-2.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); /// Tests. let auth = q.backward_propagate(bob_fpr.clone(), bob_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 7, 100, &[ &alice_fpr, &bob_fpr ]); let auth = q.backward_propagate(carol_fpr.clone(), carol_uid.clone(), false, &IdempotentCertificationFilter::new()); // There is no path, because carol@other.org does not match // the constraint on carol (domain: example.org). assert!(auth.get(&alice_fpr).is_none()); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); // There is no path, because dave@their.org does not match // the constraint on carol (domain: example.org). assert!(auth.get(&alice_fpr).is_none()); let auth = q.backward_propagate(ed_fpr.clone(), ed_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 4, 100, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr, &ed_fpr ]); let auth = q.backward_propagate(carol_fpr.clone(), carol_uid.clone(), false, &IdempotentCertificationFilter::new()); // There is no path, because carol@other.org does not match // the constraint on carol (domain: example.org). assert!(auth.get(&bob_fpr).is_none()); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); // There is no path, because dave@their.org does not match // the constraint on carol (domain: example.org). assert!(auth.get(&bob_fpr).is_none()); let auth = q.backward_propagate(ed_fpr.clone(), ed_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&bob_fpr).unwrap(), 5, 100, &[ &bob_fpr, &carol_fpr, &dave_fpr, &ed_fpr ]); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&carol_fpr).unwrap(), 7, 100, &[ &carol_fpr, &dave_fpr ]); let auth = q.backward_propagate(ed_fpr.clone(), ed_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&carol_fpr).unwrap(), 6, 100, &[ &carol_fpr, &dave_fpr, &ed_fpr ]); Ok(()) } #[test] #[allow(unused)] fn regex_3() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "D8CFEBBA006E2ED57CF45CC413F0BAE09D94FE4E" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "A75DC1A1EDA5282F3A7381B51824E46BBCC801F0" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: D8CFEBBA006E2ED57CF45CC413F0BAE09D94FE4E let carol_fpr: Fingerprint = "4BCD4325BDACA452F0301227A30CB4BCC329E769" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: A75DC1A1EDA5282F3A7381B51824E46BBCC801F0 let dave_fpr: Fingerprint = "2E1AAA8D9A22C94ACCA362A22B34031CD5CB9380" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: A75DC1A1EDA5282F3A7381B51824E46BBCC801F0 let ed_fpr: Fingerprint = "F645D081F480BE26C7D2C84D941B3E2CE53FAF16" .parse().expect("valid fingerprint"); let ed_uid = UserID::from(""); // Certified by: 2E1AAA8D9A22C94ACCA362A22B34031CD5CB9380 let frank_fpr: Fingerprint = "AFAB11F1A37FD20C85CF8093F4941D1A0EC5749F" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // Certified by: 2E1AAA8D9A22C94ACCA362A22B34031CD5CB9380 let george_fpr: Fingerprint = "D01C8752D9BA9F3F5F06B21F394E911938D6DB0A" .parse().expect("valid fingerprint"); let george_uid = UserID::from(""); // Certified by: 2E1AAA8D9A22C94ACCA362A22B34031CD5CB9380 let henry_fpr: Fingerprint = "B99A8696FD820192CEEE285D3A253E49F1D97109" .parse().expect("valid fingerprint"); let henry_uid = UserID::from(""); // Certified by: A75DC1A1EDA5282F3A7381B51824E46BBCC801F0 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("regex-3.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); /// Tests. // alice as root. let auth = q.backward_propagate(bob_fpr.clone(), bob_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 3, 100, &[ &alice_fpr, &bob_fpr ]); let auth = q.backward_propagate(carol_fpr.clone(), carol_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 1, 100, &[ &alice_fpr, &bob_fpr, &carol_fpr ]); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 1, 100, &[ &alice_fpr, &bob_fpr, &dave_fpr ]); let auth = q.backward_propagate(ed_fpr.clone(), ed_uid.clone(), false, &IdempotentCertificationFilter::new()); // There is no path, because ed@example.org does not match // the constraint on dave (domain: other.org). assert!(auth.get(&alice_fpr).is_none()); let auth = q.backward_propagate(frank_fpr.clone(), frank_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 0, 100, &[ &alice_fpr, &bob_fpr, &dave_fpr, &frank_fpr ]); let auth = q.backward_propagate(george_fpr.clone(), george_uid.clone(), false, &IdempotentCertificationFilter::new()); assert!(auth.get(&alice_fpr).is_none()); let auth = q.backward_propagate(henry_fpr.clone(), henry_uid.clone(), false, &IdempotentCertificationFilter::new()); assert!(auth.get(&alice_fpr).is_none()); // bob as root. let auth = q.backward_propagate(carol_fpr.clone(), carol_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&bob_fpr).unwrap(), 1, 100, &[ &bob_fpr, &carol_fpr ]); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&bob_fpr).unwrap(), 1, 100, &[ &bob_fpr, &dave_fpr ]); let auth = q.backward_propagate(ed_fpr.clone(), ed_uid.clone(), false, &IdempotentCertificationFilter::new()); // There is no path, because ed@example.org does not match // the constraint on dave (domain: other.org). assert!(auth.get(&bob_fpr).is_none()); let auth = q.backward_propagate(frank_fpr.clone(), frank_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&bob_fpr).unwrap(), 0, 100, &[ &bob_fpr, &dave_fpr, &frank_fpr ]); let auth = q.backward_propagate(george_fpr.clone(), george_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&bob_fpr).unwrap(), 0, 100, &[ &bob_fpr, &dave_fpr, &george_fpr ]); let auth = q.backward_propagate(henry_fpr.clone(), henry_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&bob_fpr).unwrap(), 1, 100, &[ &bob_fpr, &henry_fpr ]); // dave as root. let auth = q.backward_propagate(ed_fpr.clone(), ed_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&dave_fpr).unwrap(), 1, 100, &[ &dave_fpr, &ed_fpr ]); let auth = q.backward_propagate(frank_fpr.clone(), frank_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&dave_fpr).unwrap(), 1, 100, &[ &dave_fpr, &frank_fpr ]); let auth = q.backward_propagate(george_fpr.clone(), george_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&dave_fpr).unwrap(), 1, 100, &[ &dave_fpr, &george_fpr ]); Ok(()) } #[test] #[allow(unused)] fn multiple_userids_1() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "03182611B91B1E7E20B848E83DFC151ABFAD85D5" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let bob_some_org_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let carol_fpr: Fingerprint = "9CA36907B46FE7B6B9EE9601E78064C12B6D7902" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 03182611B91B1E7E20B848E83DFC151ABFAD85D5 let dave_fpr: Fingerprint = "C1BC6794A6C6281B968A6A41ACE2055D610CEA03" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 9CA36907B46FE7B6B9EE9601E78064C12B6D7902 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("multiple-userids-1.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); /// Tests. let auth = q.backward_propagate(carol_fpr.clone(), carol_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 0, 70, &[ &alice_fpr, &bob_fpr, &carol_fpr ]); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 0, 50, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr ]); Ok(()) } #[test] #[allow(unused)] fn multiple_userids_2() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "F1C99C4019837703DD17C45440F8A0141DF278EA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "5528B9E5DAFC519ED2E37F0377B332E4111456CB" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: F1C99C4019837703DD17C45440F8A0141DF278EA let bob_some_org_uid = UserID::from(""); // Certified by: F1C99C4019837703DD17C45440F8A0141DF278EA let carol_fpr: Fingerprint = "6F8291428420AB53576BAB4BEFF6477D3E348D71" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 5528B9E5DAFC519ED2E37F0377B332E4111456CB let dave_fpr: Fingerprint = "62C57D90DAD253DEA01D5A86C7382FD6285C18F0" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 6F8291428420AB53576BAB4BEFF6477D3E348D71 let ed_fpr: Fingerprint = "0E974D0ACBA0C4D8F51D7CF68F048FF83B173504" .parse().expect("valid fingerprint"); let ed_uid = UserID::from(""); // Certified by: 6F8291428420AB53576BAB4BEFF6477D3E348D71 let frank_fpr: Fingerprint = "5BEE3D41F85B2FCBC300DE4E18CB2BDA65465F03" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // Certified by: 5528B9E5DAFC519ED2E37F0377B332E4111456CB let certs: Vec = CertParser::from_bytes( &crate::testdata::data("multiple-userids-2.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); /// Tests. let auth = q.backward_propagate(bob_fpr.clone(), bob_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), Depth::unconstrained(), 70, &[ &alice_fpr, &bob_fpr ]); let auth = q.backward_propagate(bob_fpr.clone(), bob_some_org_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 1, 50, &[ &alice_fpr, &bob_fpr ]); let auth = q.backward_propagate(carol_fpr.clone(), carol_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 0, 50, &[ &alice_fpr, &bob_fpr, &carol_fpr ]); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 0, 70, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr ]); let auth = q.backward_propagate(ed_fpr.clone(), ed_uid.clone(), false, &IdempotentCertificationFilter::new()); assert!(auth.get(&alice_fpr).is_none()); let auth = q.backward_propagate(frank_fpr.clone(), frank_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 0, 70, &[ &alice_fpr, &bob_fpr, &frank_fpr ]); Ok(()) } #[test] #[allow(unused)] fn multiple_certifications_1() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "9219941467AA737C6EC1207959A2CEFC112C359A" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "72CAA0F0A4A020F5FA20CD8CB5CC04473AA88123" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 9219941467AA737C6EC1207959A2CEFC112C359A // Certified by: 9219941467AA737C6EC1207959A2CEFC112C359A // Certified by: 9219941467AA737C6EC1207959A2CEFC112C359A let carol_fpr: Fingerprint = "853304031E7B0B116BBD0B398734F11945313904" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 72CAA0F0A4A020F5FA20CD8CB5CC04473AA88123 let dave_fpr: Fingerprint = "4C77ABDBE4F855E0C3C7A7D549F6B2BFDA83E424" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 853304031E7B0B116BBD0B398734F11945313904 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("multiple-certifications-1.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); /// Tests. let auth = q.backward_propagate(carol_fpr.clone(), carol_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 0, 70, &[ &alice_fpr, &bob_fpr, &carol_fpr ]); let auth = q.backward_propagate(dave_fpr.clone(), dave_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 0, 50, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr ]); Ok(()) } #[test] #[allow(unused)] fn multiple_userids_3() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "DA3CFC60BD4B8835702A66782C7A431946C12DF7" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "28C108707090FCDFF630D1E141FB02F0E397D55E" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: DA3CFC60BD4B8835702A66782C7A431946C12DF7 let bob_some_org_uid = UserID::from(""); // Certified by: DA3CFC60BD4B8835702A66782C7A431946C12DF7 let bob_third_org_uid = UserID::from(""); let carol_fpr: Fingerprint = "9FB1D2F41AB5C478378E728C8DD5A5A434EEAAB8" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 28C108707090FCDFF630D1E141FB02F0E397D55E let dave_fpr: Fingerprint = "0C131F8959F45D08B6136FDAAD2E16A26F73D48E" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 28C108707090FCDFF630D1E141FB02F0E397D55E let ed_fpr: Fingerprint = "296935FAE420CCCF3AEDCEC9232BFF0AE9A7E5DB" .parse().expect("valid fingerprint"); let ed_uid = UserID::from(""); // Certified by: 0C131F8959F45D08B6136FDAAD2E16A26F73D48E let frank_fpr: Fingerprint = "A72AA1B7D9D8CB04D988F1520A404E37A7766608" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // Certified by: 9FB1D2F41AB5C478378E728C8DD5A5A434EEAAB8 // Certified by: 296935FAE420CCCF3AEDCEC9232BFF0AE9A7E5DB let certs: Vec = CertParser::from_bytes( &crate::testdata::data("multiple-userids-3.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(&certs, p, None)?; let q = Query::new(&n, Roots::empty()); eprintln!("{:?}", n); /// Tests. let auth = q.backward_propagate(frank_fpr.clone(), frank_uid.clone(), false, &IdempotentCertificationFilter::new()); pcmp(&q, auth.get(&alice_fpr).unwrap(), 0, 20, &[ &alice_fpr, &bob_fpr, &carol_fpr, &frank_fpr ]); Ok(()) } } sequoia-wot-0.11.0/src/cert.rs000064400000000000000000000117201046102023000142530ustar 00000000000000use std::fmt; use std::time::SystemTime; use sequoia_openpgp as openpgp; use openpgp::cert::ValidCert; use openpgp::Fingerprint; use openpgp::KeyHandle; use openpgp::KeyID; use crate::UserIDSynopsis; use crate::RevocationStatus; /// Encapsulates an OpenPGP certificate. /// /// This holds the information about a certificate that is relevant /// to web of trust calculations. #[derive(Debug, Clone)] pub struct CertSynopsis { fingerprint: Fingerprint, // The certificate's expiration time as of the reference time. // This is only used as a boolean, but preserving the actual time // is useful for debugging. expiration_time: Option, revocation_status: RevocationStatus, userids: Vec, } impl<'a> From<&ValidCert<'a>> for CertSynopsis { fn from(vc: &ValidCert<'a>) -> Self { CertSynopsis { fingerprint: vc.fingerprint(), expiration_time: vc.primary_key().key_expiration_time(), revocation_status: vc.revocation_status().into(), userids: vc.userids().map(|ua| ua.into()).collect(), } } } impl<'a> From> for CertSynopsis { fn from(vc: ValidCert<'a>) -> Self { (&vc).into() } } impl fmt::Display for CertSynopsis { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_fmt( format_args!( "{} ({})", self.fingerprint, self.primary_userid() .map(|userid| { format!("{}{}", String::from_utf8_lossy(userid.value()), match userid.revocation_status() { RevocationStatus::NotAsFarAsWeKnow => "", RevocationStatus::Hard => " (hard revoked)", RevocationStatus::Soft(_t) => " (soft revoked)", }) }) .unwrap_or_else(|| "".into()))) } } impl CertSynopsis { /// Returns a new CertSynopsis. /// /// User IDs are the certificate's valid (not revoked), /// self-signed User IDs. /// /// The first User ID must be the primary User ID. /// /// # Examples /// /// ``` /// use std::iter; /// /// use sequoia_openpgp as openpgp; /// use openpgp::Fingerprint; /// use openpgp::parse::Parse; /// /// use sequoia_wot::CertSynopsis; /// use sequoia_wot::UserIDSynopsis; /// use sequoia_wot::RevocationStatus; /// /// let alice_fpr: Fingerprint = /// "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" /// .parse().expect("valid fingerprint"); /// let alice_uid /// = UserIDSynopsis::from(""); /// /// CertSynopsis::new( /// alice_fpr, None, RevocationStatus::NotAsFarAsWeKnow, /// iter::once(alice_uid)); /// ``` pub fn new(fingerprint: Fingerprint, expiration_time: Option, revocation_status: RevocationStatus, userids: I) -> Self where I: Iterator, U: Into, { Self { fingerprint, expiration_time, revocation_status, userids: userids.map(Into::into).collect() } } /// Returns the certificate's fingerprint. pub fn fingerprint(&self) -> Fingerprint { self.fingerprint.clone() } /// Returns the certificate's Key ID. pub fn keyid(&self) -> KeyID { KeyID::from(&self.fingerprint) } /// Returns the certificate's key handle. pub fn key_handle(&self) -> KeyHandle { KeyHandle::from(&self.fingerprint) } /// Returns the expiration time. pub fn expiration_time(&self) -> Option { self.expiration_time.clone() } /// Returns the certificate's revocation status. pub fn revocation_status(&self) -> RevocationStatus { self.revocation_status.clone() } /// Returns the certificate's primary User ID, if any. pub fn primary_userid(&self) -> Option<&UserIDSynopsis> { self.userids().next() } /// Returns an iterator over the certificate's User IDs. /// /// Only valid, self-signed User IDs are returned. /// /// The primary User ID is returned first. pub fn userids<'a>(&'a self) -> impl Iterator + 'a { self.userids.iter() } /// Return a human readable identifier that may not uniquely /// identify the certificate. /// /// This is useful for debugging. pub(crate) fn display(&self) -> String { self.primary_userid() .map(|userid| { String::from_utf8_lossy(userid.value()).into_owned() }) .unwrap_or_else(|| "".into()) } } sequoia-wot-0.11.0/src/certification.rs000064400000000000000000001407251046102023000161510ustar 00000000000000use std::borrow::Cow; use std::cmp::Ordering; use std::collections::HashMap; use std::collections::hash_map::Entry; use std::fmt; use std::time::SystemTime; use std::time::Duration; use sequoia_openpgp as openpgp; use openpgp::cert::prelude::*; use openpgp::KeyHandle; use openpgp::packet::UserID; use openpgp::regex::RegexSet; use openpgp::packet::Signature; use openpgp::policy::HashAlgoSecurity; use crate::CertSynopsis; use crate::format_time; use crate::Result; use crate::RevocationStatus; use crate::TRACE; /// [`Certification`] specific error codes. #[non_exhaustive] #[derive(thiserror::Error, Debug)] pub enum CertificationError { /// No creation time. /// /// The certification is invalid, because it does not include the /// required CreationTime subpacket. #[error("{0}: invalid, missing creation time")] MissingCreationTime(Certification), /// The certification violates the policy. #[error("{0}: policy violation")] InvalidCertification(Certification, #[source] anyhow::Error), #[error("{0}: issuer revoked the certification")] IssuerRevoked(Certification), #[error("{0}: certification created after reference time ({})", format_time(.1))] BornLater(Certification, SystemTime), /// The certification is expired (1) as of the reference time (2). #[error("{0}: certification expired ({}) as of reference time ({})", format_time(.1), format_time(.2))] CertificationExpired(Certification, SystemTime, SystemTime), #[error("{0}: target is not live \ as of the certification time ({})", format_time(.1))] TargetNotLive(Certification, SystemTime, #[source] anyhow::Error), #[error("{0}: target certificate is not valid \ as of the reference time ({})", format_time(.1))] TargetNotValid(Certification, SystemTime, #[source] anyhow::Error), #[error("{0}: issuer certificate is hard revoked: {1} ({})", String::from_utf8_lossy(.2))] IssuerHardRevoked(Certification, openpgp::types::ReasonForRevocation, Vec), #[error("{0}: issuer certificate is soft revoked \ as of the certification time ({}): {2} ({})", format_time(.1), String::from_utf8_lossy(.3))] IssuerSoftRevoked(Certification, SystemTime, openpgp::types::ReasonForRevocation, Vec), #[error("{0}: target certificate is hard revoked: {1} ({})", String::from_utf8_lossy(.2))] TargetHardRevoked(Certification, openpgp::types::ReasonForRevocation, Vec), #[error("{0}: target certificate is soft revoked \ as of the certification time ({}): {2} ({})", format_time(.1), String::from_utf8_lossy(.3))] TargetSoftRevoked(Certification, SystemTime, openpgp::types::ReasonForRevocation, Vec), } /// Trust depth. /// /// A certification may include a [trust signature subpacket], which /// specifies that the issuer not only considers the target binding to /// be correct, but that they are also willing to rely on certifications /// that the target certificate makes. That is, if Alice designates /// Bob as a trusted introducer, than if Carol is willing to rely on /// Alice's certifications, she should also be willing to rely on /// Bob's. /// /// The trust depth is one of two parameters stored in the trust /// signature subpacket, and indicates how far that capability may be /// delegated. A value of zero means that the certification is /// actually a normal certification, and the target is *not* a trusted /// introducer. A value of one means that the target certificate /// should be considered a trusted introducer, but it may not further /// delegate that capability. A value of two means that the target /// certificate should be considered a trusted introducer, and that it /// may delegate that capability to another certificate, but they may /// not further delegate it. In short, a value of `n` means that /// there may be up to `n` intervening trusted introducers between the /// issuer and the target binding: /// /// - 0: Normal certification. /// - 1: Trusted introducer. /// - 2: Meta-introducer. /// - etc. /// /// A value of 255, the maximum value that can be stored in the /// OpenPGP data structure, has a special meaning: the issuer does not /// impose a constraint on the number of delegations. /// /// This data structure does not automatically convert a value of 255 /// to `Depth::Unconstrained`; the caller must specify /// `Depth::Unconstrained` explicitly. /// /// [trust signature subpacket]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.3.13 #[derive(Debug, Clone, Copy, Eq)] pub enum Depth { Unconstrained, Limit(usize), } impl Depth { pub fn new(depth: I) -> Self where I: Into> { if let Some(d) = depth.into() { Depth::Limit(d) } else { Depth::Unconstrained } } /// Returns an unconstrained `Depth`. pub fn unconstrained() -> Self { Depth::Unconstrained } /// Returns whether this `Depth` is unconstrained. pub fn is_unconstrained(&self) -> bool { matches!(self, Depth::Unconstrained) } /// Converts the `Depth` to an `Option`. /// /// An unconstrained depth is converted to `None`. A constrained /// depth of `d` is converted to `Some(d)`. pub fn limit(&self) -> Option { match self { Depth::Unconstrained => None, Depth::Limit(d) => Some(*d), } } /// Decreases the depth by `value`. /// /// The depth must be at least as large as `value`. If the depth /// is unconstrained, decreasing the depth doesn't do anything. pub fn decrease(&self, value: usize) -> Depth { match self { Depth::Unconstrained => { // Still unconstrained. Depth::Unconstrained } Depth::Limit(d) => { assert!(*d >= value); Depth::Limit(d - value) } } } } impl fmt::Display for Depth { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { Depth::Unconstrained => write!(f, "unconstrained"), Depth::Limit(d) => write!(f, "{}", d), } } } impl From for Depth { fn from(d: usize) -> Self { Depth::new(d) } } impl From> for Depth { fn from(d: Option) -> Self { Depth::new(d) } } impl PartialOrd for Depth { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } impl Ord for Depth { fn cmp(&self, other: &Self) -> Ordering { match (self, other) { (Depth::Unconstrained, Depth::Unconstrained) => Ordering::Equal, (Depth::Limit(_), Depth::Unconstrained) => Ordering::Less, (Depth::Unconstrained, Depth::Limit(_)) => Ordering::Greater, (Depth::Limit(x), Depth::Limit(y)) => x.cmp(&y), } } } impl PartialEq for Depth { fn eq(&self, other: &Self) -> bool { self.cmp(other) == Ordering::Equal } } /// Encapsulates a certification. /// /// This data structure holds the information about a certification /// that is relevant to web of trust calculations. Note: this data /// structure includes the certification's context (the issuer and the /// certified binding), which is not included in an OpenPGP signature. /// /// If the User ID is None, then this is a delegation. #[derive(Clone)] pub struct Certification { issuer: CertSynopsis, target: CertSynopsis, // If None, it's a delegation. userid: Option, creation_time: SystemTime, expiration_time: Option, exportable: bool, /// 60: partial trust. /// 120: complete trust. amount: usize, /// Trust depth. depth: Depth, /// Scope. If None, then the Regexes are invalid and nothing /// should match. re_set: Option, /// RegexSet doesn't implement PartialEq. To allow Certification /// to implement PartialEq, we store the bytes. re_bytes: Vec>, /// The digest prefix. digest_prefix: Option<[u8; 2]>, } impl<'a> From<(&'a ValidCert<'a>, &'a ValidCert<'a>, &'a Signature)> for Certification { fn from(x: (&ValidCert, &ValidCert, &Signature)) -> Self { Certification::from_signature( x.0, x.1.primary_userid().ok().map(|ua| ua.userid().clone()), x.1, x.2) } } impl PartialEq for Certification { fn eq(&self, other: &Self) -> bool { self.issuer.fingerprint() == other.issuer.fingerprint() && self.target.fingerprint() == other.target.fingerprint() && self.userid == other.userid && self.creation_time == other.creation_time && self.expiration_time == other.expiration_time && self.exportable == other.exportable && self.amount == other.amount && self.depth == other.depth // RegexSet doesn't implement eq. && self.re_bytes == other.re_bytes // We explicitly don't check digest_prefix as we may not // have it. This isn't bad as if everything else the // same, they are the same! } } impl fmt::Display for Certification { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}by {} on {} at {}", if let Some(digest_prefix) = self.digest_prefix { format!("{:02X}{:02X} ", digest_prefix[0], digest_prefix[1]) } else { "".to_string() }, self.issuer.keyid(), self.target.keyid(), format_time(&self.creation_time)) } } impl fmt::Debug for Certification { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("Certification") .field("issuer", &self.issuer.fingerprint()) .field("target", &self.target) .field("userid", &self.userid.as_ref().map(|uid| { String::from_utf8_lossy(uid.value()).into_owned() }) .unwrap_or_else(|| "".into())) .field("creation time", &self.creation_time .duration_since(SystemTime::UNIX_EPOCH) .unwrap_or_else(|_| Duration::new(0, 0))) .field("expiration time", &if let Some(e) = self.expiration_time { format!("{:?}", e .duration_since(SystemTime::UNIX_EPOCH) .unwrap_or_else(|_| Duration::new(0, 0))) } else { "never".to_string() }) .field("amount", &self.amount) .field("depth", &self.depth) .field("regexes", &if let Some(re_set) = self.re_set.as_ref() { if re_set.matches_everything() { String::from("*") } else { format!("{:?}", &re_set) } } else { String::from("") }) .finish() } } impl Certification { /// Returns a `Certification`. /// /// The returned certification's amount is set to 120 (fully /// trusted), its depth to 0 (it's not a trusted introducer), and /// no regular expression is set. /// /// # Examples /// /// `0xAA` (bob@example.org) certifies the binding `<0xBB, /// bob@example.org>`. /// /// ``` /// use std::iter; /// use std::time::SystemTime; /// /// use sequoia_openpgp as openpgp; /// use openpgp::Fingerprint; /// use openpgp::parse::Parse; /// /// use sequoia_wot::CertSynopsis; /// use sequoia_wot::UserIDSynopsis; /// use sequoia_wot::Certification; /// use sequoia_wot::RevocationStatus; /// /// let alice_fpr: Fingerprint = /// "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" /// .parse().expect("valid fingerprint"); /// let alice_uid /// = UserIDSynopsis::from(""); /// /// let bob_fpr: Fingerprint = /// "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" /// .parse().expect("valid fingerprint"); /// let bob_uid /// = UserIDSynopsis::from(""); /// /// let alice = CertSynopsis::new( /// alice_fpr, None, RevocationStatus::NotAsFarAsWeKnow, /// iter::once(alice_uid)); /// let bob = CertSynopsis::new( /// bob_fpr, None, RevocationStatus::NotAsFarAsWeKnow, /// iter::once(bob_uid.clone())); /// /// let c = Certification::new( /// alice, Some(bob_uid.userid().clone()), bob, /// SystemTime::now()); /// ``` pub fn new(issuer: C1, userid: Option, target: C2, creation_time: SystemTime) -> Self where C1: Into, U: Into, C2: Into, { let issuer = issuer.into(); let target = target.into(); Certification { issuer: issuer, userid: userid.map(Into::into), target: target, creation_time: creation_time, expiration_time: None, exportable: true, depth: Depth::new(0), amount: 120, re_set: RegexSet::everything().ok(), re_bytes: Vec::new(), digest_prefix: None, } } /// Creates a `Certification` from a `Signature`. /// /// `userid` and `target` are the certified binding. If no User /// ID is supplied, this is interpreted as a delegation. /// /// The signature is assumed to be valid. /// /// If the signature does not have a signature creation time /// (which technically makes the signature [invalid]), it defaults /// to the [Unix epoch]. /// /// [invalid]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.3.4 /// [Unix epoch]: https://en.wikipedia.org/wiki/Unix_time pub fn from_signature(issuer: C1, userid: Option, target: C2, sig: &Signature) -> Self where C1: Into, U: Into, C2: Into, { let (d, a, r) = if let Some((d, a)) = sig.trust_signature() { (d as usize, a as usize, Some(sig.regular_expressions())) } else { (0, 120, None) }; let mut c = Self::new(issuer, userid, target, sig.signature_creation_time() .unwrap_or(std::time::UNIX_EPOCH)) .set_amount(a) .set_depth(Depth::new(if d == 255 { None } else { Some(d) })); if let Some(r) = r { let r: Vec<&[u8]> = r.collect(); c = c.set_regular_expressions(r.iter().cloned()); c.re_bytes = r.into_iter().map(<[u8]>::to_vec).collect(); } if let Some(e) = sig.signature_expiration_time() { c = c.set_expiration_time(Some(e)); } c = c.set_exportable(sig.exportable_certification().unwrap_or(true)); c.digest_prefix = Some(*sig.digest_prefix()); c } /// Returns a certification, if the certification is valid. /// /// This function is different from /// `Certification::from_signature`, which works with Synopses, /// and assumes the certification is valid. This function checks /// that the certification is valid, and only returns a /// `Certification` if that is the case. /// /// Note a signature may have multiple [Issuer] or Issuer /// Fingerprint packets. This function ignores those and checks /// whether the provided certificate issued the certificate. /// Normally, you'll want to call this function in a loop, once /// for each of the alleged issuers. /// /// [Issuer]: https://www.rfc-editor.org/rfc/rfc4880#section-5.2.3.5 pub fn try_from_signature(possible_issuer: &ValidCert, ua: Option<&UserIDAmalgamation>, target: &ValidCert, certification: &Signature) -> Result { tracer!(TRACE, "Certification::try_from_signature"); let reference_time = target.time(); let certification_time = if let Some(t) = certification.signature_creation_time() { t } else { return Err(CertificationError::MissingCreationTime( (possible_issuer, target, certification).into()).into()); }; let verify = |possible_issuer: &ValidCert| -> Result { if let Err(err) = target.policy() .signature( certification, HashAlgoSecurity::CollisionResistance) { return Err(CertificationError::InvalidCertification( (possible_issuer, target, certification).into(), err).into()); } if let Some(ref ua) = ua { certification .clone() .verify_userid_binding( possible_issuer.primary_key().key(), target.primary_key().key(), ua.userid())?; } else { certification .clone() .verify_direct_key( possible_issuer.primary_key().key(), target.primary_key().key())?; } // Ignore if the issuer is not alive at the // certification time (not the reference time!). let possible_issuer_then = possible_issuer.clone().with_policy( possible_issuer.policy(), certification_time)?; if let Err(err) = possible_issuer_then.alive() { t!("Skipping certification {:02X}{:02X}: issuer \ was not alive at certification time.", certification.digest_prefix()[0], certification.digest_prefix()[1]); return Err(err.context( "issuer not alive at certification time")); } // Ignore if the issuer was revoked at the // certification time (not the reference time!). let rs = possible_issuer_then.revocation_status(); if let openpgp::types::RevocationStatus::Revoked(ref revs) = rs { // We know we have at least one revocation. let reason = revs.iter().next().expect("have one") .reason_for_revocation(); let msg = reason .map(|r| r.1.to_vec()) .unwrap_or(Vec::new()); let code = reason .map(|r| r.0) .unwrap_or(openpgp::types::ReasonForRevocation::Unspecified); match RevocationStatus::from(rs) { RevocationStatus::Hard => { t!("Skipping certification {:02X}{:02X}: issuer \ was hard revoked.", certification.digest_prefix()[0], certification.digest_prefix()[1]); return Err(CertificationError::IssuerHardRevoked( (possible_issuer, target, certification).into(), code, msg).into()); } RevocationStatus::Soft(rev_time) => { if rev_time <= certification_time { t!("Skipping certification {:02X}{:02X}: issuer \ was soft revoked at certification time.", certification.digest_prefix()[0], certification.digest_prefix()[1]); return Err(CertificationError::IssuerSoftRevoked( (possible_issuer, target, certification).into(), certification_time, code, msg).into()); } } RevocationStatus::NotAsFarAsWeKnow => unreachable!(), } } let issuer: KeyHandle = possible_issuer.fingerprint().into(); // Ignore if the issuer later revoked the // certification. if let Some(ua) = ua { for rev in ua.other_revocations() { // We have a UserIDAmalgamation, not a // ValidUserIDAmalgamation, so we need to check // that the revocation is valid under the current // policy ourselves. if target.policy() .signature( // XXX: Is this right for revocations? rev, HashAlgoSecurity::CollisionResistance) .is_err() { continue; } // All User ID revocations are soft // revocations. So if the User ID was later // recertified, that's okay. if let Some(rev_time) = rev.signature_creation_time() { if rev_time > reference_time { // Revocation is not yet live. Ignore it. continue; } if rev_time <= certification_time { // Certification is newer than the // revocation. Ignore the revocation. continue; } } else { // Invalid signature. continue; }; // We explicitly ignore any expiration on // revocations. // Check that the issuer actually issued this // revocation. if rev.get_issuers().iter().any(|kh| { kh.aliases(&issuer) }) { if let Ok(()) = rev .clone() .verify_userid_revocation( possible_issuer.primary_key().key(), target.primary_key().key(), ua.userid()) { t!("issuer revoked certification, ignoring"); return Err( CertificationError::IssuerRevoked(( possible_issuer, target, certification).into()) .into()); } } } } let (depth, amount, re_set) = if let Some((d, a)) = certification.trust_signature() { (d, a, RegexSet::from_signature(certification) .expect("internal error")) } else { (0, 120, RegexSet::everything() .expect("internal error")) }; t!("<{}, {}> {} <{}, {}> \ (depth: {}, amount: {}, scope: {:?})", possible_issuer.keyid(), possible_issuer .primary_userid() .map(|ua| { String::from_utf8_lossy(ua.value()).into_owned() }) .unwrap_or("[no User ID]".into()), if depth > 0 { "tsigned" } else { "certified" }, target.keyid(), ua.map(|ua| String::from_utf8_lossy(ua.userid().value())) .unwrap_or(Cow::Borrowed("(delegation)")), depth, amount, if re_set.matches_everything() { "*".into() } else { format!("{:?}", re_set) }); Ok(Certification::from_signature( possible_issuer, ua.map(|ua| ua.userid().clone()), target, certification)) }; // Ignore if the certification is not alive at the // reference time. if reference_time < certification_time { t!("Skipping certification {:02X}{:02X}: \ created ({:?}) after reference time ({:?}).", certification.digest_prefix()[0], certification.digest_prefix()[1], certification_time, reference_time); return Err(CertificationError::BornLater( (possible_issuer, target, certification).into(), reference_time).into()); } if let Some(e) = certification.signature_expiration_time() { if e <= reference_time { t!("Skipping certification {:02X}{:02X}: \ expired ({:?}) as of reference time ({:?}).", certification.digest_prefix()[0], certification.digest_prefix()[1], e, reference_time); return Err(CertificationError::CertificationExpired( (possible_issuer, target, certification).into(), e, reference_time).into()); } } let target_then = match target.clone() .with_policy(target.policy(), certification_time) { Ok(vc) => vc, Err(err) => { t!("Skipping certification {:02X}{:02X}: target \ was not valid at certification time: {}.", certification.digest_prefix()[0], certification.digest_prefix()[1], err); return Err(CertificationError::TargetNotValid( (possible_issuer, target, certification).into(), reference_time, err).into()); } }; // Ignore if the target is not alive at the // certification time (not the reference time!). if let Err(err) = target_then.alive() { t!("Skipping certification {:02X}{:02X}: target \ not alive at certification time: {}.", certification.digest_prefix()[0], certification.digest_prefix()[1], err); return Err(CertificationError::TargetNotLive( (possible_issuer, target, certification).into(), certification_time, err).into()); } // Ignore if the target was revoked at the // certification time (not the reference time!). let rs = target_then.revocation_status(); if let openpgp::types::RevocationStatus::Revoked(ref revs) = rs { // We know we have at least one revocation. let reason = revs.iter().next().expect("have one") .reason_for_revocation(); let msg = reason .map(|r| r.1.to_vec()) .unwrap_or(Vec::new()); let code = reason .map(|r| r.0) .unwrap_or(openpgp::types::ReasonForRevocation::Unspecified); match RevocationStatus::from(rs) { RevocationStatus::Hard => { t!("Skipping certification {:02X}{:02X}: target \ was hard revoked at certification time.", certification.digest_prefix()[0], certification.digest_prefix()[1]); return Err(CertificationError::TargetHardRevoked( (possible_issuer, target, certification).into(), code, msg).into()); } RevocationStatus::Soft(rev_time) => { if rev_time <= certification_time { t!("Skipping certification {:02X}{:02X}: target \ was soft revoked at certification time.", certification.digest_prefix()[0], certification.digest_prefix()[1]); return Err(CertificationError::TargetSoftRevoked( (possible_issuer, target, certification).into(), certification_time, code, msg).into()); } } RevocationStatus::NotAsFarAsWeKnow => unreachable!(), } } match verify(&possible_issuer) { Ok(certification) => { t!("Using certification \ by {} for <{:?}, {}> at {:?}: \ {}/{}.", possible_issuer, ua.map(|ua| String::from_utf8_lossy(ua.userid().value())) .unwrap_or(Cow::Borrowed("(delegation)")), target.keyid(), certification.creation_time(), certification.depth(), certification.amount()); Ok(certification) } Err(err) => { t!("Invalid certification {:02X}{:02X} \ by {} for <{:?}, {}>: {}", certification.digest_prefix()[0], certification.digest_prefix()[1], possible_issuer, ua.map(|ua| String::from_utf8_lossy(ua.userid().value())) .unwrap_or(Cow::Borrowed("(delegation)")), target.keyid(), err); Err(err) } } } /// Returns the certification's issuer. pub fn issuer(&self) -> &CertSynopsis { &self.issuer } /// Returns the certification's target certificate. pub fn target(&self) -> &CertSynopsis { &self.target } /// Returns the certification's target UserID, if any. pub fn userid(&self) -> Option<&UserID> { self.userid.as_ref() } /// Returns the certification's creation time. pub fn creation_time(&self) -> SystemTime { self.creation_time } /// Returns the certification's expiration time, if any. pub fn expiration_time(&self) -> Option { self.expiration_time } /// Sets the certification's expiration time. pub fn set_expiration_time(mut self, expiration_time: I) -> Self where I: Into> { self.expiration_time = expiration_time.into(); self } /// Returns whether the certification is marked as exportable (i.e., /// not a so-called local signature). pub fn exportable(&self) -> bool { self.exportable } /// Sets whether the certification is marked as exportable (i.e., /// not a so-called local signature). pub fn set_exportable(mut self, exportable: bool) -> Self { self.exportable = exportable; self } /// Returns the certification's trust amount. pub fn amount(&self) -> usize { self.amount } /// Sets the certification's trust amount. pub fn set_amount(mut self, amount: usize) -> Self { self.amount = amount; self } /// Returns the certification's trust depth. pub fn depth(&self) -> Depth { self.depth } /// Sets the certification's trust depth. /// /// Note: this function does not automatically convert the value /// `255` to `Depth::Unconstrained`. pub fn set_depth(mut self, depth: I) -> Self where I: Into { self.depth = depth.into(); self } /// Returns the certification's regular expressions. /// /// If the signature has none, this returns a regular expression /// that matches everything. /// /// If any of the regular expressions were invalid, this returns /// `None`. pub fn regular_expressions(&self) -> Option<&RegexSet> { self.re_set.as_ref() } /// Returns the certification's regular expressions as a slice of /// byte strings. pub fn regular_expressions_bytes(&self) -> &[Vec] { &self.re_bytes[..] } /// Sets the certification's regular expressions. pub fn set_regular_expressions<'a>(mut self, re_set: impl Iterator) -> Self { let regexes: Vec<&[u8]> = re_set.collect(); self.re_set = RegexSet::from_bytes(®exes).ok(); self.re_bytes = regexes.into_iter().map(Into::into).collect(); self } /// Returns the certification's digest prefix, if it is known. pub fn digest_prefix(&self) -> Option<&[u8; 2]> { self.digest_prefix.as_ref() } } /// All active certifications that one certificate made on another. /// /// Encapsulates the *active* certifications with respect to a /// reference time that a certificate made on another certificate. /// For instance, if the certificate 0xB has two User IDs: B and B' /// and 0xA signed both, then this contains the latest certification /// for <0xA, B:0xB> and the latest certification for <0xA, B':0xB>. #[derive(Clone)] pub struct CertificationSet { // The certificate that issued the certifications. issuer: CertSynopsis, // The certificate that was signed. target: CertSynopsis, reference_time: SystemTime, // The certifications, keyed by the certified (target) User ID. // It is reasonable to have multiple certifications over the same // User ID if they all have the same timestamp. certifications: HashMap, Vec>, } impl CertificationSet { /// Returns an empty CertificationSet. pub(crate) fn empty(issuer: I, target: T, reference_time: SystemTime) -> Self where I: Into, T: Into, { Self { issuer: issuer.into(), target: target.into(), reference_time: reference_time, certifications: HashMap::new(), } } /// Returns a new CertificationSet with the supplied /// certification. pub fn from_certification(certification: Certification, reference_time: SystemTime) -> Self { let mut cs = CertificationSet::empty( certification.issuer.clone(), certification.target.clone(), reference_time); cs.add(certification); cs } /// Splits the supplied certifications into CertificationSets. /// /// This function splits the supplied [`Certification`]s into /// `CertificationSet`s. The certifications may come from /// different issuers, be for different targets, and over /// different User IDs (or just be delegations), and they will be /// added to an appropriate `CertificationSet`. /// /// Any invalid or unneeded certifications are silently pruned. /// For instance, this function discards certifications that were /// created after the reference time, or are expired as of the /// reference time. It also only keeps the most recent /// certifications for a given `` tuple. /// (Sometimes there are multiple certifications with the same /// timestamp. In this case, all of those certificates are kept.) pub fn from_certifications(mut certifications: Vec, reference_time: SystemTime) -> Vec { if certifications.is_empty() { return Vec::new(); } certifications.retain(|c| { // Keep it if it is born at or before the reference time c.creation_time <= reference_time // and it expires after the reference time. && c.expiration_time.map(|e| e > reference_time).unwrap_or(true) }); // Sort them so that they are grouped by , and with each group sorted so that the most recent // certification comes first. certifications.sort_unstable_by(|a, b| { a.issuer().fingerprint().cmp(&b.issuer().fingerprint()) .then(a.target().fingerprint().cmp(&b.target().fingerprint())) .then(a.userid().cmp(&b.userid())) .then(a.creation_time().cmp(&b.creation_time()).reverse()) }); // Create the CertificationSets. // The finished CertificationSets. let mut cs = Vec::new(); // The CertificationSet under construction. let mut acc: Vec<(Option, Vec)> = Vec::with_capacity(certifications.len().min(4)); for certification in certifications.into_iter() { let group = if let Some(last) = acc.last() { last } else { // First time through. acc.push((certification.userid().map(Clone::clone), vec![ certification ])); continue; }; let group_issuer = group.1[0].issuer(); let group_target = group.1[0].target(); let group_userid = group.0.as_ref(); let group_certification_time = group.1[0].creation_time(); if group_issuer.fingerprint() == certification.issuer().fingerprint() && group_target.fingerprint() == certification.target().fingerprint() { // Same CertificationSet. if group_userid == certification.userid() { // Same User ID. if group_certification_time == certification.creation_time() { // Same creation time, keep it. acc[0].1.push(certification); } else { // The certification is older than what we // have; ignore it. assert!(certification.creation_time() < group_certification_time); } } else { // Different User ID. Start a new group. acc.push((certification.userid().map(Clone::clone), vec![ certification ])); } } else { // New CertificationSet. let issuer = acc[0].1[0].issuer().clone(); let target = acc[0].1[0].target().clone(); cs.push( CertificationSet { issuer, target, reference_time, certifications: HashMap::from_iter(acc), }); // Reset the accumulator. acc = Vec::new(); // Start a new group. acc.push((certification.userid().map(Clone::clone), vec![ certification ])); } } // Don't forget to add the pending CertificationSet. let issuer = acc[0].1[0].issuer().clone(); let target = acc[0].1[0].target().clone(); cs.push( CertificationSet { issuer, target, reference_time, certifications: HashMap::from_iter(acc), }); cs } /// Returns the issuer's certificate. pub fn issuer(&self) -> &CertSynopsis { &self.issuer } /// Returns the target's certificate. pub fn target(&self) -> &CertSynopsis { &self.target } /// Returns the reference time. pub fn reference_time(&self) -> SystemTime { self.reference_time } /// Adds a certification to the CertificationSet. /// /// All certifications in a `CertificationSet` must be issued by /// the same certificate, and have the same reference time. /// /// Note: if there are multiple certifications for the same User /// ID, all are considered. Normally only the newest /// certification should be considered. But, there may be /// multiple such certifications. pub(crate) fn add(&mut self, certification: Certification) { // certification must be over the same certificate. if let Some((_, cs)) = self.certifications.iter().next() { for c in cs { assert_eq!(certification.issuer.fingerprint(), c.issuer.fingerprint()); assert_eq!(certification.target.fingerprint(), c.target.fingerprint()); } } match self.certifications.entry(certification.userid.clone()) { e @ Entry::Occupied(_) => { e.and_modify(|e| e.push(certification)); } e @ Entry::Vacant(_) => { e.or_insert([ certification ].into()); } } } /// Merges other into self. /// /// This function asserts that `self` and `other` are for the same /// issuer and target certificates. /// /// Note: if there are multiple certifications for the same User /// ID, all are considered. Normally only the newest /// certification should be considered. But, there may be /// multiple such certifications. pub(crate) fn merge(&mut self, other: Self) { assert_eq!(self.issuer.fingerprint(), other.issuer.fingerprint()); assert_eq!(self.target.fingerprint(), other.target.fingerprint()); assert_eq!(self.reference_time, other.reference_time); for (_, cs) in other.certifications.into_iter() { for c in cs { self.add(c); } } } /// Returns an iterator over all of the certifications. pub fn certifications(&self) -> impl Iterator, &[Certification])> { self.certifications.iter().map(|(userid, c)| (userid.as_ref(), &c[..])) } } #[cfg(test)] mod test { use super::*; use std::iter; use std::time::Duration; use std::time::SystemTime; use sequoia_openpgp as openpgp; use openpgp::Fingerprint; use openpgp::Result; use crate::CertSynopsis; use crate::Depth; #[test] fn depth() -> Result<()> { assert_eq!(Depth::new(0), Depth::new(0)); assert_eq!(Depth::new(10), Depth::new(10)); assert_eq!(Depth::new(None), Depth::new(None)); assert!(Depth::new(0) < Depth::new(1)); assert!(Depth::new(1) < Depth::new(10)); assert!(Depth::new(10) < Depth::new(None)); assert!(Depth::new(255) < Depth::new(None)); assert!(Depth::new(1000) < Depth::new(None)); assert!(Depth::new(1) > Depth::new(0)); assert!(Depth::new(10) > Depth::new(1)); assert!(Depth::new(None) > Depth::new(10)); assert!(Depth::new(None) > Depth::new(255)); assert!(Depth::new(None) > Depth::new(1000)); assert_eq!(std::cmp::min(Depth::new(0), Depth::new(10)), Depth::new(0)); assert_eq!(std::cmp::min(Depth::new(0), Depth::new(None)), Depth::new(0)); assert_eq!(std::cmp::min(Depth::new(1000), Depth::new(None)), Depth::new(1000)); assert_eq!(std::cmp::min(Depth::new(10), Depth::new(0)), Depth::new(0)); assert_eq!(std::cmp::min(Depth::new(None), Depth::new(0)), Depth::new(0)); assert_eq!(std::cmp::min(Depth::new(None), Depth::new(1000)), Depth::new(1000)); assert_eq!(std::cmp::min(Depth::new(None), Depth::new(None)), Depth::new(None)); Ok(()) } #[test] fn certification_set_from_certifications() -> Result<()> { use openpgp::types::RevocationStatus; let alice_fpr: Fingerprint = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let alice = CertSynopsis::new( alice_fpr.clone(), None, RevocationStatus::NotAsFarAsWeKnow.into(), iter::once((alice_uid.clone(), SystemTime::now()))); let bob_fpr: Fingerprint = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); let bob = CertSynopsis::new( bob_fpr.clone(), None, RevocationStatus::NotAsFarAsWeKnow.into(), iter::once((bob_uid.clone(), SystemTime::now()))); let carol_fpr: Fingerprint = "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); let carol = CertSynopsis::new( carol_fpr.clone(), None, RevocationStatus::NotAsFarAsWeKnow.into(), iter::once((carol_uid.clone(), SystemTime::now()))); let t = SystemTime::now(); let certifications = vec![ // Alice certifies Bob. Certification::new(alice.clone(), Some(bob_uid.clone()), bob.clone(), t), // Alice certifies Bob a second time at the same time. Certification::new(alice.clone(), Some(bob_uid.clone()), bob.clone(), t), // Alice certifies Bob a third time at an earlier time // (this should be ignore because the other two signatures // are valid). Certification::new(alice.clone(), Some(bob_uid.clone()), bob.clone(), t - Duration::new(1, 0)), // Alice certifies Bob a fourth time, but in the future // (this should be ignore, because it is after the // reference time). Certification::new(alice.clone(), Some(bob_uid.clone()), bob.clone(), t + Duration::new(1, 0)), // Alice certifies Carol. Certification::new(alice.clone(), Some(carol_uid.clone()), carol.clone(), t), // Bob certifies Carol. Certification::new(bob.clone(), Some(carol_uid.clone()), carol.clone(), t), // Bob certifies Carol for "alice", which Carol did not // self sign. Certification::new(bob.clone(), Some(alice_uid.clone()), carol.clone(), t), ]; let mut cs = CertificationSet::from_certifications(certifications, t); // We should have 3 CertificationSets: // // - Alice -> Bob // - Alice -> Carol // - Bob -> Carol assert_eq!(cs.len(), 3); cs.sort_by_key(|c| { (c.issuer().fingerprint(), c.target().fingerprint()) }); // - Alice -> Bob assert_eq!(cs[0].issuer().fingerprint(), alice_fpr); assert_eq!(cs[0].target().fingerprint(), bob_fpr); // Two active certifications on one User ID. assert_eq!(cs[0].certifications().count(), 1); assert_eq!(cs[0].certifications().next().unwrap().1.len(), 2); // - Alice -> Carol assert_eq!(cs[1].issuer().fingerprint(), alice_fpr); assert_eq!(cs[1].target().fingerprint(), carol_fpr); // One active certifications on one User ID. assert_eq!(cs[1].certifications().count(), 1); assert_eq!(cs[1].certifications().next().unwrap().1.len(), 1); // - Bob -> Carol assert_eq!(cs[2].issuer().fingerprint(), bob_fpr); assert_eq!(cs[2].target().fingerprint(), carol_fpr); // One active certifications on each of two User IDs. assert_eq!(cs[2].certifications().count(), 2); assert_eq!(cs[2].certifications().next().unwrap().1.len(), 1); assert_eq!(cs[2].certifications().nth(1).unwrap().1.len(), 1); Ok(()) } } sequoia-wot-0.11.0/src/cli.rs000064400000000000000000000517221046102023000140730ustar 00000000000000/// Command-line parser for sq-wot. use std::path::PathBuf; use std::ops::Deref; use clap::{Parser, ValueEnum}; use crate::openpgp; use openpgp::KeyHandle; use openpgp::Result; use openpgp::packet::UserID; pub const DEFAULT_OUTPUT_FORMAT: &str = "human-readable"; pub const KEYSERVER_DEFAULT: &'static str = "hkps://keyserver.ubuntu.com"; #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum)] /// Supported output types pub enum OutputFormat { #[cfg(feature = "dot-writer")] /// output in graphviz's DOT format Dot, /// output in human readable format HumanReadable, } /// A command-line frontend for Sequoia's web-of-trust engine. /// /// This program presents a CLI to query a web-of-trust network. /// /// Functionality is grouped and available using subcommands. /// Currently, this interface is stateless. Therefore, you need to /// supply all configuration and certificates explicitly on each /// invocation. /// /// OpenPGP data can be provided in binary or ASCII armored form. This /// will be handled automatically. /// /// We use the term `certificate`, or cert for short, to refer to /// OpenPGP keys that do not contain secret key material. We reserve /// the term `key` for OpenPGP certificates that also contain secret /// key material. /// /// By default, `sq-wot` reads a cryptographic configuration policy /// from `/etc/crypto-policies/back-ends/sequoia.config`. This /// behavior can be overridden by setting the environment variable /// `SEQUOIA_CRYPTO_POLICY` to the absolute path of an alternate /// configuration file to read, or to the empty string to force /// `sq-wot` to use the default policy. The syntax of the /// configuration file is described in the [`sequoia-policy-config` /// crate's documentation]. /// /// [`sequoia-policy-config` crate's documentation]: https://docs.rs/sequoia-policy-config/latest/sequoia_policy_config/ #[derive(Parser)] #[command(author, version, about, long_about = None)] pub struct Cli { /// Uses gpg's keyring and gpg's trust roots. /// /// When this option is set, `sq-wot` reads gpg's keyring and /// gpg's ownertrust. This is equivalent to passing /// `--gpg-keyring` and `--gpg-ownertrust`. #[arg(global=true, long)] pub gpg: bool, /// Adds KEYRING to the list of keyrings /// /// The keyrings are read at start up and used to build a web of /// trust network. Note: if a certificate occurs multiple times, /// the first version is taken; they are not currently merged. #[arg(global=true, short='k', long, value_name="FILE")] pub keyring: Option>, /// Adds GnuPG's keyring to the list of keyrings. /// /// This option causes `sq-wot` to read gpg's keyring, by parsing /// the output of `gpg --export --export-options /// export-local-sigs`. #[arg(global=true, long)] pub gpg_keyring: bool, /// Looks up missing certificates over the network. /// /// This causes `sq-wot` to look up missing certificates on a key /// server. The default key server can be overridden using the /// `--keyserver` option. /// /// Certificates fetched from a key server are cached locally in /// the default cert-d. The default cert-d is also checked prior /// to fetching a certificate from the key server. #[arg(global=true, long)] pub network: bool, /// Sets the keyserver to use to KEYSERVER. /// /// This option only makes sense when used in conjunction with the /// `--network` option. Currently, it is only possible to set a /// single keyserver. #[arg(global=true, long, default_value=KEYSERVER_DEFAULT)] pub keyserver: String, /// Treats the specified certificate as a trust root. /// /// It is possible to have multiple trust roots. All trust roots /// are treated equivalently. This can be combined with /// `--gpg-ownertrust`. #[arg(global=true, short='r', long, value_name="FINGERPRINT|KEYID")] pub trust_root: Option>, /// Render the output in a specific format /// /// Choosing a different output format allows for further post /// processing of the data using external tools. #[ arg( value_enum, global=true, short='f', long, default_value=DEFAULT_OUTPUT_FORMAT, value_name="FORMAT", ) ] pub format: OutputFormat, /// Causes `sq-wot` to use gpg's trust roots as the trust roots. /// /// `sq-wot` reads the output of `gpg --export-ownertrust`. It /// treats gpg's ultimately trusted certificates as fully trust /// roots. Similar to gpg, it also treats certificates marked as /// fully and marginally trusted as fully and marginally trusted /// roots, if a self-signed User ID can be authenticated by an /// ultimately trusted root. /// /// It is possible to set additional trust roots using the /// `--trust-root` option. #[arg(global=true, long)] pub gpg_ownertrust: bool, /// Treats all certificates as unreliable trust roots. /// /// This option is useful for figuring out what others think about /// a certificate (i.e., gossip or hearsay). In other words, this /// finds arbitrary paths to a particular certificate. /// /// Gossip is useful in helping to identify alternative ways to /// authenticate a certificate. For instance, imagine Ed wants to /// authenticate Laura's certificate, but asking her directly is /// inconvenient. Ed discovers that Micah has certified Laura's /// certificate, but Ed hasn't yet authenticated Micah's /// certificate. If Ed is willing to rely on Micah as a trusted /// introducer, and authenticating Micah's certificate is easier /// than authenticating Laura's certificate, then Ed has learned /// about an easier way to authenticate Laura's certificate. /// /// EXAMPLES: /// /// # Get gossip about a certificate.{n} /// $ sq-wot --keyring keyring.pgp \\{n} /// --gossip identify 3217C509292FC67076ECD75C7614269BDDF73B36 #[arg(global=true, long)] pub gossip: bool, /// Treats the network as a certification network. /// /// Normally, `sq-wot` treats the web-of-trust network as an /// authentication network where a certification only means that /// the binding is correct, not that the target should be treated /// as a trusted introducer. In a certification network, the /// targets of certifications are treated as trusted introducers /// with infinite depth, and any regular expressions are ignored. /// Note: The trust amount remains unchanged. This is how most /// so-called pgp path-finding algorithms work. #[arg(global=true, long)] pub certification_network: bool, /// The required amount of trust. /// /// 120 indicates full authentication; values less than 120 /// indicate partial authentication. When /// `--certification-network` is passed, this defaults to 1200, /// i.e., sq-wot tries to find 10 paths. #[arg(global=true, short='a', long, conflicts_with_all=["partial", "full", "double"])] pub trust_amount: Option, /// Require partial authentication. /// /// This is the same as passing `--trust-amount 40`. #[arg(global=true, long, conflicts_with_all=["trust_amount", "full", "double"])] pub partial: bool, /// Require full authentication. /// /// This is the same as passing `--trust-amount 120`. #[arg(global=true, long, conflicts_with_all=["trust_amount", "partial", "double"])] pub full: bool, /// Require double authentication. /// /// This is the same as passing `--trust-amount 240`. #[arg(global=true, long, conflicts_with_all=["trust_amount", "partial", "full"])] pub double: bool, /// Sets the reference time to TIME. /// /// TIME is interpreted as an ISO 8601 timestamp. To set the /// reference time to July 21, 2013 at midnight UTC, you can /// do: /// /// $ sq-wot --time 20130721 CMD ... /// /// To include a time, add a T, the time and optionally the /// timezone (the default timezone is UTC): /// /// $ sq-wot --time 20130721T0550+0200 CMD ... #[arg(global=true, long)] pub time: Option, /// Adds NOTATION to the list of known notations /// /// This is used when validating signatures. Signatures that have /// unknown notations with the critical bit set are considered /// invalid. #[arg(global=true, long)] pub known_notation: Vec, #[command(subcommand)] pub subcommand: Subcommand, } #[derive(clap::Subcommand)] pub enum Subcommand { /// Authenticate a binding. /// /// Authenticate a binding (a certificate and User ID) by looking /// for a path from the trust roots to the specified binding in /// the web of trust. Because certifications may express /// uncertainty (i.e., certifications may be marked as conveying /// only partial or marginal trust), multiple paths may be needed. /// /// If a binding could be authenticated to the specified level (by /// default: fully authenticated, i.e., a trust amount of 120), /// then the exit status is 0. Otherwise the exit status is 1. /// /// If any valid paths to the binding are found, they are printed /// on stdout whether they are sufficient to authenticate the /// binding or not. #[command(after_help("\ EXAMPLES: # Authenticate a binding. $ sq-wot --keyring keyring.pgp \\ --partial \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ authenticate \\ C7966E3E7CE67DBBECE5FC154E2AD944CFC78C86 \\ 'Alice ' # The same as above, but this time generate output in DOT format # and convert it to an SVG using Graphviz's DOT compiler. $ sq-wot --format dot \\ --keyring keyring.pgp \\ --partial \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ authenticate \\ C7966E3E7CE67DBBECE5FC154E2AD944CFC78C86 \\ 'Alice ' \\ | dot -Tsvg -o alice.pgp # Try and authenticate each binding where the User ID has the # specified email address. $ sq-wot --keyring keyring.pgp \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ authenticate \\ C7966E3E7CE67DBBECE5FC154E2AD944CFC78C86 \\ --email 'alice@example.org' # The same as above, but this time generate output in DOT format # and convert it to an SVG using Graphviz's DOT compiler. $ sq-wot --format dot \\ --keyring keyring.pgp \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ authenticate \\ C7966E3E7CE67DBBECE5FC154E2AD944CFC78C86 \\ --email 'alice@example.org' \\ | dot -Tsvg -o alice.svg "))] Authenticate { #[command(flatten)] email: EmailArg, #[command(flatten)] cert: CertArg, #[command(flatten)] userid: UserIDArg, }, /// Lookup the certificates associated with a User ID. /// /// Identifies authenticated bindings (User ID and certificate /// pairs) where the User ID matches the specified User ID. /// /// If a binding could be authenticated to the specified level (by /// default: fully authenticated, i.e., a trust amount of 120), /// then the exit status is 0. Otherwise the exit status is 1. /// /// If a binding could be partially authenticated (i.e., its trust /// amount is greater than 0), then the binding is displayed, even /// if the trust is below the specified threshold. #[command(after_help("\ EXAMPLES: # Lookup a certificate with the given User ID. $ sq-wot --keyring keyring.pgp \\ --partial \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ lookup \\ 'Alice ' # The same as above, but output in DOT format and convert it to # an SVG using Graphviz's DOT compiler. $ sq-wot --format dot \\ --keyring keyring.pgp \\ --partial \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ lookup \\ 'Alice ' \\ | dot -Tsvg -o alice.svg # Lookup a certificate with the given email address. $ sq-wot --keyring keyring.pgp \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ lookup \\ --email 'alice@example.org' # The same as above, but output in DOT format and convert it to # an SVG using Graphviz's DOT compiler. $ sq-wot --format dot \\ --keyring keyring.pgp \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ lookup \\ --email 'alice@example.org' \\ | dot -Tsvg -o alice.svg "))] Lookup { #[command(flatten)] email: EmailArg, #[command(flatten)] userid: UserIDArg, }, /// Identify a certificate. /// /// Identify a certificate by finding authenticated bindings (User /// ID and certificate pairs). /// /// If a binding could be authenticated to the specified level (by /// default: fully authenticated, i.e., a trust amount of 120), /// then the exit status is 0. Otherwise the exit status is 1. /// /// If a binding could be partially authenticated (i.e., its trust /// amount is greater than 0), then the binding is displayed, even /// if the trust is below the specified threshold. #[command(after_help("\ EXAMPLES: # Identify a certificate. $ sq-wot --keyring keyring.pgp \\ --partial \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ identify \\ C7B1406CD2F612E9CE2136156F2DA183236153AE # The same as above, but output in DOT format and convert it to # an SVG using Graphviz's DOT compiler. $ sq-wot --format dot \\ --keyring keyring.pgp \\ --partial \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ identify \\ C7B1406CD2F612E9CE2136156F2DA183236153AE \\ | dot -Tsvg -o C7B1406CD2F612E9CE2136156F2DA183236153AE.svg "))] Identify { #[command(flatten)] cert: CertArg, }, /// List all authenticated bindings (User ID and certificate /// pairs). /// /// Only bindings that meet the specified trust amount (by default /// bindings that are fully authenticated, i.e., have a trust /// amount of 120), are shown. /// /// Even if no bindings are shown, the exit status is 0. /// /// If --email is provided, then a pattern matches if it is a case /// insensitive substring of the email address as-is or the /// normalized email address. Note: unlike the email address, the /// pattern is not normalized. In particular, puny code /// normalization is not done on the pattern. #[command(after_help("\ EXAMPLES: # List all bindings for example.org that are at least partially # authenticated. $ sq-wot --keyring keyring.pgp \\ --partial \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ list @example.org # The same as above, but output in DOT format and convert it to # an SVG using Graphviz's DOT compiler. $ sq-wot --format dot \\ --keyring keyring.pgp \\ --partial \\ --trust-root 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ list @example.org \\ | dot -Tsvg -o example_org.svg "))] List { #[command(flatten)] email: EmailArg, /// A pattern to select the bindings to authenticate. /// /// The pattern is treated as a UTF-8 encoded string and a /// case insensitive substring search (using the current /// locale) is performed against each User ID. If a User ID /// is not valid UTF-8, the binding is ignored. pattern: Option, }, /// Verify the specified path. /// /// A path is a sequence of certificates starting at the root, and /// a User ID. This function checks that each path segment has a /// valid certification, which also satisfies any constraints /// (trust amount, trust depth, regular expressions). /// /// If a valid path is not found, then this subcommand also lints /// the path. In particular, it report if any certifications are /// insufficient, e.g., not enough trust depth, or invalid, e.g., /// because they use SHA-1, but the use of SHA-1 has been /// disabled. #[command(after_help("\ EXAMPLES: # Verify that Neal ceritified Justus's certificate for a particular User ID. $ sq-wot --keyring keyring.pgp \\ path \\ 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ CBCD8F030588653EEDD7E2659B7DD433F254904A \\ \"Justus Winter \" # The same as above, but output in DOT format and convert it to # an SVG using Graphviz's DOT compiler. $ sq-wot --format dot \\ --keyring keyring.pgp \\ path \\ 8F17777118A33DDA9BA48E62AACB3243630052D9 \\ CBCD8F030588653EEDD7E2659B7DD433F254904A \\ \"Justus Winter \" \\ | dot -Tsvg -o neal--justus.svg "))] Path { #[command(flatten)] email: EmailArg, // This should actually be a repeatable positional argument // (Vec) followed by a manadatory positional argument (a // User ID), but that is not allowed by Clap v3 and Clap v4 // even though it worked fine in Clap v2. (Curiously, it // works in `--release` mode fine and the only error appears // to be one caught by a `debug_assert`). // // https://github.com/clap-rs/clap/issues/3281 #[command(flatten)] path: PathArg, }, } impl Subcommand { pub fn email(&self) -> bool { use Subcommand::*; match self { Authenticate { email, .. } => email.email, Lookup { email, .. } => email.email, Identify { .. } => false, Path { email, .. } => email.email, List { email, .. } => email.email, } } } #[derive(clap::Args, Debug)] pub struct CertArg { /// The fingerprint or Key ID of the certificate to authenticate. #[arg(value_name="FINGERPRINT|KEYID")] cert: KeyHandle } impl Deref for CertArg { type Target = KeyHandle; fn deref(&self) -> &Self::Target { &self.cert } } #[derive(clap::Args, Debug)] pub struct PathArg { /// A path consists of one or more certificates (designated by /// their fingerprint or Key ID) and ending in the User ID that is /// being authenticated. #[arg(value_names=["FINGERPRINT|KEYID", "USERID"])] elements: Vec, } const PATH_DESC: &str = "\ A path consists of one or more certificates (identified by their respective fingerprint or Key ID) and a User ID."; impl PathArg { fn check(&self) -> Result<()> { if self.elements.len() < 2 { Err(anyhow::anyhow!( "\ The following required arguments were not provided: {} {} Usage: sq-wot path ... For more information try '--help'", if self.elements.len() == 0 { "\n " } else { "" }, PATH_DESC)) } else { Ok(()) } } pub fn certs(&self) -> Result> { self.check()?; // Skip the last one. That's the User ID. self.elements[0..self.elements.len() - 1] .iter() .map(|e| { e.parse() .map_err(|err| { anyhow::anyhow!( "Invalid value {:?} for '': {} {} For more information try '--help'", e, err, PATH_DESC) }) }) .collect::>>() } pub fn userid(&self) -> Result { self.check()?; let userid = self.elements.last().expect("just checked"); Ok(UserID::from(userid.as_bytes())) } } #[derive(clap::Args, Debug)] pub struct UserIDArg { /// The User ID to authenticate. /// /// This is case sensitive, and must be the whole User ID, not /// just a substring or an email address. pub userid: UserID, } impl Deref for UserIDArg { type Target = UserID; fn deref(&self) -> &Self::Target { &self.userid } } #[derive(clap::Args, Debug)] pub struct EmailArg { /// Changes the USERID parameter to match User IDs with the /// specified email address. /// /// Interprets the USERID parameter as an email address, which /// is then used to select User IDs with that email address. /// /// Unlike when comparing User IDs, email addresses are first /// normalized by the domain to ASCII using IDNA2008 Punycode /// conversion, and then converting the resulting email /// address to lowercase using the empty locale. /// /// If multiple User IDs match, they are each considered in /// turn, and this function returns success if at least one of /// those User IDs can be authenticated. Note: The paths to /// the different User IDs are not combined. #[arg(long)] pub email: bool, } impl Deref for EmailArg { type Target = bool; fn deref(&self) -> &Self::Target { &self.email } } sequoia-wot-0.11.0/src/gpg.rs000064400000000000000000000145731046102023000141040ustar 00000000000000use std::collections::HashMap; use std::io::Write; use std::process::Command; use std::process::Stdio; use sequoia_openpgp as openpgp; use openpgp::Fingerprint; use anyhow::Context; use super::Result; use super::TRACE; pub fn export() -> Result> { let mut command = Command::new("gpg"); #[cfg(windows)] let mut command = { use std::os::windows::process::CommandExt; // see https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags const CREATE_NO_WINDOW: u32 = 0x08000000; let mut command = command; command.creation_flags(CREATE_NO_WINDOW); command }; command .stdin(Stdio::null()) .stdout(Stdio::piped()) .stderr(Stdio::null()) .arg("--export-options") .arg("export-local-sigs") .arg("--export"); let output = command.output()?; Ok(output.stdout) } // Execute gpg --export-ownertrust and parse its output. It looks // like this: // // # List of assigned trustvalues, created Thu 16 Dec 2021 09:33:48 AM CET // # (Use "gpg --import-ownertrust" to restore them) // B58FC4B77C26A52287E10F0DD70D5F58603CD078:4: // 141198894E27D44F7084F098C0A4CBB987978569:4: // // The values are the fingerprint's ownertrust. This is a private API // (https://lists.gnupg.org/pipermail/gnupg-users/2016-April/055722.html), // but according to the source code (gnupg/g10/trustdb.h): // // #define TRUST_UNKNOWN 0 /* o: not yet calculated/assigned */ // #define TRUST_EXPIRED 1 /* e: calculation may be invalid */ // #define TRUST_UNDEFINED 2 /* q: not enough information for calculation */ // #define TRUST_NEVER 3 /* n: never trust this pubkey */ // #define TRUST_MARGINAL 4 /* m: marginally trusted */ // #define TRUST_FULLY 5 /* f: fully trusted */ // #define TRUST_ULTIMATE 6 /* u: ultimately trusted */ #[enumber::convert] #[derive(Debug, PartialEq, Eq)] pub enum OwnerTrust { Unknown = 0, Expired = 1, Undefined = 2, Never = 3, Marginal = 4, Fully = 5, Ultimate = 6, Other(usize), } pub fn export_ownertrust() -> Result> { tracer!(TRACE, "export_ownertrust"); let mut command = Command::new("gpg"); #[cfg(windows)] let mut command = { use std::os::windows::process::CommandExt; // see https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags const CREATE_NO_WINDOW: u32 = 0x08000000; let mut command = command; command.creation_flags(CREATE_NO_WINDOW); command }; command .stdin(Stdio::null()) .stdout(Stdio::piped()) .stderr(Stdio::null()) .arg("--export-ownertrust"); let result = command.output()?; // The output should be ASCII characters. So this conversion // should work. If not, abort. let output = String::from_utf8(result.stdout)?; let mut db = HashMap::new(); for line in output.split('\n') { if line == "" { continue; } if let Some('#') = line.chars().next() { // Ignore comments. t!("Ignoring comment: {:?}", line); continue; } let mut fields = line.split(':'); let fingerprint = if let Some(fingerprint) = fields.next() { fingerprint } else { t!("Invalid line: {:?}", line); continue; }; let value = if let Some(value) = fields.next() { value } else { t!("Invalid line: {:?}", line); continue; }; match (fingerprint.parse::(), value.parse::()) { (Ok(fpr), Ok(field)) => { let ownertrust: OwnerTrust = field.into(); t!("{} => {:?}", fpr, ownertrust); db.insert(fpr, ownertrust); } (Err(err), _) => { t!("Failed to parse fingerprint: {}", err); } (_, Err(err)) => { t!("Failed to parse ownertrust: {}", err); } } } Ok(db) } /// Import some data into gpg. /// /// Effectively does: /// /// cat data | gpg --import-options import-local-sigs --import #[allow(unused)] pub fn import(data: &[u8]) -> Result<()> { let mut command = Command::new("gpg"); #[cfg(windows)] let mut command = { use std::os::windows::process::CommandExt; // see https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags const CREATE_NO_WINDOW: u32 = 0x08000000; let mut command = command; command.creation_flags(CREATE_NO_WINDOW); command }; let mut child = command .stdin(Stdio::piped()) .stdout(Stdio::null()) .stderr(Stdio::inherit()) .arg("--import-options") .arg("import-local-sigs") .arg("--import") .spawn()?; let mut stdin = child.stdin.take().context("Failed to open stdin")?; stdin.write_all(&data).context("Failed to write to stdin")?; drop(stdin); let ec = child.wait()?; if ec.success() { Ok(()) } else { Err(anyhow::anyhow!("gpg exited with non-zero exit code: {:?} in gpg::import", ec.code())) } } /// Import ownertrust data into gpg. /// /// Effectively does: /// /// cat data | gpg --import-ownertrust #[allow(unused)] pub fn import_ownertrust(data: &[u8]) -> Result<()> { let mut command = Command::new("gpg"); #[cfg(windows)] let mut command = { use std::os::windows::process::CommandExt; // see https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags const CREATE_NO_WINDOW: u32 = 0x08000000; let mut command = command; command.creation_flags(CREATE_NO_WINDOW); command }; let mut child = command .stdin(Stdio::piped()) .stdout(Stdio::null()) .stderr(Stdio::inherit()) .arg("--import-ownertrust") .spawn()?; let mut stdin = child.stdin.take().context("Failed to open stdin")?; stdin.write_all(&data).context("Failed to write to stdin")?; drop(stdin); let ec = child.wait()?; if ec.success() { Ok(()) } else { Err(anyhow::anyhow!("gpg exited with non-zero exit code: {:?} in gpg::import_ownertrust", ec.code())) } } sequoia-wot-0.11.0/src/lib.rs000064400000000000000000003610631046102023000140740ustar 00000000000000//! A web of trust engine. //! //! # Introduction //! //! The [web of trust] is a decentralized trust model popularized by //! PGP. It is [a superset] of [X.509], which is a hierarchical trust //! model, and is the most popular trust model on the public internet //! today. As used on the public internet, however, X.509 relies on a //! handful of global [certification authorities] (CAs) who often //! [undermine its security]. //! //! [web of trust]: https://en.wikipedia.org/wiki/Web_of_trust //! [a superset]: https://www.oreilly.com/library/view/beautiful-security/9780596801786/ch07.html //! [X.509]: https://de.wikipedia.org/wiki/X.509 //! [certification authorities]: https://en.wikipedia.org/wiki/Certificate_authority //! [undermine its security]: https://sslmate.com/resources/certificate_authority_failures //! //! The web of trust is more nuanced than X.509. A user can partially //! trust a CA thereby preventing a single bad actor from compromising //! their security. And those who have stronger security requirements //! can use the web of trust in a completely decentralized manner. //! //! Today, the tooling around the web of trust is primitive at best. //! Many people interpret this lack of good tooling as a sign that the //! web of trust is intrinsically difficult to use. We disagree and //! think that efforts like our [OpenPGP CA] project provide evidence //! that this is not the case. //! //! [OpenPGP CA]: https://openpgp-ca.org/ //! //! # Web of Trust //! //! A web of trust is a network where the nodes are certificates, //! which are also called public keys, and the edges are //! certifications. In OpenPGP's web of trust, edges may include //! non-local constraints. For instance, the trust depth parameter //! determines whether the edges of subsequent nodes should be //! followed. This means that many graph algorithms cannot be used //! without modification. //! //! This crate implements a web of trust engine. It is designed //! around [OpenPGP]'s authentication concepts, but it does not //! require OpenPGP data structures and, as such, can be used in other //! contexts. //! //! [OpenPGP]: https://datatracker.ietf.org/doc/html/rfc4880 //! //! We model a web of trust using the [`Network`] data structure. As //! shown in the [examples below], a `Network` can be created either //! directly from OpenPGP data structures ([`Network::from_certs`]) or //! it can be created manually ([`Network::new`]). The latter is //! useful when the web of trust has been cached. It can also be used //! to build a web of trust from non-OpenPGP data. //! //! [examples below]: #examples //! //! To authenticate a binding, you build up a set of query parameters //! using a [`Query`] object. You then call [`Query::authenticate`] //! to authenticate the binding. The method returns the degree to //! which a binding (a fingerprint and a User ID) can be considered //! authentic. Because authentication is not binary in the web of //! trust, and because multiple paths can be combined to increase //! confidence, this function returns a set of paths using the //! [`Paths`] data structure. //! //! By using a variant of [Dijkstra's algorithm] to authenticate a //! binding, authentication is fast even for large, highly connected //! web of trusts. Specifically, its run time is `O((|V| + |E|) * //! log(|V|))` where `V` are the vertices or certificates, and `E` are //! the edges or certifications. //! //! [Dijkstra's algorithm]: https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm //! //! OpenPGP defines several authentication mechanisms, but it does not //! define how they should be used to authenticate a binding. //! Although both PGP and GnuPG implement a web of trust, neither //! documents their exact semantics. This engine treats the network //! as a [flow network], which is similar, but not identical, to how //! PGP 7 and later work. //! //! [flow network]: https://en.wikipedia.org/wiki/Flow_network //! //! ## OpenPGP's Authentication Mechanisms //! //! OpenPGP provides four simple, yet powerful and flexible mechanisms //! to facilitate authentication. These are [third-party //! certifications], a [trust amount] parameter, a [trust depth] //! parameter, and a [regular expression] parameter. //! //! [third-party certifications]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.1 //! [trust amount]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.3.13 //! [trust depth]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.3.13 //! [regular expression]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.3.14 //! //! A third-party certification is a machine-readable artifact that //! says that the issuer believes that a binding between a User ID and //! a certificate is correct. OpenPGP distinguishes four different //! types of third-party certifications ([signature types] 0x10 through //! 0x13). This engine treats all of these different signature types //! identically. In common practice, a persona certification //! (signature type 0x11) is often treated as an invalid certification. //! This engine ignores this distinction. //! //! [signature types]: https://datatracker.ietf.org/doc/html/rfc4880#section-5.2.1 //! //! The [trust amount] parameter is the degree to which the issuer of //! a certification is convinced that the binding is correct. This //! can vary from 0 to 255. Values that are 120 or larger mean that //! the issuer is fully convinced. Traditionally, an issuer uses 60 //! to indicate that they are partially (aka marginally) convinced, //! however, any value between 1 and 119 can be used. //! //! This web of trust implementation interprets the trust amount as an //! amount of evidence. It assumes that evidence is independent and //! can be combined linearly. That is, if we have two paths that //! don't share any edges, say a trust root partially trusts two //! [certification authorities] (CAs) and they both certify a binding, //! then the two paths can be added together. //! //! [certification authorities]: https://en.wikipedia.org/wiki/Certificate_authority //! //! The [trust depth] parameter is used to indicate that the target //! should also be used as a CA. When this type of delegation is done //! in OpenPGP, the target is sometimes called a trusted introducer. //! //! The trust depth parameter ranges from 0 to 255. A value of 0 //! means that the target is not a trusted introducer, and this is //! just a normal certification of the binding. If the issuer of a //! certification uses a value of 1, it means that they consider the //! target to also be a trusted introducer. A value of 2 means that //! not only is the issuer willing to rely on certifications made by //! the target, but the target can designate other certificates as //! trusted introducers. A value of 3 means that the third party can //! delegate the certification capability. In general, a value of `n` //! means that a certificate that is at most `n` steps away from the //! issuer may be considered a trusted introducer, and certificates //! that are at most `n+1` steps away from the issuer can be //! authenticated. Consider the following network where the number is //! the certification's trust depth parameter: //! //! ```text //! alice --2--> bob --2--> carol --2--> dave --2--> ed //! ``` //! //! alice certifies bob and uses a trust depth of 2. This means that //! she considers bob to be a trusted introducer and that he can //! delegate that capability to someone else, which he does when he //! certifies carol and uses a positive trust depth parameter. Then, //! because carol certifies dave, alice can authenticate dave. That //! is, `alice - bob - carol - dave` is a valid path. //! //! But, alice cannot authenticate ed even though dave considers ed to //! be a trusted introducer. This is because alice does not consider //! dave to be a trusted introducer: he is too far away; alice would //! have had to set the trust depth on her certification of bob to 3 //! for her to consider dave a trusted introducer. //! //! The trust amount and trust depth parameters interact. If alice //! certifies bob's certificate and sets a trust depth of 1 and a //! trust amount of 60, then the trust amount of any certifications //! that bob makes are limited to 60. Consider: //! //! ```text //! alice --60/1--> bob --120/0--> carol //! ``` //! //! In the above network, alice says that bob is a partially trusted //! introducer (amount = 60). Even though bob has certificated //! carol's key with a trust amount of 120, alice only assigns the //! path `alice - bob - carol` a trust amount of 60. In general, a //! path's trust amount is the minimum trust amount of any //! certification in the path. //! //! The final parameter is a regular expression. A certification can //! include zero or more regular expressions. If it includes at least //! one regular expression, then at least one of them has to match the //! target User ID for the path to be valid. //! //! Regular expressions are a mechanism for a user to make use of a CA //! in a limited way. For instance, ed might be willing to rely on //! `ca@nsa.gov` to certify other `nsa.gov` User IDs, but doesn't want //! to rely on `ca@nsa.gov` to make a statement about any other User //! ID. //! //! This implementation only applies the regular expression parameter //! to the target User ID; it does not apply it to any CAs along the //! path. Thus, `ca@nsa.gov` could consider `ca@fbi.gov` a CA and //! `ca@fbi.gov` might certify `paul@nsa.gov`. And, even though the //! regular expression does not match the intermediate CA's User ID //! (`ca@fbi.gov`), it does match the target so that path would be //! valid. //! //! ## Multiple Paths and Maximum Flow //! //! OpenPGP does not only support binary authentication; it also //! supports degrees of authentication. If the path that this //! implementation finds does not authenticate the binding to the //! required degree, then the implementation will look for additional //! paths. If paths overlap, then the degree of authentication is the //! [maximum flow] where the capacity of an edge is the //! certification's trust amount. Consider the following web of //! trust: //! //! [maximum flow]: https://en.wikipedia.org/wiki/Maximum_flow_problem //! //! ```text //! root //! | 90/2 //! v //! alice //! 40/1 / \ 60/1 //! v v //! bob carol //! 120 \ / 120 //! v v //! david //! ``` //! //! There are two paths from `root` to `david`: `root - alice - bob - //! david` and `root - alice - carol - david`. The degree of //! authentication of each of the paths is the minimum trust amount of //! any certification along the path, which, in this case, is 40 and //! 60, respectively. Combining these paths only results in a trust //! amount of 90, however, since both paths use the `root - alice` //! certification and its capacity is 90. //! //! ### Multiple User IDs //! //! It is possible to use a certificate to certify multiple User IDs //! on another certificate using different parameters. When this //! happens, the path finding algorithm is run as usual and considers //! all certifications to find the best path; no certifications are //! trimmed a priori. //! //! The algorithm then creates a type of residual network where the //! path is removed. But instead of subtracting capacity from the //! edges that occur in the path (i.e., the certifications), the //! capacity is subtracted from the multi-edges. That is the capacity //! is removed from all of the certifications between two //! certificates. //! //! Consider the following network where alice has certified both //! `bob@some.org` and `bob@other.org` on bob's certificate: //! //! ```text //! alice //! 40/2 / \ 30/3 //! v v //! bob@some.org - b - bob@other.org //! 20/1 / \ 120/2 //! v v //! carol dave //! | | 120/1 //! 120 | v //! | ed //! \ / 120 //! v v //! frank //! ``` //! //! The algorithm first finds the path `a - b - c - f`, which has a //! trust amount of 20. When the algorithm is run on the residual //! network, it finds `a - b - d - e - f`, which has a trust amount of //! 10. This is because the algorithm has to use the `bob@other.org` //! certification (the `bob@some.org` certification's depth parameter //! is too small) and all certifications between alice and bob are //! suppressed by 20. //! //! Critically, the paths `a - bob@some.org - c - f` and `a - //! bob@other.org - d - e - f` are not combined for an aggregate trust //! amount of 70, even though they have no overlapped edges: they //! share a multi-edge, which is partially suppressed. //! //! ## Examples //! //! Authenticating a binding is a two-step process. First, you build //! the network. Then you query it. //! //! There are two ways to build the network. You can provide OpenPGP //! data structures and let the library build the network for you. //! Or, you can describe the network. The latter approach is useful //! when you've saved a network, e.g., in a database, and don't want //! reparse and revalidate the OpenPGP data structures, which can be //! computationally expensive. It is also useful when you don't //! actually have OpenPGP data, but want to use the web of trust. //! //! The following two examples show each of these approaches using the //! following network: //! //! ```text //! 0xAA, alice@example.org //! | 40/1/some.org //! v //! 0xCA, ca@some.org //! 120/0 / \ 120/0 //! v v //! 0xBB, bob@some.org 0xCC, carol@other.org //! ``` //! //! (The numbers next to the edges are the trust amount and trust //! depth. They are sometimes followed by a domain. The domain //! corresponds to a regular expression that matches email addresses //! in that domain.) //! //! There are four certificates. `alice@example.org` has certified //! `ca@some.org` to be a partially trusted (amount = 40) trusted //! introducer (depth = 1), scoped to `some.org`. And, `ca@some.org` //! has certified `bob@some.org` and `carol@other.org`. //! //! With `alice@example.org` as a root, we can partially authenticate //! `bob@some.org`, but, due to the scoping rule, we can't //! authenticate `carol@other.org` at all: the User ID doesn't match //! the regular expression. //! //! ### Using OpenPGP Data Structures //! //! ``` //! use sequoia_openpgp as openpgp; //! use openpgp::Cert; //! use openpgp::cert::CertParser; //! use openpgp::Fingerprint; //! use openpgp::packet::UserID; //! use openpgp::parse::Parse; //! use openpgp::policy::StandardPolicy; //! //! use sequoia_wot::Network; //! use sequoia_wot::Query; //! use sequoia_wot::FULLY_TRUSTED; //! use sequoia_wot::PARTIALLY_TRUSTED; //! //! # fn main() -> anyhow::Result<()> { //! //! let keyring = "-----BEGIN PGP PUBLIC KEY BLOCK----- //! //! xjMEYW/3iRYJKwYBBAHaRw8BAQdAnjTe1KqODINdZOIHuaG8s9aOoJxNJ+CunEI5 //! # XM3nCGbCwAsEHxYKAH0FgmFv94kDCwkHCRAT3t2aD+UaV0cUAAAAAAAeACBzYWx0 //! # QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfX931STLM0Jms6P9W4v8WGhgmfuuaO //! # TT8Umsbx55vS8AMVCggCmwECHgEWIQQ3B3E3Sb1zXwy91VUT3t2aD+UaVwAAy+gA //! # /1lMXxNzxQLbjQsrioAKi+k0Wb2JxlJU1/9bWmGWUu78AP4gUXAYc7eWYa49iiuG //! # d2CIwnMu++/6gA2tCU9Oj3BbCc0NPGNhQHNvbWUub3JnPsLADgQTFgoAgAWCYW/3 //! # iQMLCQcJEBPe3ZoP5RpXRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt //! # cGdwLm9yZ6aTpERi74O/4kUhJybOIrhCgMjzqntoWNdLZCPnvl79AxUKCAKZAQKb //! # AQIeARYhBDcHcTdJvXNfDL3VVRPe3ZoP5RpXAAArdAD9EeFG8OylF5aykO7c6uxE //! # of3DafAzDzIpbZ5rNC1jrDgBAOUjPP4z9Y040MsPVZaUnAY/1Cz3EnNSmwUyX8kw //! # 5ocOwsAfBBAWCgCRBYJhcAVJBYMJZ5o7A4UBKBeGPFtePl0rW0AuXXNvbWVcLm9y //! # Zz4kAAkQ0WzsWOrfU01HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w //! # Z3Aub3JnTJBFIWL2tBbfuUxHvEXeqG+eYezdu9/ZHLRGhPmaJSgWIQTOOYvmU4lU //! # jsIzT+jRbOxY6t9TTQAAqEIBAOFaZ5WNUYgzLQm0cONZ18NcETl5CLtXs5nAvkOy //! # RCALAP9I9XXLsTZ3yhrQ2DLxY0Ofc2AYnIZbSUoH/Mp4B61oDs4zBGFv94kWCSsG //! # AQQB2kcPAQEHQHCTaKwm4GF8Pq/4yELj2mDQeavJtS5tseDG7PNofRqtwsC/BBgW //! # CgExBYJhb/eJCRAT3t2aD+UaV0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 //! # b2lhLXBncC5vcme6uYEsVIk0S5cxjhSAoWzvT8JO6EVVD1V5cjVvKrNsBQKbAr6g //! # BBkWCgBvBYJhb/eJCRA3bmybINBvi0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z //! # ZXF1b2lhLXBncC5vcmeQxtudFLbnDAdIkeDYGvY/SDGK/8WjZj6OIeaB9lN9XxYh //! # BEr0Vidlm4mGYZWHADdubJsg0G+LAABWowD+PWlZo6HD/E1msiCzbsQE3kymenO2 //! # 0zi9wO9K6tpWSjEBAPfJwl3P75DfuZFk7oFfs1dEu13Y6sqFNXtWAdv9pSAOFiEE //! # NwdxN0m9c18MvdVVE97dmg/lGlcAAFbUAQC+q7zIXXpAsYPtgkZFLwE7P6FT6Mwc //! # fNQsWJThSs3l2wEAu3w17et6Um462YyA7/e8oYoof0jmE6zm8J+rpiJ9vAzGMwRh //! # b/eJFgkrBgEEAdpHDwEBB0Dy4HQX3KNylOVGxcr1fCsPLrKRMXU4NBEuN4tKA9Bf //! # NMLACwQfFgoAfQWCYW/3iQMLCQcJENFs7Fjq31NNRxQAAAAAAB4AIHNhbHRAbm90 //! # YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3H4ZFguXTuDstdPt/4OEHz7pzPAeDfnrqVN //! # 31tK7REeAxUKCAKbAQIeARYhBM45i+ZTiVSOwjNP6NFs7Fjq31NNAAAGMwEAq7HL //! # EhSsj6m3/d5w+brM5wPy5NfeRU//KDlypn+k/jkBAJgjigEl7PHou/S/7xCl3/yN //! # jrSmctNaPcWKaHvA8mYGzRM8YWxpY2VAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh //! # b/eJAwsJBwkQ0WzsWOrfU01HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p //! # YS1wZ3Aub3JnwiIwVUPZ4cWc6uxMET790yfw9FNMyNVSv5sprbnM7S4DFQoIApkB //! # ApsBAh4BFiEEzjmL5lOJVI7CM0/o0WzsWOrfU00AAJshAP98sZXu0EOhQhvuiVrk //! # Td/3nuOTDBEP7vbS9IQdz/1O0wD+IXMHZDL4kAoYaRzdBN67lTPNoF86CgF5o6Xj //! # ss+JOwHOMwRhb/eJFgkrBgEEAdpHDwEBB0BEpXxuCZPOh5bZHmIxM8t1pW1QVM4G //! # pgDIOKVfT7p+DMLAvwQYFgoBMQWCYW/3iQkQ0WzsWOrfU01HFAAAAAAAHgAgc2Fs //! # dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7sWL0sTBq10p7d2GN7ZgsZkUxVY+ //! # JUnn9R4WhFaH06YCmwK+oAQZFgoAbwWCYW/3iQkQY8VPvdEOAONHFAAAAAAAHgAg //! # c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn+DEKCHP+xYMcV5LLB5K5dH2I //! # w9BmJxSJckTsAkIX/OQWIQRvo9S/vEXV8ksghTZjxU+90Q4A4wAAorAA/2eO42HY //! # FVH3wJj3SvhqT8EQ7qe/hpMPAb7uznxhL6CfAP9nlen3sa+Hb1FvEQIjCXjYv0G/ //! # vMJMdEujNIydIhgMCxYhBM45i+ZTiVSOwjNP6NFs7Fjq31NNAABvHwEA0LH6AxAs //! # 5hGYltx9cevRYBOBp6IZgcHjFe8ul+BluRkBAKoOtddLcHVWqkQvwhJfZeFsWh4Z //! # xmCcSRIPhKIQKd8FxjMEYW/3iRYJKwYBBAHaRw8BAQdAaTuo6QJUO97wvBRzLjrr //! # 3TtHWNDmsqfNW822cxziIXfCwAsEHxYKAH0FgmFv94kDCwkHCRDHSeVh6tRJFEcU //! # AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeOVXbQyo69KDqD //! # DwF3tHvUQ+TcAo36x0OVEvO/5Tiz/wMVCggCmwECHgEWIQSU4urbpMNHKjgy1aHH //! # SeVh6tRJFAAA1TEBAN9JsM3mR/mfsc8MDv4jAPHfme1Fb1kzfeSAGErxcoXCAP9Y //! # SVUUITnu5an8pEq+VvfrmI3+GlUHcwHqRweNZzuyCc0OPGJvYkBzb21lLm9yZz7C //! # wA4EExYKAIAFgmFv94kDCwkHCRDHSeVh6tRJFEcUAAAAAAAeACBzYWx0QG5vdGF0 //! # aW9ucy5zZXF1b2lhLXBncC5vcmcQLXTmQuGBBrqvrQcp9bAJRReeM6iGoKGZwyaA //! # uFvJiwMVCggCmQECmwECHgEWIQSU4urbpMNHKjgy1aHHSeVh6tRJFAAAKxkBALVZ //! # 0bfvmTiZGdRdwmmN11o8jW7Y4Dl03qBxM4mnlImpAPkB8aHacdJqayTGXAHEpCYs //! # in4Rub0MrpL8sHXLVGHPCMLAAwQQFgoAdQWCYXAFSQWDCWeaOwkQE97dmg/lGldH //! # FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnQXhNpXB+3MHz //! # Ga1xoefNExdGLVxZYUjz7aFcAhoaKRYWIQQ3B3E3Sb1zXwy91VUT3t2aD+UaVwAA //! # tvoBANTItWBApjgY/JhR6iODkuzs0NgUa8FB7dciX0NKcCvuAPsFEsZ8MvZNpDWr //! # wygyZqBXrfGeVF9XX5gea+YjPszJD84zBGFv94kWCSsGAQQB2kcPAQEHQCw202vX //! # S2AO45UCegla3BdT5Ni04rU0UmmPb9VdEiEYwsC/BBgWCgExBYJhb/eJCRDHSeVh //! # 6tRJFEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeNRh9E //! # KpZbEAC5BGlRwmdRJ+ezFjLbFRTBODMnakTtdAKbAr6gBBkWCgBvBYJhb/eJCRDr //! # Orxt/dguCUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfO //! # n5KJiwXj8/+4OcbCxpa2WAtmlN48ryqBuNgu0pzVuRYhBAz8pIL7wcszRr42iOs6 //! # vG392C4JAAARegEA7RV9eqlrzRep7Oh0LRDD6zXoambuyOtttJQRKE/OKlABAMyI //! # Ha/5V3O4lfspfI0ghuTMxTPc81rRcREhwYuqXNwDFiEElOLq26TDRyo4MtWhx0nl //! # YerUSRQAAEB0AQDgyVqdYxHb1XmGbKqmzAK7hClGXDkqGjngOh6r3l8oQAD+I330 //! # E8ZHE0PBWJ6Rb6YXmtPEsvcsEgfm/pN0augU7A/GMwRhb/eKFgkrBgEEAdpHDwEB //! # B0DR6YaeeCOax42CffJndlZvv/r09cCVjt0ORB90j9lEP8LACwQfFgoAfQWCYW/3 //! # igMLCQcJEFJtELjzPANJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt //! # cGdwLm9yZyvJ6GlUekEcAqYsIeiFEyhdlqAW/OvPq1fDs/yMXdUJAxUKCAKbAQIe //! # ARYhBLIOjtMetcD960cJ6lJtELjzPANJAAB0EQEA/OuyDfAHgqfTd2bRzYzT7I2o //! # PiB/ihV0WUuUc88j/NkBAIe0op34YsVQKLU9Ix+JbZTfRkdYnTgOriY2lzHR5+oE //! # zRE8Y2Fyb2xAb3RoZXIub3JnPsLADgQTFgoAgAWCYW/3igMLCQcJEFJtELjzPANJ //! # RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0pWZ7F81PpB //! # rbYdp6JBWdbl0VqHn1AWIlR1Ry+uUvm9AxUKCAKZAQKbAQIeARYhBLIOjtMetcD9 //! # 60cJ6lJtELjzPANJAAAXFAEA4jXm0znj0C/Ye6JYHOneGpoFgfCWy7kx+qR0zKJh //! # ocoA/22vYYb0g+L6Kdo+gTITaibHoWYkztcisqJcirONz8YJwsADBBAWCgB1BYJh //! # cAVJBYMJZ5o7CRAT3t2aD+UaV0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 //! # b2lhLXBncC5vcmc6zt9LwAW1nYyI2k0zINUYzXj9pWLfh2Uij020D+014RYhBDcH //! # cTdJvXNfDL3VVRPe3ZoP5RpXAADe/wD/eKl+iefK1jhuGecOD2MBFOGuWKdmTjL6 //! # x8lx08W1iFYA/i2kkP6uUIX8rn4HlWcY+tdWxzEfT3ExrW8UGtFov+wEzjMEYW/3 //! # ihYJKwYBBAHaRw8BAQdAvHEeR20eC+45UsCaUdfxkG/CkEYzzyyCZk/gc4RRDVTC //! # wL8EGBYKATEFgmFv94oJEFJtELjzPANJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z //! # LnNlcXVvaWEtcGdwLm9yZyyvZrTVCn1hbMFSGPoXmek6QbeFvJIxDH8IiTgx2LXa //! # ApsCvqAEGRYKAG8FgmFv94oJEFVL1AWo5KwsRxQAAAAAAB4AIHNhbHRAbm90YXRp //! # b25zLnNlcXVvaWEtcGdwLm9yZ5vdUn08uTdpCKTyvFDQiOYJbemhOguSoBlGbunb //! # vYXWFiEEZsOhvCD6arW5g7qnVUvUBajkrCwAAGuvAQCb2J/W/pV0q7AOLDFJ3PmH //! # p6LXdEFyMM8MOsF9HXF0ewD/cqW1f0GnZpUqppVNWJ5UaxzwH4LJN2Syuy5dZgv5 //! # PAAWIQSyDo7THrXA/etHCepSbRC48zwDSQAAsIcBAL9fexChDBcBlscpSSmtzUbh //! # eqZRftsm4rzrUlzU3bknAP413jTBeSQItsUjpvwBLM3jFohGLRTI8gu96jWvTXKZ //! # BA== //! # =QO4G //! # -----END PGP PUBLIC KEY BLOCK-----" /* docstring trickery ahead: //! // ... //! -----END PGP PUBLIC KEY BLOCK-----"; //! # */; //! //! let certs: Vec = CertParser::from_bytes(keyring)? //! // Silently discard invalid certifications. //! .filter_map(|r| r.ok()) //! .collect(); //! assert_eq!(certs.len(), 4); //! //! let alice_fpr: Fingerprint = //! "CE398BE65389548EC2334FE8D16CEC58EADF534D" //! .parse().expect("valid fingerprint"); //! let alice_uid //! = UserID::from(""); //! //! let ca_fpr: Fingerprint = //! "3707713749BD735F0CBDD55513DEDD9A0FE51A57" //! .parse().expect("valid fingerprint"); //! let ca_uid //! = UserID::from(""); //! //! let bob_fpr: Fingerprint = //! "94E2EADBA4C3472A3832D5A1C749E561EAD44914" //! .parse().expect("valid fingerprint"); //! let bob_uid //! = UserID::from(""); //! //! let carol_fpr: Fingerprint = //! "B20E8ED31EB5C0FDEB4709EA526D10B8F33C0349" //! .parse().expect("valid fingerprint"); //! let carol_uid //! = UserID::from(""); //! //! let p = &StandardPolicy::new(); //! let n = Network::from_cert_refs(certs.iter(), p, None)?; //! let q = Query::new(&n, &[ alice_fpr.clone() ]); //! //! let paths = q.authenticate(bob_uid, bob_fpr.clone(), FULLY_TRUSTED); //! assert_eq!(paths.len(), 1); //! assert_eq!(paths[0].0.amount(), PARTIALLY_TRUSTED); //! assert_eq!(paths[0].0.certificates().map(|c| c.fingerprint()).collect::>(), //! vec![ alice_fpr, ca_fpr, bob_fpr ]); //! //! let paths = q.authenticate(carol_uid, carol_fpr.clone(), FULLY_TRUSTED); //! eprintln!("{:?}", paths); //! assert_eq!(paths.len(), 0); //! # Ok(()) //! # } //! ``` //! //! ### Building a Network By Hand //! //! ``` //! use std::time::SystemTime; //! use std::iter::once; //! //! use sequoia_openpgp as openpgp; //! use openpgp::Fingerprint; //! use openpgp::regex::RegexSet; //! //! use sequoia_wot::CertSynopsis; //! use sequoia_wot::UserIDSynopsis; //! use sequoia_wot::Certification; //! use sequoia_wot::Network; //! use sequoia_wot::RevocationStatus; //! use sequoia_wot::Query; //! use sequoia_wot::FULLY_TRUSTED; //! use sequoia_wot::PARTIALLY_TRUSTED; //! //! # fn main() -> anyhow::Result<()> { //! let reference_time = SystemTime::now(); //! //! let alice_fpr: Fingerprint = //! "CE398BE65389548EC2334FE8D16CEC58EADF534D" //! .parse().expect("valid fingerprint"); //! let alice_uid //! = UserIDSynopsis::from(""); //! //! let ca_fpr: Fingerprint = //! "3707713749BD735F0CBDD55513DEDD9A0FE51A57" //! .parse().expect("valid fingerprint"); //! let ca_uid //! = UserIDSynopsis::from(""); //! //! let bob_fpr: Fingerprint = //! "94E2EADBA4C3472A3832D5A1C749E561EAD44914" //! .parse().expect("valid fingerprint"); //! let bob_uid //! = UserIDSynopsis::from(""); //! //! let carol_fpr: Fingerprint = //! "B20E8ED31EB5C0FDEB4709EA526D10B8F33C0349" //! .parse().expect("valid fingerprint"); //! let carol_uid //! = UserIDSynopsis::from(""); //! //! let alice = CertSynopsis::new( //! alice_fpr.clone(), None, RevocationStatus::NotAsFarAsWeKnow, //! once(alice_uid.clone())); //! let ca = CertSynopsis::new( //! ca_fpr.clone(), None, RevocationStatus::NotAsFarAsWeKnow, //! once(ca_uid.clone())); //! let bob = CertSynopsis::new( //! bob_fpr.clone(), None, RevocationStatus::NotAsFarAsWeKnow, //! once(bob_uid.clone())); //! let carol = CertSynopsis::new( //! carol_fpr.clone(), None, RevocationStatus::NotAsFarAsWeKnow, //! once(carol_uid.clone())); //! //! let alice_certifies_ca = Certification::new( //! alice.clone(), Some(ca_uid.userid().clone()), ca.clone(), //! reference_time) //! .set_amount(PARTIALLY_TRUSTED) //! .set_depth(1) //! .set_regular_expressions( //! [ &b"<[^>]+[@.]some.org>$"[..] ].into_iter()); //! //! let ca_certifies_bob = Certification::new( //! ca.clone(), Some(bob_uid.userid().clone()), bob.clone(), //! reference_time); //! //! let certs = &[ alice, ca, bob, carol ][..]; //! let certifications = &[ alice_certifies_ca, ca_certifies_bob ]; //! let n = Network::from_synopses( //! certs, certifications, //! reference_time)?; //! let q = Query::new(&n, &[ alice_fpr.clone() ]); //! //! let paths = q.authenticate(bob_uid.userid().clone(), bob_fpr.clone(), //! FULLY_TRUSTED); //! assert_eq!(paths.len(), 1); //! assert_eq!(paths[0].0.amount(), PARTIALLY_TRUSTED); //! assert_eq!(paths[0].0.certificates().map(|c| c.fingerprint()).collect::>(), //! vec![ alice_fpr, ca_fpr, bob_fpr ]); //! # Ok(()) //! # } //! ``` type Result = std::result::Result; #[macro_use] mod log; pub mod store; mod userid; pub use userid::UserIDSynopsis; mod cert; pub use cert::CertSynopsis; mod certification; pub use certification::Depth; pub use certification::Certification; mod revocation; pub use revocation::RevocationStatus; pub use certification::CertificationSet; pub use certification::CertificationError; mod network; pub use network::{ CertLints, CertificationLints, Network, PathError, PathLints, Query, QueryBuilder, Root, Roots, }; // mod forward_propagation; mod backward_propagation; mod path; pub use path::{Path, Paths}; mod priority_queue; use priority_queue::PriorityQueue; #[cfg(test)] mod testdata; const TRACE: bool = false; /// The amount of trust needed for a binding to be fully trusted. pub const FULLY_TRUSTED: usize = 120; /// The usual amount of trust assigned to a partially trusted /// trusted introducer. /// /// Normally, three partially trusted introducers are needed to /// authenticate a binding. Thus, this is a third of `FULLY_TRUSTED`. pub const PARTIALLY_TRUSTED: usize = 40; /// Errors used in this crate. /// /// Note: This enum cannot be exhaustively matched to allow future /// extensions. #[non_exhaustive] #[derive(thiserror::Error, Debug, Clone, PartialEq, Eq)] pub enum Error { /// Not a revocation revocation certificate. #[error("Not a revocation revocation certificate")] NotARevocationCertificate, } /// Formats the given time. pub(crate) fn format_time(t: &std::time::SystemTime) -> String { chrono::DateTime::::from(t.clone()) .format("%Y-%m-%d %H:%M.%S") .to_string() } #[cfg(test)] mod tests { use super::*; use std::time; use sequoia_openpgp as openpgp; use openpgp::Cert; use openpgp::cert::CertParser; use openpgp::Fingerprint; use openpgp::KeyHandle; use openpgp::KeyID; use openpgp::parse::Parse; use openpgp::packet::UserID; use openpgp::policy::StandardPolicy; use openpgp::Result; use crate::store::Backend; use crate::store::Store; // Authenticates the target. fn sp<'a, S>(q: &Query<'a, S>, target_fpr: &Fingerprint, target_userid: &UserID, expected: &[ (usize, &[ &Fingerprint ]) ], min_trust_amount: Option) where S: Store + Backend<'a> { eprintln!("\nauthenticating: {}, {}", target_fpr, String::from_utf8_lossy(target_userid.value())); let got = q.authenticate(target_userid.clone(), target_fpr.clone(), min_trust_amount.unwrap_or(120)); match (got.iter().count() > 0, expected.len() > 0) { (false, false) => { eprintln!("Can't authenticate == can't authenticate (good)"); } (false, true) => { panic!("Couldn't authenticate. Expected: paths:\n{}", expected.iter() .enumerate() .flat_map(|(i, (_, p))| { p.iter().enumerate().map(move |(j, f)| { format!(" {}.{}. {}", i, j, f.to_hex()) }) }) .collect::>() .join("\n ")); } (true, false) => { panic!("Unexpectedly authenticated binding. Got:\n{}", got.iter().enumerate().map(|(i, p)| { format!("PATH #{}\n{:?}", i, p) }) .collect::>() .join("\n")); } (true, true) => { eprintln!("Paths: {:?}", got); assert_eq!(got.iter().count(), expected.len(), "Expected {:?} paths, got {:?}", got, expected); for (i, ((got_amount, got_path), (expected_amount, expected_path))) in got.iter().map(|(p, a)| { (a, p.certificates().map(|c| c.fingerprint()).collect::>()) }) .zip(expected.iter().map(|(a, fprs)| { (a, fprs.iter().map(|&fpr| { fpr.clone() }).collect::>()) })) .enumerate() { assert_eq!(got_path, expected_path, "got vs. expected path (#{})", i); assert_eq!(got_amount, expected_amount, "got vs. expected trust amount (#{})", i); } assert_eq!(got.amount(), expected.iter().map(|(a, _)| a).sum()); } } // Make sure Network::path agrees that the paths are good. for &(amount, path) in expected.iter() { if let Err(err) = q.path( &path .iter() .map(|&fpr| KeyHandle::from(fpr)) .collect::>()[..], target_userid, amount, // XXX &StandardPolicy::new()) { panic!("Unexpectedly failed to validate {} {:?}: {}.", path.iter() .map(|&fpr| KeyID::from(fpr).to_hex()) .collect::>() .join(" "), target_userid, err); } } } #[test] #[allow(unused)] fn simple() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "39A479816C934B9E0464F1F4BC1DCFDEADA4EE90" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D let carol_fpr: Fingerprint = "43530F91B450EDB269AA58821A1CF4DC7F500F04" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 39A479816C934B9E0464F1F4BC1DCFDEADA4EE90 let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 43530F91B450EDB269AA58821A1CF4DC7F500F04 let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 let frank_fpr: Fingerprint = "2693237D2CED0BB68F118D78DC86A97CD2C819D9" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("simple.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ alice_fpr.clone() ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (120, &[ &alice_fpr ][..]) ][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (100, &[ &alice_fpr, &bob_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (100, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..]) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (100, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr ][..]) ][..], None); sp(&r, &ellen_fpr, &ellen_uid.clone(), &[][..], None); sp(&r, &frank_fpr, &frank_uid.clone(), &[][..], None); // No one authenticated Bob's User ID on Carol's key. sp(&r, &carol_fpr, &bob_uid.clone(), &[][..], None); let r = Query::new(&n, &[ bob_fpr.clone() ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (120, &[ &bob_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (100, &[ &bob_fpr, &carol_fpr ][..]) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (100, &[ &bob_fpr, &carol_fpr, &dave_fpr ][..]) ][..], None); sp(&r, &ellen_fpr, &ellen_uid.clone(), &[][..], None); sp(&r, &frank_fpr, &frank_uid.clone(), &[][..], None); // No one authenticated Bob's User ID on Carol's key. sp(&r, &carol_fpr, &bob_uid.clone(), &[][..], None); Ok(()) } #[test] #[allow(unused)] fn cycle() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "BFC5CA10FB55A4B790E2A1DBA5CFAB9A9E34E183" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "A637747DCF876A7F6C9149F74D47846E24A20C0B" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 4458062DC7388909CF760E6823150D8E4408638A // Certified by: BFC5CA10FB55A4B790E2A1DBA5CFAB9A9E34E183 let carol_fpr: Fingerprint = "394B04774FDAB0CDBF4D6FFD7930EA0FB549E303" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: A637747DCF876A7F6C9149F74D47846E24A20C0B let dave_fpr: Fingerprint = "4458062DC7388909CF760E6823150D8E4408638A" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 394B04774FDAB0CDBF4D6FFD7930EA0FB549E303 let ed_fpr: Fingerprint = "78C3814EFD16E68F4F1AB4B874E30AE11FFCFB1B" .parse().expect("valid fingerprint"); let ed_uid = UserID::from(""); // Certified by: 4458062DC7388909CF760E6823150D8E4408638A let frank_fpr: Fingerprint = "A6219FF753AEAE2DE8A74E8487977DD568A08237" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // Certified by: 78C3814EFD16E68F4F1AB4B874E30AE11FFCFB1B let certs: Vec = CertParser::from_bytes( &crate::testdata::data("cycle.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ alice_fpr.clone() ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (120, &[ &alice_fpr ][..]) ][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (120, &[ &alice_fpr, &bob_fpr ][..] ) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..] ) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (60, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr ][..] ) ][..], None); sp(&r, &ed_fpr, &ed_uid.clone(), &[ (30, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr, &ed_fpr ][..] ) ][..], None); sp(&r, &frank_fpr, &frank_uid.clone(), &[][..], None); let r = Query::new(&n, &[ alice_fpr.clone(), dave_fpr.clone() ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (120, &[ &alice_fpr ][..]) ][..], None); // The following paths are identical and the sorting depends // on the fingerprint. Thus regenerating the keys could // create a failure. sp(&r, &bob_fpr, &bob_uid.clone(), &[ (120, &[ &alice_fpr, &bob_fpr ][..]), (120, &[ &dave_fpr, &bob_fpr ][..]), ][..], Some(300)); // The following paths are identical and the sorting depends // on the fingerprint. Thus regenerating the keys could // create a failure. sp(&r, &carol_fpr, &carol_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..]), ][..], None); sp(&r, &ed_fpr, &ed_uid.clone(), &[ (30, &[ &dave_fpr, &ed_fpr ][..] ) ][..], None); sp(&r, &frank_fpr, &frank_uid.clone(), &[ (30, &[ &dave_fpr, &ed_fpr, &frank_fpr ][..] ) ][..], None); Ok(()) } #[test] #[allow(unused)] fn cliques() -> Result<()> { let p = &StandardPolicy::new(); let root_fpr: Fingerprint = "D2B0 C383 5C01 B0C1 20BC 540D A4AA 8F88 0BA5 12B5" .parse().expect("valid fingerprint"); let root_uid = UserID::from(""); let a_0_fpr: Fingerprint = "3630 82E9 EEB2 2E50 AD30 3D8B 1BFE 9BA3 F4AB D40E" .parse().expect("valid fingerprint"); let a_0_uid = UserID::from(""); let a_1_fpr: Fingerprint = "7974 C04E 8D5B 540D 23CD 4E62 DDFA 779D 91C6 9894" .parse().expect("valid fingerprint"); let a_1_uid = UserID::from(""); let b_0_fpr: Fingerprint = "25D8 EAAB 8947 05BB 64D4 A6A8 9649 EF81 AEFE 5162" .parse().expect("valid fingerprint"); let b_0_uid = UserID::from(""); let b_1_fpr: Fingerprint = "46D2 F5CE D9BD 3D63 A11D DFEE 1BA0 1950 6BE6 7FBB" .parse().expect("valid fingerprint"); let b_1_uid = UserID::from(""); let c_0_fpr: Fingerprint = "A0CD 8758 2C21 743C 0E30 637F 7FAD B1C3 FEFB FE59" .parse().expect("valid fingerprint"); let c_0_uid = UserID::from(""); let c_1_fpr: Fingerprint = "5277 C14F 9D37 A0F4 D615 DD9C CDCC 1AC8 464C 8FE5" .parse().expect("valid fingerprint"); let c_1_uid = UserID::from(""); let d_0_fpr: Fingerprint = "C24C C091 02D2 2E38 E839 3C55 1669 8256 1E14 0C03" .parse().expect("valid fingerprint"); let d_0_uid = UserID::from(""); let d_1_fpr: Fingerprint = "7A80 DB53 30B7 D900 D5BD 1F82 EAD7 2FF7 9140 78B2" .parse().expect("valid fingerprint"); let d_1_uid = UserID::from(""); let e_0_fpr: Fingerprint = "D1E9 F85C EF62 7169 9FBD E5AB 26EF E0E0 35AC 522E" .parse().expect("valid fingerprint"); let e_0_uid = UserID::from(""); let f_0_fpr: Fingerprint = "C0FF AEDE F092 8B18 1265 775A 222B 480E B43E 0AFF" .parse().expect("valid fingerprint"); let f_0_uid = UserID::from(""); let target_fpr: Fingerprint = "CE22 ECD2 82F2 19AA 9959 8BA3 B58A 7DA6 1CA9 7F55" .parse().expect("valid fingerprint"); let target_uid = UserID::from(""); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("cliques.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ root_fpr.clone() ]); // root -> a-0 -> a-1 -> b-0 -> ... -> f-0 -> target sp(&r, &target_fpr, &target_uid.clone(), &[ (120, &[ &root_fpr, &a_0_fpr, &a_1_fpr, &b_0_fpr, &b_1_fpr, &c_0_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ][..]) ], None); let r = Query::new(&n, &[ a_1_fpr.clone() ]); sp(&r, &target_fpr, &target_uid.clone(), &[ (120, &[ &a_1_fpr, &b_0_fpr, &b_1_fpr, &c_0_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ][..]) ][..], None); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("cliques-local-optima.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ root_fpr.clone() ]); // root -> b-0 -> ... -> f-0 -> target sp(&r, &target_fpr, &target_uid.clone(), &[ (30, &[ &root_fpr, &b_0_fpr, &b_1_fpr, &c_0_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ][..]), (30, &[ &root_fpr, &a_1_fpr, &b_0_fpr, &b_1_fpr, &c_0_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ][..]), (60, &[ &root_fpr, &a_0_fpr, &a_1_fpr, &b_0_fpr, &b_1_fpr, &c_0_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ][..]) ], None); let r = Query::new(&n, &[ a_1_fpr.clone() ]); sp(&r, &target_fpr, &target_uid.clone(), &[ (120, &[ &a_1_fpr, &b_0_fpr, &b_1_fpr, &c_0_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ][..]) ][..], None); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("cliques-local-optima-2.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ root_fpr.clone() ]); // root -> b-0 -> ... -> f-0 -> target sp(&r, &target_fpr, &target_uid.clone(), &[ (30, &[ &root_fpr, &b_0_fpr, &b_1_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ][..]), (30, &[ &root_fpr, &a_1_fpr, &b_0_fpr, &b_1_fpr, &c_0_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ][..]), (60, &[ &root_fpr, &a_0_fpr, &a_1_fpr, &b_0_fpr, &b_1_fpr, &c_0_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ][..]) ], None); let r = Query::new(&n, &[ a_1_fpr.clone() ]); sp(&r, &target_fpr, &target_uid.clone(), &[ (30, &[ &a_1_fpr, &b_0_fpr, &b_1_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ][..]), (90, &[ &a_1_fpr, &b_0_fpr, &b_1_fpr, &c_0_fpr, &c_1_fpr, &d_0_fpr, &d_1_fpr, &e_0_fpr, &f_0_fpr, &target_fpr ][..]) ][..], None); Ok(()) } #[test] #[allow(unused)] fn roundabout() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "41E9B069C96EB6D47525294B10BBBD00912BEA02" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "2E90AEE966DF28CB916439B20397E086E705AC1A" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 3267D46247D26101B3E5014CDF4F9BA5831D91DA // Certified by: 41E9B069C96EB6D47525294B10BBBD00912BEA02 let carol_fpr: Fingerprint = "92DDE8747C8E6ED09D41A4E1330D1190E858754C" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 41E9B069C96EB6D47525294B10BBBD00912BEA02 let dave_fpr: Fingerprint = "D4515E6619084ED8142DF8589059E3846A025611" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 92DDE8747C8E6ED09D41A4E1330D1190E858754C let elmar_fpr: Fingerprint = "E553C11DCFA777F3205E5090F5EE59C2795CDBA2" .parse().expect("valid fingerprint"); let elmar_uid = UserID::from(""); // Certified by: AE40578962411356F9609CAA9C2447E61FFDBB15 // Certified by: D4515E6619084ED8142DF8589059E3846A025611 let frank_fpr: Fingerprint = "3267D46247D26101B3E5014CDF4F9BA5831D91DA" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // Certified by: E553C11DCFA777F3205E5090F5EE59C2795CDBA2 let george_fpr: Fingerprint = "CCD5DB27BD7C4F8E2010083605EF17E8A93EB652" .parse().expect("valid fingerprint"); let george_uid = UserID::from(""); // Certified by: AE40578962411356F9609CAA9C2447E61FFDBB15 // Certified by: 2E90AEE966DF28CB916439B20397E086E705AC1A let henry_fpr: Fingerprint = "7F62EF97091AE1FCB4E1C67EC8D9E94C4731529B" .parse().expect("valid fingerprint"); let henry_uid = UserID::from(""); // Certified by: CCD5DB27BD7C4F8E2010083605EF17E8A93EB652 let isaac_fpr: Fingerprint = "32FD4D68B3227334CD0583E9FA0721F49D2F395D" .parse().expect("valid fingerprint"); let isaac_uid = UserID::from(""); // Certified by: 7F62EF97091AE1FCB4E1C67EC8D9E94C4731529B let jenny_fpr: Fingerprint = "AE40578962411356F9609CAA9C2447E61FFDBB15" .parse().expect("valid fingerprint"); let jenny_uid = UserID::from(""); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("roundabout.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ alice_fpr.clone() ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (120, &[ &alice_fpr ][..]) ][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (60, &[ &alice_fpr, &bob_fpr ][..] ), (120, &[ &alice_fpr, &carol_fpr, &dave_fpr, &elmar_fpr, &frank_fpr, &bob_fpr ][..] ) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (120, &[ &alice_fpr, &carol_fpr ][..]) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (120, &[ &alice_fpr, &carol_fpr, &dave_fpr ][..]) ][..], None); sp(&r, &elmar_fpr, &elmar_uid.clone(), &[ (120, &[ &alice_fpr, &carol_fpr, &dave_fpr, &elmar_fpr ][..]) ][..], None); sp(&r, &frank_fpr, &frank_uid.clone(), &[ (120, &[ &alice_fpr, &carol_fpr, &dave_fpr, &elmar_fpr, &frank_fpr ][..] ) ][..], None); sp(&r, &george_fpr, &george_uid.clone(), &[ (60, &[ &alice_fpr, &bob_fpr, &george_fpr ][..] ), (60, &[ &alice_fpr, &carol_fpr, &dave_fpr, &elmar_fpr, &frank_fpr, &bob_fpr, &george_fpr ][..] ) ][..], None); sp(&r, &henry_fpr, &henry_uid.clone(), &[ (60, &[ &alice_fpr, &bob_fpr, &george_fpr, &henry_fpr ][..] ), (60, &[ &alice_fpr, &carol_fpr, &dave_fpr, &elmar_fpr, &frank_fpr, &bob_fpr, &george_fpr, &henry_fpr ][..] ) ][..], None); sp(&r, &isaac_fpr, &isaac_uid.clone(), &[ (60, &[ &alice_fpr, &bob_fpr, &george_fpr, &henry_fpr, &isaac_fpr ][..] ), ][..], None); sp(&r, &jenny_fpr, &jenny_uid.clone(), &[ ][..], None); let r = Query::new(&n, &[ jenny_fpr.clone() ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (100, &[ &jenny_fpr, &elmar_fpr, &frank_fpr, &bob_fpr ][..] ) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[][..], None); sp(&r, &elmar_fpr, &elmar_uid.clone(), &[ (100, &[ &jenny_fpr, &elmar_fpr ][..] ) ][..], None); sp(&r, &frank_fpr, &frank_uid.clone(), &[ (100, &[ &jenny_fpr, &elmar_fpr, &frank_fpr ][..] ) ][..], None); sp(&r, &george_fpr, &george_uid.clone(), &[ (100, &[ &jenny_fpr, &george_fpr ][..] ), (100, &[ &jenny_fpr, &elmar_fpr, &frank_fpr, &bob_fpr, &george_fpr ][..] ) ][..], None); sp(&r, &henry_fpr, &henry_uid.clone(), &[ (100, &[ &jenny_fpr, &george_fpr, &henry_fpr ][..] ), (20, &[ &jenny_fpr, &elmar_fpr, &frank_fpr, &bob_fpr, &george_fpr, &henry_fpr ][..] ) ][..], None); sp(&r, &isaac_fpr, &isaac_uid.clone(), &[][..], None); sp(&r, &jenny_fpr, &jenny_uid.clone(), &[ (120, &[ &jenny_fpr ][..]) ][..], None); let r = Query::new(&n, &[ alice_fpr.clone(), jenny_fpr.clone() ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (120, &[ &alice_fpr ][..]) ][..], None); // In the first iteration of backwards_propagate, we find two paths: // // A -> B (60) // J -> E -> F -> B (100) // // It doesn't find: // // A -> C -> D -> E -> F -> B (120) // // Query::authenticate chooses the path rooted at J, // because it has more trust. Then we call // backwards_propagate again and find: // // A -> B (60) // // Finally, we call backwards a third time and find: // // A -> C -> D -> E -> F -> B (120 -> 20) sp(&r, &bob_fpr, &bob_uid.clone(), &[ (100, &[ &jenny_fpr, &elmar_fpr, &frank_fpr, &bob_fpr ][..] ), (60, &[ &alice_fpr, &bob_fpr ][..] ), (20, &[ &alice_fpr, &carol_fpr, &dave_fpr, &elmar_fpr, &frank_fpr, &bob_fpr ][..] ), ][..], Some(240)); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (120, &[ &alice_fpr, &carol_fpr ][..]) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (120, &[ &alice_fpr, &carol_fpr, &dave_fpr ][..]) ][..], None); sp(&r, &elmar_fpr, &elmar_uid.clone(), &[ (120, &[ &alice_fpr, &carol_fpr, &dave_fpr, &elmar_fpr ][..] ), ], None); sp(&r, &frank_fpr, &frank_uid.clone(), &[ (120, &[ &alice_fpr, &carol_fpr, &dave_fpr, &elmar_fpr, &frank_fpr ][..] ), ][..], Some(240)); sp(&r, &george_fpr, &george_uid.clone(), &[ (100, &[ &jenny_fpr, &george_fpr ][..] ), (100, &[ &jenny_fpr, &elmar_fpr, &frank_fpr, &bob_fpr, &george_fpr ][..] ), (20, &[ &alice_fpr, &bob_fpr, &george_fpr ][..] ), ][..], Some(240)); sp(&r, &henry_fpr, &henry_uid.clone(), &[ (60, &[ &alice_fpr, &bob_fpr, &george_fpr, &henry_fpr ][..] ), (60, &[ &jenny_fpr, &george_fpr, &henry_fpr ][..] ), ][..], None); sp(&r, &isaac_fpr, &isaac_uid.clone(), &[ (60, &[ &alice_fpr, &bob_fpr, &george_fpr, &henry_fpr, &isaac_fpr ][..] ), ][..], None); sp(&r, &jenny_fpr, &jenny_uid.clone(), &[ (120, &[ &jenny_fpr ][..]) ][..], None); Ok(()) } #[test] #[allow(unused)] fn local_optima() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "EAAE12F98D39F38BF0D1B4C5C46A428ADEFBB2F8" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "89C7A9FB7236A77ABBE4F29CB8180FBF6382F90F" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: EAAE12F98D39F38BF0D1B4C5C46A428ADEFBB2F8 // Certified by: EAAE12F98D39F38BF0D1B4C5C46A428ADEFBB2F8 let carol_fpr: Fingerprint = "E9DF94E389F529F8EF6AA223F6CC1F8544C0874D" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 89C7A9FB7236A77ABBE4F29CB8180FBF6382F90F // Certified by: 89C7A9FB7236A77ABBE4F29CB8180FBF6382F90F let dave_fpr: Fingerprint = "C2F822F17B68E946853A2DCFF55541D89F27F88B" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: E9DF94E389F529F8EF6AA223F6CC1F8544C0874D // Certified by: 89C7A9FB7236A77ABBE4F29CB8180FBF6382F90F let ellen_fpr: Fingerprint = "70507A9058A57FEAE18CC3CE6A398AC9051D9CA8" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: C2F822F17B68E946853A2DCFF55541D89F27F88B // Certified by: C2F822F17B68E946853A2DCFF55541D89F27F88B // Certified by: E9DF94E389F529F8EF6AA223F6CC1F8544C0874D let francis_fpr: Fingerprint = "D8DDA78A2297CA3C35B9377577E8B54B9350C082" .parse().expect("valid fingerprint"); let francis_uid = UserID::from(""); // Certified by: 70507A9058A57FEAE18CC3CE6A398AC9051D9CA8 // Certified by: 89C7A9FB7236A77ABBE4F29CB8180FBF6382F90F let georgina_fpr: Fingerprint = "C5D1B22FEC75911A04E1A5DC75B66B994E70ADE2" .parse().expect("valid fingerprint"); let georgina_uid = UserID::from(""); // Certified by: 70507A9058A57FEAE18CC3CE6A398AC9051D9CA8 let henry_fpr: Fingerprint = "F260739E3F755389EFC2FEE67F58AACB661D5120" .parse().expect("valid fingerprint"); let henry_uid = UserID::from(""); // Certified by: 70507A9058A57FEAE18CC3CE6A398AC9051D9CA8 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("local-optima.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ alice_fpr.clone() ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (120, &[ &alice_fpr ][..]) ][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (120, &[ &alice_fpr, &bob_fpr ][..] ) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (100, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..] ) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (50, &[ &alice_fpr, &bob_fpr, &dave_fpr ][..] ) ][..], None); sp(&r, &ellen_fpr, &ellen_uid.clone(), &[ (100, &[ &alice_fpr, &bob_fpr, &carol_fpr, &ellen_fpr ][..] ), (20, &[ &alice_fpr, &bob_fpr, &dave_fpr, &ellen_fpr ][..] ), ][..], None); sp(&r, &francis_fpr, &francis_uid.clone(), &[ (75, &[ &alice_fpr, &bob_fpr, &francis_fpr ][..] ), (45, &[ &alice_fpr, &bob_fpr, &carol_fpr, &ellen_fpr, &francis_fpr ][..] ), ][..], None); sp(&r, &georgina_fpr, &georgina_uid.clone(), &[ (30, &[ &alice_fpr, &bob_fpr, &dave_fpr, &ellen_fpr, &georgina_fpr ][..] ), ][..], None); sp(&r, &henry_fpr, &henry_uid.clone(), &[ (100, &[ &alice_fpr, &bob_fpr, &carol_fpr, &ellen_fpr, &henry_fpr ][..] ), (20, &[ &alice_fpr, &bob_fpr, &dave_fpr, &ellen_fpr, &henry_fpr ][..] ), ][..], None); let r = Query::new(&n, &[ bob_fpr.clone() ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (120, &[ &bob_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (100, &[ &bob_fpr, &carol_fpr ][..] ) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (50, &[ &bob_fpr, &dave_fpr ][..] ) ][..], None); sp(&r, &ellen_fpr, &ellen_uid.clone(), &[ (100, &[ &bob_fpr, &carol_fpr, &ellen_fpr ][..] ), (50, &[ &bob_fpr, &dave_fpr, &ellen_fpr ][..] ), ][..], None); sp(&r, &francis_fpr, &francis_uid.clone(), &[ (75, &[ &bob_fpr, &francis_fpr ][..] ), (100, &[ &bob_fpr, &carol_fpr, &ellen_fpr, &francis_fpr ][..] ), (20, &[ &bob_fpr, &dave_fpr, &ellen_fpr, &francis_fpr ][..] ), ][..], Some(240)); Ok(()) } #[test] #[allow(unused)] fn multiple_userids_3() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "DA3CFC60BD4B8835702A66782C7A431946C12DF7" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "28C108707090FCDFF630D1E141FB02F0E397D55E" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: DA3CFC60BD4B8835702A66782C7A431946C12DF7 let bob_some_org_uid = UserID::from(""); // Certified by: DA3CFC60BD4B8835702A66782C7A431946C12DF7 let bob_third_org_uid = UserID::from(""); let carol_fpr: Fingerprint = "9FB1D2F41AB5C478378E728C8DD5A5A434EEAAB8" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 28C108707090FCDFF630D1E141FB02F0E397D55E let dave_fpr: Fingerprint = "0C131F8959F45D08B6136FDAAD2E16A26F73D48E" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 28C108707090FCDFF630D1E141FB02F0E397D55E let ed_fpr: Fingerprint = "296935FAE420CCCF3AEDCEC9232BFF0AE9A7E5DB" .parse().expect("valid fingerprint"); let ed_uid = UserID::from(""); // Certified by: 0C131F8959F45D08B6136FDAAD2E16A26F73D48E let frank_fpr: Fingerprint = "A72AA1B7D9D8CB04D988F1520A404E37A7766608" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // Certified by: 9FB1D2F41AB5C478378E728C8DD5A5A434EEAAB8 // Certified by: 296935FAE420CCCF3AEDCEC9232BFF0AE9A7E5DB let certs: Vec = CertParser::from_bytes( &crate::testdata::data("multiple-userids-3.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ alice_fpr.clone() ]); /// Tests. sp(&r, &frank_fpr, &frank_uid.clone(), &[ (20, &[ &alice_fpr, &bob_fpr, &carol_fpr, &frank_fpr ][..]), (10, &[ &alice_fpr, &bob_fpr, &dave_fpr, &ed_fpr, &frank_fpr ][..]), ][..], None); Ok(()) } #[test] #[allow(unused)] fn certification_liveness() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "77C077250C26357E5E64A58A41426350B1D7F738" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "840891562819D3A108C4DA1BB31438DE34F8CF69" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 77C077250C26357E5E64A58A41426350B1D7F738 // Certified by: 77C077250C26357E5E64A58A41426350B1D7F738 let carol_fpr: Fingerprint = "E8BB154D000C17AC87291D7271553C836973FE01" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 840891562819D3A108C4DA1BB31438DE34F8CF69 // Certified by: 840891562819D3A108C4DA1BB31438DE34F8CF69 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("certification-liveness.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); // $ date '+%s' -d 20200202 // 1580598000 let t1 = time::UNIX_EPOCH + time::Duration::new(1580598000, 0); // $ date '+%s' -d 20200302 // 1583103600 let t2 = time::UNIX_EPOCH + time::Duration::new(1583103600, 0); // $ date '+%s' -d 20200402 // 1585778400 let t3 = time::UNIX_EPOCH + time::Duration::new(1585778400, 0); for (i, t) in [t1, t2, t3].iter().enumerate() { eprintln!("\n\nTrying at t{}", i + 1); let n = Network::from_cert_refs(certs.iter(), p, *t)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ alice_fpr.clone() ]); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (match i + 1 { 1 => 60, 2 => 120, 3 => 60, _ => unreachable!(), }, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..]), ][..], None); } Ok(()) } #[test] #[allow(unused)] fn cert_revoked_soft() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "66037F98B444BBAFDFE98E871738DFAB86878262" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "4CD8737F76C2B897C4F058DBF28C47540FA2C3B3" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 66037F98B444BBAFDFE98E871738DFAB86878262 let carol_fpr: Fingerprint = "AB4E3F8EE8BBD3459754D75ACE570F9B8C7DC75D" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 66037F98B444BBAFDFE98E871738DFAB86878262 let dave_fpr: Fingerprint = "DF6A440ED9DE723B0EBC7F50E24FBB1B9FADC999" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 4CD8737F76C2B897C4F058DBF28C47540FA2C3B3 // Certified by: AB4E3F8EE8BBD3459754D75ACE570F9B8C7DC75D // Certified by: 4CD8737F76C2B897C4F058DBF28C47540FA2C3B3 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("cert-revoked-soft.pgp"))? .map(|c| c.expect("no errors")) .collect(); // $ date '+%s' -d 20200202 // 1580598000 let t1 = time::UNIX_EPOCH + time::Duration::new(1580598000, 0); // $ date '+%s' -d 20200302 // 1583103600 let t2 = time::UNIX_EPOCH + time::Duration::new(1583103600, 0); // $ date '+%s' -d 20200402 // 1585778400 let t3 = time::UNIX_EPOCH + time::Duration::new(1585778400, 0); // At t1, soft revocations are in the future so certifications // are still valid. // // At t2, B is soft revoked so existing certifications are // still valid, but we can no longer authenticate B. // // At t3, A recertifies B and B recertifies D. These // certifications should be ignored as they are made after B // was revoked. for (i, t) in [t1, t2, t3].iter().enumerate() { eprintln!("\n\nTrying at t{}", i + 1); let n = Network::from_cert_refs(certs.iter(), p, *t)?; eprintln!("{:?}", n); // Consider just the code path where B is the issuer. // // Covers scenarios #1 at t1, #3 at t2 and t3 let r = Query::new(&n, &[ bob_fpr.clone() ]); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (60, &[ &bob_fpr, &dave_fpr ][..]), ][..], None); let r = Query::new(&n, &[ alice_fpr.clone() ]); // Consider just the code path where B is the target. // // Covers scenarios #2 at t1, #4 at t2 and t3. if i + 1 == 1 { sp(&r, &bob_fpr, &bob_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr ][..]), ][..], None); } else { sp(&r, &bob_fpr, &bob_uid.clone(), &[][..], None); } // Consider the code path where B is both an issuer and a // target. // // Covers scenarios #1 & #2 at t1, #3 & #4 at t2 and t3. sp(&r, &dave_fpr, &dave_uid.clone(), &[ (60, &[ &alice_fpr, &bob_fpr, &dave_fpr ][..]), (30, &[ &alice_fpr, &carol_fpr, &dave_fpr ][..]), ][..], None); } Ok(()) } #[test] #[allow(unused)] fn cert_revoked_hard() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "219AAB661C8AAF4526DBC31AA751A7A0532863BA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "90E02BFB03FAA04714D1D3D87543157EF3B12BE9" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 219AAB661C8AAF4526DBC31AA751A7A0532863BA // Certified by: 219AAB661C8AAF4526DBC31AA751A7A0532863BA let carol_fpr: Fingerprint = "BF680710128E6BCCB2268154569F5F6BFB95C544" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 219AAB661C8AAF4526DBC31AA751A7A0532863BA let dave_fpr: Fingerprint = "46945292F8F643F0573AF71183F9C1A4759A16D6" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 90E02BFB03FAA04714D1D3D87543157EF3B12BE9 // Certified by: BF680710128E6BCCB2268154569F5F6BFB95C544 // Certified by: 90E02BFB03FAA04714D1D3D87543157EF3B12BE9 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("cert-revoked-hard.pgp"))? .map(|c| c.expect("no errors")) .collect(); // $ date '+%s' -d 20200202 // 1580598000 let t1 = time::UNIX_EPOCH + time::Duration::new(1580598000, 0); // $ date '+%s' -d 20200302 // 1583103600 let t2 = time::UNIX_EPOCH + time::Duration::new(1583103600, 0); // $ date '+%s' -d 20200402 // 1585778400 let t3 = time::UNIX_EPOCH + time::Duration::new(1585778400, 0); // At t1, B is hard revoked in the future so all // certifications are invalid. // // At t2, B is hard revoked so all certifications are invalid. // // At t3, A recertifies B and B recertifies D. These // certifications should also be ignored. for (i, t) in [t1, t2, t3].iter().enumerate() { eprintln!("\n\nTrying at t{}", i + 1); let n = Network::from_cert_refs(certs.iter(), p, *t)?; eprintln!("{:?}", n); // Consider just the code path where B is the issuer. // // Covers scenarios #5 at t1, #7 at t2 and t3 let r = Query::new(&n, &[ bob_fpr.clone() ]); sp(&r, &dave_fpr, &dave_uid.clone(), &[][..], None); let r = Query::new(&n, &[ alice_fpr.clone() ]); // Consider just the code path where B is the target. // // Covers scenarios #6 at t1, #8 at t2 and t3. sp(&r, &bob_fpr, &bob_uid.clone(), &[][..], None); // Consider the code path where B is both an issuer and a // target. // // Covers scenarios #5 & #6 at t1, #7 & #8 at t2 and t3. sp(&r, &dave_fpr, &dave_uid.clone(), &[ (30, &[ &alice_fpr, &carol_fpr, &dave_fpr ][..]), ][..], None); } Ok(()) } #[test] #[allow(unused)] fn cert_expired() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "1FA62523FB7C06E71EEFB82BB5159F3FC3EB3AC9" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "B166B31AE5F95600B3F7184FE74C6CE62821686F" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 1FA62523FB7C06E71EEFB82BB5159F3FC3EB3AC9 let carol_fpr: Fingerprint = "81CD118AC5BD9156DC113772626222D76ACDFFCF" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: B166B31AE5F95600B3F7184FE74C6CE62821686F let certs: Vec = CertParser::from_bytes( &crate::testdata::data("cert-expired.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); // $ date '+%s' -d 20200202 // 1580598000 let t1 = time::UNIX_EPOCH + time::Duration::new(1580598000, 0); // $ date '+%s' -d 20200302 // 1583103600 let t2 = time::UNIX_EPOCH + time::Duration::new(1583103600, 0); // $ date '+%s' -d 20200402 // 1585778400 let t3 = time::UNIX_EPOCH + time::Duration::new(1585778400, 0); for (i, t) in [t1, t2, t3].iter().enumerate() { eprintln!("\n\nTrying at t{}", i + 1); let n = Network::from_cert_refs(certs.iter(), p, *t)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ alice_fpr.clone() ]); // Bob as target. (Once Bob has expired it can be used as // a trusted introducer for prior certifications, but // bindings cannot be authenticated.) if i + 1 == 1 { sp(&r, &bob_fpr, &bob_uid.clone(), &[ (60, &[ &alice_fpr, &bob_fpr ][..]) ][..], None); } else { sp(&r, &bob_fpr, &bob_uid.clone(), &[][..], None); } // Bob in the middle. sp(&r, &carol_fpr, &carol_uid.clone(), & [ (60, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..]) ][..], None); // Bob as root. let r = Query::new(&n, &[ bob_fpr.clone() ]); sp(&r, &carol_fpr, &carol_uid.clone(), & [ (60, &[ &bob_fpr, &carol_fpr ][..]) ][..], None); // Bob's self signature. if i + 1 == 1 { sp(&r, &bob_fpr, &bob_uid.clone(), & [ (120, &[ &bob_fpr ][..]) ][..], None); } else { sp(&r, &bob_fpr, &bob_uid.clone(), &[][..], None); } } Ok(()) } #[test] #[allow(unused)] fn userid_revoked() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "01672BB67E4B4047E5A4EC0A731CEA092C465FC8" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "EA479A77CD074458EAFE56B4861BF42FF490C581" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 01672BB67E4B4047E5A4EC0A731CEA092C465FC8 // Certified by: 01672BB67E4B4047E5A4EC0A731CEA092C465FC8 let carol_fpr: Fingerprint = "212873BB9C4CC49F8E5A6FEA78BC5397470BA7F0" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: EA479A77CD074458EAFE56B4861BF42FF490C581 // Certified by: EA479A77CD074458EAFE56B4861BF42FF490C581 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("userid-revoked.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); // $ date '+%s' -d 20200202 // 1580598000 let t1 = time::UNIX_EPOCH + time::Duration::new(1580598000, 0); // $ date '+%s' -d 20200302 // 1583103600 let t2 = time::UNIX_EPOCH + time::Duration::new(1583103600, 0); // $ date '+%s' -d 20200402 // 1585778400 let t3 = time::UNIX_EPOCH + time::Duration::new(1585778400, 0); // At t2, B is soft revoked so all future certifications are // invalid. for (i, t) in [t1, t2, t3].iter().enumerate() { eprintln!("\n\nTrying at t{}", i + 1); let n = Network::from_cert_refs(certs.iter(), p, *t)?; eprintln!("{:?}", n); // Revoked User ID on the root. let r = Query::new(&n, &[ bob_fpr.clone() ]); if i + 1 == 1 { sp(&r, &bob_fpr, &bob_uid.clone(), &[ (120, &[ &bob_fpr ][..]), ][..], None); } else { sp(&r, &bob_fpr, &bob_uid.clone(), &[][..], None); } let r = Query::new(&n, &[ alice_fpr.clone() ]); if i + 1 == 1 { sp(&r, &bob_fpr, &bob_uid.clone(), &[ (60, &[ &alice_fpr, &bob_fpr ][..]), ][..], None); } else { // Can't authenticate binding with a revoked User ID. sp(&r, &bob_fpr, &bob_uid.clone(), &[][..], None); } // Can use a delegation even if the certification that it // is a part of has had its User ID revoked. if i + 1 < 3 { sp(&r, &carol_fpr, &carol_uid.clone(), &[ (60, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..]), ][..], None); } else { sp(&r, &carol_fpr, &carol_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..]), ][..], None); } } Ok(()) } #[test] #[allow(unused)] fn certifications_revoked() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "817C2BE18D9FF48FFE58FF39B699FC21AD92EFDC" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "4258ACF6C3C8FCE130D6EBAB0CC5158AEA25F24A" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 817C2BE18D9FF48FFE58FF39B699FC21AD92EFDC // Certified by: 817C2BE18D9FF48FFE58FF39B699FC21AD92EFDC let carol_fpr: Fingerprint = "36766215FFD2FA000B0804BFF54577580DDC1741" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 4258ACF6C3C8FCE130D6EBAB0CC5158AEA25F24A let certs: Vec = CertParser::from_bytes( &crate::testdata::data("certification-revoked.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); /// Tests. // $ date '+%s' -d 20200202 // 1580598000 let t1 = time::UNIX_EPOCH + time::Duration::new(1580598000, 0); // $ date '+%s' -d 20200302 // 1583103600 let t2 = time::UNIX_EPOCH + time::Duration::new(1583103600, 0); // $ date '+%s' -d 20200402 // 1585778400 let t3 = time::UNIX_EPOCH + time::Duration::new(1585778400, 0); for (i, t) in [t1, t2, t3].iter().enumerate() { eprintln!("\n\nTrying at t{}", i + 1); let n = Network::from_cert_refs(certs.iter(), p, *t)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ alice_fpr.clone() ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (120, &[&alice_fpr][..]), ][..], None); match i + 1 { 1 => { sp(&r, &bob_fpr, &bob_uid.clone(), &[ (60, &[&alice_fpr, &bob_fpr][..]), ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (60, &[&alice_fpr, &bob_fpr, &carol_fpr][..]), ][..], None); } 2 => { sp(&r, &bob_fpr, &bob_uid.clone(), &[][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[][..], None); } 3 => { sp(&r, &bob_fpr, &bob_uid.clone(), &[ (120, &[&alice_fpr, &bob_fpr][..]), ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (120, &[&alice_fpr, &bob_fpr, &carol_fpr][..]), ][..], None); } _ => unreachable!(), } // Alice, not Bob, revokes Bob's user id. So when Bob is // the root, the self signature should still be good. let r = Query::new(&n, &[ bob_fpr.clone() ]); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (120, &[&bob_fpr][..]), ][..], None); } Ok(()) } #[test] #[allow(unused)] fn infinity_and_beyond() -> Result<()> { let p = &StandardPolicy::new(); let u1_fpr: Fingerprint = "B557862780A97676CC32F4BB1491A9C2BDE6F1DC" .parse().expect("valid fingerprint"); let u1_uid = UserID::from(""); let u260_fpr: Fingerprint = "B69A678AA242FA4F0BBF12205C0608799B0E3C51" .parse().expect("valid fingerprint"); let u260_uid = UserID::from(""); let u254_fpr: Fingerprint = "AF097DA4DB5C0E2116EF583B25A6B381B621C082" .parse().expect("valid fingerprint"); let u254_uid = UserID::from(""); let fprs: [&Fingerprint; 260] = [ &"B557862780A97676CC32F4BB1491A9C2BDE6F1DC".parse().unwrap(), &"0618F850B6D0C48DBF406BBFAB3DAED809A35F78".parse().unwrap(), &"70B0C5FEFFE6B55F2CEE85455621246D16D6785E".parse().unwrap(), &"EC4475DE5BD76EA7DD4798777E9C990C249738B1".parse().unwrap(), &"FB00C7044A9DD164243CEC460B48AA8ADD29A129".parse().unwrap(), &"7DCB823AB1B33C6D22FC84AC3026DA74AEEB4A6E".parse().unwrap(), &"0058DCF7A7C6C4360DE9095DB6F33843D961E818".parse().unwrap(), &"D0BF1856B95A62763DE49088CE6FF96D17E0EAF0".parse().unwrap(), &"7F945244A20A74E1BA50BE73E917BC24D2D53F79".parse().unwrap(), &"12C92685CA2A867B93FD79762B2D56CF0B94304E".parse().unwrap(), &"02B1DB86B6869BCF92C0F74312D1A5F22E128F18".parse().unwrap(), &"9C8245F2DD06E4A2FE21FB1643A9663DDF7DF168".parse().unwrap(), &"CB7C6D3FCBB8DA0B3D7F6EC0DD193A96517579DC".parse().unwrap(), &"66D0F95325D4A02A36C14265FD247584CCA3C8BA".parse().unwrap(), &"291ABB75D735BC5B625E221B021152DF0CA1F86A".parse().unwrap(), &"27DF659AEE573E30D3A65B6E43474D9A4CA64DE3".parse().unwrap(), &"591492CAF51C06516278723EAFB9AF2643B89A3A".parse().unwrap(), &"20B481FFB7B72F6781BA49806C8E35B5C79A3E41".parse().unwrap(), &"270E3D9E87CA0999D422CD22F905BF87E8F60A36".parse().unwrap(), &"192124BD42BA6BF54A8820FB94B6B70D818241E3".parse().unwrap(), &"07C1D93539328F97517C59D27ABC3071DB73A790".parse().unwrap(), &"A915D1BA3F066E989B965ADFA27CC8D161C0F48A".parse().unwrap(), &"D968AFB7EAF13E04BB71D96100CC514119C8303E".parse().unwrap(), &"A62F988F2896A0286F92F8B8201E7737D11D7039".parse().unwrap(), &"9BF8933FCA5306F567F5F5750CE3375AFA9398A1".parse().unwrap(), &"5EC7400A739E579B704E618809345EF1045B304A".parse().unwrap(), &"2C7B74D1388CE0F2C4002CE41EAD11DBB281472A".parse().unwrap(), &"C18D79710A68696E972B0F321E6DE596CD08B4FD".parse().unwrap(), &"C1B1150980254353538D9CC5A91187FE2DBD51FF".parse().unwrap(), &"4FD94C288F39C4633FBBD120BF1A1C6B6789F983".parse().unwrap(), &"DE70A745F098EBCC45B4A3B25D0195EC3C6E0D65".parse().unwrap(), &"44350591F20A4069F131156283AABF91FE4AE5EF".parse().unwrap(), &"76E9D213C5F67F2DBE410F57DF3F9BB9622AAFC7".parse().unwrap(), &"A48F536C34D4A493CD233870C05B675B873B139D".parse().unwrap(), &"7C3FEDFAB082D236A9181B8E2B6483A582756C6E".parse().unwrap(), &"0FDFAF64606B6C72BF1C940D24F80C95D5B8310E".parse().unwrap(), &"6B5A25C2DD40AE58272FB17D15C33EF13B9D7FE8".parse().unwrap(), &"3814E465DDDCDB7F352E513D9C34D38E08A4360A".parse().unwrap(), &"2BF243991E5B6444861FC662E93888456D33F149".parse().unwrap(), &"124760101EF948B0E9EC24D9326FFEBD505BE4D3".parse().unwrap(), &"074E083627D1ED618486FB18865EA7123912BE53".parse().unwrap(), &"955B6A60E5EA85BADD68B1E08AF3E45D3AB93DE9".parse().unwrap(), &"857B9C8DCF9EBD72556237A40E652DDF8101E2D0".parse().unwrap(), &"FA11A49DA2E22F686471A4343E6A36C53F7C2155".parse().unwrap(), &"90DF0E04097EBFD295E05B9F40BE700A2E8D0995".parse().unwrap(), &"90BA919C17ED4252F8F0ED327192D79A112A0CE6".parse().unwrap(), &"3762EB478F47FEA848ADA9E1611C433D28D84071".parse().unwrap(), &"E960CD893E6CF7F41E752BEF15ED83ECDF49463C".parse().unwrap(), &"B1256D987F2789601FC5D8FAF268AB5F6AB44782".parse().unwrap(), &"5EE4B68A4828F5C15DD87114DC4A8509993DCFAB".parse().unwrap(), &"5C472E1C68A9A587C2AF9F00BC59B13A9918BBC1".parse().unwrap(), &"5320428600FCDB9A3AA32DA3E14D0128D7C372EC".parse().unwrap(), &"41958AAE8E1EED80B680F4DCD5ABFA33A1DB1C23".parse().unwrap(), &"7F4DFF6FC276995C94C2BF92146B7BED38209DB9".parse().unwrap(), &"6DE33C3735906B7E69AE593A0CD724AF410A89CE".parse().unwrap(), &"70F56B5B0EA57CB9ACDEB08B5333D900488A16B1".parse().unwrap(), &"02C9977BFF7BA0295AF671AA31894E2CD88A0F0D".parse().unwrap(), &"81FF106638ACE77B0C1039D5E69BCC93690A6B8D".parse().unwrap(), &"136368A84C7E56A86515ACC6DCD0744ABE10225D".parse().unwrap(), &"2B5E1D94813CED1CD63A3F28FEF343EA790E2333".parse().unwrap(), &"680ADF1182D00512D298417C6DBFC9084BFDB79D".parse().unwrap(), &"17DFBFB2149AB4A82B1DE5E5AE63FBDCE6874162".parse().unwrap(), &"2FD6D0F680B55F9AF128DBCBA4C71E44F433B728".parse().unwrap(), &"26551C85DBFDDEA97B7E7A0068DBDE9E792A7A49".parse().unwrap(), &"341BB68A3695B3D9EE307D7794317B145CEFCB60".parse().unwrap(), &"2E65A5B2F70D16D5D4D0664D360AE9BD58C555C1".parse().unwrap(), &"DEE7D3162919AC8AC9592051BFACF193B344DEF1".parse().unwrap(), &"2A8CE469DD783B95C92A6F3294A5A609AA679F71".parse().unwrap(), &"8A9FE07B40482C5559A6770B57B79188B52BD346".parse().unwrap(), &"6993EE3E5C4653A03EACBEC25604E4A55B4F75AB".parse().unwrap(), &"66DF2690FEAC606C285AA4D986376ACD1964BE48".parse().unwrap(), &"29FD7B1C6B29663CFA64306670E67F3E7F6FBCD4".parse().unwrap(), &"2C6E7C99DE5F5922E05D11D235C2E562CC528E76".parse().unwrap(), &"88E99AC4D5CB6ACF3CD396D5D6AA9961B4F938AB".parse().unwrap(), &"4471A85059215D231D47B1D4A109C3F0B6BDB258".parse().unwrap(), &"2C755244C6B83CAA7E48BD234C7FDB8645611B3B".parse().unwrap(), &"9C015FEBD3D19A81716E7700052058B47F889611".parse().unwrap(), &"9014E514D677C2ED19D93329C1485FE55F1C72D6".parse().unwrap(), &"343F2C6F9DB8F9EE4E59F5C0886BAE56FA55CE26".parse().unwrap(), &"13C37CE8ED0ACC92CF61808755241D6DA1633FA4".parse().unwrap(), &"ED5C07A820DCB2AA6DAFDE9C8562765D88A4BB36".parse().unwrap(), &"21655669D7B36A2EB5007B31442FCE197ADCC8D8".parse().unwrap(), &"CD220E58B30D2D1CBBC5B921555C92A70B303860".parse().unwrap(), &"5FF5C8CBD8D670565B300519887E3ED2F9E0DDA9".parse().unwrap(), &"B47FF2EF9DEB08C7FC55532C746F0F2DB723C462".parse().unwrap(), &"F8F8F30931EEB93C2FDE9363F9EE328402F33860".parse().unwrap(), &"3714D9CB0A8A0B4EE695B21AB052CAE69A2A7689".parse().unwrap(), &"FF093E66CCFB8804193115058643E0CB52C5A793".parse().unwrap(), &"0A5553209858B36F3EA0EFA463FD6758FF116167".parse().unwrap(), &"D9C06C9D100813BEBD35427DF65F7634EB2EAD6A".parse().unwrap(), &"05CA2D388297E826B9C3B431A8B15D93895257F9".parse().unwrap(), &"BF79DD51D462180014D2AD71D2462BE4CF36F625".parse().unwrap(), &"FC0DE4AD683BE64F47E8642F7472D7BB781E5C76".parse().unwrap(), &"F1FE09936F39A4E7A907D909CDFA4993BE4124AF".parse().unwrap(), &"465CD9AD11B5003A48BB28118DB2CEBD29D4F603".parse().unwrap(), &"9DF99BDB7078BE13CE3F66D97F212BF669F995C6".parse().unwrap(), &"57071A60EFBBFFA6DDCE7796F14A1B2C681A8A83".parse().unwrap(), &"8AB11E4F18DC57F2BA400B8D7B5FD8990C1CCAC5".parse().unwrap(), &"286EC5D4E5D1D136E54C996FE2D9E350B7CF3D8A".parse().unwrap(), &"AF87AF1183FB3E9370D509CE4E255380D5F3A8D5".parse().unwrap(), &"036F0956E3436BB10D030C89241EB37A3E931678".parse().unwrap(), &"33C2757572312304682BDD62C46C67D099B92680".parse().unwrap(), &"47A458ECE5784E7AF11C2286AA75FA9B8401E257".parse().unwrap(), &"43950C8B0B46693E9E48676637A98A31CF4B62AD".parse().unwrap(), &"A881411005DCCA6AF01331438783D3432031442F".parse().unwrap(), &"AA96AB4A6A98A839676621E66E756674E8DE55F3".parse().unwrap(), &"6844B0D8AB1D74A5766311157F652BC182F0875D".parse().unwrap(), &"B6F83FFF8B788418D48C11FA084D0F3AC9A2AECD".parse().unwrap(), &"99B269CFF458C780108B370C7A3F523A4DD62521".parse().unwrap(), &"48ADBA117B6D38703248D7AE72FB58B9E9798B7E".parse().unwrap(), &"FBC503FCBE4143C984E88358E700E23D4F573CCF".parse().unwrap(), &"E249A634759A417A040615736E200525AAF6F629".parse().unwrap(), &"BC782C4357D9E72075AF3DBF2C2FCAB09C09C252".parse().unwrap(), &"7B47E68EFB03A0C8346BD80E4A2FA75B6488D6D3".parse().unwrap(), &"DC2807A9E1CCD83B797A1EB2829D1F4641E0DB9B".parse().unwrap(), &"33C7585C640E74974790F349F64B2668DF09DE8E".parse().unwrap(), &"C766141BA6C7998C7EE40DE116FB427F2C57657F".parse().unwrap(), &"D0DF7D293426D9451E9EE0FD03A4D8196D10976D".parse().unwrap(), &"D56E5DB01CFAAD99697B33163B81D229170F58B4".parse().unwrap(), &"97D592FDE6199E3A4F6B437F40B34142AA67397B".parse().unwrap(), &"8C19F12A8386D0EF3FC0AFD28D7FE8D90F070EFB".parse().unwrap(), &"5B87566BAA2C8EC78C7D44594F21D5ABA36767F2".parse().unwrap(), &"53AB6BCCE1111DCD151E66625F52509FC67F4076".parse().unwrap(), &"318DA1A8A8E92698EAAC0AB468406FF3D0B6733A".parse().unwrap(), &"350068CCCD295D7EB80C6A97060FCBD15175ADB2".parse().unwrap(), &"3A7DF039CCCA3B3C9286B01619D8EA302427C910".parse().unwrap(), &"3C964F3E9C57330753EE5923B49FC01974400307".parse().unwrap(), &"4E9E5E2E1A868706DAADFD5A362C66828E5E4621".parse().unwrap(), &"36328DA9EAC85DB46843FA168A4AA6C4B47ADE22".parse().unwrap(), &"0AB20633A6D636B80337EFE3403702D89A3CD852".parse().unwrap(), &"8CDF07D3CEA5ED1B72ECD8869CA0A447943C1F3B".parse().unwrap(), &"E052363BDCA7BB374570774F9EE1EA2E8BF88026".parse().unwrap(), &"6603EA823BC641A465D8E5C45EDAD32360EDFC6A".parse().unwrap(), &"7D2E0E09E14B5BAB084A268786B0C6357215757B".parse().unwrap(), &"44F5446DBE64118D55D007453C6EF4840B47CD82".parse().unwrap(), &"419FA3D74A917B54F53AF2157B81A4A67CBA27F0".parse().unwrap(), &"36EB37E159817A86D0D4F506A3DDF317DFEDF32F".parse().unwrap(), &"9F5918BE6A7898670283859B05280E0DDA09EC95".parse().unwrap(), &"24EFDB2253318E11B73B617C6A7C5DC8792A2A55".parse().unwrap(), &"4AF832B3208DB3DD126C21E3CAF4AA3126156F8B".parse().unwrap(), &"E00EE6E5D079CA81E37F964EAD799F4D59738D54".parse().unwrap(), &"5A962B09EF649F4267DFDAE046B2F28E5134573F".parse().unwrap(), &"BAB9FB2EC409E68165AEF78D58BB96EB511C41B2".parse().unwrap(), &"ADD6E345227F27489E1E8AA7E0CD788437CC47BF".parse().unwrap(), &"BCD1FB9A7524E6B2D1ADB920653E81204C30A119".parse().unwrap(), &"17DE4392A165DC82CF50E879B5CB17B550CC0DE2".parse().unwrap(), &"5E9C128259B95B3C90C651E3E106A3276D83FFD1".parse().unwrap(), &"837B524C48C821FB23C4331A764076A4958D02E6".parse().unwrap(), &"1DBFA683F2744FCCFCF46D35989519FEB16FB4B1".parse().unwrap(), &"16561C850378BDB387F6E620B261465512DF841D".parse().unwrap(), &"40903D9038604F9F0325F4F595735AB9651D3899".parse().unwrap(), &"542CE462E1A66CEECDE4A15E3B614535DCA71EEF".parse().unwrap(), &"91FE56BE25CCB3CF5439DFAAC42E3BADAAFA919A".parse().unwrap(), &"0EBD96F41958B13F8F69B5FFD95B370820AE2176".parse().unwrap(), &"FE6500EC3768698238FA02AE836FE5675367B4F9".parse().unwrap(), &"34E96CA46093CDFC25ACE6A3A2FE701D926F093A".parse().unwrap(), &"45046E989B2E1B90A1DAEB5ADB7580D1B78D3BC6".parse().unwrap(), &"64A9859344F5073B183BD5C8AA60941E63199D9D".parse().unwrap(), &"729EDA4A2A634E776780E1847CA24E9550F7D0A7".parse().unwrap(), &"8844DCA493E8F20107CB447191FEA3BD4C01890B".parse().unwrap(), &"F965044BE1E7300C7B6716E293C396B4FA94CD92".parse().unwrap(), &"BC007EC19B0BC8DDE59847B09EA70EB3222D9E51".parse().unwrap(), &"B333A058F7209C46F2D027BB03738EAAC50701ED".parse().unwrap(), &"A9A1A3B0F12233D6120809D6F8F0C11D96152693".parse().unwrap(), &"2BFE10D7FEE9E5DF5833B6F61B584BAB2FD86575".parse().unwrap(), &"E5F3B17D545521F9B5395B10E92020FDB3E8109E".parse().unwrap(), &"58035C57B66B0EBFB069F9B7F3C623A5C52A3B92".parse().unwrap(), &"003E9C5A9DAB8626FD1694AAC2C43642A20E1496".parse().unwrap(), &"E7947E382B12FE628BDA130201EFC9D900B5540C".parse().unwrap(), &"17B55B1078D282C73FA2E76287FAB537AEAFE66C".parse().unwrap(), &"27CE83D68C669FE4F1B8C938D4A919E6F59E4D0B".parse().unwrap(), &"86B1E98692F4CA34122012C1524B4079CF57E850".parse().unwrap(), &"5B8A8AC5213064AE84C97DE41ED4BF239D9C10F2".parse().unwrap(), &"3FEAB08FC63829C080412CBFC6D3836C6E817789".parse().unwrap(), &"231605AEE34762F3BBC8ECF73808EFA9258837F8".parse().unwrap(), &"AE2759F4EC850FA6CE98FA4729FD82649411B973".parse().unwrap(), &"E7529E3567F59BBCADAAD1246613DBC86DAD45F8".parse().unwrap(), &"CF320590351A8C41C9EA0C1F4C6F00F7AEA73AD5".parse().unwrap(), &"475A44091578C02A0C5C2D62F106918D87E15476".parse().unwrap(), &"5B88BF2E7163D0594CE0E302C2AD0FE43D473EFE".parse().unwrap(), &"E4ADA4F5D702AD510C2F7A19316950AD7429C1FA".parse().unwrap(), &"6D6B846B8661F1013E7BC8D64C7280F7DF9DA6E6".parse().unwrap(), &"49883F6CA68B9F452F2A5F2F04687A6078E00FBF".parse().unwrap(), &"3046B5075B9DAF5645F51717D01AB61342900011".parse().unwrap(), &"16213F8B540AC28FE0CB3548D84F0D748AC23379".parse().unwrap(), &"9C68E98198FF9964FA2366ADCBAD3A465C76396B".parse().unwrap(), &"6EC3A10AA0B6B70DC5408CAE74B0BE836FD382D6".parse().unwrap(), &"E25E062BE69B48D3B99A96086991D15CA7370F0C".parse().unwrap(), &"A01A30A1AB191AF9C148C3704F4582E27D8D7527".parse().unwrap(), &"5D33551903E14FAABF75E9ECFB7AE6C2AC9959FB".parse().unwrap(), &"B37AE84FB0B4226FB935A3090F7C543F95A21EEF".parse().unwrap(), &"65B2CD9E6A6F6A36496B54A285F9BA4B68AA5174".parse().unwrap(), &"C0AA5CFC45580335A785DC2B3F9EE769EAAFE70D".parse().unwrap(), &"09973DF6334673259B774B840B1496371FDC2BE6".parse().unwrap(), &"29AAA5AF7CF941F4307DE966BD9E690D59FE5383".parse().unwrap(), &"9BDA50D8A6C78525051AAE07CC26594022C7D4AE".parse().unwrap(), &"2B0B6FDB04B9E8FF3A31EBE16A6B0A72A6571C45".parse().unwrap(), &"5C2650D8DA9842951614026288805244633C686B".parse().unwrap(), &"EEA6502B34AB08FA2F3BDA1E355AC29B6D8B67FA".parse().unwrap(), &"61B00DCDC02069F46F20D7F91075929DC6DA674C".parse().unwrap(), &"A1F5307F398FA45ECFC68CA92A5FC888D2DD2728".parse().unwrap(), &"AB0ADD3BF024EB6C75D9A366ABE69FC6E9F60DA0".parse().unwrap(), &"20DFEEF42F418CCEB02DB3E896E40B0413F1B4C5".parse().unwrap(), &"59C4E41C31D1E16F11BCF51304E7B81D67AD1FA0".parse().unwrap(), &"C0A3A190F8BFB6115A87CF7CBEC9211A2E210C86".parse().unwrap(), &"8932D417D3C0C4E3694E90480B92349F276E4EE0".parse().unwrap(), &"5BE288B0F7DCD89200D112D009E73AB06030B4EB".parse().unwrap(), &"CF472156042D6F2032BC025B68544E0A5844F3A7".parse().unwrap(), &"D54401DBBDE32805DAF08C4E1177C10E27F7D235".parse().unwrap(), &"56100D18E943687F7CFBC3CB20479A11B7DD5E1D".parse().unwrap(), &"9349703A779BD3725C5C822E21DA8172102EC4CD".parse().unwrap(), &"5DCAAB77198D13785C340D7B375DD44D815A0481".parse().unwrap(), &"5959CAC7EB9C1C7D9ECF10B8C023ED12A0F7F556".parse().unwrap(), &"7D4EA25C4F364AF1B61B64164816D289775352A8".parse().unwrap(), &"84291C882E059C5100C5C1AD1746298F01E7D682".parse().unwrap(), &"F3A95472FDB65D965EC2C4E3D22BD567B60BE41E".parse().unwrap(), &"0B9B18FB07F29E89D33AA0A86ED47AC9E7B86518".parse().unwrap(), &"2A11B65832E97E65DAA69D690C304130A843F532".parse().unwrap(), &"BB1B2F93AE4C4D41B4385AB653A4193345AA17C7".parse().unwrap(), &"4B526E27DAA41961F9D89404ED2F25E650D82444".parse().unwrap(), &"8DC51F77AEFAE450554792A0C704999EF5D32A6B".parse().unwrap(), &"ACD80C31E49FEAF9AA07DBD9FA96E7E857A694DE".parse().unwrap(), &"F2A4AE3ABC6DE0475E22B836DB0B8264BE496577".parse().unwrap(), &"14AA7B5B7D9088CBBD5FF8CB95F34513BA887EC0".parse().unwrap(), &"185A81E45751F6322490BE7987DDCD2A02E38D38".parse().unwrap(), &"BFCC758F6B567FF489801B539ED707902064CF71".parse().unwrap(), &"6F80DC80D1F4C14810750CAF51FAB910F100F6AB".parse().unwrap(), &"D220EB0F833DB97983F221D902D45679E35E555A".parse().unwrap(), &"6F757C636ED4E157D6F6570DBC03D6A8FCC6CD68".parse().unwrap(), &"C0C4B2D29A88A8F042FB13422605B3290364FF74".parse().unwrap(), &"23EBA00A8576434AE4B077F9819A1B623B2E138C".parse().unwrap(), &"88C18A2D51339461068DDF72693871FAF6FFC6FF".parse().unwrap(), &"CDA5DE7236C247F0D116CC0A1A25910D0CD909C0".parse().unwrap(), &"E405060228D49BA43C6ED9A3E25ADFDCC0012F48".parse().unwrap(), &"575DB527D78D5A063AB4197891DB2946F8EE3A8C".parse().unwrap(), &"D4BBE60FCA2FC7850FF7309102DEF04D111BA114".parse().unwrap(), &"97794BE1FD5729470D049D86BE16BB8E38D6D8EB".parse().unwrap(), &"4C011F0F9E4C58022DBD2E1FAA549F086FB77001".parse().unwrap(), &"950D06C53390F94AF59A15609900DA7A91A638CF".parse().unwrap(), &"013B231F139A46312550BBCBC52451FDB72285FC".parse().unwrap(), &"A814BA237B27B4605C71A907B8A8D55FC49CB5E6".parse().unwrap(), &"A3AE147DBC887FA325852A4DC3FFE143772A8587".parse().unwrap(), &"4D88E9B314F4ECAF99E02611C985FD350408C791".parse().unwrap(), &"CE9A27BE12483A5F094F85330E51D13DC2830B24".parse().unwrap(), &"B6565ADDD563FDD720D05411CD3449BD50892312".parse().unwrap(), &"F1EBB0F94C08A777867F403E9FAFBE3A10228952".parse().unwrap(), &"94D627E627E15F9B9144457816A736F442FD6A6F".parse().unwrap(), &"B3B1CDB5875CD8725B5FC915B1ED7C0FCE7721EE".parse().unwrap(), &"9E80CD683AA01265FE25DF265DADCE433039185C".parse().unwrap(), &"AFDE99A008E9BC761DFA6367C984AF52546308CF".parse().unwrap(), &"364854C36A1EFFDCAC7B80296A8F683B48BC5F33".parse().unwrap(), &"77C3730DB611591E71EE4528A15EE7D5EF32333F".parse().unwrap(), &"138CC2085B1A06F02DE1946D5FB391D63C886EE6".parse().unwrap(), &"AF097DA4DB5C0E2116EF583B25A6B381B621C082".parse().unwrap(), &"02DF6CB2758D7695940B6937804CAD30CDAC243C".parse().unwrap(), &"7F7C33899D1A34BE0D2B3C1C3B8F983DFABA03B4".parse().unwrap(), &"041549DBA90F2C4EB9E22505B4515224EB745A2C".parse().unwrap(), &"B73206C4F70E0735E9288128BAC3400233738122".parse().unwrap(), &"FCDF4C1D67ACFA8B42F6A77C408A9CB7367171C2".parse().unwrap(), &"B69A678AA242FA4F0BBF12205C0608799B0E3C51".parse().unwrap(), ]; let certs: Vec = CertParser::from_bytes( &crate::testdata::data("infinity-and-beyond.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ u1_fpr.clone() ]); /// Tests. // This should always work. sp(&r, &u254_fpr, &u254_uid.clone(), &[ (120, &fprs[0..254]), ][..], None); // This tests that depth=255 really means infinity. sp(&r, &u260_fpr, &u260_uid.clone(), &[ (120, &fprs[..]), ][..], None); Ok(()) } #[test] #[allow(unused)] fn zero_trust() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "931E51F99B89649783A1DFF265266E28246040C2" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "A1042B157AFA71F005208D645915549D8D21A97B" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 931E51F99B89649783A1DFF265266E28246040C2 // Certified by: 931E51F99B89649783A1DFF265266E28246040C2 let carol_fpr: Fingerprint = "E06DB0539D99759681D7EC8508A267AE8FA838F4" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: A1042B157AFA71F005208D645915549D8D21A97B let certs: Vec = CertParser::from_bytes( &crate::testdata::data("zero-trust.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); /// Tests. // $ date '+%s' -d 20200202 // 1580598000 let t1 = time::UNIX_EPOCH + time::Duration::new(1580598000, 0); // $ date '+%s' -d 20200302 // 1583103600 let t2 = time::UNIX_EPOCH + time::Duration::new(1583103600, 0); // At t2, B is certified with a trust amount of 0. This // should eliminate the path. for (i, t) in [t1, t2].iter().enumerate() { eprintln!("\n\nTrying at t{}", i + 1); let n = Network::from_cert_refs(certs.iter(), p, *t)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ alice_fpr.clone() ]); if i + 1 == 1 { sp(&r, &carol_fpr, &carol_uid.clone(), &[ (60, &[&alice_fpr, &bob_fpr, &carol_fpr][..]), ][..], None); } else { sp(&r, &carol_fpr, &carol_uid.clone(), &[][..], None); } // Start with bob and make sure that a certification by a // root with a 0 trust amount is also respected. let r = Query::new(&n, &[ bob_fpr.clone() ]); if i + 1 == 1 { sp(&r, &carol_fpr, &carol_uid.clone(), &[ (60, &[&bob_fpr, &carol_fpr][..]), ][..], None); } else { sp(&r, &carol_fpr, &carol_uid.clone(), &[][..], None); } } Ok(()) } #[test] #[allow(unused)] fn partially_trusted_roots() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "39A479816C934B9E0464F1F4BC1DCFDEADA4EE90" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D let carol_fpr: Fingerprint = "43530F91B450EDB269AA58821A1CF4DC7F500F04" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 39A479816C934B9E0464F1F4BC1DCFDEADA4EE90 let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 43530F91B450EDB269AA58821A1CF4DC7F500F04 let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 let frank_fpr: Fingerprint = "2693237D2CED0BB68F118D78DC86A97CD2C819D9" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("simple.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); let r = Query::new( &n, &[ (alice_fpr.clone(), 90) ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (90, &[ &alice_fpr ][..]) ][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..]) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr ][..]) ][..], None); sp(&r, &ellen_fpr, &ellen_uid.clone(), &[][..], None); sp(&r, &frank_fpr, &frank_uid.clone(), &[][..], None); // No one authenticated Bob's User ID on Carol's key. sp(&r, &carol_fpr, &bob_uid.clone(), &[][..], None); // Multiple partially trusted roots. Check that together they // can fully certify a self signature. let r = Query::new( &n, &[ (alice_fpr.clone(), 90), (bob_fpr.clone(), 90) ]); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (90, &[ &alice_fpr ][..]) ][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (90, &[ &bob_fpr ][..]), (90, &[ &alice_fpr, &bob_fpr ][..]), ][..], None); Ok(()) } #[test] #[allow(unused)] fn self_signed() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "838454E0D61D046300B408A908A4FDB4F368ECB9" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "7A7B5DE6C8F464CAB78BEFB9CE14BEE51D4DEC01" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 838454E0D61D046300B408A908A4FDB4F368ECB9 let carol_fpr: Fingerprint = "830230061426EE99A0455E6ADA869CF879A5630D" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 7A7B5DE6C8F464CAB78BEFB9CE14BEE51D4DEC01 let carol_other_org_uid = UserID::from(""); let dave_fpr: Fingerprint = "51A5E15F87AC6ECAFBEA930FA5F30AF6EB6EF14A" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 830230061426EE99A0455E6ADA869CF879A5630D let certs: Vec = CertParser::from_bytes( &crate::testdata::data("self-signed.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); /// Tests. let r = Query::new( &n, &[ (alice_fpr.clone(), 120), ]); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (100, &[ &alice_fpr, &bob_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_other_org_uid.clone(), &[][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[][..], None); let r = Query::new( &n, &[ (bob_fpr.clone(), 120), ]); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (120, &[ &bob_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (90, &[ &bob_fpr, &carol_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_other_org_uid.clone(), &[ (90, &[ &bob_fpr, &carol_fpr, &carol_fpr ][..]) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (90, &[ &bob_fpr, &carol_fpr, &dave_fpr ][..]) ][..], None); Ok(()) } #[test] #[allow(unused)] fn isolated_root() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "DCF3020AAB76ECC7F0E5AC0D375DCE1BEE264B87" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let alice_other_org_uid = UserID::from(""); let certs: Vec = CertParser::from_bytes( &crate::testdata::data("isolated-root.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); /// Tests. // $ date '+%s' -d 20200102 // 1577919600 let t0 = time::UNIX_EPOCH + time::Duration::new(1577919600, 0); // $ date '+%s' -d 20200202 // 1580598000 let t1 = time::UNIX_EPOCH + time::Duration::new(1580598000, 0); for (i, t) in [t0, t1].iter().enumerate() { eprintln!("\n\nTrying at t{}", i + 1); let n = Network::from_cert_refs(certs.iter(), p, *t)?; eprintln!("{:?}", n); let r = Query::new(&n, &[ alice_fpr.clone() ]); if i == 0 { sp(&r, &alice_fpr, &alice_uid.clone(), &[ (120, &[&alice_fpr][..]), ][..], None); } else { sp(&r, &alice_fpr, &alice_uid.clone(), &[][..], None); } sp(&r, &alice_fpr, &alice_other_org_uid.clone(), &[ (120, &[&alice_fpr][..]), ][..], None); } Ok(()) } #[test] fn limit_depth() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "39A479816C934B9E0464F1F4BC1DCFDEADA4EE90" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D let carol_fpr: Fingerprint = "43530F91B450EDB269AA58821A1CF4DC7F500F04" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 39A479816C934B9E0464F1F4BC1DCFDEADA4EE90 let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 43530F91B450EDB269AA58821A1CF4DC7F500F04 let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("simple.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); eprintln!("Unconstrained query."); let r = QueryBuilder::new(&n) .roots(&[ (alice_fpr.clone(), 90) ]) .build(); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (90, &[ &alice_fpr ][..]) ][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..]) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr ][..]) ][..], None); sp(&r, &ellen_fpr, &ellen_uid.clone(), &[][..], None); // Query constrained to a depth of 2. This doesn't change // anything, as Alice's tsig on Bob also has depth 2. eprintln!("Query constrained to a depth of 2:"); let r = QueryBuilder::new(&n) .roots(&[ (alice_fpr.clone(), 90) ]) .maximum_depth(2) .build(); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (90, &[ &alice_fpr ][..]) ][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..]) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr, &carol_fpr, &dave_fpr ][..]) ][..], None); sp(&r, &ellen_fpr, &ellen_uid.clone(), &[][..], None); // Query constrained to a depth of 1. eprintln!("Query constrained to a depth of 1:"); let r = QueryBuilder::new(&n) .roots(&[ (alice_fpr.clone(), 90) ]) .maximum_depth(1) .build(); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (90, &[ &alice_fpr ][..]) ][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr, &carol_fpr ][..]) ][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[][..], None); sp(&r, &ellen_fpr, &ellen_uid.clone(), &[][..], None); // Query constrained to a depth of 0. eprintln!("Query constrained to a depth of 0:"); let r = QueryBuilder::new(&n) .roots(&[ (alice_fpr.clone(), 90) ]) .maximum_depth(0) .build(); sp(&r, &alice_fpr, &alice_uid.clone(), &[ (90, &[ &alice_fpr ][..]) ][..], None); sp(&r, &bob_fpr, &bob_uid.clone(), &[ (90, &[ &alice_fpr, &bob_fpr ][..]) ][..], None); sp(&r, &carol_fpr, &carol_uid.clone(), &[][..], None); sp(&r, &dave_fpr, &dave_uid.clone(), &[][..], None); sp(&r, &ellen_fpr, &ellen_uid.clone(), &[][..], None); Ok(()) } } sequoia-wot-0.11.0/src/log.rs000064400000000000000000000073671046102023000141130ustar 00000000000000use std::cell::RefCell; // Like eprintln! macro_rules! log { ($dst:expr $(,)?) => ( eprintln!("{}", $dst) ); ($dst:expr, $($arg:tt)*) => ( eprintln!("{}", std::format!($dst, $($arg)*)) ); } // The indent level. It is increased with each call to tracer and // decremented when the tracer goes out of scope. thread_local! { pub static INDENT_LEVEL: RefCell = RefCell::new(0); } // Like eprintln!, but the first argument is a boolean, which // indicates if the string should actually be printed. macro_rules! trace { ( $TRACE:expr, $fmt:expr, $($pargs:expr),* ) => { if $TRACE { let indent_level = crate::log::INDENT_LEVEL.with(|i| { *i.borrow() }); let ws = " "; log!("{}{}", &ws[0..std::cmp::min(ws.len(), std::cmp::max(1, indent_level) - 1)], format!($fmt, $($pargs),*)); } }; ( $TRACE:expr, $fmt:expr ) => { trace!($TRACE, $fmt, ); }; } macro_rules! tracer { ( $TRACE:expr, $func:expr ) => { // Currently, Rust doesn't support $( ... ) in a nested // macro's definition. See: // https://users.rust-lang.org/t/nested-macros-issue/8348/2 #[allow(unused)] macro_rules! t { ( $fmt:expr ) => { trace!($TRACE, "{}: {}", $func, $fmt) }; ( $fmt:expr, $a:expr ) => { trace!($TRACE, "{}: {}", $func, format!($fmt, $a)) }; ( $fmt:expr, $a:expr, $b:expr ) => { trace!($TRACE, "{}: {}", $func, format!($fmt, $a, $b)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr ) => { trace!($TRACE, "{}: {}", $func, format!($fmt, $a, $b, $c)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr ) => { trace!($TRACE, "{}: {}", $func, format!($fmt, $a, $b, $c, $d)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr ) => { trace!($TRACE, "{}: {}", $func, format!($fmt, $a, $b, $c, $d, $e)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr ) => { trace!($TRACE, "{}: {}", $func, format!($fmt, $a, $b, $c, $d, $e, $f)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr ) => { trace!($TRACE, "{}: {}", $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr ) => { trace!($TRACE, "{}: {}", $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr ) => { trace!($TRACE, "{}: {}", $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h, $i)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr, $j:expr ) => { trace!($TRACE, "{}: {}", $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h, $i, $j)) }; ( $fmt:expr, $a:expr, $b:expr, $c:expr, $d:expr, $e:expr, $f:expr, $g:expr, $h:expr, $i:expr, $j:expr, $k:expr ) => { trace!($TRACE, "{}: {}", $func, format!($fmt, $a, $b, $c, $d, $e, $f, $g, $h, $i, $j, $k)) }; } struct Indent {} impl Indent { fn init() -> Self { crate::log::INDENT_LEVEL.with(|i| { i.replace_with(|i| *i + 1); }); Indent {} } } impl Drop for Indent { fn drop(&mut self) { crate::log::INDENT_LEVEL.with(|i| { i.replace_with(|i| *i - 1); }); } } let _indent = Indent::init(); } } sequoia-wot-0.11.0/src/network/filter.rs000064400000000000000000000233221046102023000162750ustar 00000000000000use std::borrow::Borrow; use std::collections::hash_map::Entry; use std::collections::HashMap; use sequoia_openpgp as openpgp; use openpgp::Fingerprint; use openpgp::regex::RegexSet; use crate::Certification; use crate::Depth; use crate::Path; use crate::TRACE; // A mechanism to filter certifications. // // This is particularly useful when evaluating a residual network, // i.e., a network minus the capacity used by a particular path. pub trait CertificationFilter { /// Filter the certification's parameters. /// /// The current effective values are in the `depth`, `amount` and /// `regexs` parameters. This function should tweak those values /// in place. This approach allows chaining multiple filters. /// /// Be careful when specifying a depth of 255. This is not /// automatically converted to `Depth::Unconstrained`. /// /// Since rewriting the regular expressions may be expensive, if /// regexs is `None`, then that means the caller doesn't actually /// care about the regular expressions. /// /// If the function returns `false`, then that means the /// certification should be skipped. fn cost(&self, _c: &Certification, _depth: &mut Depth, _amount: &mut usize, _ignores_regex: bool, _regexs: &mut Option) -> bool { true } } /// A no-op filter. /// /// This filter passes certifications through as is. pub struct IdempotentCertificationFilter { } impl IdempotentCertificationFilter { pub(crate) fn new() -> Self { Self {} } } impl CertificationFilter for IdempotentCertificationFilter {} /// A filter that chains multiple filters together. /// /// The filters are called in the other that they are added. If a /// filter returns `false`, then this filter immediately returns /// false. pub struct ChainFilter<'a> { filters: Vec>, } impl CertificationFilter for ChainFilter<'_> { fn cost(&self, c: &Certification, depth: &mut Depth, amount: &mut usize, ignore_regex: bool, regexs: &mut Option) -> bool { tracer!(TRACE, "ChainFilter::cost"); for (i, f) in self.filters.iter().enumerate() { let old_depth = depth.clone(); let old_amount = *amount; if ! f.cost(c, depth, amount, ignore_regex, regexs) { return false; } t!("{}.: {}/{} -> {}/{}", i, old_depth, old_amount, depth, amount); } return true; } } impl<'a> ChainFilter<'a> { pub fn new() -> Self { Self { filters: Vec::new(), } } pub fn push(&mut self, filter: F) where F: 'a + CertificationFilter { self.filters.push(Box::new(filter)); } } /// A filter that suppresses some capacity of some certifications. pub struct SuppressCertificationFilter { // A certification's trust amount will be suppressed by this // amount. amount: HashMap<(Fingerprint, Fingerprint), usize>, } impl CertificationFilter for SuppressCertificationFilter { fn cost(&self, c: &Certification, _depth: &mut Depth, amount: &mut usize, _ignore_regexs: bool, _regexs: &mut Option) -> bool { tracer!(TRACE, "SuppressCertificationFilter::cost"); if let Some(&delta) = self.amount.get( &(c.issuer().fingerprint(), c.target().fingerprint())) { // Be careful to not underflow. let new_amount = std::cmp::max(*amount, delta) - delta; t!("Suppressing trust amount: {} -> {}", amount, new_amount); *amount = new_amount; } return true; } } impl SuppressCertificationFilter { /// Returns a new, empty `SuppressCertificationFilter`. pub fn new() -> Self { Self { amount: HashMap::new(), } } /// Add suppression rules for all certifications along the specified /// path. /// /// Each edge is suppressed by amount. pub fn suppress_path(&mut self, path: &Path, amount_to_suppress: usize) { if amount_to_suppress == 0 { return; } assert!(amount_to_suppress <= 120); for c in path.certifications() { match self.amount.entry( (c.issuer().fingerprint(), c.target().fingerprint())) { Entry::Occupied(mut oe) => { let amount = oe.get_mut(); *amount += amount_to_suppress; assert!(*amount <= 120); } e @ Entry::Vacant(_) => { e.or_insert(amount_to_suppress); } } } } } /// A filter that suppresses some capacity of an issuer. pub struct SuppressIssuerFilter { // A certification's trust amount will be suppressed by this // amount. amount: HashMap, } impl CertificationFilter for SuppressIssuerFilter { fn cost(&self, c: &Certification, _depth: &mut Depth, amount: &mut usize, _ignore_regexs: bool, _regexs: &mut Option) -> bool { tracer!(TRACE, "SuppressIssuerFilter::cost"); if let Some(&delta) = self.amount.get(&c.issuer().fingerprint()) { // Be careful to not underflow. let new_amount = std::cmp::max(*amount, delta) - delta; t!("Suppressing trust amount: {} -> {}", amount, new_amount); *amount = new_amount; } return true; } } impl SuppressIssuerFilter { /// Returns a new, empty `SuppressIssuerFilter`. pub fn new() -> Self { Self { amount: HashMap::new(), } } /// Add suppression rules for the certificate. /// /// Any certifications that the certificate makes are suppressed /// (decreased) by that amount. pub fn suppress_issuer(&mut self, fingerprint: F, amount_to_suppress: usize) where F: Borrow { let fingerprint = fingerprint.borrow(); if amount_to_suppress == 0 { return; } assert!(amount_to_suppress <= 120); match self.amount.entry(fingerprint.clone()) { Entry::Occupied(mut oe) => { let amount = oe.get_mut(); *amount += amount_to_suppress; assert!(*amount <= 120); } e @ Entry::Vacant(_) => { e.or_insert(amount_to_suppress); } } } } /// A filter that caps (limits) the capacity of some certificates. pub struct CapCertificateFilter { // A certificate's trust amount will be limited to this amount. cap: HashMap, } impl CertificationFilter for CapCertificateFilter { fn cost(&self, c: &Certification, _depth: &mut Depth, amount: &mut usize, _ignore_regexs: bool, _regexs: &mut Option) -> bool { tracer!(TRACE, "CapCertificateFilter::cost"); if let Some(&cap) = self.cap.get(&c.issuer().fingerprint()) { // Be careful to not underflow. let new_amount = std::cmp::min(*amount, cap); t!("Capping trust amount: {} -> {}", amount, new_amount); *amount = new_amount; } return true; } } impl CapCertificateFilter { /// Returns a new, empty `CapCertificateFilter`. pub fn new() -> Self { Self { cap: HashMap::new(), } } /// Add rules for the certificate. /// /// Any certifications issued by the certificate have their trust /// amount limited to `cap`. If a ceritifcate is capped multiple /// times, then the minimum cap is used. pub fn cap(&mut self, cert: Fingerprint, cap: usize) { match self.cap.entry(cert) { Entry::Occupied(mut oe) => { let current_cap = oe.get_mut(); *current_cap = std::cmp::min(*current_cap, cap); } e @ Entry::Vacant(_) => { e.or_insert(cap); } } } } /// A filter that treats every signature as a tsig with depth 255, and /// no regular expressions. Note: this doesn't change the trust /// amount. pub struct TrustedIntroducerFilter { } impl CertificationFilter for TrustedIntroducerFilter { fn cost(&self, _c: &Certification, depth: &mut Depth, _amount: &mut usize, ignore_regexs: bool, regexs: &mut Option) -> bool { tracer!(TRACE, "TrustedIntroducerFilter::cost"); *depth = Depth::Unconstrained; if ! ignore_regexs { *regexs = None; } return true; } } impl TrustedIntroducerFilter { /// Returns a new `TrustedIntroducerFilter`. pub fn new() -> Self { Self { } } } /// A filter that caps (limits) the depth of all trust signatures, /// effectively capping the length of the discovered chains. pub struct CapDepthFilter { /// The maximum depth. cap: Depth, } impl CertificationFilter for CapDepthFilter { fn cost(&self, _c: &Certification, depth: &mut Depth, _amount: &mut usize, _ignore_regexs: bool, _regexs: &mut Option) -> bool { *depth = (*depth).min(self.cap); true } } impl CapDepthFilter { /// Returns a new `CapDepthFilter` limiting to the given depth. pub fn new(cap: usize) -> Self { Self { cap: Depth::Limit(cap), } } } sequoia-wot-0.11.0/src/network/gossip.rs000064400000000000000000000036241046102023000163170ustar 00000000000000use std::collections::HashMap; use sequoia_openpgp as openpgp; use openpgp::Fingerprint; use openpgp::KeyID; use openpgp::packet::UserID; use crate::Certification; use crate::FULLY_TRUSTED; use crate::Path; use crate::Query; use crate::network::Store; use crate::network::filter::IdempotentCertificationFilter; use crate::network::filter::TrustedIntroducerFilter; use super::TRACE; //const TRACE: bool = true; impl<'a, S> Query<'a, S> where S: Store { pub fn gossip(&self, target_fpr: Fingerprint, target_userid: UserID) -> HashMap { tracer!(TRACE, "Query::gossip"); t!("{}, {:?}", KeyID::from(target_fpr.clone()), String::from_utf8_lossy(target_userid.value())); let mut results = if self.certification_network() { self.backward_propagate( target_fpr.clone(), target_userid.clone(), false, &TrustedIntroducerFilter::new()) } else { self.backward_propagate( target_fpr.clone(), target_userid.clone(), false, &IdempotentCertificationFilter::new()) }; // Also check if it was self-certified. if let Ok(cert) = self.network().lookup_synopsis_by_fpr(&target_fpr) { if let Some(userid) = cert.userids().find(|u| { u.userid() == &target_userid }) { let mut p = Path::new(cert.clone()); let selfsig = Certification::new( cert.clone(), Some(target_userid), cert.clone(), userid.binding_signature_creation_time()); if p.append(selfsig).is_ok() { results.insert(target_fpr, (p, FULLY_TRUSTED)); } } } results } } sequoia-wot-0.11.0/src/network/path.rs000064400000000000000000001351711046102023000157520ustar 00000000000000use std::borrow::Borrow; use std::time::SystemTime; use std::sync::Arc; use sequoia_openpgp as openpgp; use openpgp::KeyHandle; use openpgp::KeyID; use openpgp::Result; use openpgp::cert::prelude::*; use openpgp::packet::prelude::*; use openpgp::policy::NullPolicy; use openpgp::policy::Policy; use openpgp::types::ReasonForRevocation; use openpgp::types::RevocationStatus; use sequoia_cert_store as cert_store; use cert_store::store::StoreError; use cert_store::LazyCert; use crate::CertSynopsis; use crate::Certification; use crate::CertificationSet; use crate::Depth; use crate::format_time; use crate::Path; use crate::Query; use crate::store::Backend; use crate::store::Store; use super::TRACE; const NP: NullPolicy = NullPolicy::new(); /// [`Query::lint_path`] specific error codes. #[non_exhaustive] #[derive(thiserror::Error, Debug)] pub enum PathError { /// A path consists of at least one node. #[error("A path consists of at least one node.")] EmptyPath, /// There is a path, but the trust amount is insufficient. #[error("The path {}, {1:?} exists, but its trust amount \ is too low ({2}, required: {3}).", .0.iter() .map(|kh| KeyID::from(kh).to_hex()) .collect::>() .join(" -> "))] PathInadequate(Vec, UserID, usize, usize), /// Missing the issuer's certificate. #[error("Can't check certification: \ missing the alleged issuer's certificate ({0})")] MissingIssuer(KeyHandle), /// Missing the target's certificate. #[error("Can't check certification: \ missing the target's certificate ({0})")] MissingTarget(KeyHandle), /// The target certificate is expired. #[error("The target ({0}) is expired ({}) as of the reference time ({})", format_time(.1), format_time(.2))] TargetExpired(KeyHandle, SystemTime, SystemTime), /// The target certificate is revoked. /// /// 0. Target cert, 1. revocation code, 2. revocation reason, /// 3. revocation time, 4. reference time. #[error("The target ({0}) is revoked ({}, {1}, {}) \ as of the reference time ({})", format_time(.3), String::from_utf8_lossy(.2), format_time(.4))] TargetRevoked(KeyHandle, ReasonForRevocation, Vec, SystemTime, SystemTime), /// The target User ID is revoked. /// /// 0. Target cert, 1. target user id, 2. revocation code, /// 3. revocation reason, 4. revocation time, 5. reference time. #[error("The target's ({0}) User ID ({}) is revoked ({}, {2}, {}) \ as of the reference time ({})", String::from_utf8_lossy(.1.value()), format_time(.4), String::from_utf8_lossy(.3), format_time(.5))] TargetUserIDRevoked(KeyHandle, UserID, ReasonForRevocation, Vec, SystemTime, SystemTime), /// None of this certificate's regular expressions match the /// target User ID. #[error("None of the certification's ({0}) regular expressions ({:?}) match \ the target User ID ({:?})", .0.regular_expressions_bytes() .iter() .map(|re| { String::from_utf8_lossy(re).into_owned() }) .collect::>() .join(", "), String::from_utf8_lossy(.1.value()))] RegexMismatch(Certification, UserID), /// The certification's target does not have a sufficiently high /// trust depth to authenticate the rest of the path. #[error("The path requires that {} be a level-{1} \ trusted introducer, the certification {0} only makes it \ a level-{} trusted introducer", .0.target().keyid().to_hex(), .0.depth())] InsufficientTrustDepth(Certification, Depth), /// The certification does not have a sufficient trust amount. #[error("The path requires a trust amount of {1}, but \ this certification ({0}) only has a trust amount of {}", .0.amount())] InsufficientTrustAmount(Certification, usize), /// The certificate did not issue a certification for the /// specified binding. #[error("{} did not certify <{}, {:?}>", .0.keyid(), .1.keyid(), String::from_utf8_lossy(.2.value()))] NoCertification(CertSynopsis, CertSynopsis, UserID), /// The certificate did not delegate to the target. #[error("{} did not certify {}", .0.keyid(), .1.keyid())] NoDelegation(CertSynopsis, CertSynopsis), /// None of the active certifications were adequate for /// authenticating the target. #[error("No active certifications by {} for <{}, {:?}> \ had a trust amount of at least {3}", .0.keyid(), .1.keyid(), String::from_utf8_lossy(.2.value()))] NoAdequateCertification(CertSynopsis, CertSynopsis, UserID, usize), /// None of the active delegations were adequate for the path /// suffix. #[error("No active certifications by {} for {} \ that make it at least a level-{2} trusted introducer \ with a trust amount of at least {3}", .0.keyid(), .1.keyid())] NoAdequateDelegation(CertSynopsis, CertSynopsis, Depth, usize), /// A certification would be adequate, but it is not active. #[error("Certification ({0}) is adequate, but it is not active")] AdequateButNotActive(Certification), /// A certification would be adequate, but it is not valid. #[error("Certification ({0}) is adequate, but it is not valid")] AdequateButNotValid(Certification, #[source] anyhow::Error), } /// What we know about a certificate. /// /// Sometimes we only know its Key ID. /// /// The lifetimes `'a` and `'b` have the same meaning as for /// [`sequoia_wot::store::Store`]: `'a` is the lifetime of the object /// on the backend, `'b` is the lifetime of the reference to the /// object, and the object (`'a`) must outlive the reference (`'b`). #[derive(Debug, Clone)] enum CertVariants<'a> { KeyHandle(KeyHandle), Cert(Arc>), CertSynopsis(CertSynopsis), } impl<'a> CertVariants<'a> { /// Returns the certificate's KeyHandle. pub fn key_handle(&self) -> KeyHandle { match self { CertVariants::KeyHandle(ref kh) => kh.clone(), CertVariants::Cert(ref cert) => cert.key_handle(), CertVariants::CertSynopsis(ref cert) => cert.fingerprint().into(), } } /// Returns the certificate's primary User ID, if known. /// /// Note: this is best effort, and the User ID may not be valid /// under the policy. pub fn primary_userid(&self) -> Option { match self { CertVariants::KeyHandle(_) => None, CertVariants::Cert(ref cert) => { // We can't get a ValidCert (otherwise we'd have a // CertVariants::CertSynopsis). This is best effort. cert.with_policy(&NP, None) .and_then(|vc| { vc.primary_userid().map(|ua| ua.userid().clone()) }) .ok() .or_else(|| { cert.userids().next() }) } CertVariants::CertSynopsis(ref cert) => { cert.primary_userid().map(|u| u.userid().clone()) } } } /// Returns the CertSynopsis, if it is available. pub fn cert(&self) -> Option<&CertSynopsis> { if let CertVariants::CertSynopsis(ref c) = self { Some(c) } else { None } } } /// What we know about a certificate, and any errors or lints. /// /// Sometimes we only know its Key ID. /// /// This is indirectly returned by [`Query::lint_path`]. /// /// The lifetimes `'a` and `'b` have the same meaning as for /// [`Store`]: `'a` is the lifetime of the object on the backend, `'b` /// is the lifetime of the reference to the object, and the object /// (`'a`) must outlive the reference (`'b`). #[derive(Debug)] pub struct CertLints<'a> { cert: CertVariants<'a>, errors: Vec, lints: Vec, } impl<'a> CertLints<'a> { fn from_key_handle(kh: KeyHandle) -> Self { Self { cert: CertVariants::KeyHandle(kh), errors: Vec::new(), lints: Vec::new(), } } fn from_lazy_cert(lc: Arc>) -> Self { Self { cert: CertVariants::Cert(lc), errors: Vec::new(), lints: Vec::new(), } } fn from_cert_synopsis(cert: CertSynopsis) -> Self { Self { cert: CertVariants::CertSynopsis(cert), errors: Vec::new(), lints: Vec::new(), } } /// Returns the certificate's KeyHandle. pub fn key_handle(&self) -> KeyHandle { self.cert.key_handle() } /// Returns the certificate's primary User ID, if known. /// /// Note: this is best effort, and the User ID may not be valid /// under the policy. pub fn primary_userid(&self) -> Option { self.cert.primary_userid() } /// Returns the CertSynopsis, if it is available. pub fn cert(&self) -> Option<&CertSynopsis> { self.cert.cert() } /// Returns any errors. /// /// Errors are fatal in the sense that the path is not valid. pub fn errors(&self) -> &[anyhow::Error] { &self.errors } /// Returns any lints. /// /// Lints are not fatal in the sense that the lint does not /// necessarily invalidate the path. pub fn lints(&self) -> &[anyhow::Error] { &self.lints } } /// What we know about a certificate. /// /// Sometimes we only know the Key ID of the issuer and the Key ID of /// the target. #[derive(Debug, Clone)] enum CertificationVariants { KeyHandles(KeyHandle, KeyHandle), Certs(KeyHandle, Option, KeyHandle, Option), Certification(Certification), } /// What we know about a certification, and any errors or lints. /// /// Sometimes we only know the Key ID of the issuer and the Key ID of /// the target. /// /// This is indirectly returned by [`Query::lint_path`]. #[derive(Debug)] pub struct CertificationLints { certification: CertificationVariants, userid: Option, errors: Vec, lints: Vec, } impl CertificationLints { fn from_key_handles(issuer: KeyHandle, target: KeyHandle, userid: Option) -> Self { CertificationLints { certification: CertificationVariants::KeyHandles(issuer, target), userid: userid, errors: Vec::new(), lints: Vec::new(), } } fn from_certs(issuer: I, target: T, userid: Option) -> Self where I: Into, T: Into, { let issuer = issuer.into(); let target = target.into(); CertificationLints { certification: CertificationVariants::Certs( issuer.key_handle(), Some(issuer), target.key_handle(), Some(target)), userid: userid, errors: Vec::new(), lints: Vec::new(), } } fn from_certification(certification: Certification) -> Self { let certification = certification.into(); CertificationLints { certification: CertificationVariants::Certification(certification), userid: None, errors: Vec::new(), lints: Vec::new(), } } /// Returns the issuer's KeyHandle. pub fn issuer(&self) -> KeyHandle { match self.certification { CertificationVariants::KeyHandles(ref issuer, _) => issuer.clone(), CertificationVariants::Certs(ref issuer, _, _, _) => issuer.clone(), CertificationVariants::Certification(ref c) => KeyHandle::from(c.issuer().fingerprint()), } } /// Returns the issuer's CertSynopsis, if known. pub fn issuer_cert(&self) -> Option<&CertSynopsis> { match self.certification { CertificationVariants::KeyHandles(_, _) => None, CertificationVariants::Certs(_, ref i, _, _) => i.as_ref(), CertificationVariants::Certification(ref c) => Some(c.issuer()), } } /// Returns the target's KeyHandle. pub fn target(&self) -> KeyHandle { match self.certification { CertificationVariants::KeyHandles(_, ref target) => target.clone(), CertificationVariants::Certs(_, _, ref target, _) => target.clone(), CertificationVariants::Certification(ref c) => KeyHandle::from(c.target().fingerprint()), } } /// Returns the target's CertSynopsis, if known. pub fn target_cert(&self) -> Option<&CertSynopsis> { match self.certification { CertificationVariants::KeyHandles(_, _) => None, CertificationVariants::Certs(_, _, _, ref t) => t.as_ref(), CertificationVariants::Certification(ref c) => Some(c.target()), } } /// Returns the certification's trust amount, if known. pub fn amount(&self) -> Option { self.certification().map(|c| c.amount()) } /// Returns the certification's trust depth, if known. pub fn depth(&self) -> Option { self.certification().map(|c| c.depth()) } /// Returns the certification's creation time, if known. pub fn creation_time(&self) -> Option { self.certification().map(|c| c.creation_time()) } /// Returns the certification's creation time, if known. pub fn expiration_time(&self) -> Option> { self.certification().map(|c| c.expiration_time()) } /// Returns the User ID that is being certified. /// /// This may be `None` if it is not known, or if this is a /// delegation (i.e., a third-party direct key signature). pub fn userid(&self) -> Option<&UserID> { if let CertificationVariants::Certification(ref c) = self.certification { c.userid() } else { self.userid.as_ref() } } /// Returns the Certification, if it is known. pub fn certification(&self) -> Option<&Certification> { if let CertificationVariants::Certification(ref c) = self.certification { Some(c) } else { None } } /// Returns any errors. /// /// Errors are fatal in the sense that the path is not valid. pub fn errors(&self) -> &[anyhow::Error] { &self.errors } /// Returns any lints. /// /// Lints are not fatal in the sense that the lint does not /// necessarily invalidate the path. pub fn lints(&self) -> &[anyhow::Error] { &self.lints } } /// A linted path. /// /// This is returned by [`Query::lint_path`]. /// /// The lifetimes `'a` and `'b` have the same meaning as for /// [`Store`]: `'a` is the lifetime of the object on the backend, `'b` /// is the lifetime of the reference to the object, and the object /// (`'a`) must outlive the reference (`'b`). #[derive(Debug)] pub struct PathLints<'a> { certs: Vec>, certifications: Vec, certification_network: bool, } impl<'a> PathLints<'a> { /// Returns whether the path is in a certification network. /// /// In a certification network, depth constraints and regular /// expressions are ignored. pub fn certification_network(&self) -> bool { self.certification_network } /// Returns the path's root. pub fn root(&self) -> &CertLints<'a> { &self.certs[0] } /// Returns the last node in the path. pub fn target(&self) -> &CertLints<'a> { &self.certs[self.certs.len() - 1] } /// Returns an iterator over the certificates. pub fn certs(&self) -> impl Iterator> { self.certs.iter() } /// Returns the number of nodes (certificates) in the path. pub fn len(&self) -> usize { self.certs.len() } /// Returns an iterator over the certifications. pub fn certifications(&self) -> impl Iterator { self.certifications.iter() } /// Returns the amount that the target is trusted. /// /// 120 usually means fully trusted. This function checks that /// there are no errors, that each certification's depth parameter /// is sufficient for the rest of the path, and that the regular /// expression constraints are respected. pub fn amount(&self) -> usize { tracer!(TRACE, "PathLint::amount"); // If there are any errors, we return 0. if self.certs.iter().any(|c| ! c.errors().is_empty()) { return 0; } let userid = if let Some(userid) = self.certifications.last().expect("have one").userid() { userid } else { // This is an invalid path: the last certification // doesn't have a User ID. t!("Invalid path: no target User ID"); return 0; }; self.certifications.iter() // The required depth for this path to be valid. .zip((0..self.certifications.len()).rev()) .map(|(c, required_depth)| { if ! c.errors.is_empty() { return 0; } if let Some(c) = c.certification() { if self.certification_network { c.amount() } else if c.depth() < required_depth.into() { 0 } else if ! c.regular_expressions() .map(|re_set| re_set.matches_userid(&userid)) // Invalid => assume everything matches. .unwrap_or(true) { 0 } else { c.amount() } } else { 0 } }).min().unwrap_or(120) as usize } /// Converts the `PathLints` into a `Path`. /// /// This fails if the path is invalid. Note: the path is still /// considered valid even if it doesn't have the required trust /// amount as passed to [`Query::lint_path`]. /// /// There may be multiple reasons why a path is invalid. This /// function tries to return the first (when checking from the /// root towards the target) reason why it is not valid. pub fn to_path(mut self) -> Result { let root = self.certifications.get(0) .and_then(|c| c.issuer_cert()) .ok_or(PathError::EmptyPath)?; let singleton = self.certs.len() == 1; // If we're only checking a self signature, then we don't have // a separate target. let target_error = if singleton { None } else { let target = self.certs.pop().expect("have one"); target.errors.into_iter().next() }; let mut path = Path::new(root.clone()); path.set_certification_network(self.certification_network); for (certification_lints, cert_lints) in self.certifications.into_iter() .zip(self.certs.into_iter()) { // Issuer. if let Some(err) = cert_lints.errors.into_iter().next() { return Err(err); } // Certification. if let Some(err) = certification_lints.errors.into_iter().next() { return Err(err); } if let CertificationVariants::Certification(c) = certification_lints.certification { if ! singleton { path.try_append(c)?; } } else { unreachable!("If there's an error, \ we would have recorded it"); } } if let Some(err) = target_error { return Err(err) } Ok(path) } } impl<'a> From<&Path> for PathLints<'a> { fn from(path: &Path) -> PathLints<'a> { let mut certs: Vec = Vec::new(); let mut certifications: Vec = Vec::new(); for c in path.certifications() { certs.push(CertLints::from_cert_synopsis(c.issuer().clone())); certifications.push( CertificationLints::from_certification(c.clone())); } certs.push(CertLints::from_cert_synopsis(path.target().clone())); PathLints { certs, certifications, certification_network: path.certification_network(), } } } /// The lifetimes `'a` and `'b` have the same meaning as for /// [`Store`]: `'a` is the lifetime of the object on the backend, `'b` /// is the lifetime of the reference to the object, and the object /// (`'a`) must outlive the reference (`'b`). impl<'a: 'b, 'b, S> Query<'b, S> where S: Store + Backend<'a> { /// Authenticates a path in the network. /// /// This checks that there are valid certifications from the first /// certificate in `khs` to the last over the User ID, `userid` /// for the specified trust amount. /// /// This function will return `Ok` if a path with the required /// trust amount can be found. /// /// Unlike [`Query::lint_path`], this function returns as soon /// as an error is encountered. /// /// This function requires that the [`Network`] object implement /// [`Backend`] in addition to [`Store`]. This is technically /// needed by [`Query::lint_path`] to provide better diagnostics, /// but it is not strictly required by [`Query::path`], which /// only needs active certifications. This requirement exists, /// because [`Query::path`] and [`Query::lint_path`] share a /// fair amount of code. This bound may be lifted in the future. /// /// [`Network`]: crate::Network /// [`Backend`]: crate::store::Backend /// [`Store`]: crate::store::Store pub fn path(&self, khs: &[KeyHandle], userid: U, required_amount: usize, policy: &dyn Policy) -> Result where U: Borrow { let userid = userid.borrow(); if khs.len() == 0 { return Err(PathError::EmptyPath.into()); } self.path_internal(khs, userid, required_amount, policy, false) .and_then(|path_info| { let path = path_info.to_path()?; let amount = path.amount(); if amount < required_amount { Err(PathError::PathInadequate( khs.to_vec(), userid.clone(), amount, required_amount) .into()) } else { Ok(path) } }) } /// Lints a path in the network. /// /// This checks that the there are valid certifications from the /// first certificate in `khs` to the last over the User ID, /// `userid`. /// /// This function almost always returns `Ok`; it only returns an /// error in an extraordinary circumstance. /// /// Unlike [`Query::path`], this function does extra work to /// identify reasons why a path is invalid. For instance, if /// there is no valid certification for a path segment, but there /// is an expired certification that is expired, this function /// will indicate that. pub fn lint_path(&self, khs: &[KeyHandle], userid: U, required_amount: usize, policy: &dyn Policy) -> Result> where U: Borrow { self.path_internal(khs, userid, required_amount, policy, true) } /// Authenticates a path in the network. fn path_internal(&self, khs: &[KeyHandle], userid: U, required_amount: usize, policy: &dyn Policy, lint: bool) -> Result> where U: Borrow { let userid = userid.borrow(); tracer!(TRACE, "Network::path_internal"); t!("Checking path {} {}", khs.iter() .map(|kh| KeyID::from(kh).to_hex()) .collect::>() .join(" "), String::from_utf8_lossy(userid.value())); // Change the lifetime. let khs: &[KeyHandle] = khs; // XXX: let policy = self.policy(); let reference_time = self.network().reference_time(); // Look up the certificates. let mut cert_lints: Vec = Vec::with_capacity(khs.len()); let mut certs: Vec>> = Vec::with_capacity(khs.len()); for kh in khs.iter() { cert_lints.push(CertLints::from_key_handle(kh.clone())); let cl = cert_lints.last_mut().expect("have one"); certs.push(None); let cert = certs.last_mut().expect("have one"); match self.network().lookup_by_cert(kh) { Ok(certs) => { if certs.len() > 1 { // XXX: keyid collision :/. Silently ignore for // now. t!("Store returned multiple certificates \ for {}: {}", kh, certs.iter() .map(|c| c.fingerprint().to_hex()) .collect::>() .join(", ")); } if let Some(c) = certs.into_iter().next() { t!("Looking up {}: hit!", kh); *cl = CertLints::from_lazy_cert(c.clone()); *cert = Some(c); } else { let err = StoreError::NotFound(kh.clone()).into(); t!("Looking up {}: {}", kh, err); if lint { // We'll transform this to a valid // cert below. cl.errors.push(err); } else { return Err(err); } } } Err(err) => { t!("Looking up {}: {}", kh, err); if lint { cl.errors.push(err); } else { return Err(err); } } } } assert_eq!(certs.len(), khs.len()); assert_eq!(cert_lints.len(), khs.len()); // Convert them to ValidCerts (if the policy allows it). Due // to lifetimes, we don't do this in the previous loop. let certs: Vec> = certs.iter() .zip(cert_lints.iter_mut()) .map(|(c, cl)| { if let Some(c) = c { match c.with_policy(policy, reference_time) { Ok(c) => Ok(Some(c)), Err(err) => { if lint { // We're linting. Just keep going. cl.errors.push(err); Ok(None) } else { Err(err) } } } } else { Ok(None) } }) .collect::>>()?; // If we were only give a single node, we assume the caller is // asking the question: does this node have this self // signature? In that case, we run one iteration of the where // the issuer and target are the same. let singleton = khs.len() == 1; // Look for a valid certification for each piece of the path. let mut certification_lints = Vec::with_capacity(certs.len() - 1); 'certification: for i in 0..(certs.len() - 1).max(1) { // Whether this is the last path segment. let last = singleton || (i == certs.len() - 2); let issuer: Option<&ValidCert> = certs[i].as_ref(); let issuer_kh = issuer.map(|c| c.key_handle()) .unwrap_or_else(|| khs[i].clone()); // Carefully handle the singleton case: let target: Option<&ValidCert> = if singleton { issuer } else { certs[i + 1].as_ref() }; let target_kh = target.map(|c| c.key_handle()) .unwrap_or_else(|| { if singleton { issuer_kh.clone() } else { khs[i + 1].clone() } }); t!("Considering {} -> {}", issuer_kh, target_kh); certification_lints.push( CertificationLints::from_key_handles( issuer_kh.clone(), target_kh.clone(), if last { Some(userid.clone()) } else { None })); let mut cl = certification_lints.last_mut().expect("have one"); if issuer.is_none() { let err = PathError::MissingIssuer(issuer_kh.clone()); t!(" {} -> {}: {}", KeyID::from(&issuer_kh), KeyID::from(&target_kh), err); cl.errors.push(err.into()); } if target.is_none() { let err = PathError::MissingTarget(target_kh.clone()); t!(" {} -> {}: {}", KeyID::from(&issuer_kh), KeyID::from(&target_kh), err); cl.errors.push(err.into()); } let target: &ValidCert = if let Some(target) = target { target } else { // We already emitted a lint. continue 'certification; }; if last { // We need to check that the target is valid (i.e., it // is not expired, and not revoked) at the reference // time. Note: Certification::try_from_signature // already checks that the certification and the // certificates are valid at the *certification* time. match target.clone().with_policy(target.policy(), reference_time) { Err(err) => { // Target is invalid at the reference time. if lint { cert_lints.last_mut().expect("have one") .errors.push(err.into()); } else { return Err(err.into()); } } Ok(vc) => { // Check that the target is not revoked. if let RevocationStatus::Revoked(revs) = vc.revocation_status() { let rev = revs.iter().next().expect("have one"); // We know we have at least one revocation. let reason = rev.reason_for_revocation(); let msg = reason .map(|r| r.1.to_vec()) .unwrap_or(Vec::new()); let code = reason .map(|r| r.0) .unwrap_or(ReasonForRevocation::Unspecified); let err = PathError::TargetRevoked( target.key_handle(), code, msg, rev.signature_creation_time() .unwrap_or(std::time::UNIX_EPOCH), reference_time); t!("{}", err); if lint { cert_lints.last_mut().expect("have one") .errors.push(err.into()); } else { return Err(err.into()); } } // Check that the target certificate is not expired. if let Some(e) = vc.primary_key().key_expiration_time() { if e <= reference_time { let err = PathError::TargetExpired( target.key_handle(), e, reference_time); t!("{}", err); if lint { cert_lints.last_mut().expect("have one") .errors.push(err.into()); } else { return Err(err.into()); } } } // The target doesn't need to have self signed // the User ID to authenticate the User ID. // But if the target has revoked it, then it // can't be authenticated. if let Some(ua) = vc.userids().find(|u| { u.userid() == userid }) { if let RevocationStatus::Revoked(revs) = ua.revocation_status() { let rev = revs.iter().next().expect("have one"); // We know we have at least one revocation. let reason = rev.reason_for_revocation(); let msg = reason .map(|r| r.1.to_vec()) .unwrap_or(Vec::new()); let code = reason .map(|r| r.0) .unwrap_or(ReasonForRevocation::Unspecified); let err = PathError::TargetUserIDRevoked( target.key_handle(), userid.clone(), code, msg, rev.signature_creation_time() .unwrap_or(std::time::UNIX_EPOCH), reference_time); t!("{}", err); if lint { cert_lints.last_mut().expect("have one") .errors.push(err.into()); } else { return Err(err.into()); } } } } } } let issuer: &ValidCert = if let Some(issuer) = issuer { issuer } else { // We already emitted a lint. continue 'certification; }; let issuer_kh = KeyHandle::from(issuer.fingerprint()); *cl = CertificationLints::from_certs( issuer, target, if last { Some(userid.clone()) } else { None }); // We iterate over all of the certifications, take // those whose issuer, target and target User ID // match what we are looking for and partition // them into: // // - valid certifications: Those that // Certification::try_from_signature says are // valid. Note: not all of these are // necessarily *active*. // // - invalid_certifications: Those that are // invalid, because they violate the policy, are // revoked, etc. let mut valid_certifications: Vec = Vec::new(); let mut invalid_certifications: Vec<(Signature, Option, anyhow::Error)> = Vec::new(); let mut parse_component = |ua: Option<&UserIDAmalgamation>| { if let Some(ua) = ua { t!("parse_component({}, {} self certifications, \ {} third-party certifications)", String::from_utf8_lossy(ua.userid().value()), ua.self_signatures().count(), ua.certifications().count()); } else { t!("parse_component(primary)"); } let valid_certifications = if issuer.fingerprint() == target.fingerprint() { t!("Returning self signatures."); if let Some(ua) = ua { Box::new(ua.self_signatures()) as Box> } else { // This is non-sense: a certificate never // has to delegate to itself. That would // create a cycle, anyway. Box::new(std::iter::empty()) } } else { Box::new(if let Some(ua) = ua { Box::new(ua.certifications()) as Box> } else { Box::new(target.primary_key().certifications()) } .filter(|c| { c.get_issuers() .into_iter().any(|i| { i.aliases(&issuer_kh) }) })) } .filter_map(|c| { match Certification::try_from_signature( &issuer, ua, &target, c) { Ok(c) => Some(c), Err(err) => { t!(" {}", err); if lint { // Only save the error if we // are linting. invalid_certifications.push( (c.clone(), ua.map(|ua| ua.userid().clone()), err)); } None } } }) .collect::>(); valid_certifications }; // Get the active delegations / certifications. if last { // This is the last path segment: we want a // certification of a specific User ID. if let Some(ua) = target.cert().userids() .filter(|ua| ua.userid() == userid) .next() { valid_certifications = parse_component(Some(&ua)); } if valid_certifications.is_empty() { let err = PathError::NoCertification( CertSynopsis::from(issuer), CertSynopsis::from(target), userid.clone()); t!(" {}", err); cl.errors.push(err.into()); } } else { // We're looking for a delegation; a certification on // any User ID will do. // We use the Cert and to the ValidCert, because // we want to consider all User IDs and all third // party certifications, not only those considered // valid by the current policy. for ua in target.cert().userids() { valid_certifications.extend_from_slice( &parse_component(Some(&ua))) } valid_certifications.extend_from_slice(&parse_component(None)); if valid_certifications.is_empty() { let err = PathError::NoDelegation( CertSynopsis::from(issuer), CertSynopsis::from(target)); t!(" {}", err); cl.errors.push(err.into()); } } t!(" Have {} valid certifications", valid_certifications.len()); // Checks if a certification is adequate. // // The first time through, we only look if any // certification satisfies the requirements. If so, we // don't want to lint the irrelevant certifications. The // second time through, we know no active certification // was sufficient so we do want to lint everything. let required_depth = if singleton || self.certification_network() { Depth::from(0) } else { Depth::from(certs.len() - 1 - (i + 1)) }; let adequate = |certification: &Certification, cl: Option<&mut CertificationLints>| { if ! self.certification_network() && ! certification.regular_expressions() .map(|re_set| re_set.matches_userid(&userid)) // Invalid => everything matches. .unwrap_or(true) { if let Some(cl) = cl { let err = PathError::RegexMismatch( certification.clone(), userid.clone()); t!(" {}", err); cl.errors.push(err.into()); } false } else if ! self.certification_network() && certification.depth() < required_depth { if let Some(cl) = cl { let err = PathError::InsufficientTrustDepth( certification.clone(), required_depth); t!(" {}", err); cl.errors.push(err.into()); } false } else if certification.amount() < required_amount { if let Some(cl) = cl { let err = PathError::InsufficientTrustAmount( certification.clone(), required_amount); t!(" {}", err); cl.errors.push(err.into()); } false } else { t!(" Found an adequate certification: {:?}", certification); true } }; // The CertificationSet returns the active // certifications, but not in the most convenient // form. let cs = CertificationSet::from_certifications( valid_certifications.clone(), reference_time); let active_certifications: Vec<&Certification> = cs .iter() .flat_map(|cs| { cs.certifications() .flat_map(|(_userid, certifications)| { certifications }) }) .collect(); t!("Have {} active certifications", active_certifications.len()); for &certification in active_certifications.iter() { if adequate(certification, None) { // We found a good certification / // delegation. We're done, even if we are // linting. *cl = CertificationLints::from_certification( certification.clone()); continue 'certification; } } let err = if last { PathError::NoAdequateCertification( CertSynopsis::from(issuer), CertSynopsis::from(target), userid.clone(), required_amount) } else { PathError::NoAdequateDelegation( CertSynopsis::from(issuer), CertSynopsis::from(target), required_depth, required_amount) }; t!(" {}", err); if lint { cl.errors.push(err.into()); } else { return Err(err.into()); } // None of the active certifications are adequate. // Iterate again, but be verbose. for certification in active_certifications.iter() { adequate(certification, Some(&mut cl)); } // Now lint the inactive certifications. for certification in valid_certifications.iter() { // Skip the active certifications. We just // linted them. if active_certifications.contains(&certification) { continue; } if adequate(certification, Some(&mut cl)) { let err = PathError::AdequateButNotActive( certification.clone()); t!(" {}", err); cl.errors.push(err.into()); } } // Finally add the lints for the invalid certifications. for (certification, userid, err) in invalid_certifications.into_iter() { let certification = Certification::from_signature( issuer, userid, target, &certification); if adequate(&certification, Some(&mut cl)) { let err = PathError::AdequateButNotValid( certification.clone(), err); t!(" {}", err); cl.errors.push(err.into()); } } } Ok(PathLints { certs: cert_lints, certifications: certification_lints, certification_network: self.certification_network(), }) } } sequoia-wot-0.11.0/src/network/query.rs000064400000000000000000000334271046102023000161640ustar 00000000000000use std::borrow::Borrow; use std::collections::HashMap; use std::sync::Arc; use sequoia_openpgp as openpgp; use openpgp::Fingerprint; use openpgp::packet::UserID; use crate::FULLY_TRUSTED; use crate::Network; use crate::Path; use crate::Paths; use crate::Root; use crate::Roots; use crate::network::filter::CapCertificateFilter; use crate::network::filter::CapDepthFilter; use crate::network::filter::ChainFilter; use crate::network::filter::TrustedIntroducerFilter; use crate::network::filter::SuppressCertificationFilter; use crate::network::filter::SuppressIssuerFilter; use crate::store::Store; use crate::TRACE; /// Borrowed or owned. /// /// This is a variant of a `Cow`, which doesn't require that the type /// to implement `Clone`. enum Boo<'a, B> where B: 'a, { Borrowed(&'a B), Owned(Arc), } /// A builder for the parameters for a query on a network. /// /// A `QueryBuilder` can be used to create a [`Query`] progressively. pub struct QueryBuilder<'a, S> where S: Store { // The underlying network. network: Boo<'a, Network>, // The trust roots. roots: Roots, // If this is a certification network (where all certificates are // considered tsigs with infiniate depth and no regular // expression), or a normal authentication network. certification_network: bool, /// Whether to constrain the search to paths with a given depth. maximum_depth: Option, } impl<'a, S> QueryBuilder<'a, S> where S: Store { /// Returns a new `QueryBuilder`. /// /// Returns a `QueryBuilder` that takes a reference to a /// [`Network`]. This constructor makes it easy to have multiple /// `QueryBuilder`s or `Query`s that use the same network, and /// consequently share a cache. /// /// A `QueryBuilder` can also own the `Network`. In that case, /// use [`QueryBuilder::new_owned`] to create the `QueryBuilder`. pub fn new(network: &'a Network) -> Self { tracer!(TRACE, "QueryBuilder::new"); Self { network: Boo::Borrowed(network), roots: Roots::empty(), certification_network: false, maximum_depth: None, } } /// Returns a new `QueryBuilder`. /// /// Returns a `QueryBuilder` that takes ownership (in the form of /// an [`Arc`]) of a [`Network`]. This variant is useful when the /// `QueryBuilder` or `Query` should own the network. Because /// this takes an `Arc`, it is still possible for multiple /// `Query`s to share a cache. /// /// A `QueryBuilder` can also just reference the `Network`. In /// that case, use [`QueryBuilder::new`] to create the /// `QueryBuilder`. pub fn new_owned(network: Arc>) -> Self { tracer!(TRACE, "QueryBuilder::new_owned"); Self { network: Boo::Owned(network), roots: Roots::empty(), certification_network: false, maximum_depth: None, } } /// Returns a reference to the network. pub fn network(&self) -> &Network { match self.network { Boo::Borrowed(b) => b, Boo::Owned(ref b) => b, } } /// Sets the trust roots. pub fn roots(&mut self, roots: R) -> &mut Self where R: Into { let roots = roots.into(); tracer!(TRACE, "QueryBuilder::roots"); t!("Roots ({}): {}.", roots.iter().count(), roots.iter() .map(|r| format!("{} ({})", r.fingerprint(), r.amount())) .collect::>() .join(", ")); self.roots = roots; self } /// Configures the `Query` to treat the network as a certification /// network. /// /// By default, a `Query` works with an authentication network. /// In a certification network, all certifications are considered /// to be trusted signatures with an infinite trust depth, and no /// regular expressions. /// /// This is how most so-called *web-of-trust path-finder* or *pgp /// path-finder* algorithms work: they are interested in /// determining whether there is a chain of certifications from /// one certificate to another without regard as to whether a /// certifier considers the target to be a trusted introducer, or /// to have only verified the target's identity. pub fn certification_network(&mut self) -> &mut Self { self.certification_network = true; self } /// Configures the `Query` to treat the network as an /// authentication network. /// /// This is the default mode of operation where plain /// certifications are only considered certifications, and the /// target is not considered to be a trusted introducer. An /// alternative mode of operation is a certification network. /// This can be configured using [`Query::certification_network`]. /// See that method's documentation for more details. pub fn authentication_network(&mut self) -> &mut Self { self.certification_network = false; self } /// Limits all trusted introducers to the given maximum depth. /// /// Note: With the depth limited to `0`, the maximum lengths of /// paths will be two, with the paths containing the certifier and /// the target). pub fn maximum_depth(&mut self, limit: usize) -> &mut Self { self.maximum_depth = Some(limit); self } /// Returns a `Query`. pub fn build(&self) -> Query<'a, S> { Query { network: match self.network { Boo::Borrowed(b) => Boo::Borrowed(b), Boo::Owned(ref b) => Boo::Owned(Arc::clone(b)), }, roots: self.roots.clone(), certification_network: self.certification_network, maximum_depth: self.maximum_depth, } } } /// The parameters for a query on a network. /// /// A `Query` is a `Network` with a set of roots, and other /// configuration parameters. pub struct Query<'a, S> where S: Store { // The underlying network. network: Boo<'a, Network>, // The trust roots. roots: Roots, // If this is a certification network (where all certifications // are considered tsigs with infinite trust depth, and no regular // expressions) or a normal authentication network. certification_network: bool, /// Limits all trusted introducers to the given maximum depth. /// /// Note: With the depth limited to `0`, the maximum lengths of /// paths will be two, with the paths containing the certifier and /// the target). maximum_depth: Option, } impl<'a, S> Query<'a, S> where S: Store { /// Returns a new `Query`. /// /// Returns a `QueryBuilder` that takes a reference to a /// [`Network`]. This constructor makes it easy to have multiple /// `QueryBuilder`s or `Query`s that use the same network, and /// consequently share a cache. /// /// A `Query` can also own the `Network`. In that case, use /// [`Query::new_owned`] to create the `Query`. pub fn new(network: &'a Network, roots: R) -> Self where R: Into { QueryBuilder::new(network) .roots(roots) .build() } /// Returns a new `Query`. /// /// Returns a `Query` that takes ownership (in the form of an /// [`Arc`]) of a [`Network`]. This variant is useful when the /// `QueryBuilder` or `Query` should own the network. Because /// this takes an `Arc`, it is still possible for multiple /// `Query`s to share a cache. /// /// A `Query` can also just reference the `Network`. In that /// case, use [`Query::new`] to create the `Query`. pub fn new_owned(network: Arc>, roots: R) -> Self where R: Into { QueryBuilder::new_owned(network) .roots(roots) .build() } /// Returns a reference to the network. pub fn network(&self) -> &Network { match self.network { Boo::Borrowed(b) => b, Boo::Owned(ref b) => b, } } /// Returns a reference to the roots. pub fn roots(&self) -> &Roots { &self.roots } /// Returns whether the specified certificate is a root. pub fn is_root(&self, fpr: F) -> bool where F: Borrow { self.roots.is_root(fpr.borrow()) } /// Returns the specified root. pub fn root(&self, fpr: F) -> Option<&Root> where F: Borrow { self.roots.get(fpr.borrow()) } /// Returns whether the `Query` is working with a /// certification network. /// /// See [`Query::certification_network`] for /// details. pub fn certification_network(&self) -> bool { self.certification_network } /// Returns whether the `Query` is working with an /// authentication network. /// /// See [`Query::authentication_network`] for /// details. pub fn authentication_network(&self) -> bool { ! self.certification_network } /// Authenticates the specified binding. /// /// Enough independent paths are gotten to satisfy /// `target_trust_amount`. A fully trusted authentication is 120. /// If you require that a binding be double authenticated, you can /// specify 240. pub fn authenticate(&self, target_userid: U, target_fpr: F, target_trust_amount: usize) -> Paths where U: Borrow, F: Borrow, { tracer!(TRACE, "Query::authenticate"); let target_userid = target_userid.borrow(); let target_fpr = target_fpr.borrow(); t!("Authenticating <{}, {}>", target_fpr, String::from_utf8_lossy(target_userid.value())); t!("Roots ({}):", self.roots.iter().count()); for (i, r) in self.roots.iter().enumerate() { t!(" {}: {} ({})", i, r.fingerprint(), r.amount()); } let mut paths = Paths::new(); let mut filter = ChainFilter::new(); if self.certification_network { // We're building a certification network: treat all // certifications like tsigs with infinite depth and no // regular expressions. filter.push(TrustedIntroducerFilter::new()); } else { if self.roots.iter().any(|r| r.amount() != FULLY_TRUSTED) { let mut caps = CapCertificateFilter::new(); for r in self.roots.iter() { let amount = r.amount(); if amount != FULLY_TRUSTED { caps.cap(r.fingerprint().clone(), amount); } } filter.push(caps); }; } // Limit the path length. Note: It is important to push this // filter after the TrustedIntroducerFilter, which // unconditionally sets the depth to unconstrained. if let Some(limit) = self.maximum_depth { filter.push(CapDepthFilter::new(limit)); } let mut progress = true; 'next_path: while progress && paths.amount() < target_trust_amount { progress = false; for self_signed in [true, false] { let auth_paths: HashMap = self.backward_propagate( target_fpr.clone(), target_userid.clone(), self_signed, &filter); // Note: the paths returned by backward_propagate may // overlap. As such, we can only take one. (Or we need // to subtract any overlap. But that is fragile.) Then // we subtract the path from the network and run // backward_propagate again, if necessary. if let Some((path, path_amount)) = self.roots.iter() // Get the paths that start at the roots. .filter_map(|r| { auth_paths.get(r.fingerprint()) }) // Choose the one that: has the maximum amount of // trust. If there are multiple such paths, prefer // the shorter one. .max_by_key(|(path, path_amount)| { (// We want the *most* amount of trust, path_amount, // but the *shortest* path. -(path.len() as isize), // Be predictable. Break ties based on the // fingerprint of the root. path.root().fingerprint()) }) { let path = path.clone(); if path.len() == 1 { // It's a root. let mut suppress_filter = SuppressIssuerFilter::new(); suppress_filter.suppress_issuer( &path.root().fingerprint(), *path_amount); filter.push(suppress_filter); } else { // Add the path to the filter to create a residual // network without this path. let mut suppress_filter = SuppressCertificationFilter::new(); suppress_filter.suppress_path(&path, *path_amount); filter.push(suppress_filter); } paths.push(path, *path_amount); progress = true; // Prefer paths where the target User ID is self // signed as long as possible. continue 'next_path; } } } paths } } sequoia-wot-0.11.0/src/network/root.rs000064400000000000000000000034411046102023000157730ustar 00000000000000use sequoia_openpgp as openpgp; use openpgp::Fingerprint; use crate::FULLY_TRUSTED; /// A trust root. /// /// This describes a trust root. A trust root is designated by its /// fingerprint, and includes a degree of trust. This is interpreted /// the same as a certification's trust amount. By default, trust /// roots are fully trusted and thus have a trust amount of /// [`FULLY_TRUSTED`]. However, it is possible to have trust roots /// that are less strongly trusted. These are created using /// [`Root::new`]. #[derive(Debug, Clone)] pub struct Root { fingerprint: Fingerprint, amount: usize, } impl Root { /// Returns a new `Root`. pub fn new(fingerprint: Fingerprint, amount: usize) -> Self { Self { fingerprint, amount, } } /// Returns the root's fingerprint. pub fn fingerprint(&self) -> &Fingerprint { &self.fingerprint } /// Returns the root's trust amount. pub fn amount(&self) -> usize { self.amount } /// Changes the root's trust amount. pub fn set_amount(&mut self, amount: usize) { self.amount = amount; } } impl From for Root { fn from(fingerprint: Fingerprint) -> Self { Root::new(fingerprint, FULLY_TRUSTED) } } impl From<&Fingerprint> for Root { fn from(fingerprint: &Fingerprint) -> Self { Root::from(fingerprint.clone()) } } impl From<(Fingerprint, usize)> for Root { fn from(r: (Fingerprint, usize)) -> Self { Root::new(r.0, r.1) } } impl From<&(Fingerprint, usize)> for Root { fn from(r: &(Fingerprint, usize)) -> Self { Root::new(r.0.clone(), r.1) } } impl From<(&Fingerprint, usize)> for Root { fn from(r: (&Fingerprint, usize)) -> Self { Root::new(r.0.clone(), r.1) } } sequoia-wot-0.11.0/src/network/roots.rs000064400000000000000000000124741046102023000161640ustar 00000000000000use std::borrow::Borrow; use sequoia_openpgp as openpgp; use openpgp::Fingerprint; use crate::Root; /// A list of trust roots. /// /// This describes a list of trust roots. /// /// The roots are sorted and deduped by fingerprint. If there are /// multiple entries for the same root, then the entry with the /// largest trust amount is used. #[derive(Debug, Clone)] pub struct Roots { roots: Vec, } impl Roots { /// Returns a new `Root`. /// /// The roots are sorted and deduped. If there are multiple /// entries for the same root, then the entry with the largest /// trust amount is used. pub fn new(roots: I) -> Self where I: IntoIterator, I::Item: Into, { let mut roots: Vec = roots.into_iter().map(Into::into).collect(); if roots.len() > 1 { roots.sort_by_key(|r| r.fingerprint().clone()); roots.dedup_by(|other, keep| { if other.fingerprint() == keep.fingerprint() { // Prefer the higher trust. keep.set_amount(std::cmp::max(other.amount(), keep.amount())); true } else { false } }); } Self { roots, } } /// Returns an empty set of roots. pub fn empty() -> Self { Roots { roots: Vec::new(), } } /// Returns whether or not there are any roots. pub fn is_empty(&self) -> bool { self.roots.is_empty() } /// Returns an iterator over the roots. /// /// The roots are returned in sorted order. pub fn iter(&self) -> impl Iterator { self.roots.iter() } /// Returns whether the specified certificate is a root. pub fn is_root(&self, fpr: F) -> bool where F: Borrow { let fpr = fpr.borrow(); self.roots.binary_search_by_key(&fpr, |r| &r.fingerprint()).is_ok() } /// Returns the specified root. pub fn get(&self, fpr: F) -> Option<&Root> where F: Borrow { let fpr = fpr.borrow(); self.roots.binary_search_by_key(&fpr, |r| r.fingerprint()) .ok() .map(|i| &self.roots[i]) } /// Retains only the roots specified by the predicate. /// /// Identical to [`Vec::retain`]. pub fn retain(&mut self, f: F) where F: FnMut(&Root) -> bool { self.roots.retain(f); } } macro_rules! gen_from { ($t:ty) => { impl From<$t> for Roots { fn from(roots: $t) -> Self { Roots::new(roots.iter().map(Root::from)) } } }; } gen_from!(&[Fingerprint]); gen_from!(&[Fingerprint; 0]); gen_from!(&[Fingerprint; 1]); gen_from!(&[Fingerprint; 2]); gen_from!(&[Fingerprint; 3]); gen_from!(&[Fingerprint; 4]); gen_from!(&[Fingerprint; 5]); gen_from!(&[Fingerprint; 6]); gen_from!(&[Fingerprint; 7]); gen_from!(&[Fingerprint; 8]); gen_from!(&[Fingerprint; 9]); gen_from!(&[Fingerprint; 10]); gen_from!(&[Fingerprint; 11]); gen_from!(&[Fingerprint; 12]); gen_from!(&[Fingerprint; 13]); gen_from!(&[Fingerprint; 14]); gen_from!(&[Fingerprint; 15]); gen_from!(&[Fingerprint; 16]); gen_from!(&[(Fingerprint, usize)]); gen_from!(&[(Fingerprint, usize); 0]); gen_from!(&[(Fingerprint, usize); 1]); gen_from!(&[(Fingerprint, usize); 2]); gen_from!(&[(Fingerprint, usize); 3]); gen_from!(&[(Fingerprint, usize); 4]); gen_from!(&[(Fingerprint, usize); 5]); gen_from!(&[(Fingerprint, usize); 6]); gen_from!(&[(Fingerprint, usize); 7]); gen_from!(&[(Fingerprint, usize); 8]); gen_from!(&[(Fingerprint, usize); 9]); gen_from!(&[(Fingerprint, usize); 10]); gen_from!(&[(Fingerprint, usize); 11]); gen_from!(&[(Fingerprint, usize); 12]); gen_from!(&[(Fingerprint, usize); 13]); gen_from!(&[(Fingerprint, usize); 14]); gen_from!(&[(Fingerprint, usize); 15]); gen_from!(&[(Fingerprint, usize); 16]); #[cfg(test)] mod tests { use super::*; use crate::FULLY_TRUSTED; use crate::PARTIALLY_TRUSTED; #[test] fn roots() { let fpr_a: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let fpr_b: Fingerprint = "BFC5CA10FB55A4B790E2A1DBA5CFAB9A9E34E183" .parse().expect("valid fingerprint"); let input = &[ (fpr_a.clone(), PARTIALLY_TRUSTED), (fpr_a.clone(), FULLY_TRUSTED), (fpr_b.clone(), FULLY_TRUSTED), ]; // Test all orderings of input. for i in 0..3 { for j in 0..3 { for k in 0..3 { if i == j || i == k || j == k { continue; } let r = Roots::new(&[ input[i].clone(), input[j].clone(), input[k].clone(), ]); assert_eq!( &[ (fpr_a.clone(), FULLY_TRUSTED), (fpr_b.clone(), FULLY_TRUSTED), ][..], &r.iter() .map(|r| (r.fingerprint().clone(), r.amount())) .collect::>()); } } } } } sequoia-wot-0.11.0/src/network.rs000064400000000000000000000326401046102023000150130ustar 00000000000000use std::fmt; use std::time::SystemTime; use std::ops::Deref; use sequoia_openpgp as openpgp; use openpgp::Result; use openpgp::cert::prelude::*; use openpgp::cert::raw::RawCert; use openpgp::policy::Policy; use sequoia_cert_store as cert_store; use crate::CertSynopsis; use crate::Certification; use crate::store::CertStore; use crate::store::Store; use crate::store::SynopsisSlice; pub(crate) mod filter; mod root; pub use root::Root; mod roots; pub use roots::Roots; mod query; pub use query::Query; pub use query::QueryBuilder; mod path; pub use path::PathError; pub use path::CertLints; pub use path::CertificationLints; pub use path::PathLints; mod gossip; use super::TRACE; /// A certification network. pub struct Network where S: Store { store: S, } impl fmt::Debug for Network where S: Store { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "Network {{\n")?; write!(f, " Reference time: {:?}\n", self.reference_time())?; write!(f, " Nodes:\n")?; let mut certs: Vec<_> = self.synopses().map(|cert| { ( cert.userids() .map(|userid| { String::from_utf8_lossy(userid.value()) .into_owned() }) .collect::>() .join(", "), cert.fingerprint() ) }).collect(); certs.sort(); for (userid, fpr) in certs { write!(f, " {}: {}\n", fpr, userid)?; } write!(f, " Edges:\n")?; let mut certifications = self.iter_fingerprints().filter_map(|fpr| { if let Ok(cs) = self.certifications_of(&fpr, 0.into()) { if cs.is_empty() { None } else { Some(cs) } } else { None } }).flatten().collect::>(); certifications.sort_by_key(|cs| { (cs.issuer().primary_userid().map(|u| u.userid().clone()), cs.issuer().fingerprint(), cs.target().fingerprint()) }); let mut last_issuer_fpr = None; for cs in certifications.into_iter() { let issuer = &cs.issuer(); let issuer_fpr = issuer.fingerprint(); if Some(&issuer_fpr) != last_issuer_fpr.as_ref() { write!(f, " {} certifies:\n", issuer)?; last_issuer_fpr = Some(issuer_fpr); } for (userid, c) in cs.certifications() { for c in c.iter() { write!(f, " {}, {}: {}, {}, {}\n", cs.target().fingerprint(), userid.as_ref().map(|userid| { String::from_utf8_lossy(userid.value()).into_owned() }).unwrap_or_else(|| "".into()), c.depth(), c.amount(), if let Some(re_set) = c.regular_expressions() { if re_set.matches_everything() { "*".into() } else { format!("{:?}", re_set) } } else { "".into() })?; } } } write!(f, "}}\n")?; Ok(()) } } impl Deref for Network where S: Store { type Target = S; fn deref(&self) -> &Self::Target { &self.store } } impl Network where S: Store { /// Returns a Network. pub fn new(store: S) -> Result { tracer!(TRACE, "Network::new"); Ok(Network { store: store, }) } /// Returns a reference to the underlying store. pub fn backend(&self) -> &S { &self.store } } impl<'a: 'ra, 'ra> Network>> { /// Builds a web of trust network from a set of certificates. /// /// If a certificate is invalid according to the policy, the /// certificate is silently ignored. pub fn from_certs(certs: I, policy: &'ra dyn Policy, t: T) -> Result where T: Into>, I: IntoIterator, C: Into, { tracer!(TRACE, "Network::from_certs"); let t = t.into().unwrap_or_else(|| SystemTime::now()); Network::new(CertStore::from_certs( certs.into_iter().map(|c| c.into()), policy, t)?) } /// Builds a web of trust network from a set of certificates. /// /// If a certificate is invalid according to the policy, the /// certificate is silently ignored. pub fn from_cert_refs(certs: I, policy: &'ra dyn Policy, t: T) -> Result where T: Into>, I: IntoIterator, C: Into<&'a Cert>, { tracer!(TRACE, "Network::from_certs"); let t = t.into().unwrap_or_else(|| SystemTime::now()); Network::new(CertStore::from_cert_refs( certs.into_iter().map(|c| c.into()), policy, t)?) } /// Builds a web of trust network from a keyring. /// /// If a certificate is invalid according to the policy, the /// certificate is silently ignored. pub fn from_bytes(certs: &'a [u8], policy: &'ra dyn Policy, t: T) -> Result where T: Into>, { tracer!(TRACE, "Network::from_bytes"); let t = t.into().unwrap_or_else(|| SystemTime::now()); Network::new(CertStore::from_bytes(certs, policy, t)?) } /// Builds a web of trust network from a set of raw certificates. /// /// If a certificate is invalid according to the policy, the /// certificate is silently ignored. pub fn from_raw_certs(certs: impl Iterator>, policy: &'a dyn Policy, t: T) -> Result where T: Into>, { tracer!(TRACE, "Network::from_raw_certs"); let t = t.into().unwrap_or_else(|| SystemTime::now()); Network::new(CertStore::from_raw_certs(certs, policy, t)?) } } impl<'a> Network> { /// Builds a web of trust network from a set of certificates. /// /// If a certificate is invalid according to the policy, the /// certificate is silently ignored. pub fn from_synopses(certs: &'a [CertSynopsis], certifications: &'a [Certification], t: SystemTime) -> Result { Network::new(SynopsisSlice::new(certs, certifications, t)?) } } #[cfg(test)] mod test { use super::*; use openpgp::Fingerprint; use openpgp::packet::UserID; use openpgp::parse::Parse; use openpgp::policy::StandardPolicy; #[allow(unused)] #[test] fn third_party_certifications_of() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "03182611B91B1E7E20B848E83DFC151ABFAD85D5" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let bob_some_org_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let carol_fpr: Fingerprint = "9CA36907B46FE7B6B9EE9601E78064C12B6D7902" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 03182611B91B1E7E20B848E83DFC151ABFAD85D5 let dave_fpr: Fingerprint = "C1BC6794A6C6281B968A6A41ACE2055D610CEA03" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 9CA36907B46FE7B6B9EE9601E78064C12B6D7902 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("multiple-userids-1.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); // No one certified alice. assert!( n.third_party_certifications_of(&alice_fpr.clone()) .is_empty()); // Alice (and no one else) certified each of Bob's User IDs. let mut c = n.third_party_certifications_of(&bob_fpr); assert_eq!(c.len(), 2); c.sort_by_key(|c| (c.issuer().fingerprint(), c.userid().map(Clone::clone))); assert_eq!(&c[0].issuer().fingerprint(), &alice_fpr); assert_eq!(c[0].userid(), Some(&bob_uid)); assert_eq!(&c[1].issuer().fingerprint(), &alice_fpr); assert_eq!(c[1].userid(), Some(&bob_some_org_uid)); Ok(()) } #[allow(unused)] #[test] fn certified_userids_of() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "03182611B91B1E7E20B848E83DFC151ABFAD85D5" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let bob_some_org_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let carol_fpr: Fingerprint = "9CA36907B46FE7B6B9EE9601E78064C12B6D7902" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 03182611B91B1E7E20B848E83DFC151ABFAD85D5 let dave_fpr: Fingerprint = "C1BC6794A6C6281B968A6A41ACE2055D610CEA03" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 9CA36907B46FE7B6B9EE9601E78064C12B6D7902 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("multiple-userids-1.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); // There is the self signature. let mut c = n.certified_userids_of(&alice_fpr); assert_eq!(c.len(), 1); // Alice (and no one else) certified each of Bob's User IDs // for the two self signed User ID. let mut c = n.certified_userids_of(&bob_fpr); assert_eq!(c.len(), 2); c.sort_unstable(); assert_eq!(&c[0], &bob_uid); assert_eq!(&c[1], &bob_some_org_uid); Ok(()) } #[allow(unused)] #[test] fn certified_userids() -> Result<()> { let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "03182611B91B1E7E20B848E83DFC151ABFAD85D5" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let bob_some_org_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let carol_fpr: Fingerprint = "9CA36907B46FE7B6B9EE9601E78064C12B6D7902" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 03182611B91B1E7E20B848E83DFC151ABFAD85D5 let dave_fpr: Fingerprint = "C1BC6794A6C6281B968A6A41ACE2055D610CEA03" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 9CA36907B46FE7B6B9EE9601E78064C12B6D7902 let certs: Vec = CertParser::from_bytes( &crate::testdata::data("multiple-userids-1.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_cert_refs(certs.iter(), p, None)?; eprintln!("{:?}", n); // Alice is the root, but self signatures count, so there are // five certified User IDs in this network. let mut got = n.certified_userids(); assert_eq!(got.len(), 5); got.sort_unstable(); let mut expected = [ (alice_fpr.clone(), alice_uid.clone()), (bob_fpr.clone(), bob_uid.clone()), (bob_fpr.clone(), bob_some_org_uid.clone()), (carol_fpr.clone(), carol_uid.clone()), (dave_fpr.clone(), dave_uid.clone()), ]; expected.sort_unstable(); assert_eq!(got, expected); Ok(()) } } sequoia-wot-0.11.0/src/output/dot.rs000064400000000000000000000661671046102023000154630ustar 00000000000000use std::collections::BTreeSet; use std::collections::HashMap; use std::io::Write; use std::time::SystemTime; use dot_writer::Attributes; use dot_writer::DotWriter; use dot_writer::Scope; use dot_writer::Shape; use openpgp::packet::UserID; use openpgp::Fingerprint; use openpgp::Result; use sequoia_openpgp as openpgp; use sequoia_wot as wot; use wot::Depth; use wot::Path; use wot::Roots; use wot::FULLY_TRUSTED; use crate::output::OutputType; const DOT_INSTRUCTIONS: &'static str = "\ // // Example: To convert DOT to SVG (on many systems): // // sq-wot -f dot ... | dot -Tsvg -o output.svg // // For further information on using graphviz see: // https://graphviz.org/doc/info/command.html "; const DOT_ROOT_FILL_COLOR: &'static str = "mediumpurple2"; const DOT_TARGET_OK_FILL_COLOR: &'static str = "lightgreen"; const DOT_TARGET_FAIL_FILL_COLOR: &'static str = "indianred2"; const DOT_NODE_FILL_COLOR: &'static str = "grey"; /// Return UserID as String and remove (backslash escaped) double quotes /// /// In quoted strings in DOT, the only escaped character is double-quote ("). /// That is, in quoted strings, the dyad \" is converted to "; all other /// characters are left unchanged. In particular, \\ remains \\. Layout engines /// may apply additional escape sequences. fn escape_userid(userid: &UserID) -> String { format!("{}", userid) .replace("\\", "\\\\") .replace("\"", "\\\"") } /// Add a legend graph to an existing Scope /// /// The legend graph provides information on color coding of the various nodes, /// as well as the targeted trust amount, whether looking at gossip and whether /// the data is used as a certification network. fn add_legend_graph( container: &mut Scope, required_amount: usize, gossip: bool, certification_network: bool, ) { let mut legend = container.cluster(); legend.set_label("Graph legend"); legend .node_attributes() .set("shape", "note", false) .set_fill_color(dot_writer::Color::White); let mut legend_edges = Vec::new(); legend_edges.push(format!("\"Trust root\"")); legend .node_named(legend_edges.last().expect("Just added a legend node.")) .set("fillcolor", DOT_ROOT_FILL_COLOR, false); legend_edges.push(format!("\"Intermediate introducer\"")); legend .node_named(legend_edges.last().expect("Just added a legend node.")) .set("fillcolor", DOT_NODE_FILL_COLOR, false); legend_edges.push(format!("\"Authenticated target\"")); legend .node_named(legend_edges.last().expect("Just added a legend node.")) .set("fillcolor", DOT_TARGET_OK_FILL_COLOR, false); legend_edges.push(format!("\"Unauthenticated target\"")); legend .node_named(legend_edges.last().expect("Just added a legend node.")) .set("fillcolor", DOT_TARGET_FAIL_FILL_COLOR, false); legend_edges.push(format!( "\"target trust amount: {}%\"", (100 * required_amount) / FULLY_TRUSTED, )); legend.node_named(legend_edges.last().expect("Just added a legend node.")); if gossip { legend_edges.push(String::from("gossip")); legend.node_named( legend_edges.last().expect("Just added a legend node."), ); } if certification_network { legend_edges.push(String::from("certification network")); legend.node_named( legend_edges.last().expect("Just added a legend node."), ); } // internal edges are used for arranging nodes in the cluster // and are therefore invisible let mut edge_attributes = legend.edge_attributes(); edge_attributes .set_font_size(0.1) .set_style(dot_writer::Style::Invisible) .set_arrow_size(0.1) .set_arrow_tail(dot_writer::ArrowType::InvEmpty); drop(edge_attributes); // add edges for all legend nodes so that they can be arranged within the // cluster for edge in legend_edges.windows(2) { legend.edge(&edge[0], &edge[1]); } } /// The output representation of a certification /// /// An OutputCertification tracks the issuer's and target's Fingerprint, as well /// as the target's UserID. /// Furthermore, the trust amount and depth of the certification and its /// (optional) creation and expiry timestamps are covered. #[derive(Clone, Debug)] pub struct OutputCertification { issuer_fingerprint: Fingerprint, target_fingerprint: Fingerprint, target_uid: UserID, creation: SystemTime, expiry: Option, trust_amount: usize, depth: Depth, } impl OutputCertification { pub fn new( issuer_fingerprint: Fingerprint, target_fingerprint: Fingerprint, target_uid: UserID, creation: SystemTime, expiry: Option, trust_amount: usize, depth: Depth, ) -> Self { Self { issuer_fingerprint, target_fingerprint, target_uid, creation, expiry, trust_amount, depth, } } } /// The output representation of a Path /// /// A number uniquely identifies an OutputPath amongst others. #[derive(Debug)] pub struct OutputPath { // The unique number of the OutputPath (an OutputNetwork provides between // 0 and n OutputPaths per target Fingerprint) number: usize, certifications: Vec, } impl OutputPath { pub fn new(number: usize) -> Self { Self { number, certifications: Vec::new(), } } /// Return the certifications of the OutputPath in an iterator pub fn certifications(&self) -> impl Iterator { self.certifications.iter() } /// Add an OutputCertification to the list of certifications pub fn add_certification( &mut self, issuer_fingerprint: Fingerprint, target_fingerprint: Fingerprint, target_uid: UserID, creation: SystemTime, expiry: Option, trust_amount: usize, depth: Depth, ) { self.certifications.push(OutputCertification::new( issuer_fingerprint, target_fingerprint, target_uid, creation, expiry, trust_amount, depth, )) } } /// The output representation of a cert /// /// It tracks the Fingerprint and UserIDs (as well as their trust amount and /// indicator whether they are a target of a Path) and an indicator whether the /// Fingerprint serves as trust root. #[derive(Clone, Debug)] pub struct OutputCert { keyhandle: Fingerprint, /// HashMap tracking UserID and accompanying trust amount and whether the /// UserID is the target of a Path userids: HashMap, // does the cert serve as trust root? is_root: bool, } impl OutputCert { pub fn new( keyhandle: &Fingerprint, userid: UserID, trust_amount: usize, is_root: bool, is_target: bool, ) -> Self { Self { keyhandle: keyhandle.clone(), userids: HashMap::from([(userid, (trust_amount, is_target))]), is_root, } } /// Get the data for a provided UserID pub fn get_userid_data(&self, userid: &UserID) -> Option<&(usize, bool)> { self.userids.get(userid) } /// Add a UserID and its associated data to the list of userids pub fn add_userid_data(&mut self, userid: UserID, data: (usize, bool)) { self.userids.insert(userid, data); } /// Update the trust amount of a UserID /// /// If no matching UserID is found, it is first created /// (the bool indicating whether the UserID is the target of a Path is set /// to false) pub fn update_trust_amount( &mut self, userid: &UserID, trust_amount: usize, ) { match self.userids.get_mut(userid) { Some(userid_data) => { userid_data.0 = trust_amount; } None => { self.add_userid_data(userid.to_owned(), (trust_amount, false)); } } } /// Update whether the OutputCert serves as trust root /// /// Once this value is set to true it is not set to false anymore pub fn set_is_root(&mut self, is_root: bool) { self.is_root = self.is_root || is_root } /// Update whether a UserID is the target of a Path /// /// Once this value is set to true it is not set to false anymore pub fn set_is_target(&mut self, userid: &UserID, is_target: bool) { if let Some(userid_data) = self.userids.get_mut(userid) { userid_data.1 = userid_data.1 || is_target; } } } /// The output representation of a Network /// /// An OutputNetwork tracks the required trust amount for the network, a list /// of OutputCerts in the network, and a hash map containing key-value pairs /// consisting of Path target Fingerprints and lists of OutputPaths. #[derive(Debug)] pub struct OutputNetwork { required_amount: usize, gossip: bool, certification_network: bool, certs: Vec, paths: HashMap>, } impl OutputNetwork { pub fn new( required_amount: usize, gossip: bool, certification_network: bool, ) -> Self { let certs = Vec::new(); let paths = HashMap::new(); OutputNetwork { required_amount, gossip, certification_network, certs, paths, } } /// Try to add an OutputCert and return it /// /// If no OutputCert identified by keyhandle exists, one is created. pub fn try_add_cert( &mut self, keyhandle: Fingerprint, userid: UserID, trust_amount: usize, is_root: bool, is_target: bool, ) -> &OutputCert { // take `self.certs` out of `self` to help the borrow checker let mut certs = std::mem::replace(&mut self.certs, vec![]); if let Some(cert) = Self::get_mut_cert(&mut certs, &keyhandle) { if cert.get_userid_data(&userid).is_none() { cert.add_userid_data( userid.to_owned(), (trust_amount, is_target), ); } } else { certs.push(OutputCert::new( &keyhandle, userid, trust_amount, is_root, is_target, )); } self.certs = certs; self.get_cert(&keyhandle).expect("A cert was just added") } /// Return an OutputCert matching a Fingerprint pub fn get_cert(&self, keyhandle: &Fingerprint) -> Option<&OutputCert> { self.certs.iter().find(|x| &x.keyhandle == keyhandle) } /// Get a mutable reference to an OutputCert matching a Fingerprint pub fn get_mut_cert<'a>( certs: &'a mut Vec, keyhandle: &Fingerprint, ) -> Option<&'a mut OutputCert> { if let Some(i) = certs.iter().position(|x| &x.keyhandle == keyhandle) { Some(&mut certs[i]) } else { None } } /// Get a mutable reference to an OutputPath matching a Fingerprint (of an /// OutputCert) and a number (of a specific OutputPath) pub fn get_mut_path( &mut self, fingerprint: &Fingerprint, number: usize, ) -> Option<&mut OutputPath> { if let Some(path_list) = self.paths.get_mut(fingerprint) { path_list.iter_mut().filter(|x| x.number == number).last() } else { None } } /// Add an empty OutputPath to the list of paths using a Fingerprint and a /// number pub fn add_path(&mut self, fingerprint: &Fingerprint, number: usize) { if let Some(path_list) = self.paths.get_mut(fingerprint) { path_list.push(OutputPath::new(number)); } else { let mut path_list = Vec::new(); path_list.push(OutputPath::new(number)); self.paths.insert(fingerprint.clone(), path_list); } } /// Add an OutputCertification to a list of OutputPaths matching a /// Fingerprint and a path number pub fn add_certification( &mut self, path_target_fingerprint: &Fingerprint, path_number: usize, target_fingerprint: Fingerprint, target_uid: UserID, issuer_fingerprint: Fingerprint, creation: SystemTime, expiry: Option, trust_amount: usize, depth: Depth, ) { self.add_path(&path_target_fingerprint, path_number); if let Some(path) = self.get_mut_path(&path_target_fingerprint, path_number) { path.add_certification( issuer_fingerprint, target_fingerprint, target_uid, creation, expiry, trust_amount, depth, ); } else { panic!( "There is no path associated with keyhandle {} and number {}!", target_fingerprint, path_number ); } } /// Return the OutputCerts in an Iterator pub fn certs(&self) -> impl Iterator { self.certs.iter() } /// Return an Iterator of tuples of Fingerprint and OutputPaths pub fn paths( &self, ) -> impl Iterator)> { self.paths.iter() } /// Create the edge label for a certification fn create_certification_edge_label( trust_amount: usize, creation: Option, expiry: Option, depth: Option, ) -> String { let mut certification_label = String::new(); if trust_amount < FULLY_TRUSTED { certification_label.push_str(&format!( "partially certified (amount: {} of 120)", trust_amount, )); } else { certification_label.push_str("certified"); } if let Some(time) = creation { certification_label.push_str(&format!( " on {}", chrono::DateTime::::from(time).format("%Y-%m-%d") )); } if let Some(time) = expiry { certification_label.push_str(&format!( " (expiry: {})", chrono::DateTime::::from(time).format("%Y-%m-%d") )); } if creation.is_some() || expiry.is_some() { certification_label.push_str("\n"); } match depth { Some(Depth::Limit(depth)) => { if depth > 0 { certification_label.push_str(" as a"); if trust_amount != FULLY_TRUSTED { certification_label.push_str(&format!( " partially trusted ({} of 120)", trust_amount, )); } else { certification_label.push_str(" fully trusted"); } if depth == 1 { certification_label.push_str(&format!( " introducer (depth: {})", depth, )); } else { certification_label.push_str(&format!( " meta-introducer (depth: {})", depth, )); } } } Some(Depth::Unconstrained) => { certification_label.push_str(" as a"); if trust_amount != FULLY_TRUSTED { certification_label.push_str(&format!( " partially trusted ({} of 120)", trust_amount, )); } else { certification_label.push_str(" fully trusted"); } certification_label.push_str(" issuer (depth: infinite)"); } _ => {} } certification_label } /// Write the OutputNetwork to an output (in DOT format) pub fn dot(&self, writer: &mut dyn Write) -> Result<()> { let mut output_bytes = Vec::new(); let mut dot_writer = DotWriter::from(&mut output_bytes); dot_writer.set_pretty_print(true); // the base graph with all relevant node settings let mut base_graph = dot_writer.digraph(); base_graph .node_attributes() .set_shape(Shape::Rectangle) .set_style(dot_writer::Style::Filled); // container cluster for all further clusters and nodes let mut container = base_graph.cluster(); for target_cert in self.certs() { let mut cert_cluster = container.cluster(); cert_cluster.set("color", DOT_NODE_FILL_COLOR, false); // internal edges are used for arranging nodes in the cluster // and are therefore invisible let mut edge_attributes = cert_cluster.edge_attributes(); edge_attributes.set_style(dot_writer::Style::Invisible); drop(edge_attributes); // sort the UserIDs and accompanying data by reverse amount and // UserID let mut userid_data = target_cert.userids.iter().collect::>(); userid_data.sort_by(|a, b| b.1 .0.cmp(&a.1 .0).then(a.0.cmp(&b.0))); // add all edges between Fingerprints and the foreign (to their own // key) UserIDs they are certifying let mut cert_edges = Vec::new(); for (userid, (trust_amount, is_target)) in userid_data { let node_name = format!( "\"{}_{}\"", &target_cert.keyhandle, escape_userid(&userid) ); cert_edges.push(node_name.clone()); let mut node = cert_cluster.node_named(&node_name); // if it is a trust root or not a target of a path, we do not // need to add trust amount if target_cert.is_root || !is_target { node.set_label(&format!("{}", escape_userid(&userid))); } else { node.set_label(&format!( "{}\n({}%)", escape_userid(&userid), (trust_amount * 100) / FULLY_TRUSTED, )); } node.set( "fillcolor", if *is_target { if trust_amount >= &self.required_amount { DOT_TARGET_OK_FILL_COLOR } else { DOT_TARGET_FAIL_FILL_COLOR } } else { DOT_NODE_FILL_COLOR }, false, ); } // add node for Fingerprint let node_name = format!("\"{}\"", &target_cert.keyhandle); cert_edges.push(node_name.clone()); let mut keyhandle_node = cert_cluster.node_named(&node_name); keyhandle_node.set_label(&format!("{}", target_cert.keyhandle)); if target_cert.is_root { keyhandle_node.set("fillcolor", DOT_ROOT_FILL_COLOR, false); } drop(keyhandle_node); // add edges for all UserID and the Fingerprint nodes so that they // can be arranged within the cluster for edge in cert_edges.windows(2) { cert_cluster.edge(&edge[0], &edge[1]); } } // add edges for all certifications of Fingerprints on UserIDs let mut known_certifications = BTreeSet::new(); for (_keyhandle, paths) in self.paths() { for path in paths.iter() { for certification in path.certifications() { let entry = format!( "{}_{}_{}", &certification.issuer_fingerprint, &certification.target_fingerprint, &certification.target_uid, ); if !known_certifications.contains(&entry) { // as gossip output is likely already very convoluted, // do not include self-signatures if !(self.gossip && &certification.issuer_fingerprint == &certification.target_fingerprint) || !self.gossip { let edge = container.edge( format!( "\"{}\"", &certification.issuer_fingerprint ), format!( "\"{}_{}\"", &certification.target_fingerprint, escape_userid(&certification.target_uid), ), ); let certification_label = OutputNetwork::create_certification_edge_label( certification.trust_amount, Some(certification.creation), certification.expiry, Some(certification.depth), ); // use xlabel when generating gossip output, // so it is less likely to run into init_rank // issues: https://gitlab.com/graphviz/graphviz/-/issues/1213 if self.gossip { edge.attributes() .set("xlabel", &certification_label, true) .set("decorate", "true", false); } else { edge.attributes() .set_label(&certification_label) .set("decorate", "true", false); } known_certifications.insert(entry); } } } } } // add a legend graph add_legend_graph( &mut container, self.required_amount, self.gossip, self.certification_network, ); drop(container); drop(base_graph); if let Ok(data) = String::from_utf8(output_bytes) { writeln!( writer, "// Created by {} {}", env!("CARGO_BIN_NAME"), env!("CARGO_PKG_VERSION") )?; writeln!(writer, "{}", DOT_INSTRUCTIONS)?; writeln!(writer, "{}", data)?; } Ok(()) } } /// The DOT specific implementation of an OutputNetwork representation /// /// DotOutputNetwork tracks an OutputNetwork and the roots for it. pub struct DotOutputNetwork<'a> { output_network: OutputNetwork, roots: &'a Roots, } impl<'a> DotOutputNetwork<'a> { /// Create a new DotOutputNetwork pub fn new( required_amount: usize, roots: &'a Roots, gossip: bool, certification_network: bool, ) -> Self { let output_network = OutputNetwork::new(required_amount, gossip, certification_network); Self { output_network, roots, } } } impl<'a> OutputType for DotOutputNetwork<'a> { /// Add paths to the OutputNetwork fn add_paths( &mut self, paths: Vec<(Path, usize)>, fingerprint: &Fingerprint, userid: &UserID, aggregated_amount: usize, ) -> Result<()> { match OutputNetwork::get_mut_cert( &mut self.output_network.certs, &fingerprint.to_owned(), ) { Some(cert) => { cert.update_trust_amount(userid, aggregated_amount); cert.set_is_root(self.roots.is_root(fingerprint)); cert.set_is_target(userid, true); } None => { self.output_network.try_add_cert( fingerprint.to_owned(), userid.to_owned(), aggregated_amount, self.roots.is_root(fingerprint), true, ); } } for (path_number, (path, _path_trust_amount)) in paths.iter().enumerate() { let issuer_fingerprint = path.root().fingerprint(); if self.output_network.get_cert(&issuer_fingerprint).is_none() { let certifier_userid = if path.certifications().count() == 0 { userid } else if let Some(userid) = path.root().primary_userid() { userid.userid() } else { userid }; self.output_network.try_add_cert( issuer_fingerprint, certifier_userid.to_owned(), 0, self.roots.is_root(&path.root().fingerprint()), false, ); } // sort the certifications by reverse amount and issuer let mut certifications = path.certifications().collect::>(); certifications.sort_by(|a, b| { b.amount().cmp(&a.amount()).then( a.issuer().fingerprint().cmp(&b.issuer().fingerprint()), ) }); for certification in certifications { let certification_target_userid = if let Some(target_userid) = certification.userid() { target_userid } else { userid }; let target_cert_is_root = self.roots.is_root(certification.target().fingerprint()); self.output_network.try_add_cert( certification.target().fingerprint(), certification_target_userid.to_owned(), 0, target_cert_is_root, false, ); self.output_network.add_certification( &path.target().fingerprint(), path_number, certification.target().fingerprint(), certification_target_userid.to_owned(), certification.issuer().fingerprint(), certification.creation_time(), certification.expiration_time(), certification.amount(), certification.depth(), ) } } Ok(()) } /// Write the DotOutputNetwork to output fn finalize(&mut self) -> Result<()> { self.output_network.dot(&mut std::io::stdout())?; Ok(()) } } sequoia-wot-0.11.0/src/output/human_readable.rs000064400000000000000000000167631046102023000176210ustar 00000000000000use anyhow::Error; use openpgp::packet::UserID; use openpgp::Fingerprint; use openpgp::KeyHandle; use openpgp::Result; use sequoia_openpgp as openpgp; use sequoia_wot as wot; use wot::Path; use wot::PathLints; use wot::FULLY_TRUSTED; use wot::PARTIALLY_TRUSTED; use crate::error_chain; use crate::output::OutputType; /// Prints a Path Error pub fn print_path_error(err: Error) { println!("└ Checking path: {}", err); } /// Prints information of a Path for a target UserID associated with a KeyHandle pub fn print_path_header( target_kh: &KeyHandle, target_userid: &UserID, amount: usize, required_amount: usize, ) { println!( "[{}] {} {}: {} authenticated ({}%)", if amount >= required_amount { "✓" } else { " " }, target_kh, String::from_utf8_lossy(target_userid.value()), if amount >= 2 * FULLY_TRUSTED { "doubly" } else if amount >= FULLY_TRUSTED { "fully" } else if amount >= PARTIALLY_TRUSTED { "partially" } else if amount > 0 { "marginally" } else { "not" }, (amount * 100) / FULLY_TRUSTED ); } /// Prints information on a Path for a UserID pub fn print_path(path: &PathLints, target_userid: &UserID, prefix: &str) { let certification_count = path.certifications().count(); print!("{}◯ {}", prefix, path.root().key_handle()); if certification_count == 0 { print!(" {:?}", String::from_utf8_lossy(target_userid.value())); } else if let Some(userid) = path.root().primary_userid() { print!(" ({:?})", String::from_utf8_lossy(userid.value())); } println!(""); for (last, (cert, certification)) in path .certs() .zip(path.certifications()) .enumerate() .map(|(j, c)| { if j + 1 == certification_count { (true, c) } else { (false, c) } }) { print!("{}│ ", prefix); if let Some(certification) = certification.certification() { if certification.amount() < FULLY_TRUSTED { print!( " partially certified (amount: {} of 120)", certification.amount() ); } else { print!(" certified"); } if last { print!(" the following binding"); } else { print!(" the following certificate"); } print!( " on {}", chrono::DateTime::::from( certification.creation_time() ) .format("%Y-%m-%d") ); if let Some(e) = certification.expiration_time() { print!( " (expiry: {})", chrono::DateTime::::from(e).format("%Y-%m-%d") ); } if certification.depth() > 0.into() { print!(" as a"); if certification.amount() != FULLY_TRUSTED { print!( " partially trusted ({} of 120)", certification.amount() ); } else { print!(" fully trusted"); } if certification.depth() == 1.into() { print!(" introducer (depth: {})", certification.depth()); } else { print!( " meta-introducer (depth: {})", certification.depth() ); } } } else { print!(" No adequate certification found."); } println!(""); for err in cert.errors().iter().chain(cert.lints()) { for (i, msg) in error_chain(err).into_iter().enumerate() { println!( "{}│ {}{}", prefix, if i == 0 { "" } else { " " }, msg ); } } for err in certification.errors().iter().chain(certification.lints()) { for (i, msg) in error_chain(err).into_iter().enumerate() { println!( "{}│ {}{}", prefix, if i == 0 { "" } else { " " }, msg ); } } print!( "{}{} {}", prefix, if last { "└" } else { "├" }, certification.target() ); if last { print!(" {:?}", String::from_utf8_lossy(target_userid.value())); } else { if let Some(userid) = certification.target_cert().and_then(|c| c.primary_userid()) { print!(" ({:?})", String::from_utf8_lossy(userid.value())); } } println!(""); if last { let target = path.certs().last().expect("have one"); for err in target.errors().iter().chain(target.lints()) { for (i, msg) in error_chain(err).into_iter().enumerate() { println!( "{} {}{}", prefix, if i == 0 { "" } else { " " }, msg ); } } } } println!(""); } /// The human-readable specific implementation of an OutputNetwork /// /// HumanReadableOutputNetwork tracks the target trust amount for the network /// and whether it displays "gossip". pub struct HumanReadableOutputNetwork { gossip: bool, required_amount: usize, } impl HumanReadableOutputNetwork { /// Create a new HumanReadableOutputNetwork pub fn new(required_amount: usize, gossip: bool) -> Self { Self { required_amount, gossip, } } } impl OutputType for HumanReadableOutputNetwork { /// Add paths to the OutputNetwork and display them directly fn add_paths( &mut self, paths: Vec<(Path, usize)>, fingerprint: &Fingerprint, userid: &UserID, aggregated_amount: usize, ) -> Result<()> { let kh = KeyHandle::from(fingerprint); if !self.gossip { print_path_header( &kh, userid, aggregated_amount, self.required_amount, ); } for (i, (path, amount)) in paths.iter().enumerate() { let prefix = if self.gossip { print_path_header( &kh, userid, aggregated_amount, self.required_amount, ); " " } else { if !self.gossip && paths.len() > 1 { println!( " Path #{} of {}, trust amount {}:", i + 1, paths.len(), amount ); " " } else { " " } }; print_path(&path.into(), userid, prefix) } Ok(()) } /// Write the HumanReadableOutputNetwork to output /// /// This function does in fact nothing as we are printing directly in /// add_paths(). fn finalize(&mut self) -> Result<()> { Ok(()) } } sequoia-wot-0.11.0/src/output.rs000064400000000000000000000025751046102023000146660ustar 00000000000000use openpgp::packet::UserID; use openpgp::Fingerprint; use openpgp::Result; use sequoia_openpgp as openpgp; use sequoia_wot as wot; use wot::Path; #[cfg(feature = "dot-writer")] mod dot; #[cfg(feature = "dot-writer")] pub use dot::DotOutputNetwork; mod human_readable; pub use human_readable::print_path; pub use human_readable::print_path_error; pub use human_readable::print_path_header; pub use human_readable::HumanReadableOutputNetwork; /// Trait to implement adding of Paths and outputting them in a specific format /// /// This trait is implemented to consume a vector of Path, trust amount tuples, /// a target Fingerprint, a target UserID, and aggregated trust amount (for the /// target UserID) to allow further processing and eventual output in a desired /// output format. pub trait OutputType { /// Add Paths for a UserID associated with a Fingerprint /// /// Paths are provided in a vector of Path, trust amount tuples. /// The aggregated_amount represents the (total) trust amount (derived from /// the Paths) for the UserID associated with the Fingerprint fn add_paths( &mut self, paths: Vec<(Path, usize)>, fingerprint: &Fingerprint, userid: &UserID, aggregated_amount: usize, ) -> Result<()>; /// Output the data consumed via add_paths() in a specific output format fn finalize(&mut self) -> Result<()>; } sequoia-wot-0.11.0/src/path.rs000064400000000000000000000310231046102023000142500ustar 00000000000000use std::fmt; use std::ops::Deref; use sequoia_openpgp as openpgp; use openpgp::Result; use crate::Certification; use crate::Depth; use crate::CertSynopsis; /// A path in a Network. /// /// A path is a sequence of [`Certification`]s where the target of a /// certification is the issuer of the next certification. `Path`s /// are built up gradually using [`Path::try_append`]. As such, a /// `Path` may just be a path prefix. For this reason, the regular /// expression constraint is not enforced. However, the `Path` /// implementation does guarantee that the target of a certification /// is the issuer of the next certification in the path. #[derive(Clone)] pub struct Path { // The root. root: CertSynopsis, // Then the transition from the previous node to the next, and the // next node. edges: Vec, // Set if the path is in a certification network, i.e., depth // constraints and regular expressions are ignored. certification_network: bool, // Residual depth. To append a certification, this must be >0. // After adding a new certification, the new residual depth is: // min(residual_depth - 1, certification.depth). residual_depth: Depth, } impl fmt::Debug for Path { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let indent = f.precision().unwrap_or(0); let indent: String = vec![ ' '; indent ].into_iter().collect(); f.write_fmt(format_args!( "Path [\n"))?; if self.certification_network { f.write_fmt(format_args!( "{} (certification network)\n", indent))?; } f.write_fmt(format_args!( "{} {} ({})\n", indent, self.root.fingerprint(), self.root.primary_userid().map(|userid| { String::from_utf8_lossy(userid.value()).into_owned() }).unwrap_or_else(|| "[no User ID]".into())))?; for certification in self.edges.iter() { f.write_fmt(format_args!( "{} |\n", indent))?; f.write_fmt(format_args!( "{} | depth: {}\n", indent, certification.depth()))?; f.write_fmt(format_args!( "{} | amount: {}\n", indent, certification.amount()))?; f.write_fmt(format_args!( "{} | regexes: {}\n", indent, if let Some(re_set) = certification.regular_expressions() { if re_set.matches_everything() { String::from("*") } else { format!("{:?}", re_set) } } else { "".into() }))?; f.write_fmt(format_args!( "{} v\n", indent))?; f.write_fmt(format_args!( "{} {} ({})\n", indent, certification.target().fingerprint(), certification.userid().map(|userid| { String::from_utf8_lossy(userid.value()).into_owned() }).unwrap_or_else(|| "[no User ID]".into())))?; } f.write_fmt(format_args!("{}]", indent))?; Ok(()) } } impl Path { /// Instantiates a path starting at the specified root. /// /// We assume that the root is ultimately trusted (its trust depth /// is unlimited and its trust amount is maximal). pub fn new(root: C) -> Self where C: Into { Self { root: root.into(), // Most paths will be direct (one edge) or via one trusted // introducer (two edges); meta-introducers are rarely // used. edges: Vec::with_capacity(2), certification_network: false, // Unconstrained. residual_depth: Depth::new(None), } } /// Controls how path validity is determined. /// /// In a certification network, trust depth and regular /// expressions are ignored and a certification isn't just used to /// validate a binding, but also to designate the target /// certificate as a trusted introducer. pub fn set_certification_network(&mut self, certification_network: bool) { self.certification_network = certification_network; } /// Returns how path validity is determined. /// /// In a certification network, trust depth and regular /// expressions are ignored and a certification isn't just used to /// validate a binding, but also to designate the target /// certificate as a trusted introducer. pub fn certification_network(&self) -> bool { self.certification_network } /// Returns the path's root. pub fn root(&self) -> &CertSynopsis { &self.root } /// Returns the last node in the path. pub fn target(&self) -> &CertSynopsis { if self.edges.len() == 0 { &self.root } else { &self.edges[self.edges.len() - 1].target() } } /// Returns an iterator over the path's certificates (the nodes). /// /// The certificates are returned from the root towards the target. pub fn certificates<'a>(&'a self) -> impl Iterator + 'a { std::iter::once(&self.root) .chain(self.edges.iter().map(|certification| { certification.target() })) } /// Returns the number of nodes in the path. pub fn len(&self) -> usize { 1 + self.edges.len() } /// Returns the certifications. /// /// The certifications are returned from the root towards the target. pub fn certifications<'a>(&'a self) -> impl Iterator { self.edges.iter() } /// Returns the residual trust depth. #[cfg(test)] pub(crate) fn residual_depth(&self) -> Depth { self.residual_depth } /// Returns the amount that the target is trusted. /// /// 120 usually means fully trusted. This function checks that /// each certification's depth parameter is sufficient for the /// rest of the path. It does not check any regular expressions, /// as the regular expressions only apply to the User ID being /// authenticated, and that may not yet have been added to the /// path (i.e., the path may be a path prefix). pub fn amount(&self) -> usize { self.edges.iter() // The required depth for this path to be valid. .zip((0..self.edges.len()).rev()) .map(|(e, required_depth)| { if self.certification_network || e.depth() >= required_depth.into() { e.amount() } else { 0 } }).min().unwrap_or(120) as usize } /// Appends the certification to the path. /// /// This checks that the target of the last certification is the /// issuer of the new certification, but it does not check the /// depth constraints, nor does it check for cycles. To ensure /// that the path is a valid path prefix, use [`Path::try_append`] /// instead. pub fn append(&mut self, certification: Certification) -> Result<()> { if self.target().fingerprint() != certification.issuer().fingerprint() { return Err(anyhow::format_err!( "Can't add certification to path: \ the path's tail ({}) is not the certification's issuer ({})", self.target().fingerprint(), certification.issuer())); } let depth = certification.depth(); self.edges.push(certification); self.residual_depth = self.residual_depth // Avoid underflow. .max(1.into()) .decrease(1) .min(depth); Ok(()) } /// Appends the certification to the path if the path allows it. /// /// This will fail if the trust depth is insufficient, or adding /// the certificate would induce a cycle. This function does not /// check any regular expressions, as the regular expressions only /// apply to the User ID being authenticated, and that may not yet /// have been added to the path (i.e., the path may be a path /// prefix). pub fn try_append(&mut self, certification: Certification) -> Result<()> { tracer!(false, "Path::try_append"); t!(" path: {:?}", self); t!(" certification: {:?}", certification); if ! self.certification_network && self.residual_depth == 0.into() { return Err(anyhow::format_err!("Not enough depth")); } // Check for cycles. The last two nodes can target the same // certificate, but then the target User IDs must be different. if self.root.fingerprint() == certification.target().fingerprint() || self.edges.iter() .enumerate() .any(|(i, c)| { if c.target().fingerprint() == certification.target().fingerprint() { if i == self.edges.len() - 1 { c.userid() == certification.userid() } else { true } } else { false } }) { return Err(anyhow::format_err!( "Adding {} to the path would create a cycle", certification.target())); } self.append(certification)?; Ok(()) } } /// A collection of paths. /// /// The trust amount is the trust amount while respecting the capacity /// of the edges. /// /// # Examples /// /// Consider the following network (a number next to an edge is that /// edge's trust amount): /// /// ```text /// root /// 60 / \ 60 /// v v /// alice bob /// 60 \ / 60 /// v v /// carol /// | 90 /// v /// target /// ``` /// /// If we consider the following two paths: `root -> alice -> carol -> /// target` and `root -> bob -> carol -> target`, then they each have /// a trust amount of 60. But taken together they only have a trust /// amount of 90, because the edge `carol -> target` is shared, and /// its capacity is 90. #[derive(Clone)] pub struct Paths { paths: Vec<(Path, usize)>, } impl Paths { /// Returns a new, empty `Paths` data structure. pub fn new() -> Self { Self { paths: Vec::new(), } } /// Returns an iterator over the paths. /// /// Returns an iterator over a reference to each path and its /// trust amount. /// /// Note: the trust amount is not recalculate, but is simply what /// was set when the `Path` was add using [`Paths::push`]. pub fn iter(&self) -> impl Iterator { self.paths.iter() } /// Returns an iterator over the paths. /// /// Returns an iterator over each path and its trust amount. /// /// Note: the trust amount is not recalculate, but is simply what /// was set when the `Path` was add using [`Paths::push`]. pub fn into_iter(self) -> impl Iterator { self.paths.into_iter() } /// The aggregate trust amount. /// /// This respects the network's capacity. Thus, if multiple paths /// use the same edge, the total trust amount may be less than /// simple the trust amount of each individual path. pub fn amount(&self) -> usize { self.paths.iter().map(|(_, a)| a).sum() } /// Adds a path. /// /// `amount` is the trust amount that this path contributes to the /// authentication. This may be less than `path.amount()` if it /// overlaps with other paths in the path set. pub fn push(&mut self, path: Path, amount: usize) { self.paths.push((path, amount)); } } impl Deref for Paths { type Target=[(Path, usize)]; fn deref(&self) -> &Self::Target { &self.paths[..] } } impl fmt::Debug for Paths { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { let indent = f.precision().unwrap_or(0); let indent: String = vec![ ' '; indent ].into_iter().collect(); f.write_fmt(format_args!("Paths [\n"))?; for (i, (p, a)) in self.iter().enumerate() { f.write_fmt(format_args!( "{} PATH #{}, trust amount: {}: {:.*?}\n", indent, i, a, indent.len() + 2, p))?; } f.write_fmt(format_args!("{}]", indent))?; Ok(()) } } sequoia-wot-0.11.0/src/priority_queue.rs000064400000000000000000000343641046102023000164140ustar 00000000000000use std::clone::Clone; use std::cmp::Ordering; use std::collections::BinaryHeap; use std::collections::HashSet; use std::fmt::Debug; use std::hash::Hash; use std::iter::FromIterator; const TRACE: bool = false; /// In order to use a BinaryHeap, the *values* need to be `Ord`. This /// means when comparing two `Element`s, we only compare their values, /// not their keys. /// /// We also want the keys to be `Ord` so we can efficiently dedup it. #[derive(Debug)] struct Element where K: Ord + Hash + Clone + Debug, V: Ord + Debug, { key: K, value: V, } impl Ord for Element where K: Ord + Hash + Clone + Debug, V: Ord + Debug, { fn cmp(&self, other: &Self) -> Ordering { self.value.cmp(&other.value) .then(self.key.cmp(&other.key).reverse()) } } impl PartialOrd for Element where K: Ord + Hash + Clone + Debug, V: Ord + Debug, { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } impl PartialEq for Element where K: Ord + Hash + Clone + Debug, V: Ord + Debug, { fn eq(&self, other: &Self) -> bool { self.cmp(&other) == Ordering::Equal } } impl Eq for Element where K: Ord + Hash + Clone + Debug, V: Ord + Debug, { } /// A dedupping max-priority queue. /// /// This data structure implements a priority queue for key-value /// pairs. When an element is popped from the priority queue, the /// element with the *largest* value is popped. (If there are /// multiple such values, one is returned.) /// /// When inserting a key into the priority queue, if there is already /// an element with the same key, then the larger value is kept. pub(super) struct PriorityQueue where K: Ord + Hash + Clone + Debug, V: Ord + Debug, { // When pending is larger than this, then convert pending into a // BH. threshold: usize, // The elements in the queue, sorted by value. bh: BinaryHeap>, // Elements that we haven't added to the binary heap yet. pending: Vec>, // Keys that are present in bh or pending. If None, then we have // a duplicate. have_keys: Option>, // We're tidy if: // // - We only have elements in bh. // - We only have elements in pending, and they are sorted and // deduped. is_tidy: bool, } const THRESHOLD: usize = 16; impl PriorityQueue where K: Ord + Hash + Clone + Debug, V: Ord + Debug, { pub fn new() -> Self { Self::with_threshold(THRESHOLD) } pub fn with_threshold(threshold: usize) -> Self { Self { threshold, bh: BinaryHeap::new(), pending: Vec::with_capacity(threshold), have_keys: Some(HashSet::new()), is_tidy: true, } } fn tidy(&mut self) { tracer!(TRACE, "PriorityQueue::tidy"); if self.is_tidy { assert!(self.bh.is_empty() || self.pending.len() == 0); assert!(self.have_keys.is_some()); self.pending[..].windows(2).for_each(|v| { assert!(v[0] <= v[1]); }); return; } t!("pre: bh: {} elements; pending:\n{}", self.bh.iter().count(), self.pending.iter().enumerate().map(|(i, e)| { format!(" {}. {:?}: {:?}", i, e.key, e.value) }) .collect::>() .join("\n")); // If there are no duplicates, it is safe to just merge // pending into bh. if self.have_keys.is_some() && (! self.bh.is_empty() || self.pending.len() > self.threshold) { t!(" No duplicates, merging pending into bh"); self.bh.extend(self.pending.drain(..)); self.is_tidy = true; return; } if self.have_keys.is_none() { t!(" Have duplicates (moving bh to pending)."); if ! self.bh.is_empty() { let bh = std::mem::replace(&mut self.bh, BinaryHeap::new()); self.pending.append(&mut bh.into_sorted_vec()); } } // We need to dedup by key, not value. But pending needs // to be sorted by value. Since pending is probably // nearly sorted, we sort the keys in a separate vector. // Assume that the values are nearly sorted. let mut keys: Vec<(&K, usize)> = self.pending.iter().enumerate().map(|(i, e)| { (&e.key, i) }) .collect(); // Sort by the keys. keys.sort_by_key(|a| a.0); // Now dedup pending. For a given key, we want to keep // the maximum value. keys.dedup_by(|a, b| { if a.0 == b.0 { // a will be remove. Store the larger value in b. if self.pending[a.1].value > self.pending[b.1].value { b.1 = a.1 } true } else { false } }); if keys.len() != self.pending.len() { // We deduped something. let mut retain = vec![ false; self.pending.len() ]; for (_, i) in keys.into_iter() { retain[i] = true; } let mut i = 0; self.pending.retain(|_| (retain[i], i += 1).0); } self.pending.sort_by(|a, b| { a.value.cmp(&b.value) // Make it deterministic by also considering keys. We // want the minimal key to be returned first. Since // we return the maximum, negate the comparison. .then(a.key.cmp(&b.key).reverse()) }); self.have_keys = Some(HashSet::from_iter( self.pending.iter().map(|e| e.key.clone()))); self.is_tidy = true; t!("pending (post):\n{}", self.pending.iter().enumerate().map(|(i, e)| { format!(" {}. {:?}: {:?}", i, e.key, e.value) }) .collect::>() .join("\n")); } pub fn push(&mut self, key: K, value: V) { tracer!(TRACE, "PriorityQueue::push"); t!("<{:?}, {:?}>", key, value); if ! self.bh.is_empty() || self.pending.len() > 0 { // Have already have at least one element. We're adding // another. It's probably out of order; it could be a // duplicate. self.is_tidy = false; // Note that this key is in the queue. if let Some(ref mut have_keys) = self.have_keys { if have_keys.replace(key.clone()).is_some() { // DUP! t!("DUP!"); self.have_keys = None; } } } else { // bh and pending are empty. assert!(self.have_keys.as_ref().expect("some").is_empty()); self.is_tidy = true; self.have_keys = Some(HashSet::from_iter(std::iter::once(key.clone()))); } self.pending.push(Element { key, value }); } pub fn pop(&mut self) -> Option<(K, V)> { tracer!(TRACE, "PriorityQueue::pop"); self.tidy(); if let Some((key, value)) = self.pending.pop() .or_else(|| self.bh.pop()) .map(|e| (e.key, e.value)) { t!(" => <{:?}, {:?}>", key, value); if let Some(ref mut have_keys) = self.have_keys { let was_present = have_keys.remove(&key); assert!(was_present); } else if self.bh.is_empty() && self.pending.len() == 1 { // We don't have any elements left; we clearly don't // have any duplicates. self.have_keys = Some(HashSet::new()); } Some((key, value)) } else { t!(" => None"); None } } } #[cfg(test)] mod tests { use super::*; use quickcheck::quickcheck; const THRESHOLDS: &[usize] = &[ 1, 4, 16, 32 ]; #[test] fn simple() { for &t in THRESHOLDS.iter() { let mut pq: PriorityQueue = PriorityQueue::with_threshold(t); pq.push(0, 0); pq.push(1, 1); pq.push(2, 2); pq.push(3, 3); pq.push(4, 4); pq.push(5, 5); assert_eq!(pq.pop(), Some((5, 5))); assert_eq!(pq.pop(), Some((4, 4))); assert_eq!(pq.pop(), Some((3, 3))); assert_eq!(pq.pop(), Some((2, 2))); assert_eq!(pq.pop(), Some((1, 1))); assert_eq!(pq.pop(), Some((0, 0))); assert_eq!(pq.pop(), None); assert_eq!(pq.pop(), None); let mut pq: PriorityQueue = PriorityQueue::with_threshold(t); pq.push(0, 0); pq.push(1, -1); pq.push(2, -2); pq.push(3, -3); pq.push(4, -4); pq.push(5, -5); assert_eq!(pq.pop(), Some((0, 0))); assert_eq!(pq.pop(), Some((1, -1))); assert_eq!(pq.pop(), Some((2, -2))); assert_eq!(pq.pop(), Some((3, -3))); assert_eq!(pq.pop(), Some((4, -4))); assert_eq!(pq.pop(), Some((5, -5))); assert_eq!(pq.pop(), None); assert_eq!(pq.pop(), None); let mut pq: PriorityQueue = PriorityQueue::with_threshold(t); pq.push(0, 0); pq.push(1, 1); pq.push(5, 5); pq.push(2, 2); pq.push(4, 4); pq.push(3, 3); assert_eq!(pq.pop(), Some((5, 5))); assert_eq!(pq.pop(), Some((4, 4))); assert_eq!(pq.pop(), Some((3, 3))); assert_eq!(pq.pop(), Some((2, 2))); assert_eq!(pq.pop(), Some((1, 1))); assert_eq!(pq.pop(), Some((0, 0))); assert_eq!(pq.pop(), None); assert_eq!(pq.pop(), None); let mut pq: PriorityQueue = PriorityQueue::with_threshold(t); assert_eq!(pq.pop(), None); pq.push(0, 0); pq.push(0, 0); assert_eq!(pq.pop(), Some((0, 0))); assert_eq!(pq.pop(), None); let mut pq: PriorityQueue = PriorityQueue::with_threshold(t); assert_eq!(pq.pop(), None); pq.push(0, 0); pq.push(0, 0); assert_eq!(pq.pop(), Some((0, 0))); pq.push(0, 0); assert_eq!(pq.pop(), Some((0, 0))); assert_eq!(pq.pop(), None); } } #[test] fn duplicates() { let mut pq: PriorityQueue = PriorityQueue::new(); // Push different keys with the same value. for i in 0..20 { pq.push(i, 0); } // Push the same keys with their own value. This should // overwrite the old keys. for i in 0..20 { pq.push(i, i); } // Push different keys with the same value. for i in 0..20 { pq.push(i, 0); } for i in (0..20).rev() { assert_eq!(pq.pop(), Some((i, i))); } assert_eq!(pq.pop(), None); assert_eq!(pq.pop(), None); } #[test] fn push_pop() { let mut pq: PriorityQueue = PriorityQueue::new(); // Push different keys with the same value. for i in 0..10 { pq.push(i, 0); } // Push the same keys with their own value. This should // overwrite the old keys. for i in (0..10).rev() { pq.push(i, i); assert_eq!(pq.pop(), Some((i, i))); } assert_eq!(pq.pop(), None); assert_eq!(pq.pop(), None); } // Use a u8 so we have a change of a few duplicates. fn pq(e: Vec<(u8, u8)>, threshold: usize) -> bool { tracer!(TRACE, "pq"); t!("\n\nGot {} elements; threshold: {}", e.len(), threshold); t!("elements: {:?}", e); let mut expected = e.clone(); // Sort by keys. expected.sort_by(|a, b| { a.0.cmp(&b.0) }); // Dedup keys. expected.dedup_by(|a, b| { if a.0 == b.0 { if a.1 > b.1 { b.1 = a.1; } true } else { false } }); // Sort by value (largest first) then by key. expected.sort_by(|a, b| { a.1.cmp(&b.1).reverse() .then(a.0.cmp(&b.0)) }); let mut pq: PriorityQueue = PriorityQueue::with_threshold(threshold); // Add everything to the priority queue. Every third // push, do a pop. Then add those again in the next // round. let mut popped = e.clone(); for _i in 0..5 { let topush = popped; popped = Vec::new(); for (j, (k, v)) in topush.iter().enumerate() { pq.push(*k, *v); if j % 3 == 1 || j % 7 == 1 { // Pop one. let (k, v) = pq.pop().unwrap(); assert!(e.contains(&(k, v))); popped.push((k, v)); } } } for (k, v) in popped.into_iter() { pq.push(k, v); } let mut got = Vec::new(); while let Some((k, v)) = pq.pop() { got.push((k, v)); } t!(" e: {:?}", e); t!("expected: {:?}", expected); t!(" got: {:?}", got); if got == expected { true } else { t!("BAD"); false } } quickcheck! { fn pq1(e: Vec<(u8, u8)>) -> bool { pq(e, 1) } } quickcheck! { fn pq4(e: Vec<(u8, u8)>) -> bool { pq(e, 4) } } quickcheck! { fn pq16(e: Vec<(u8, u8)>) -> bool { pq(e, 16) } } quickcheck! { fn pq64(e: Vec<(u8, u8)>) -> bool { pq(e, 64) } } #[test] fn extra() { pq([(75, 0), (75, 0)].to_vec(), 1); } } sequoia-wot-0.11.0/src/revocation.rs000064400000000000000000000122261046102023000154710ustar 00000000000000use std::cmp; use std::time; use sequoia_openpgp as openpgp; use openpgp::types::RevocationStatus as OpenPgpRevocationStatus; use openpgp::packet::Signature; use openpgp::types::ReasonForRevocation; use crate::Result; use crate::Error; /// A summary type for OpenPGP's RevocationStatus. /// /// This type is a summary of OpenPGP's [`RevocationStatus`] type that /// holds the information that is relevant to web of trust /// calculations. /// /// [`RevocationStatus`]: https://docs.rs/sequoia-openpgp/latest/sequoia_openpgp/types/enum.RevocationStatus.html /// /// `Soft` and `Hard` refer to the two different types of revocations. /// This mapping is according to /// [`ReasonForRevocation::revocation_type`]. The `Soft` variant /// includes the revocation's creation time. Note: a revocation's /// expiration time is ignored. /// /// [`ReasonForRevocation::revocation_type`]: https://docs.rs/sequoia-openpgp/latest/sequoia_openpgp/types/enum.ReasonForRevocation.html#method.revocation_type /// /// This type implements `PartialEq` in the following way: the /// stronger a revocation is, the later it sorts. Thus, /// `RevocationStatus::NotAsFarAsWeKnow` sorts first and /// `RevocationStatus::Hard` sorts last. Two `RevocationStatus::Soft` /// are ordered by the reverse of their creation time. Thus, for `t1 /// < t2`, `Soft(t1) > Soft(t2)`. This is what we want, since /// `Soft(t1)` invalidates at least as much as `Soft(t2)`. A /// consequence of this is that it is possible to use /// [`std::cmp::max`] to find the most restrictive revocation. /// /// This type also implements `Default` (it returns /// `RevocationStatus::NotAsFarAsWeKnow`), `From<[RevocationStatus]>` /// and `TryFrom<[Signature]>`. #[derive(Debug, Clone, Ord, PartialEq, Eq)] pub enum RevocationStatus { NotAsFarAsWeKnow, Soft(time::SystemTime), Hard, } impl RevocationStatus { /// Returns whether the revocation is active as of the reference /// time. /// /// Returns false if this is `RevocationStatus::NotAsFarAsWeKnow`. pub fn in_effect(&self, t: time::SystemTime) -> bool { match self { RevocationStatus::NotAsFarAsWeKnow => false, RevocationStatus::Soft(rev_t) => t >= *rev_t, RevocationStatus::Hard => true, } } } impl Default for RevocationStatus { fn default() -> Self { RevocationStatus::NotAsFarAsWeKnow } } impl PartialOrd for RevocationStatus { /// Order so that strong revocations come later. This means that a /// soft revocation with an earlier time sorts after a soft /// revocation with a later time. fn partial_cmp(&self, other: &Self) -> Option { use cmp::Ordering::*; use RevocationStatus::*; Some(match (self, other) { (NotAsFarAsWeKnow, NotAsFarAsWeKnow) => Equal, (NotAsFarAsWeKnow, Soft(_)) => Less, (NotAsFarAsWeKnow, Hard) => Less, (Soft(_), NotAsFarAsWeKnow) => Greater, (Soft(t1), Soft(t2)) => t1.cmp(t2).reverse(), (Soft(_), Hard) => Less, (Hard, NotAsFarAsWeKnow) => Greater, (Hard, Soft(_)) => Greater, (Hard, Hard) => Equal, }) } } impl<'a> From<&OpenPgpRevocationStatus<'a>> for RevocationStatus { fn from(rs: &OpenPgpRevocationStatus<'a>) -> Self { match rs { OpenPgpRevocationStatus::Revoked(sigs) => { sigs.into_iter() .map(|sig| { RevocationStatus::try_from(*sig).expect("revocation") }) .max() .expect("revoked, but no revocation certificates") } OpenPgpRevocationStatus::CouldBe(_) => { RevocationStatus::NotAsFarAsWeKnow } OpenPgpRevocationStatus::NotAsFarAsWeKnow => { RevocationStatus::NotAsFarAsWeKnow } } } } impl<'a> From> for RevocationStatus { fn from(rs: OpenPgpRevocationStatus<'a>) -> Self { RevocationStatus::from(&rs) } } impl TryFrom<&Signature> for RevocationStatus { type Error = anyhow::Error; fn try_from(sig: &Signature) -> Result { use openpgp::types::SignatureType; use openpgp::types::RevocationType; let rev_type = match sig.typ() { SignatureType::KeyRevocation | SignatureType::SubkeyRevocation | SignatureType::CertificationRevocation => { let r: Option = sig.reason_for_revocation().map(|(r, _msg)| r); match r { None => RevocationType::Hard, Some(reason) => reason.revocation_type(), } } // Not a revocation. _ => return Err(Error::NotARevocationCertificate.into()), }; let rs = match rev_type { RevocationType::Hard => RevocationStatus::Hard, RevocationType::Soft => RevocationStatus::Soft( sig.signature_creation_time() .unwrap_or(time::UNIX_EPOCH)), }; Ok(rs) } } sequoia-wot-0.11.0/src/sq-wot.rs000064400000000000000000000750651046102023000145640ustar 00000000000000#[macro_use] mod log; use std::collections::HashMap; use std::collections::hash_map::Entry; use std::time::SystemTime; use anyhow::Context; use chrono::NaiveTime; use chrono::DateTime; use chrono::Utc; use clap::Parser; use sequoia_openpgp as openpgp; use openpgp::cert::raw::RawCert; use openpgp::cert::raw::RawCertParser; use openpgp::KeyID; use openpgp::Fingerprint; use openpgp::KeyHandle; use openpgp::Result; use openpgp::packet::UserID; use openpgp::parse::Parse; use openpgp::policy::Policy; use openpgp::policy::StandardPolicy; use sequoia_policy_config::ConfiguredStandardPolicy; use sequoia_cert_store as cert_store; use cert_store::AccessMode; use cert_store::store::KeyServer; use cert_store::store::StatusListener; use cert_store::store::StatusUpdate; use cert_store::store::StoreError; use sequoia_wot as wot; use wot::store::Backend; use wot::store::CertStore; use wot::store::Store; use wot::store::StorePlusBackend; use crate::output::OutputType; mod cli; mod gpg; mod output; const TRACE: bool = false; /// Parses the given string depicting a ISO 8601 timestamp. /// /// Note: this is copied from sq/src/sq.rs. If you change something /// here, also change it there. fn parse_iso8601(s: &str, pad_date_with: NaiveTime) -> Result> { // If you modify this function this function, synchronize the // changes with the copy in sqv.rs! for f in &[ "%Y-%m-%dT%H:%M:%S%#z", "%Y-%m-%dT%H:%M:%S", "%Y-%m-%dT%H:%M%#z", "%Y-%m-%dT%H:%M", "%Y-%m-%dT%H%#z", "%Y-%m-%dT%H", "%Y%m%dT%H%M%S%#z", "%Y%m%dT%H%M%S", "%Y%m%dT%H%M%#z", "%Y%m%dT%H%M", "%Y%m%dT%H%#z", "%Y%m%dT%H", ] { if f.ends_with("%#z") { if let Ok(d) = DateTime::parse_from_str(s, *f) { return Ok(d.into()); } } else if let Ok(d) = chrono::NaiveDateTime::parse_from_str(s, *f) { return Ok(DateTime::from_utc(d, Utc)); } } for f in &[ "%Y-%m-%d", "%Y-%m", "%Y-%j", "%Y%m%d", "%Y%m", "%Y%j", "%Y", ] { if let Ok(d) = chrono::NaiveDate::parse_from_str(s, *f) { return Ok(DateTime::from_utc(d.and_time(pad_date_with), Utc)); } } Err(anyhow::anyhow!("Malformed ISO8601 timestamp: {}", s)) } // Sometimes the same error cascades, e.g.: // // ``` // $ sq-wot --time 20230110T0406 --keyring sha1.pgp path B5FA089BA76FE3E17DC11660960E53286738F94C 231BC4AB9D8CAB86D1622CE02C0CE554998EECDB FABA8485B2D4D5BF1582AA963A8115E774FA9852 "" // [ ] FABA8485B2D4D5BF1582AA963A8115E774FA9852 : not authenticated (0%) // ◯ B5FA089BA76FE3E17DC11660960E53286738F94C ("") // │ No adequate certification found. // │ No binding signature at time 2023-01-10T04:06:00Z // │ No binding signature at time 2023-01-10T04:06:00Z // │ No binding signature at time 2023-01-10T04:06:00Z // ... // ``` // // Compress these. fn error_chain(err: &anyhow::Error) -> Vec { let mut errs = std::iter::once(err.to_string()) .chain(err.chain().map(|source| source.to_string())) .collect::>(); errs.dedup(); errs } fn trust_amount(cli: &cli::Cli) -> Result { let amount = if let Some(v) = cli.trust_amount { v as usize } else if cli.full { wot::FULLY_TRUSTED } else if cli.partial { wot::PARTIALLY_TRUSTED } else if cli.double { 2 * wot::FULLY_TRUSTED } else { if cli.certification_network { // Look for multiple paths. Specifically, try to find 10 // paths. 10 * wot::FULLY_TRUSTED } else { wot::FULLY_TRUSTED } }; Ok(amount) } // Returns whether there is a matching self-signed User ID. fn have_self_signed_userid(cert: &wot::CertSynopsis, pattern: &UserID, email: bool) -> bool { if email { if let Ok(Some(pattern)) = pattern.email_normalized() { // userid contains a valid email address. cert.userids().any(|u| { if let Ok(Some(userid)) = u.userid().email_normalized() { pattern == userid } else { false } }) } else { false } } else { cert.userids().any(|u| u.userid() == pattern) } } /// Authenticate bindings defined by a Query on a Network fn authenticate( cli: &cli::Cli, q: &wot::Query<'_, S>, gossip: bool, userid: Option<&UserID>, certificate: Option<&KeyHandle>, ) -> Result<()> where S: wot::store::Store { let required_amount = trust_amount(cli)?; let fingerprint: Option = if let Some(kh) = certificate { Some(match kh { KeyHandle::Fingerprint(fpr) => fpr.clone(), kh @ KeyHandle::KeyID(_) => { let certs = q.network().lookup_synopses(kh)?; if certs.is_empty() { return Err(StoreError::NotFound(kh.clone()).into()); } if certs.len() > 1 { return Err(anyhow::anyhow!( "The Key ID {} is ambiguous. \ It could refer to any of the following \ certificates: {}.", kh, certs.into_iter() .map(|c| c.fingerprint().to_hex()) .collect::>() .join(", "))); } certs[0].fingerprint() } }) } else { None }; let email = cli.subcommand.email(); let mut bindings = Vec::new(); if matches!(userid, Some(_)) && email { let userid = userid.expect("required"); // First, we check that the supplied User ID is a bare // email address. let email = String::from_utf8(userid.value().to_vec()) .context("email address must be valid UTF-8")?; let userid_check = UserID::from(format!("<{}>", email)); if let Ok(Some(email_check)) = userid_check.email2() { if email != email_check { println!("{:?} does not appear to be an email address", email); std::process::exit(1); } } else { println!("{:?} does not appear to be an email address", email); std::process::exit(1); } // Now, iterate over all of the certifications of the target, // and select the bindings where the User ID matches the email // address. bindings = if let Some(fingerprint) = fingerprint.as_ref() { q.network().certified_userids_of(fingerprint) .into_iter() .map(|userid| (fingerprint.clone(), userid)) .collect::>() } else { q.network().lookup_synopses_by_email(&email) }; let email_normalized = userid_check.email_normalized() .expect("checked").expect("checked"); bindings = bindings.into_iter() .filter_map(|(fingerprint, userid_other)| { if let Ok(Some(email_other_normalized)) = userid_other.email_normalized() { if email_normalized == email_other_normalized { Some((fingerprint, userid_other.clone())) } else { None } } else { None } }).collect(); } else if let Some(fingerprint) = fingerprint { if let Some(userid) = userid { bindings.push((fingerprint, userid.clone())); } else { // Fingerprint, no User ID. bindings = q.network().certified_userids_of(&fingerprint) .into_iter() .map(|userid| (fingerprint.clone(), userid)) .collect(); } } else if let Some(userid) = userid { // The caller did not specify a certificate. Find all // bindings with the User ID. bindings = q.network().lookup_synopses_by_userid(userid.clone()) .into_iter() .map(|fpr| (fpr, userid.clone())) .collect(); } else { // No User ID, no Fingerprint. // List everything. bindings = q.network().certified_userids(); if let cli::Subcommand::List { pattern: Some(pattern), .. } = &cli.subcommand { // Or rather, just User IDs that match the pattern. let pattern = pattern.to_lowercase(); bindings = bindings .into_iter() .filter(|(_fingerprint, userid)| { if email { // Compare with the normalized email address, // and the raw email address. if let Ok(Some(email)) = userid.email_normalized() { // A normalized email is already lowercase. if email.contains(&pattern) { return true; } } if let Ok(Some(email)) = userid.email2() { if email.to_lowercase().contains(&pattern) { return true; } } return false; } else if let Ok(userid) = std::str::from_utf8(userid.value()) { userid.to_lowercase().contains(&pattern) } else { // Ignore User IDs with invalid UTF-8. false } }) .collect(); } }; // There may be multiple certifications of the same // User ID. Dedup. bindings.sort(); bindings.dedup(); let mut authenticated = false; let mut lint_input = true; let mut output: Box = match cli.format { #[cfg(feature = "dot-writer")] cli::OutputFormat::Dot => { Box::new(output::DotOutputNetwork::new( required_amount, q.roots(), gossip, cli.certification_network, )) as Box } cli::OutputFormat::HumanReadable => { Box::new( output::HumanReadableOutputNetwork::new(required_amount, gossip) ) } }; for (fingerprint, userid) in bindings.iter() { let mut aggregated_amount = 0; let paths = if gossip { // Gossip. let paths = q.gossip( fingerprint.clone(), userid.clone()); // Sort so the shortest paths come first. let mut paths: Vec<_> = paths .into_values() .map(|(path, _amount)| path) .collect(); paths.sort_by_key(|path| path.len()); // This means: exit code is 0, which is what we want when // we've found at least one path. if paths.len() > 0 { authenticated = true; lint_input = false; } paths.into_iter() .map(|p| (p, 0)) .collect::>() } else { let paths = q.authenticate( userid.clone(), fingerprint.clone(), required_amount); aggregated_amount = paths.amount(); if aggregated_amount == 0 { continue; } lint_input = false; if aggregated_amount >= required_amount { authenticated = true; } paths.into_iter().collect::>() }; output.add_paths(paths, fingerprint, userid, aggregated_amount)?; } output.finalize()?; // We didn't show anything. Try to figure out what was wrong. if lint_input { // See if the target certificate exists. if let Some(kh) = certificate { match q.network().lookup_synopses(kh) { Err(err) => { eprintln!("Looking up target certificate ({}): {}", kh, err); } Ok(certs) => { for cert in certs.iter() { let fpr = cert.fingerprint(); let kh = if certs.len() == 1 { KeyHandle::KeyID(KeyID::from(&fpr)) } else { KeyHandle::Fingerprint(fpr.clone()) }; // Check if the certificate was revoke. use wot::RevocationStatus; match cert.revocation_status() { RevocationStatus::Soft(_) | RevocationStatus::Hard => { eprintln!("Warning: {} is revoked.", kh); } RevocationStatus::NotAsFarAsWeKnow => (), } // Check if the certificate has expired. if let Some(e) = cert.expiration_time() { if e <= q.network().reference_time() { eprintln!("Warning: {} is expired.", kh); } } // See if there is a matching self-signed User ID. if let Some(userid) = userid { if ! have_self_signed_userid(cert, userid, email) { eprintln!("Warning: {} is not a \ self-signed User ID for {}.", userid, kh); } } // See if there are any certifications made on // this certificate. if let Ok(cs) = q.network() .certifications_of(&fpr, 0.into()) { if cs.iter().all(|cs| { cs.certifications() .all(|(_userid, certifications)| { certifications.is_empty() }) }) { eprintln!("Warning: {} has no valid \ certifications.", kh); } } } } } } // Perhaps the caller specified an email address, but forgot // to add --email. If --email is not present and the // specified User ID looks like an email, try and be helpful. if ! email { if let Some(userid) = userid { if let Ok(email) = std::str::from_utf8(userid.value()) { let userid_check = UserID::from(format!("<{}>", email)); if let Ok(Some(email_check)) = userid_check.email2() { if email == email_check { eprintln!("WARNING: {} appears to be a bare \ email address. Perhaps you forgot \ to specify --email.", email); } } } } } // See if the trust roots exist. if ! gossip { if q.roots().iter().all(|r| { let fpr = r.fingerprint(); if let Err(err) = q.network().lookup_synopsis_by_fpr(&fpr) { eprintln!("Looking up trust root ({}): {}.", fpr, err); true } else { false } }) { eprintln!("No trust roots found."); } } } if ! authenticated { if ! lint_input { eprintln!("Could not authenticate any paths."); } else { eprintln!("No paths found."); } std::process::exit(1); } Ok(()) } // For `sq-wot path`. fn check_path<'a: 'b, 'b, S>(cli: &cli::Cli, q: &wot::Query<'b, S>, policy: &dyn Policy) -> Result<()> where S: wot::store::Store + wot::store::Backend<'a> { tracer!(TRACE, "check_path"); let required_amount = trust_amount(cli)?; let (khs, userid) = if let cli::Subcommand::Path { path, .. } = &cli.subcommand { (path.certs()?, path.userid()?) } else { unreachable!("checked"); }; assert!(khs.len() > 0, "guaranteed by clap"); let r = q.lint_path(&khs, &userid, required_amount, policy); let target_kh = khs.last().expect("have one"); match r { Ok(path) => { match cli.format { #[cfg(feature = "dot-writer")] cli::OutputFormat::Dot => { eprintln!( "DOT output for {} path is not yet implemented!", env!("CARGO_BIN_NAME"), ); } cli::OutputFormat::HumanReadable => { crate::output::print_path_header( target_kh, &userid, path.amount(), required_amount, ); crate::output::print_path(&path, &userid, " "); } }; if path.amount() >= required_amount { std::process::exit(0); } } Err(err) => { match cli.format { #[cfg(feature = "dot-writer")] cli::OutputFormat::Dot => { eprintln!( "DOT output for {} path is not yet implemented!", env!("CARGO_BIN_NAME"), ); } cli::OutputFormat::HumanReadable => { crate::output::print_path_header( target_kh, &userid, 0, required_amount, ); crate::output::print_path_error(err); } }; } } std::process::exit(1); } struct KeyServerUpdate { } impl StatusListener for KeyServerUpdate { fn update(&self, update: &StatusUpdate) { eprintln!("{}", update); } } fn main() -> Result<()> { tracer!(TRACE, "sq-wot"); let cli = cli::Cli::parse(); let mut policy = StandardPolicy::new(); let known_notations: Vec<&str> = cli.known_notation.iter().map(|s| &s[..]).collect(); policy.good_critical_notations(&known_notations[..]); let mut policy = ConfiguredStandardPolicy::from_policy(policy); policy.parse_default_config()?; let policy = &policy.build(); // We check whether a trust root is specified here instead of // using Clap::ArgGroup, as we are able to provide the user with // more helpful feedback when that is not the case. if !(cli.trust_root.is_some() || cli.gossip || cli.gpg_ownertrust || cli.gpg // No trust root is needed for path. || matches!(cli.subcommand, cli::Subcommand::Path { .. })) { eprintln!("\ No trust roots specified. Specify one or more trust roots using `--trust-root` or use `--gpg-ownertrust` or `--gpg` to read the trust roots from GnuPG, or use `--gossip` to discover what others think."); std::process::exit(1); } // Likewise for keyrings. if !(cli.keyring.is_some() || cli.gpg_keyring || cli.gpg || cli.network) { eprintln!("\ No keyrings specified. Specify one or more keyring using `--keyring` or use `--gpg-keyring` or `--gpg` to read GnuPG's keyring, or use `--network` to lookup certificates on key servers. Note: `--network` may be used alone or combined with the other options."); std::process::exit(1); } let mut trust_roots: Vec<(KeyHandle, usize)> = Vec::new(); // If --gossip is present, ignore any trust roots. if ! cli.gossip { if let Some(ref roots) = cli.trust_root { for root in roots.into_iter().cloned() { trust_roots.push((root, wot::FULLY_TRUSTED)); } } } let mut possible_roots: Vec = Vec::new(); if ! cli.gossip && (cli.gpg_ownertrust || cli.gpg) { let ownertrust = gpg::export_ownertrust()?; for (fpr, ownertrust) in ownertrust { match ownertrust { gpg::OwnerTrust::Ultimate => { trust_roots.push((fpr.into(), wot::FULLY_TRUSTED)); }, gpg::OwnerTrust::Fully => { possible_roots.push( wot::Root::new(fpr, wot::FULLY_TRUSTED)); }, gpg::OwnerTrust::Marginal => { possible_roots.push( wot::Root::new(fpr, wot::PARTIALLY_TRUSTED)); }, _ => (), } } } let mut certs: Vec = Vec::new(); if let Some(keyrings) = cli.keyring.as_ref() { for filename in keyrings { let some_certs = RawCertParser::from_file(filename) .context(format!("Parsing {:?}", filename))? .into_iter() .filter_map(|cert| { match cert { Ok(cert) => Some(cert), Err(err) => { eprintln!("Warning: while parsing {:?}: {}", filename, err); None } } }); certs.extend(some_certs); } } let keyring; if cli.gpg_keyring || cli.gpg { keyring = gpg::export()?; let some_certs = RawCertParser::from_bytes(&keyring[..])? .into_iter() .filter_map(|cert| { match cert { Ok(cert) => Some(cert), Err(err) => { eprintln!("Warning: while parsing gpg's keyring: {}", err); None } } }); certs.extend(some_certs); } // Map any Key IDs to Fingerprints. let mut keyid_index: Option>> = None; let mut trust_roots: Vec = trust_roots .into_iter() .filter_map(|(kh, amount)| { match kh { KeyHandle::Fingerprint(fpr) => { Some(wot::Root::new(fpr, amount)) }, KeyHandle::KeyID(keyid) => { let i = match keyid_index.as_ref() { Some(i) => i, None => { // Initialize the hash map lazily. let mut i: HashMap> = HashMap::new(); for c in certs.iter() { match i.entry(c.keyid()) { e @ Entry::Occupied(_) => { e.and_modify(|e| { e.push(c.fingerprint()) }); } e @ Entry::Vacant(_) => { e.or_insert( vec![ c.fingerprint() ]); } } } keyid_index = Some(i); keyid_index.as_ref().unwrap() } }; if let Some(fprs) = i.get(&keyid) { if fprs.len() > 1 { let fprs: Vec = fprs.iter().map(|f| f.to_hex()).collect(); eprintln!("\ Key ID ({}) matches multiple certificates: {}", keyid, fprs.join(", ")); std::process::exit(1); } Some(wot::Root::new(fprs[0].clone(), amount)) } else { t!("Ignoring root {}: not in network.", keyid); None } } } }) .collect(); let reference_time = if let Some(ref t) = cli.time { let time = SystemTime::from( crate::parse_iso8601( &t, chrono::NaiveTime::from_hms_opt(0, 0, 0).expect("valid")) .context(format!("Parsing --time {}", t))?); time } else { SystemTime::now() }; let backend = cert_store::store::Certs::from_certs(certs.into_iter())?; let store: Box = if cli.network { // This opens the default cert-d in read/write mode, which is // what we want: we want keyserver lookups to be cached // locally. let mut cert_store = cert_store::CertStore::new()?; // Add the user data as a read-only overlay. cert_store.add_backend(Box::new(backend), AccessMode::Always); // And configure the key server. let mut ks = KeyServer::new(&cli.keyserver)?; ks.add_listener(Box::new(KeyServerUpdate { })); cert_store.add_keyserver_backend(ks)?; // Turn it into a WoT-compatible CertStore. let cert_store = CertStore::from_store( cert_store, policy, reference_time); Box::new(cert_store) } else { let cert_store = CertStore::from_store( backend, policy, reference_time); Box::new(cert_store) }; // Precompute as much as possible if we do a list. Otherwise, we // compute on demand. let precompute = matches!(&cli.subcommand, cli::Subcommand::List { .. }); if precompute { store.precompute(); } let n = wot::Network::new(&store)?; let roots = wot::Roots::new(trust_roots.iter().cloned()); let mut q = wot::QueryBuilder::new(&n); q.roots(roots); if cli.certification_network { q.certification_network(); } let mut q = q.build(); let mut found_one = true; while found_one && ! possible_roots.is_empty() { // For GnuPG to consider a non-ultimately trusted root as // valid, there must be a path from an ultimately trusted root // to the non-ultimately trusted root. If this is the case, // add those roots. t!("Checking if any of {} are reachable from the current {} roots", possible_roots.iter() .fold(String::new(), |mut s, r| { if ! s.is_empty() { s.push_str(", "); } s.push_str(&r.fingerprint().to_hex()); s }), trust_roots.len()); found_one = false; let pr = possible_roots; possible_roots = Vec::new(); 'root: for other_root in pr.into_iter() { let cert = match n.lookup_synopsis_by_fpr(other_root.fingerprint()) { Err(_err) => { t!("Ignoring root {}: not in network.", other_root.fingerprint()); continue; } Ok(cert) => cert, }; for u in cert.userids() { if u.revocation_status().in_effect(reference_time) { t!("Ignoring root {}'s User ID {:?}: revoked.", other_root.fingerprint(), String::from_utf8_lossy(u.value())); continue; } let authenticated_amount = q.authenticate( u.userid(), other_root.fingerprint(), wot::FULLY_TRUSTED) .amount(); if authenticated_amount >= wot::FULLY_TRUSTED { // Authenticated! We'll keep it. t!("Non-ultimately trusted root <{}, {}> reachable, \ keeping at {}", other_root.fingerprint(), String::from_utf8_lossy(u.userid().value()), other_root.amount()); found_one = true; trust_roots.push(other_root); let roots = wot::Roots::new(trust_roots.clone()); q = wot::Query::new(&n, roots); continue 'root; } else { t!("Non-ultimately trusted binding <{}, {}> \ NOT fully trusted (amount: {})", other_root.fingerprint(), String::from_utf8_lossy(u.userid().value()), authenticated_amount); } } t!("Non-ultimately trusted root {} NOT fully trusted. Ignoring.", other_root.fingerprint()); possible_roots.push(other_root); } } match &cli.subcommand { cli::Subcommand::Authenticate { cert, userid, .. } => { // Authenticate a given binding. authenticate(&cli, &q, cli.gossip, Some(userid), Some(cert))?; } cli::Subcommand::Lookup { userid, .. } => { // Find all authenticated bindings for a given // User ID, list the certificates. authenticate(&cli, &q, cli.gossip, Some(userid), None)?; } cli::Subcommand::Identify { cert, .. } => { // Find and list all authenticated bindings for a given // certificate. authenticate(&cli, &q, cli.gossip, None, Some(cert))?; } cli::Subcommand::List { .. } => { // List all authenticated bindings. authenticate(&cli, &q, cli.gossip, None, None)?; } cli::Subcommand::Path { .. } => { check_path(&cli, &q, policy)?; } } Ok(()) } sequoia-wot-0.11.0/src/store/cert_store.rs000064400000000000000000000671541046102023000166370ustar 00000000000000use std::borrow::Borrow; use std::collections::HashMap; use std::collections::HashSet; use std::sync::{Arc, Mutex}; use std::time::SystemTime; use sequoia_openpgp as openpgp; use openpgp::cert::prelude::*; use openpgp::cert::raw::RawCert; use openpgp::Fingerprint; use openpgp::KeyHandle; use openpgp::packet::UserID; use openpgp::policy::Policy; use openpgp::Result; use sequoia_cert_store as cert_store; use cert_store::LazyCert; use cert_store::store::MergeCerts; use cert_store::store::Store as _; use cert_store::store::StoreError; use cert_store::store::UserIDQueryParams; use crate::Depth; use crate::CertificationSet; use crate::CertSynopsis; use crate::store::Backend; use crate::store::Store; const TRACE: bool = false; // Reimport crate as wot so that the links in the doc comments work. #[allow(unused)] use crate as wot; /// A wrapper type for objects implementing /// `cert_store::store::Store`. /// /// This data type is a wrapper type for objects that implement /// [`cert_store::store::Store`]. It implements /// [`wot::store::Backend`] in terms of the `cert_store::store::Store` /// interface, and exposes the underlying object via `Deref` and /// `DerefMut`. /// /// This wrapper is useful for constructing a [`Network`] from an /// object that implements [`cert_store::store::Store`], like /// [`cert_store::CertStore`]. /// /// Note: because the reference time is fixed, and you usually want to /// use the current time as the reference time, you do not want to /// hold onto this object for a long time. As such, in long-running /// programs, you should create this object on demand. Happily, /// creating a `CertStore` is inexpensive. On the other hand, /// creating a new `CertStore` for each query means that the `redge` /// cache cannot be used. As such, it is best to use a single /// `CertStore` for a single operation, like authenticating some User /// IDs for one or more certificates. /// /// This wrapper caches the results of calls to /// [`wot::store::Backend::redges`], which are typically expensive. /// It includes a multi-threaded implementation of /// [`wot::store::Backend::precompute`], which precomputes /// [`wot::store::Backend::redges`] for all known bindings. /// /// Finally, it includes an implementation of [`wot::store::Store`] in /// terms of the [`cert_store::store::Store`] interface, which is much /// more efficient than the default implementation. /// /// [`Network`]: crate::Network /// /// # Examples /// /// ``` /// use std::sync::Arc; /// /// use sequoia_openpgp as openpgp; /// use openpgp::cert::CertBuilder; /// use openpgp::Fingerprint; /// # use openpgp::Result; /// use openpgp::packet::UserID; /// use openpgp::policy::StandardPolicy; /// /// use sequoia_cert_store as cert_store; /// use cert_store::Store; /// use sequoia_cert_store::StoreUpdate; /// /// use sequoia_wot as wot; /// use wot::Network; /// use wot::Query; /// use wot::Roots; /// /// const P: &StandardPolicy = &StandardPolicy::new(); /// /// # fn main() -> Result<()> { /// let (alice, _) = CertBuilder::general_purpose(None, Some(")")) /// .generate()?; /// let (bob, _) = CertBuilder::general_purpose(None, Some("")) /// .generate()?; /// /// let mut cert_store = cert_store::CertStore::empty(); /// cert_store.update(Arc::new(alice.clone().into()))?; /// cert_store.update(Arc::new(bob.clone().into()))?; /// /// // Build a WoT network. /// let trust_roots = Roots::from(&[ /// (alice.fingerprint().into(), wot::FULLY_TRUSTED), /// ]); /// let wot_data = wot::store::CertStore::from_store(&cert_store, P, None); /// let network = Network::new(&wot_data)?; /// let q = Query::new(&network, trust_roots.clone()); /// /// // Try and authenticate Bob. /// let paths = q.authenticate( /// UserID::from(""), /// bob.fingerprint(), /// wot::FULLY_TRUSTED); /// // Alice, our sole trust root, did not certify Bob so this will fail. /// assert_eq!(paths.amount(), 0); /// /// // Since network only has a reference to the cert_store, we don't /// // have to do anything special to get cert_store back. /// assert_eq!(cert_store.fingerprints().count(), 2); /// // And thanks to nll, we can immediately transfer ownership. /// drop(cert_store); /// # Ok(()) } pub struct CertStore<'a: 'ra, 'ra, S> where S: cert_store::store::Store<'a>, { store: S, // Certifications on a certificate. // // Example: // // ``` // 0xA certifies . \ CertificationSet // 0xA certifies . / // 0xB certifies . > CertificationSet // ``` // // The entry for 0xC has two `CertificationSet`s: one for those // made by 0xA and one for those made by 0xB. // // This is a cache, which is derived from the certs, and is update // lazily. redge_cache: Mutex>>, // The policy. This is needed to compute the // certification sets. policy: &'ra dyn Policy, // The reference time. This is needed to compute the // certification sets. reference_time: SystemTime, _a: std::marker::PhantomData<&'a ()>, } impl<'a: 'ra, 'ra, S> CertStore<'a, 'ra, S> where S: cert_store::store::Store<'a>, { /// Returns a new `CertStore` from a cert store. /// /// A wrapper for [`cert_store::store::Store`]s, and implements /// [`store::Backend`] and [`store::Store`] on it. /// /// [`store::Backend`]: crate::store::Backend /// [`store::Store`]: crate::store::Store pub fn from_store(store: S, policy: &'ra dyn Policy, t: T) -> Self where T: Into>, { let t = t.into().unwrap_or_else(SystemTime::now); Self { store, redge_cache: Default::default(), policy, reference_time: t, _a: std::marker::PhantomData, } } /// Returns a reference to the underlying store. pub fn store(&self) -> &S { &self.store } /// Returns a mutable reference to the underlying store. pub fn store_mut(&mut self) -> &mut S { &mut self.store } /// Returns the store. pub fn into_store(self) -> S { self.store } /// Returns the configured policy. pub fn policy(&self) -> &'ra dyn Policy { self.policy } /// Returns the configured reference time. pub fn reference_time(&self) -> SystemTime { self.reference_time.clone() } } impl<'a: 'ra, 'ra, S> std::ops::Deref for CertStore<'a, 'ra, S> where S: cert_store::store::Store<'a>, { type Target = S; fn deref(&self) -> &Self::Target { &self.store } } impl<'a: 'ra, 'ra, S> std::ops::DerefMut for CertStore<'a, 'ra, S> where S: cert_store::store::Store<'a>, { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.store } } impl<'a: 'ra, 'ra> CertStore<'a, 'ra, cert_store::store::Certs<'a>> { /// Returns a new `CertStore` from a slice of bytes. /// /// The bytes are interpreted as an OpenPGP keyring. The data /// may, but need not, be ASCII-armor encoded. pub fn from_bytes(bytes: &'a [u8], policy: &'ra dyn Policy, t: T) -> Result where T: Into>, { tracer!(TRACE, "CertStore::from_bytes"); let store = cert_store::store::Certs::from_bytes(bytes)?; let t = t.into().unwrap_or_else(SystemTime::now); Ok(Self { store, redge_cache: Default::default(), policy, reference_time: t, _a: std::marker::PhantomData, }) } /// Creates a `CertStore` from some `Cert`s. pub fn from_certs(certs: impl IntoIterator, policy: &'ra dyn Policy, t: T) -> Result where T: Into>, { tracer!(TRACE, "CertStore::from_certs"); let store = cert_store::store::Certs::from_certs(certs)?; let t = t.into().unwrap_or_else(SystemTime::now); Ok(Self { store, redge_cache: Default::default(), policy, reference_time: t, _a: std::marker::PhantomData, }) } /// Creates a `CertStore` from `&Cert`s. pub fn from_cert_refs(certs: impl IntoIterator, policy: &'ra dyn Policy, t: T) -> Result where T: Into>, { tracer!(TRACE, "CertStore::from_cert_refs"); let store = cert_store::store::Certs::from_certs( certs.into_iter().map(|c| { let c: &'a Cert = c.into(); LazyCert::from(c) }))?; let t = t.into().unwrap_or_else(SystemTime::now); Ok(Self { store, redge_cache: Default::default(), policy, reference_time: t, _a: std::marker::PhantomData, }) } /// Creates a `CertStore` from `RawCert`s. pub fn from_raw_certs(certs: impl IntoIterator>, policy: &'ra dyn Policy, t: T) -> Result where T: Into> { tracer!(TRACE, "CertStore::from_raw_certs"); let store = cert_store::store::Certs::from_certs(certs)?; let t = t.into().unwrap_or_else(SystemTime::now); Ok(Self { store, redge_cache: Default::default(), policy, reference_time: t, _a: std::marker::PhantomData, }) } } impl<'a: 'ra, 'ra, S> cert_store::Store<'a> for CertStore<'a, 'ra, S> where S: cert_store::store::Store<'a>, { fn lookup_by_cert(&self, kh: &KeyHandle) -> Result>>> { self.store.lookup_by_cert(kh) } fn lookup_by_cert_fpr(&self, fingerprint: &Fingerprint) -> Result>> { self.store.lookup_by_cert_fpr(fingerprint) } fn lookup_by_cert_or_subkey(&self, kh: &KeyHandle) -> Result>>> { self.store.lookup_by_cert_or_subkey(kh) } fn select_userid(&self, query: &UserIDQueryParams, pattern: &str) -> Result>>> { self.store.select_userid(query, pattern) } fn lookup_by_userid(&self, userid: &UserID) -> Result>>> { self.store.lookup_by_userid(userid) } fn grep_userid(&self, pattern: &str) -> Result>>> { self.store.grep_userid(pattern) } fn lookup_by_email(&self, email: &str) -> Result>>> { self.store.lookup_by_email(email) } fn grep_email(&self, pattern: &str) -> Result>>> { self.store.grep_email(pattern) } fn lookup_by_email_domain(&self, domain: &str) -> Result>>> { self.store.lookup_by_email_domain(domain) } fn fingerprints<'b>(&'b self) -> Box + 'b> { self.store.fingerprints() } fn certs<'b>(&'b self) -> Box>> + 'b> where 'a: 'b { self.store.certs() } fn prefetch_all(&self) { self.store.prefetch_all() } fn prefetch_some(&self, certs: &[KeyHandle]) { self.store.prefetch_some(certs) } } impl<'a: 'ra, 'ra, S> cert_store::StoreUpdate<'a> for CertStore<'a, 'ra, S> where S: cert_store::store::Store<'a> + cert_store::store::StoreUpdate<'a>, { fn update_by(&self, cert: Arc>, merge_strategy: &dyn MergeCerts<'a>) -> Result>> { let fingerprint = cert.fingerprint(); let r = self.store.update_by(cert, merge_strategy); // Invalidate the cache. // // We invalidate the cache after writing the certificate to // the store to avoid a race whereby another thread updates // the cache using the old entry. Consider what could happen // if we invalidate the cache before writing the certificate // to the store: // // Thread A Thread B // invalidate X // read X // write X // // Thread B creates a cache entry based on the old data, and // it is never invalidated (or only much later). // // Our approach still has a race between updating the store // and invalidating the cache entry as shown here: // // Thread A Thread B // write X // read X // invalidate X // // Thead B uses the old version of the certificate even though // thread A has already written out a new version. But that // is not a problem in practice, because thread B cannot // distinguish the above from this sequence of events: // // Thread A Thread B // read X // write X // invalidate X // // And this sequence is fine. let mut redge = self.redge_cache.lock().unwrap(); redge.remove(&fingerprint); drop(redge); r } fn update(&self, cert: Arc>) -> Result<()> { let fingerprint = cert.fingerprint(); let r = self.store.update(cert); // Invalidate the cache (see the comment above). let mut redge = self.redge_cache.lock().unwrap(); redge.remove(&fingerprint); drop(redge); r } } impl<'a: 'ra, 'ra, S> Backend<'a> for CertStore<'a, 'ra, S> where S: cert_store::store::Store<'a> + Send + Sync, { /// Prefills the cache. /// /// Prefilling the cache makes sense when you plan to examine most /// nodes and edges in the network. It doesn't make sense if you /// are just authenticating a single or a few bindings. /// /// This function is multi-threaded. /// /// Errors are silently ignored and are propagated when the /// operation in question is executed directly. fn precompute(&self) { tracer!(TRACE, "CertStore::precompute"); t!("prefetching"); // Figure out what certificates we need to work on. let all: HashSet = HashSet::from_iter(self.store.fingerprints()); let done: HashSet = HashSet::from_iter( self.redge_cache.lock().unwrap().keys().cloned()); let todo: Vec<&Fingerprint> = all.difference(&done).collect(); // We could sort `todo` before distributing the work. That // would ensure that any certificates with a lot of work are // done first and all threads will finish at about the same // time. In practice: it's not worth it. use crossbeam::thread; use crossbeam::channel::unbounded as channel; // Avoid an extra level of indentation. let result = thread::scope(|thread_scope| { // The threads. We start them on demand. let threads = if todo.len() < 16 { // The keyring is small, limit the number of threads. 2 } else { // Use at least one and not more than we have cores. num_cpus::get().max(1) }; // A communication channel for sending work to the workers. let (work_tx, work_rx) = channel(); let mut threads_extant = Vec::new(); for fpr in todo.into_iter() { if threads_extant.len() < threads { let tid = threads_extant.len(); t!("Starting thread {} of {}", tid, threads); let mut work = Some(Ok(fpr)); // The thread's state. let work_rx = work_rx.clone(); // Reborrow to get a normal reference, which can be // copied to the threads. let backend = &*self; let policy = self.policy; let reference_time = self.reference_time.clone(); threads_extant.push(thread_scope.spawn(move |_| { let mut results: Vec<(Fingerprint, Vec)> = Vec::new(); loop { match work.take().unwrap_or_else(|| work_rx.recv()) { Err(_) => break, Ok(fpr) => { t!("Thread {} dequeuing {}!", tid, fpr); // Silently ignore errors. This will // be caught later when the caller // looks this one up. let cert = if let Ok(cert) = backend.lookup_by_cert_fpr(fpr) { cert } else { continue; }; match cert.with_policy(policy, reference_time) { Ok(vc) => { results.push(( cert.fingerprint(), backend.redges(vc, 0.into()))) } Err(err) => { t!("{} is not valid under \ the current policy: {}", cert.fingerprint(), err); results.push(( cert.fingerprint(), Vec::new())) } } } } } t!("Thread {} exiting", tid); results })); } else { work_tx.send(fpr).unwrap(); } } // When the threads see this drop, they will exit. drop(work_tx); let redges = threads_extant.into_iter().flat_map(|t| { let redges: Vec<(Fingerprint, Vec)> = t.join().unwrap(); redges }); // Add the results to the cache. self.redge_cache.lock().unwrap().extend(redges.into_iter()); }); // thread scope. // We're just caching results so we can ignore errors. if let Err(err) = result { t!("{:?}", err); } } } impl<'a: 'ra, 'ra, S> CertStore<'a, 'ra, S> where S: cert_store::store::Store<'a> + Send + Sync, { fn certifications_of_uncached(&self, target: F) -> Result> where F: Borrow { let target = target.borrow(); let cert = self.store.lookup_by_cert_fpr(target)?; let redges = self.redges( cert.with_policy(self.policy, self.reference_time)?, 0.into()); Ok(redges) } fn to_synopsis(&self, cert: Arc) -> Option { cert .to_cert() .and_then(|c| { c.with_policy(self.policy, self.reference_time) }) .map(Into::into) .ok() } } impl<'a: 'ra, 'ra, S> Store for CertStore<'a, 'ra, S> where S: cert_store::store::Store<'a> + Send + Sync, { fn reference_time(&self) -> SystemTime { self.reference_time } fn iter_fingerprints<'b>(&'b self) -> Box + 'b> { tracer!(TRACE, "CertStore::iter_fingerprints"); t!(""); self.store.fingerprints() } fn synopses<'b>(&'b self) -> Box + 'b> { let certs = self.store .certs() .filter_map(|c| self.to_synopsis(c)) .collect::>(); Box::new(certs.into_iter()) } fn lookup_synopsis_by_fpr(&self, fingerprint: &Fingerprint) -> Result { let cert = self.store.lookup_by_cert_fpr(fingerprint)?; self.to_synopsis(cert).ok_or_else(|| { StoreError::NotFound(KeyHandle::from(fingerprint.clone())).into() }) } fn lookup_synopses(&self, kh: &KeyHandle) -> Result> { tracer!(TRACE, "CertStore::lookup_synopses"); t!("{}", kh); let certs: Vec<_> = self.store.lookup_by_cert(kh)? .into_iter() .filter_map(|c| self.to_synopsis(c)) .collect(); if certs.is_empty() { Err(StoreError::NotFound(kh.clone()).into()) } else { Ok(certs) } } fn certifications_of(&self, target: &Fingerprint, _min_depth: Depth) -> Result> { tracer!(TRACE, "CertStore::certifications_of"); t!("{}", target); let redge_cache = self.redge_cache.lock().unwrap(); if let Some(redges) = redge_cache.get(target) { t!("Cache hit!"); return Ok(redges.clone()); } drop(redge_cache); t!("Cache miss!"); let redges = self.certifications_of_uncached(target)?; self.redge_cache .lock().unwrap() .insert(target.clone(), redges.clone()); Ok(redges) } fn lookup_synopses_by_userid(&self, userid: UserID) -> Vec { self.lookup_by_userid(&userid) .unwrap_or(Vec::new()) .into_iter() .map(|c| c.fingerprint()) .collect() } fn lookup_synopses_by_email(&self, email: &str) -> Vec<(Fingerprint, UserID)> { let email = if let Ok(email) = UserIDQueryParams::is_email(email) { email } else { return Vec::new(); }; self.lookup_by_email(&email) .unwrap_or(Vec::new()) .into_iter() .flat_map(|cert| { cert.userids() .filter_map(|userid| { if let Ok(Some(e)) = userid.email2() { if e == email { Some((cert.fingerprint(), userid.clone())) } else { None } } else { None } }) .collect::>() .into_iter() }) .collect() } } #[cfg(test)] mod test { use super::*; use sequoia_openpgp as openpgp; use openpgp::cert::CertBuilder; use openpgp::Result; use openpgp::packet::UserID; use openpgp::parse::Parse; use openpgp::policy::StandardPolicy; use sequoia_cert_store as cert_store; use cert_store::Store; use sequoia_cert_store::StoreUpdate; use crate::Network; use crate::Query; use crate::Roots; use crate::FULLY_TRUSTED; const P: &StandardPolicy = &StandardPolicy::new(); // Check that that lifetimes allow us to use a CertStore as follow: #[test] fn cert_store_lifetimes() -> Result<()> { fn authenticate<'store: 'ra, 'ra>( // The core of our check. Does the following compile: n: &Network>>, trust_root: Fingerprint, target_fpr: Fingerprint, target_userid: UserID) -> usize { eprintln!("trust root: {}", trust_root); eprintln!("target: {}, {:?}", target_fpr, target_userid); let q = Query::new(&n, Roots::from(&[ (trust_root, FULLY_TRUSTED), ])); let paths = q.authenticate( target_userid, target_fpr, FULLY_TRUSTED); eprintln!("paths: {:?}", paths); paths.amount() } let (alice, _) = CertBuilder::general_purpose( None, Some("")) .generate()?; let (bob, _) = CertBuilder::general_purpose( None, Some("")) .generate()?; let cert_store = cert_store::CertStore::empty(); cert_store.update(Arc::new(alice.clone().into()))?; cert_store.update(Arc::new(bob.clone().into()))?; eprintln!("certificates:"); for (i, cert) in cert_store.certs().enumerate() { eprintln!(" {}. {}, {}", i, cert.fingerprint(), cert.userids().next().expect("have one")); } // Build a few WoT networks. for _ in 0..2 { let wot_data = CertStore::from_store(&cert_store, P, None); let network = Network::new(wot_data)?; // Try and authenticate Bob. let amount = authenticate( &network, alice.fingerprint(), bob.fingerprint(), UserID::from("")); // Alice, our sole trust root, did not certify Bob so this // will fail. assert_eq!(amount, 0); let amount = authenticate( &network, alice.fingerprint(), alice.fingerprint(), UserID::from("")); // Alice, our trust root, self signed the User ID, so this // should pass. assert_eq!(amount, FULLY_TRUSTED); } // Since network only has a reference to the cert_store, we don't // have to do anything special to get cert_store back. assert_eq!(cert_store.fingerprints().count(), 2); // And thanks to nll, we can recover ownership to the // underlying cert store. drop(cert_store); Ok(()) } // Reproducer for // https://gitlab.com/sequoia-pgp/sequoia-wot/-/issues/54 #[test] fn my_own_grandfather() -> Result<()> { let ref_cert = Cert::from_bytes( &crate::testdata::data("my-own-grandpa.pgp"))?; let ref_fpr = ref_cert.fingerprint(); let ref_kh = ref_cert.key_handle(); // The certificate has a primary key that is also bound as a // subkey. assert!(ref_cert.keys().subkeys().any(|k| { k.fingerprint() == ref_fpr })); let store = CertStore::from_cert_refs( std::iter::once(&ref_cert), P, None)?; // The bug in issue #54 was in the local implementation of // cert_store::store::Store::lookup_by_cert_or_subkey. We // exercise that by calling precompute on the store. store.precompute(); // Also test that the CertStore implementation is not // impacted. let cert = store.lookup_by_cert_fpr(&ref_fpr) .expect("found cert"); assert_eq!(cert.fingerprint(), ref_fpr); // Make sure the implementation doesn't return the certificate // twice, once when matching on the primary key, and once when // matching on the subkey. let certs = store.lookup_by_cert(&ref_kh) .expect("found cert"); assert_eq!(certs.len(), 1); assert_eq!(certs[0].fingerprint(), ref_fpr); let certs = store.lookup_by_cert_or_subkey(&ref_kh) .expect("found cert"); assert_eq!(certs.len(), 1); assert_eq!(certs[0].fingerprint(), ref_fpr); let certs = store.certs().collect::>(); assert_eq!(certs.len(), 1); assert_eq!(certs[0].fingerprint(), ref_fpr); let fprs = store.fingerprints().collect::>(); assert_eq!(fprs.len(), 1); assert_eq!(fprs[0], ref_fpr); Ok(()) } } sequoia-wot-0.11.0/src/store/synopses.rs000064400000000000000000000142731046102023000163430ustar 00000000000000use std::collections::HashMap; use std::collections::hash_map::Entry; use std::time::SystemTime; use sequoia_openpgp as openpgp; use openpgp::Fingerprint; use openpgp::KeyID; use openpgp::KeyHandle; use openpgp::Result; use sequoia_cert_store as cert_store; use cert_store::store::StoreError; use crate::CertificationSet; use crate::Certification; use crate::CertSynopsis; use crate::Depth; use crate::store::Store; use crate::TRACE; /// Manages a slice of `&SynopsisSlice`. /// /// `SynopsisSlice` implements [`Store`] (but not [`Backend`]) and /// thus can be used as a certificate store by a [`Network`]. /// /// [`Backend`]: crate::store::Backend /// [`Network`]: crate::Network pub struct SynopsisSlice<'a> { // The list of certificates. certs: HashMap>, // Certifications on a certificate. // // Example: // // C = 0xA certifies . // // Whereas `edges` contains the entry 0xA with a CertificationSet // containing the certificate C, redges contains an entry for 0xB // with a CertificateSet containing C. redges: HashMap>, reference_time: SystemTime, } impl<'a> SynopsisSlice<'a> { /// Returns a new `SynopsisSlice`. /// /// The certificates must be deduped. If there are multiple /// instances of a single certificate (i.e., two certificates with /// the same fingerprint), they WILL NOT be merged; the first one /// will be used, and additional ones will be silently ignored. pub fn new(certs: &'a [CertSynopsis], certifications: &'a [Certification], reference_time: SystemTime) -> Result { tracer!(TRACE, "SynopsisSlice::new"); let mut n = SynopsisSlice { certs: HashMap::new(), redges: HashMap::new(), reference_time, }; let mut insert_cert = |cert: &'a CertSynopsis| { let keyid = KeyID::from(&cert.fingerprint()); match n.certs.entry(keyid) { Entry::Occupied(mut oe) => { if oe.get().iter() .find(|c| { c.fingerprint() == cert.fingerprint() }) .is_some() { // A certificate with the same fingerprint is // already there. Do nothing. } else { oe.get_mut().push(cert); } } e @ Entry::Vacant(_) => { e.or_insert(vec![ cert ]); } } }; for cert in certs.into_iter() { insert_cert(cert); } for c in certifications.into_iter() { let c: &Certification = c.into(); let issuer = c.issuer(); let target = c.target(); insert_cert(issuer); insert_cert(target); match n.redges.entry(target.fingerprint()) { e @ Entry::Occupied(_) => { // We merge below. e.and_modify(|e| { e.push(CertificationSet::from_certification( c.clone(), reference_time)) }); } e @ Entry::Vacant(_) => { e.or_insert( vec![ CertificationSet::from_certification( c.clone(), reference_time) ]); } } } t!("Merging certifications."); // Merge the CertificationSets. A certification is from a // certificate and over a certification and User ID pair. We // want one CertificateSet for each pair of certificates. for (_, cs) in n.redges.iter_mut() { cs.sort_by(|a, b| { a.issuer().fingerprint().cmp(&b.issuer().fingerprint()) }); // Now merge certifications from the same certificate. *cs = cs.drain(..).fold( Vec::new(), |mut v: Vec, cs: CertificationSet| -> Vec { let len = v.len(); if len > 0 { let l = &mut v[len-1]; if l.issuer().fingerprint() == cs.issuer().fingerprint() { l.merge(cs); } else { v.push(cs); } } else { v.push(cs); } v }); } t!("Done."); Ok(n) } } impl<'a> Store for SynopsisSlice<'a> { fn reference_time(&self) -> SystemTime { self.reference_time } fn iter_fingerprints<'b>(&'b self) -> Box + 'b> { Box::new( self.certs .values() .flat_map(|v| { v.iter().map(|c| c.fingerprint()) })) } fn lookup_synopses(&self, kh: &KeyHandle) -> Result> { let certs = self.certs.get(&KeyID::from(kh)) .ok_or(StoreError::NotFound(kh.clone()))?; let certs = if let KeyHandle::Fingerprint(fpr) = kh { certs .into_iter() .filter_map(|&c| { if &c.fingerprint() == fpr { Some(c.clone()) } else { None } }) .collect() } else { certs .into_iter() .map(|&c| c.clone()) .collect() }; Ok(certs) } fn certifications_of(&self, target: &Fingerprint, _min_depth: Depth) -> Result> { Ok(self.redges.get(target) .ok_or(StoreError::NotFound(KeyHandle::from(target.clone())))? .into_iter() .cloned() .collect()) } } sequoia-wot-0.11.0/src/store.rs000064400000000000000000001022701046102023000144530ustar 00000000000000//! A certificate store abstraction. //! //! A [`Network`] accesses certificates via the [`Store`] interface. //! //! [`Network`]: crate::Network use std::collections::HashMap; use std::collections::HashSet; use std::time::SystemTime; use sequoia_openpgp as openpgp; use openpgp::Fingerprint; use openpgp::KeyHandle; use openpgp::KeyID; use openpgp::Result; use openpgp::cert::prelude::*; use openpgp::packet::Signature; use openpgp::packet::UserID; pub use sequoia_cert_store::store::StoreError; use crate::CertificationSet; use crate::CertSynopsis; use crate::Certification; use crate::Depth; use crate::TRACE; mod cert_store; pub use cert_store::CertStore; mod synopses; pub use synopses::SynopsisSlice; /// Returns certificates from a backing store. pub trait Backend<'a>: sequoia_cert_store::Store<'a> { /// Returns all certifications on a certificate. /// /// `target`'s policy and reference time is used to determine what /// certificates are valid. Only active valid certifications are /// returned. (A certification is active if it is the newest /// valid certification of a particular binding as of the /// reference time.) /// /// Example: /// /// ```text /// 0xA certifies . \ CertificationSet /// 0xA certifies . / /// 0xB certifies . > CertificationSet /// ``` /// /// The entry for 0xC has two `CertificationSet`s: one for those /// made by 0xA and one for those made by 0xB. /// /// An implementation may (but need not) use the `min_depth` /// parameter to filter the the certifications it returns. The /// `min_depth` parameter says that the caller is only interested /// in certifications for which the trust depth is at least /// `min_depth`. If an implementation returns certifications /// whose trust depth is less than `min_depth` the caller must /// ignore them. fn redges(&self, target: ValidCert, min_depth: Depth) -> Vec { tracer!(TRACE, "Backend::redges"); t!("({}, {}; {})", target.fingerprint(), target.primary_userid() .map(|ua| String::from_utf8_lossy(ua.userid().value())) .unwrap_or("".into()), min_depth); let reference_time = target.time(); // certifications is all of the certifications for a given // . Returns the active certification, if any, // and any issuers that should be retried with a min_depth of 0. let get_active = |ua: &UserIDAmalgamation, certifications: &[&Signature], min_depth: Depth, // If some, only return certifications by these // issuers. filter: Option>| -> (Vec, HashSet) { t!("Looking for active signatures: min depth: {}", min_depth); let mut valid_certifications: Vec = Vec::new(); // If we've already seen a valid certification from the // Issuer on the current binding. let mut seen: HashMap = HashMap::new(); // If we skipped a certification due to the min_depth // constraint, and then find another certification that // does pass the constraint, we need to recheck the first // one, as it would be preferred. We do this in a second // pass. let mut skipped: HashSet = HashSet::new(); let mut retry: HashSet = HashSet::new(); 'cert: for certification in certifications { // Check that the certification is valid: // // - Find the issuer. // - Verify the signature. // // If we don't have a certificate for the alleged issuer, // then we ignore the certification. let certification_time = if let Some(t) = certification.signature_creation_time() { t } else { continue; }; let alleged_issuers = certification.get_issuers(); if min_depth > 0.into() { let depth = certification.trust_signature() .map(|(depth, _amount)| depth) .unwrap_or(0); if Depth::from(depth as usize) < min_depth { for alleged_issuer in alleged_issuers { let keyid = KeyID::from(alleged_issuer); t!("Skipping {} for {:02X}{:02X} as depth \ of {} is less than the minimum {}", keyid, certification.digest_prefix()[0], certification.digest_prefix()[1], depth, min_depth); skipped.insert(keyid); } continue; } else { // It's okay. t!("Checking {:02X}{:02X} as depth \ of {} is at least the minimum of {}", certification.digest_prefix()[0], certification.digest_prefix()[1], depth, min_depth); } } // Improve tracing: distinguish between we don't have // the issuer's certificate and we have it, but the // signature is invalid. let mut invalid_sig: Option<(KeyHandle, _)> = None; for alleged_issuer in alleged_issuers.into_iter() { let alleged_issuer_keyid = KeyID::from(&alleged_issuer); if skipped.get(&alleged_issuer_keyid).is_some() { // We skipped a newer certification (due to // the min_depth filter) so even if this older // one is valid, it might not be active. Add // this to the `retry` list so that we try // this issuer again without the depth filter. t!("Skipped possible certification from {}, \ queuing to retry with no depth constraints", alleged_issuer_keyid); retry.insert(alleged_issuer_keyid); continue; } if let Some(ref filter) = filter { // Are we interested in certifications from // this certificate? if ! filter.get(&alleged_issuer_keyid).is_some() { continue; } else { t!("Reconsidering certification {:02X}{:02X}, \ which is possibly from {}", certification.digest_prefix()[0], certification.digest_prefix()[1], alleged_issuer_keyid); } } match self.lookup_by_cert_or_subkey(&alleged_issuer) { Ok(alleged_issuers) => { for alleged_issuer in alleged_issuers.into_iter() { let alleged_issuer_fpr = alleged_issuer.fingerprint(); if let Some(saw) = seen.get(&alleged_issuer_fpr) { if saw > &certification_time { // We already have a newer // certification from this // issuer. t!("Skipping certification \ by {} for <{:?}, {}> at {:?}: \ saw a newer one.", alleged_issuer_fpr, ua.userid(), target.keyid(), certification_time); continue; } } let alleged_issuer = match alleged_issuer .with_policy(target.policy(), reference_time) { Ok(c) => c, Err(err) => { t!("Ignoring possible certification \ by {}: {}", alleged_issuer_fpr, err); continue; } }; let r = Certification::try_from_signature( &alleged_issuer, Some(ua), &target, certification); match r { Ok(c) => { t!("Using certification {:02X}{:02X} \ by {} for <{:?}, {}> at {:?}: \ {}/{}.", certification.digest_prefix()[0], certification.digest_prefix()[1], alleged_issuer_fpr, ua.userid(), target.keyid(), c.creation_time(), c.depth(), c.amount()); valid_certifications.push(c); seen.insert(alleged_issuer_fpr, certification_time); continue 'cert; } Err(err) => { invalid_sig = Some( (alleged_issuer_fpr.into(), err)); } } } } Err(err) => { invalid_sig = Some((alleged_issuer, err)); } } } if let Some((keyid, err)) = invalid_sig { t!("Invalid certification {:02X}{:02X} \ by {} for <{:?}, {}>: {}", certification.digest_prefix()[0], certification.digest_prefix()[1], keyid, ua.userid(), target.keyid(), err); } else { t!("Certification {:02X}{:02X} for <{:?}, {}>: \ missing issuer's certificate ({}).", certification.digest_prefix()[0], certification.digest_prefix()[1], ua.userid(), target.keyid(), certification.get_issuers() .first() .map(|h| h.to_string()) .unwrap_or("(no issuer subkeys)".into()) ); } } (valid_certifications, retry) }; let mut valid_certifications = Vec::new(); // Be careful: we expect a valid certificate, but the User IDs // don't require a self signature. for ua in target.cert().userids() { // Skip invalid User IDs. if let Err(_) = std::str::from_utf8(ua.userid().value()) { t!("{}: Non-UTF-8 User ID ({:?}) skipped.", target.keyid(), String::from_utf8_lossy(ua.userid().value())); continue; } // We iterate over all of the certifications. We need to // be careful: we only want the newest certification for a // given > tuple. let mut certifications: Vec<_> = ua.certifications() // Filter out certifications made after the reference time. .filter(|c| { if let Some(ct) = c.signature_creation_time() { ct <= reference_time } else { false } }) .collect(); t!("<{}, {}>: {} third-party certifications", target.fingerprint(), String::from_utf8_lossy(ua.userid().value()), certifications.len()); // Sort the certifications so that the newest comes first. certifications.sort_by(|a, b| { a.signature_creation_time().cmp(&b.signature_creation_time()) .reverse() }); let (c, retry) = get_active(&ua, &certifications, min_depth, None); valid_certifications.extend(c); if ! retry.is_empty() { assert!(min_depth > 0.into()); t!("Retrying: depth filter excludes some, but not all \ certifications for: {}", retry.iter() .map(|k| k.to_hex()) .collect::>() .join(", ")); let (c, retry) = get_active( &ua, &certifications, Depth::from(0), Some(retry)); valid_certifications.extend(c); assert!(retry.is_empty()); } } t!("Merging certifications."); CertificationSet::from_certifications( valid_certifications, reference_time) } /// Prefills the cache. /// /// Prefilling the cache makes sense when you plan to examine most /// nodes and edges in the network. It doesn't make sense if you /// are just authenticating a single or a few bindings. /// /// This function may be multi-threaded. /// /// Errors should be silently ignored and propagated when the /// operation in question is executed directly. fn precompute(&self) { self.prefetch_all() } } impl<'a: 't, 't, T> Backend<'a> for Box where T: Backend<'a> + ?Sized + 't { fn redges(&self, target: ValidCert, min_depth: Depth) -> Vec { self.as_ref().redges(target, min_depth) } fn precompute(&self) { self.as_ref().precompute() } } impl<'a: 't, 't, T> Backend<'a> for &'t T where T: Backend<'a> + ?Sized { fn redges(&self, target: ValidCert, min_depth: Depth) -> Vec { (*self).redges(target, min_depth) } fn precompute(&self) { (*self).precompute() } } impl<'a> Backend<'a> for sequoia_cert_store::CertStore<'a> { } pub trait Store { /// Returns the reference time. fn reference_time(&self) -> SystemTime; /// Lists all of the certificates. fn iter_fingerprints<'a>(&'a self) -> Box + 'a>; /// Returns all of the certificates. fn synopses<'a>(&'a self) -> Box + 'a> { Box::new(self.iter_fingerprints() .filter_map(|fpr| { self.lookup_synopsis_by_fpr(&fpr).ok() })) } /// Returns the certificates matching the handle. /// /// Returns [`StoreError::NotFound`] if the certificate is not /// found. This function SHOULD NOT return an empty vector if the /// certificate is not found. /// /// The caller may assume that looking up a fingerprint returns at /// most one certificate. fn lookup_synopses(&self, kh: &KeyHandle) -> Result>; /// Returns the corresponding certificate, if any. /// /// Returns [`StoreError::NotFound`] if the certificate is not /// found. This function SHOULD NOT return an empty vector if the /// certificate is not found. fn lookup_synopsis_by_fpr(&self, fingerprint: &Fingerprint) -> Result { let kh = KeyHandle::from(fingerprint.clone()); self.lookup_synopses(&kh) .and_then(|v| { assert!(v.len() <= 1); v.into_iter().next() .ok_or(StoreError::NotFound(kh).into()) }) } /// Returns a certification set for the specified certificate. /// /// A `CertificateSet` is returned for the certificate itself as /// well as for each User ID (self signed or not) that has a /// cryptographically valid certification. /// /// Returns [`StoreError::NotFound`] if the certificate is not /// found. This function SHOULD NOT return an empty vector if the /// certificate is not found. /// /// An implementation may (but need not) use the `min_depth` /// parameter to filter the the certifications it returns. The /// `min_depth` parameter says that the caller is only interested /// in certifications for which the trust depth is at least /// `min_depth`. If an implementation returns certifications /// whose trust depth is less than `min_depth` the caller must /// ignore them. fn certifications_of(&self, target: &Fingerprint, min_depth: Depth) -> Result>; /// Returns all third-party certifications of the specified /// certificate. /// /// Returns [`StoreError::NotFound`] if the certificate is not /// found. This function SHOULD NOT return an empty vector if the /// certificate is not found. fn third_party_certifications_of(&self, fpr: &Fingerprint) -> Vec { self.certifications_of(fpr, 0.into()) .unwrap_or(Vec::new()) .into_iter().flat_map(|cs| { cs.certifications() .flat_map(|(_userid, certifications)| { certifications }) .cloned() .collect::>() .into_iter() }) .collect::>() } /// Returns all User IDs that were certified for the specified /// certificate. /// /// This returns both self-signed User IDs, and User IDs certified /// by third-parties for the specified certificate. The result is /// deduped. /// /// Returns [`StoreError::NotFound`] if the certificate is not /// found. This function SHOULD NOT return an empty vector if the /// certificate is not found. fn certified_userids_of(&self, fpr: &Fingerprint) -> Vec { if let Ok(cert) = self.lookup_synopsis_by_fpr(fpr) { let mut userids: Vec = self .third_party_certifications_of(&cert.fingerprint()) .into_iter() .filter_map(|c| c.userid().map(Clone::clone)) .chain(cert.userids().map(|u| u.userid().clone())) .collect(); userids.sort_unstable(); userids.dedup(); userids } else { Vec::new() } } /// Returns all User IDs that were certified. /// /// This returns both self-signed User IDs, and User IDs certified /// by third-parties. The result is deduped. fn certified_userids(&self) -> Vec<(Fingerprint, UserID)> { let mut userids = self.synopses().flat_map(|cert| { let fpr = cert.fingerprint(); let userids = cert.userids().map(|u| { (fpr.clone(), u.userid().clone()) }).collect::>(); self .third_party_certifications_of(&fpr) .into_iter() .filter_map(move |c| { c.userid().map(|u| (fpr.clone(), u.clone())) }) .chain(userids) }).collect::>(); userids.sort_unstable(); userids.dedup(); userids } /// Returns all certificates that may have the specified User ID. /// /// This returns both self-signed User IDs, and User IDs certified /// by third-parties. It is okay for this function to return /// false positives, i.e., certificates that on closer inspection /// shouldn't be associated with that User ID. fn lookup_synopses_by_userid(&self, userid: UserID) -> Vec { self.certified_userids() .into_iter() .filter_map(|(fpr, u)| { if u == userid { Some(fpr) } else { None } }) .collect() } /// Returns all certificates that may have a User ID with the /// specified email address. /// /// This returns both self-signed User IDs, and User IDs certified /// by third-parties. It is okay for this function to return /// false positives, i.e., certificates that on closer inspection /// shouldn't be associated with that User ID. fn lookup_synopses_by_email(&self, email: &str) -> Vec<(Fingerprint, UserID)> { let userid_check = UserID::from(format!("<{}>", email)); if let Ok(Some(email_check)) = userid_check.email2() { if email != email_check { // Does not appear to be an email address. return Vec::new(); } } else { // Does not appear to be an email address. return Vec::new(); } let email_normalized = userid_check.email_normalized() .expect("checked").expect("checked"); self.certified_userids() .into_iter() .filter_map(|(fpr, u)| { if let Ok(Some(e)) = u.email_normalized() { if e == email_normalized { return Some((fpr, u)); } } None }) .collect() } } impl<'t, T> Store for Box where T: Store + ?Sized + 't { /// Returns the reference time. fn reference_time(&self) -> SystemTime { self.as_ref().reference_time() } /// Lists all of the certificates. fn iter_fingerprints<'b>(&'b self) -> Box + 'b> { self.as_ref().iter_fingerprints() } /// Returns all of the certificates. fn synopses<'b>(&'b self) -> Box + 'b> { self.as_ref().synopses() } fn lookup_synopses(&self, kh: &KeyHandle) -> Result> { self.as_ref().lookup_synopses(kh) } fn lookup_synopsis_by_fpr(&self, fingerprint: &Fingerprint) -> Result { self.as_ref().lookup_synopsis_by_fpr(fingerprint) } fn certifications_of(&self, target: &Fingerprint, min_depth: Depth) -> Result> { self.as_ref().certifications_of(target, min_depth) } fn third_party_certifications_of(&self, fpr: &Fingerprint) -> Vec { self.as_ref().third_party_certifications_of(fpr) } fn certified_userids_of(&self, fpr: &Fingerprint) -> Vec { self.as_ref().certified_userids_of(fpr) } fn certified_userids(&self) -> Vec<(Fingerprint, UserID)> { self.as_ref().certified_userids() } fn lookup_synopses_by_userid(&self, userid: UserID) -> Vec { self.as_ref().lookup_synopses_by_userid(userid) } fn lookup_synopses_by_email(&self, email: &str) -> Vec<(Fingerprint, UserID)> { self.as_ref().lookup_synopses_by_email(email) } } impl<'t, T> Store for &'t T where T: Store + ?Sized { /// Returns the reference time. fn reference_time(&self) -> SystemTime { (*self).reference_time() } /// Lists all of the certificates. fn iter_fingerprints<'b>(&'b self) -> Box + 'b> { (*self).iter_fingerprints() } /// Returns all of the certificates. fn synopses<'b>(&'b self) -> Box + 'b> { (*self).synopses() } fn lookup_synopses(&self, kh: &KeyHandle) -> Result> { (*self).lookup_synopses(kh) } fn lookup_synopsis_by_fpr(&self, fingerprint: &Fingerprint) -> Result { (*self).lookup_synopsis_by_fpr(fingerprint) } fn certifications_of(&self, target: &Fingerprint, min_depth: Depth) -> Result> { (*self).certifications_of(target, min_depth) } fn third_party_certifications_of(&self, fpr: &Fingerprint) -> Vec { (*self).third_party_certifications_of(fpr) } fn certified_userids_of(&self, fpr: &Fingerprint) -> Vec { (*self).certified_userids_of(fpr) } fn certified_userids(&self) -> Vec<(Fingerprint, UserID)> { (*self).certified_userids() } fn lookup_synopses_by_userid(&self, userid: UserID) -> Vec { (*self).lookup_synopses_by_userid(userid) } fn lookup_synopses_by_email(&self, email: &str) -> Vec<(Fingerprint, UserID)> { (*self).lookup_synopses_by_email(email) } } /// A workaround to create a `Box`. /// /// We can't directly do: `Box`. That only works /// for auto traits like `Send` and `Sync`. Instead we need to use a /// special trait that depends on all of the traits that we care /// about. pub trait StorePlusBackend<'a>: Store + Backend<'a> { } impl<'a, T> StorePlusBackend<'a> for T where T: Store + Backend<'a> { } #[cfg(test)] mod tests { use super::*; use std::time::Duration; use std::time::UNIX_EPOCH; use sequoia_openpgp as openpgp; use openpgp::cert::raw::RawCert; use openpgp::cert::raw::RawCertParser; use openpgp::parse::Parse; use openpgp::policy::StandardPolicy; use crate::Network; use crate::Query; use crate::QueryBuilder; #[test] #[allow(unused)] fn override_certification() -> Result<()> { tracer!(true, "override_certification"); let p = &StandardPolicy::new(); let alice_fpr: Fingerprint = "B4259E0C1D764615CA560EE57E10F6E7AC1D0A4E" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "3E2CBBFE672E101E0061D55C60FCD2B055FFB4A2" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: B4259E0C1D764615CA560EE57E10F6E7AC1D0A4E // Certified by: B4259E0C1D764615CA560EE57E10F6E7AC1D0A4E let carol_fpr: Fingerprint = "2C6CA00307C776386646C76757CCD98BEB17EA38" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 3E2CBBFE672E101E0061D55C60FCD2B055FFB4A2 let bytes = &crate::testdata::data("override.pgp"); let certs = RawCertParser::from_bytes(bytes)?; let certs: Vec = certs .map(|c| c.expect("Valid certificate")) .collect(); // date '+%s' -u -d '2023-01-14 01:00:00' let jan14 = UNIX_EPOCH + Duration::new(1673658000, 0); // date '+%s' -u -d '2023-01-16 01:00:00' let jan16 = UNIX_EPOCH + Duration::new(1673830800, 0); // Alice certified Bob twice. Once on the 14th as a trusted // introducer, and once on the 15 using a normal // certification. // On the 14th, Bob should be a trusted introducer. t!("Jan 14, Bob"); let n = Network::from_raw_certs(certs.iter().cloned(), p, Some(jan14))?; let r = Query::new(&n, &[ alice_fpr.clone() ]); let got = r.authenticate(bob_uid.clone(), bob_fpr.clone(), 120); assert!(got.amount() == 120); t!("Jan 14, Carol"); let n = Network::from_raw_certs(certs.iter().cloned(), p, Some(jan14))?; let r = Query::new(&n, &[ alice_fpr.clone() ]); let got = r.authenticate(carol_uid.clone(), carol_fpr.clone(), 120); assert!(got.amount() == 120); // On the 16th, Bob should be a trusted introducer. t!("Jan 16, Bob"); let n = Network::from_raw_certs(certs.iter().cloned(), p, jan16)?; let r = Query::new(&n, &[ alice_fpr.clone() ]); let got = r.authenticate(bob_uid.clone(), bob_fpr.clone(), 120); assert!(got.amount() == 120); t!("Jan 16, Carol"); let n = Network::from_raw_certs(certs.iter().cloned(), p, jan16)?; let r = Query::new(&n, &[ alice_fpr.clone() ]); let got = r.authenticate(carol_uid.clone(), carol_fpr.clone(), 120); assert!(got.amount() == 0); eprintln!("{:?}", n); Ok(()) } // Make sure we can pass a &Box where a generic type // needs to implement Backend. #[test] fn backend_boxed() -> Result<()> { use crate::store::CertStore; let policy = StandardPolicy::new(); struct Foo<'a, B> where B: Backend<'a> { backend: B, _a: std::marker::PhantomData<&'a ()>, } impl<'a, B> Foo<'a, B> where B: Backend<'a> { fn new(backend: B) -> Self { Foo { backend, _a: std::marker::PhantomData, } } fn count(&self) -> usize { self.backend.fingerprints().count() } } let backend = CertStore::from_certs(std::iter::empty(), &policy, None)?; let backend: Box = Box::new(backend); let foo = Foo::new(&backend); // Do something (anything) with the backend. assert_eq!(foo.count(), 0); Ok(()) } // Make sure we can pass a &Box where a generic type // needs to implement Store. #[test] fn store_boxed() -> Result<()> { use crate::store::SynopsisSlice; struct Foo where S: Store { backend: S, } impl Foo where S: Store { fn new(backend: S) -> Self { Foo { backend, } } fn count(&self) -> usize { self.backend.iter_fingerprints().count() } } let backend = SynopsisSlice::new(&[], &[], std::time::SystemTime::now())?; let backend: Box = Box::new(backend); let foo = Foo::new(&backend); // Do something (anything) with the backend. assert_eq!(foo.count(), 0); let n = Network::new(backend).expect("valid"); let q = QueryBuilder::new(&n); let _q = q.build(); Ok(()) } // Make sure we can pass a &Box where a generic type // needs to implement Store. #[test] fn store_backend_boxed() -> Result<()> { use crate::store::CertStore; let policy = StandardPolicy::new(); struct Foo<'a, B> where B: StorePlusBackend<'a> { backend: B, _a: std::marker::PhantomData<&'a ()>, } impl<'a, B> Foo<'a, B> where B: StorePlusBackend<'a> { fn new(backend: B) -> Self { Foo { backend, _a: std::marker::PhantomData, } } fn count(&self) -> usize { self.backend.fingerprints().count() } fn count_synopses(&self) -> usize { self.backend.iter_fingerprints().count() } } let backend = CertStore::from_certs(std::iter::empty(), &policy, None)?; let backend: Box = Box::new(backend); let foo = Foo::new(&backend); // Do something (anything) with the backend. assert_eq!(foo.count(), 0); assert_eq!(foo.count_synopses(), 0); let n = Network::new(backend).expect("valid"); let mut q = QueryBuilder::new(&n); q.certification_network(); let q = q.build(); // Do something with q (anything). eprintln!("{:?}", q.authenticate( UserID::from(""), "0123 4567 89AB CDEF 0123 4567 89AB CDEF" .parse::().expect("valid"), crate::FULLY_TRUSTED)); Ok(()) } } sequoia-wot-0.11.0/src/testdata.rs000064400000000000000000000037171046102023000151360ustar 00000000000000//! Test data. //! //! This module includes the test data from `tests/data` in a //! structured way. use std::fmt; use std::collections::BTreeMap; use std::sync::OnceLock; pub struct Test { path: &'static str, pub bytes: &'static [u8], } impl fmt::Display for Test { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "tests/data/{}", self.path) } } /// Returns the content of the given file below `tests/data`. pub fn file(name: &str) -> &'static [u8] { static FILES: OnceLock> = OnceLock::new(); let files = FILES.get_or_init( || { let mut m: BTreeMap<&'static str, &'static [u8]> = Default::default(); macro_rules! add { ( $key: expr, $path: expr ) => { m.insert($key, include_bytes!($path)) } } include!(concat!(env!("OUT_DIR"), "/tests.index.rs.inc")); // Sanity checks. assert!(m.contains_key("best-via-root/README.md")); assert!(m.contains_key("cliques/README.md")); assert!(m.contains_key("cycle/README.md")); assert!(m.contains_key("local-optima/README.md")); assert!(m.contains_key("multiple-certifications-1/README.md")); assert!(m.contains_key("multiple-userids-1/README.md")); assert!(m.contains_key("multiple-userids-2/README.md")); assert!(m.contains_key("regex-1/README.md")); assert!(m.contains_key("regex-2/README.md")); assert!(m.contains_key("regex-3/README.md")); assert!(m.contains_key("roundabout/README.md")); assert!(m.contains_key("simple/README.md")); m }); files.get(name).unwrap_or_else(|| panic!("No such file {:?}", name)) } /// Returns the content of the given file below `tests/data`. pub fn data(name: &str) -> &'static [u8] { file(&format!("{}", name)) } sequoia-wot-0.11.0/src/userid.rs000064400000000000000000000061541046102023000146160ustar 00000000000000use std::fmt; use std::time::SystemTime; use sequoia_openpgp as openpgp; use openpgp::packet::UserID; use openpgp::cert::prelude::*; use crate::RevocationStatus; /// Encapsulates an OpenPGP User ID. /// /// This holds the information about a User ID that is relevant to web /// of trust calculations. #[derive(Debug, Clone)] pub struct UserIDSynopsis { userid: UserID, binding_signature_creation_time: SystemTime, revocation_status: RevocationStatus, } impl<'a> From<&ValidUserIDAmalgamation<'a>> for UserIDSynopsis { fn from(ua: &ValidUserIDAmalgamation<'a>) -> Self { UserIDSynopsis { userid: ua.userid().clone(), binding_signature_creation_time: ua.binding_signature() .signature_creation_time() .expect("valid"), revocation_status: ua.revocation_status().into(), } } } impl<'a> From> for UserIDSynopsis { fn from(ua: ValidUserIDAmalgamation<'a>) -> Self { (&ua).into() } } impl<'a> From<(&[u8], SystemTime)> for UserIDSynopsis { fn from(userid: (&[u8], SystemTime)) -> Self { (UserID::from(userid.0), userid.1).into() } } impl<'a> From<&[u8]> for UserIDSynopsis { fn from(userid: &[u8]) -> Self { (userid, SystemTime::now()).into() } } impl<'a> From<(&str, SystemTime)> for UserIDSynopsis { fn from(userid: (&str, SystemTime)) -> Self { (userid.0.as_bytes(), userid.1).into() } } impl<'a> From<&str> for UserIDSynopsis { fn from(userid: &str) -> Self { (userid, SystemTime::now()).into() } } impl<'a> From<(UserID, SystemTime)> for UserIDSynopsis { fn from(userid: (UserID, SystemTime)) -> Self { UserIDSynopsis { userid: userid.0, binding_signature_creation_time: userid.1, revocation_status: RevocationStatus::NotAsFarAsWeKnow, } } } impl<'a> From for UserIDSynopsis { fn from(userid: UserID) -> Self { (userid, SystemTime::now()).into() } } impl fmt::Display for UserIDSynopsis { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.write_fmt( format_args!( "{} ({})", String::from_utf8_lossy(self.userid.value()), match self.revocation_status { RevocationStatus::NotAsFarAsWeKnow => "", RevocationStatus::Hard => "hard revoked", RevocationStatus::Soft(_t) => "soft revoked", })) } } impl UserIDSynopsis { /// Returns the User ID. pub fn userid(&self) -> &UserID { &self.userid } /// Returns the User ID's value. pub fn value(&self) -> &[u8] { &self.userid.value() } /// Returns the certificate's revocation status. pub fn revocation_status(&self) -> RevocationStatus { self.revocation_status.clone() } /// Returns the binding signature's creation time. pub fn binding_signature_creation_time(&self) -> SystemTime { self.binding_signature_creation_time } } sequoia-wot-0.11.0/tests/LICENSE.txt000064400000000000000000000036121046102023000151470ustar 00000000000000Sequoia PGP is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. Further, to facilitate interoperability, the files under this directory, sequoia-wot/tests, can alternatively be licensed according to the following license: --- The FreeBSD Copyright Copyright 1992-2012 The FreeBSD Project. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE FREEBSD PROJECT ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. sequoia-wot-0.11.0/tests/data/best-via-root/README.md000064400000000000000000000007421046102023000202100ustar 00000000000000When doing backwards propagation, we find paths from all nodes to the target. Since we don't stop when we reach a root, the returned path should still be optimal. Consider: ```text A --- 120/10 ---> B --- 120/10 ---> C --- 120/10 ---> Target \ / `--- 50/10 ---> Y --- 50/10 ---> Z --- 50/10 --------' ``` When the root is B, then the path that we find for A should be `A -> B -> C -> Target`, not `A -> Y -> Z -> Target`. sequoia-wot-0.11.0/tests/data/best-via-root/alice-priv.pgp000064400000000000000000000027671046102023000215050ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B95F F5B1 D055 D26F 758F D4E3 BF12 C4D1 D28F DFFB Comment: xVgEYVG+ZhYJKwYBBAHaRw8BAQdAP+6cpuJg0G9S+zzDZ6XqThbb2p05hlo6JWdR eQDxyNUAAPwNTYr5tTyAQllWtOi4MW5E/vfGicVyfVlyxHGzVdcpGRGLwsALBB8W CgB9BYJhUb5mAwsJBwkQvxLE0dKP3/tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn/BZOjxC7ttCU7SryWKFjup4w3KUrqz+pUXF31AOdZyED FQoIApsBAh4BFiEEuV/1sdBV0m91j9TjvxLE0dKP3/sAAPWdAP4q53l+gH2OfDig hC6YURMvp5e1rPwcyOo+BcRyvOnMaQD/d2u/+OOclCCtMyHN+8K+JU+bXbWD1a2k bUUccMRBsAfNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFRvmYDCwkH CRC/EsTR0o/f+0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmd1pxZJNOMNq59OSeBOFV1MIuULTZ/uDV6xnN16Rhs+AgMVCggCmQECmwECHgEW IQS5X/Wx0FXSb3WP1OO/EsTR0o/f+wAA4K4A/1vXG1ffza7/JO9ITvn8qAvaaO4K or9+BXg9CX5H9PQUAQCSQ5WwyHL/7gDYGVM800wqZFI+27HUGFwSCGfiGkY7AMdY BGFRvmYWCSsGAQQB2kcPAQEHQEzop2Lywjjq+grAF/TmvSKXjq6Qc2CL+4p3YM82 hkirAAEAoTMZhoyEzDPmn1iR99sXIA0z+a7G/P+FPWMWBB2GUkQPGsLAvwQYFgoB MQWCYVG+ZgkQvxLE0dKP3/tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnNZeT0XBwcEaQeddzK8CqjwRhRh4trZb0fkZCKSwYEzICmwK+oAQZ FgoAbwWCYVG+ZgkQIxmQGZtf3otHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnM2cm8hOeyhkOI7wWRNtYVqHgQe8f39z/v3BAmTdQ6cMWIQSY Af6LAZSEJH6du8AjGZAZm1/eiwAAHloA/ilhCTNKRDWy2wk9tX9U6RE83jAbnskR Rc/rYwaLMvbFAQCcCoGaE1VAvCkTIB7DuGCZ+kcxR4mtYdgi3cn09BizDRYhBLlf 9bHQVdJvdY/U478SxNHSj9/7AAComQEAlHvsGBMP1AdiIiqBz0+4AVmZxIS8QuhV 4mtk4GMcXFkA/3KEHg0XE4uqVpZwFixlM5LKtpDHaw7X20MDQj/9YBcF =TuA3 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root/alice.pgp000064400000000000000000000026241046102023000205170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: B95F F5B1 D055 D26F 758F D4E3 BF12 C4D1 D28F DFFB Comment: xjMEYVG+ZhYJKwYBBAHaRw8BAQdAP+6cpuJg0G9S+zzDZ6XqThbb2p05hlo6JWdR eQDxyNXCwAsEHxYKAH0FgmFRvmYDCwkHCRC/EsTR0o/f+0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf8Fk6PELu20JTtKvJYoWO6njDcpSur P6lRcXfUA51nIQMVCggCmwECHgEWIQS5X/Wx0FXSb3WP1OO/EsTR0o/f+wAA9Z0A /irneX6AfY58OKCELphREy+nl7Ws/BzI6j4FxHK86cxpAP93a7/445yUIK0zIc37 wr4lT5tdtYPVraRtRRxwxEGwB80TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVG+ZgMLCQcJEL8SxNHSj9/7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ3WnFkk04w2rn05J4E4VXUwi5QtNn+4NXrGc3XpGGz4CAxUK CAKZAQKbAQIeARYhBLlf9bHQVdJvdY/U478SxNHSj9/7AADgrgD/W9cbV9/Nrv8k 70hO+fyoC9po7gqiv34FeD0Jfkf09BQBAJJDlbDIcv/uANgZUzzTTCpkUj7bsdQY XBIIZ+IaRjsAzjMEYVG+ZhYJKwYBBAHaRw8BAQdATOinYvLCOOr6CsAX9Oa9IpeO rpBzYIv7indgzzaGSKvCwL8EGBYKATEFgmFRvmYJEL8SxNHSj9/7RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzWXk9FwcHBGkHnXcyvAqo8E YUYeLa2W9H5GQiksGBMyApsCvqAEGRYKAG8FgmFRvmYJECMZkBmbX96LRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzNnJvITnsoZDiO8FkTb WFah4EHvH9/c/79wQJk3UOnDFiEEmAH+iwGUhCR+nbvAIxmQGZtf3osAAB5aAP4p YQkzSkQ1stsJPbV/VOkRPN4wG57JEUXP62MGizL2xQEAnAqBmhNVQLwpEyAew7hg mfpHMUeJrWHYIt3J9PQYsw0WIQS5X/Wx0FXSb3WP1OO/EsTR0o/f+wAAqJkBAJR7 7BgTD9QHYiIqgc9PuAFZmcSEvELoVeJrZOBjHFxZAP9yhB4NFxOLqlaWcBYsZTOS yraQx2sO19tDA0I//WAXBQ== =Bqur -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root/bob-priv.pgp000064400000000000000000000027651046102023000211700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6A8B 9EC7 D0A1 B297 B5D4 A7A1 C048 DFF9 6601 D9BD Comment: xVgEYVG+ZhYJKwYBBAHaRw8BAQdA3gLEoo5NQo65WGpyLWgvA8hrFSjJ0cuULq5E n3cIkpcAAQDldsUT4kU81awIjyO0BBuZl7zyLL/rAx+ecQCk6WqpCw81wsALBB8W CgB9BYJhUb5mAwsJBwkQwEjf+WYB2b1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnknbGf4bMVy6rTKKqZLNIKNd23g4EbmmzK19L8kIhtCsD FQoIApsBAh4BFiEEaouex9Chspe11KehwEjf+WYB2b0AAJzgAP9CuccnetoGJtzt I7L4xQGjkbpL8mHRSOHWr1i59KQrhgEAzl//fOaThDNqqOn8DJryMgdwMmvAMh9e ZB0U981maQ7NETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhUb5mAwsJBwkQ wEjf+WYB2b1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 7Z99Sm9JX7w3yoKn5P8GuVindKWvbHSIIwkUlKAZ+o4DFQoIApkBApsBAh4BFiEE aouex9Chspe11KehwEjf+WYB2b0AAHfWAP9eW1mfu58ECd/oLQgBuSGQqwbRM4nE NLo/Pc18rgvUrwD/TcJBwVIb5GdRv1dsb51iq8d7W0LzbG43ocYqqm34xQnHWARh Ub5mFgkrBgEEAdpHDwEBB0CYFpFQqqkkprOV+kHW5PBgRi5uD+i8BKxMya22yOrN CwABAJWJ2EjKHwz+PQfpmR/4rc/JtFPs1+HSsVjO3BvLCMLhExXCwL8EGBYKATEF gmFRvmYJEMBI3/lmAdm9RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ6LEAl5WGnISU4OMX97AV4ox2Ar7m5gZ7xjOCwjkEK/tApsCvqAEGRYK AG8FgmFRvmYJEG+Xk1NoVWOYRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ8e6WxJQ6HgYwgTY9x6PGWjUIKLC7Wzt7BGeEAtW3ritFiEEDmrr 2iX0aZF7es7Ab5eTU2hVY5gAAPE5AQCi7iz1uofIqQDHmvH0Rpw2nAACjsv2RxGT HWkiSKGsqQEA4u1Q94+u8kaU1ZdDOug85Xop5DtPORUJRz/1MwU8rwYWIQRqi57H 0KGyl7XUp6HASN/5ZgHZvQAAXGABAMCJ1ob0QQBBJXJWzuib3IowDnzCobUsa1Ql cwi5EyS9AP0SPjn9EFqfQTLxJceYQzP2CocYWHa9Qi6KaNFEqsDyCg== =AQ6B -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root/bob.pgp000064400000000000000000000031071046102023000202010ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVG+ZhYJKwYBBAHaRw8BAQdA3gLEoo5NQo65WGpyLWgvA8hrFSjJ0cuULq5E n3cIkpfCwAsEHxYKAH0FgmFRvmYDCwkHCRDASN/5ZgHZvUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeSdsZ/hsxXLqtMoqpks0go13beDgRu abMrX0vyQiG0KwMVCggCmwECHgEWIQRqi57H0KGyl7XUp6HASN/5ZgHZvQAAnOAA /0K5xyd62gYm3O0jsvjFAaORukvyYdFI4davWLn0pCuGAQDOX/985pOEM2qo6fwM mvIyB3Aya8AyH15kHRT3zWZpDs0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFRvmYDCwkHCRDASN/5ZgHZvUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmftn31Kb0lfvDfKgqfk/wa5WKd0pa9sdIgjCRSUoBn6jgMVCggC mQECmwECHgEWIQRqi57H0KGyl7XUp6HASN/5ZgHZvQAAd9YA/15bWZ+7nwQJ3+gt CAG5IZCrBtEzicQ0uj89zXyuC9SvAP9NwkHBUhvkZ1G/V2xvnWKrx3tbQvNsbjeh xiqqbfjFCcLABwQQFgoAeQWCYVG+ogWDCWeaOwOFCngJEL8SxNHSj9/7RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9FN5ZWk9vGF1Ik/QBaK 98YETkm5EYK/1tW4j+kkwOMzFiEEuV/1sdBV0m91j9TjvxLE0dKP3/sAAIXwAP0a 8R5Pj2haj9pG8FG7bkApz5w4hULStiHwLgGKMtVNMwEA34cn9weR2AmYMACODV+L Y01SOqT3XvP4eyUE7ydkHAPOMwRhUb5mFgkrBgEEAdpHDwEBB0CYFpFQqqkkprOV +kHW5PBgRi5uD+i8BKxMya22yOrNC8LAvwQYFgoBMQWCYVG+ZgkQwEjf+WYB2b1H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnosQCXlYachJT g4xf3sBXijHYCvubmBnvGM4LCOQQr+0CmwK+oAQZFgoAbwWCYVG+ZgkQb5eTU2hV Y5hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnx7pbElDo eBjCBNj3Ho8ZaNQgosLtbO3sEZ4QC1beuK0WIQQOauvaJfRpkXt6zsBvl5NTaFVj mAAA8TkBAKLuLPW6h8ipAMea8fRGnDacAAKOy/ZHEZMdaSJIoaypAQDi7VD3j67y RpTVl0M66DzleinkO085FQlHP/UzBTyvBhYhBGqLnsfQobKXtdSnocBI3/lmAdm9 AABcYAEAwInWhvRBAEElclbO6JvcijAOfMKhtSxrVCVzCLkTJL0A/RI+Of0QWp9B MvElx5hDM/YKhxhYdr1CLopo0USqwPIK =TEgP -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root/carol-priv.pgp000064400000000000000000000027671046102023000215300ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 77A6 F7D4 BEE0 369F 70B2 4957 9D29 8766 9F79 2B35 Comment: xVgEYVG+ZhYJKwYBBAHaRw8BAQdAtdsP6WxEKhz0Hlc3oNBnUCdEdQ0TL7iRSzB5 qoauNtwAAQCTFGQCKz/5j2BLDS2KKPzDlFDsju15a35y9NbuMwxQKQ7lwsALBB8W CgB9BYJhUb5mAwsJBwkQnSmHZp95KzVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnavrcTkuFpkcrbbUyW7La2XlFX3+QCkvwoLKNsy28Y0sD FQoIApsBAh4BFiEEd6b31L7gNp9wsklXnSmHZp95KzUAABouAP9jp00HDIBP15wK adpaLngszExPQTLrqzRCyJbLx+azZQEA3Eqzt27jrtczdogVXsLBxeZuqeVZBSIs sPTLkHafnQ3NEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFRvmYDCwkH CRCdKYdmn3krNUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeppI9ZnFNHj0hjdBxsJULH41SLDV4av0oyQzLORz0uZQMVCggCmQECmwECHgEW IQR3pvfUvuA2n3CySVedKYdmn3krNQAA4lEBANbEfHmHALH2JZ/McZBryTSAcJmt 7HYzWVCHsKu/NUEuAP9QhY5Gw6YanmxCjMurS3SLwtTyZd7S7TbdV6IxeRLZBsdY BGFRvmYWCSsGAQQB2kcPAQEHQBJRCBxyGfbm/xDAQf8Cbhn+b0wKDGVi2eKKp/fD 50YcAAEA51Jf36YUKDRn6B+uTaYsqL+SC6mthvLIIMhYuL1o1DsQj8LAvwQYFgoB MQWCYVG+ZgkQnSmHZp95KzVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnIFwTgaNfRBWS8YmYDoYD0KGMZ9vyEtFGKCD4kbOGeFkCmwK+oAQZ FgoAbwWCYVG+ZgkQjlnv6xzqZJ5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnxKVyGVIFHjH1p0xhuH1PS/abtcmdR+Wlo7qNnGRcoIwWIQQW Q1J7qxFjiDM+5O6OWe/rHOpkngAAt4sBAI4cPCSTAbWnlKF5wKgjvptLo6hoMAdA M9h4nbXXdNoEAP9dEi4Hg6fOOrZQ3g1LeOOLqS2TpUQVe+URn458wXRQCxYhBHem 99S+4DafcLJJV50ph2afeSs1AADI3AD9FHUv4KOB5FBCZ7S3+2hsx+NW29Y4Fc82 SAnBWaZ6jfkBANQkAKmXobGoAJASmPIEQTB2GlM7sjle+zZH8Wkvxy8D =dZ93 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root/carol.pgp000064400000000000000000000031131046102023000205340ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVG+ZhYJKwYBBAHaRw8BAQdAtdsP6WxEKhz0Hlc3oNBnUCdEdQ0TL7iRSzB5 qoauNtzCwAsEHxYKAH0FgmFRvmYDCwkHCRCdKYdmn3krNUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdq+txOS4WmRytttTJbstrZeUVff5AK S/Cgso2zLbxjSwMVCggCmwECHgEWIQR3pvfUvuA2n3CySVedKYdmn3krNQAAGi4A /2OnTQcMgE/XnApp2loueCzMTE9BMuurNELIlsvH5rNlAQDcSrO3buOu1zN2iBVe wsHF5m6p5VkFIiyw9MuQdp+dDc0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVG+ZgMLCQcJEJ0ph2afeSs1RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ6mkj1mcU0ePSGN0HGwlQsfjVIsNXhq/SjJDMs5HPS5lAxUK CAKZAQKbAQIeARYhBHem99S+4DafcLJJV50ph2afeSs1AADiUQEA1sR8eYcAsfYl n8xxkGvJNIBwma3sdjNZUIewq781QS4A/1CFjkbDphqebEKMy6tLdIvC1PJl3tLt Nt1XojF5EtkGwsAHBBAWCgB5BYJhUb6iBYMJZ5o7A4UKeAkQwEjf+WYB2b1HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnu06YdDh0oqZ/PR9J wfNni4kdDHRqakE39f82pH8MjZYWIQRqi57H0KGyl7XUp6HASN/5ZgHZvQAAKrAB AIgb/maaqGjvekaTZZ6ZLrm7yN3o/T5YSqcFiQhCCAkvAP45lS+pl6ZiyTdjhCfv AiRzVrjIiC5jZZGXsd68pSqeD84zBGFRvmYWCSsGAQQB2kcPAQEHQBJRCBxyGfbm /xDAQf8Cbhn+b0wKDGVi2eKKp/fD50YcwsC/BBgWCgExBYJhUb5mCRCdKYdmn3kr NUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcgXBOBo19E FZLxiZgOhgPQoYxn2/IS0UYoIPiRs4Z4WQKbAr6gBBkWCgBvBYJhUb5mCRCOWe/r HOpknkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfEpXIZ UgUeMfWnTGG4fU9L9pu1yZ1H5aWjuo2cZFygjBYhBBZDUnurEWOIMz7k7o5Z7+sc 6mSeAAC3iwEAjhw8JJMBtaeUoXnAqCO+m0ujqGgwB0Az2Hidtdd02gQA/10SLgeD p846tlDeDUt444upLZOlRBV75RGfjnzBdFALFiEEd6b31L7gNp9wsklXnSmHZp95 KzUAAMjcAP0UdS/go4HkUEJntLf7aGzH41bb1jgVzzZICcFZpnqN+QEA1CQAqZeh sagAkBKY8gRBMHYaUzuyOV77NkfxaS/HLwM= =ZEZC -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root/target-priv.pgp000064400000000000000000000027741046102023000217140ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2AB0 8C06 FC79 5AC2 6673 B23C AD56 1ABD CBEB FDF0 Comment: xVgEYVG+ZhYJKwYBBAHaRw8BAQdADxEm25Fsep0qMEnaEDG2t+dabOZxWKTAciJw 6flyK4gAAP9ZjNCqahKu32ZLccaotfFrQBO2zMXjYX4J9bDSr38d1RMEwsALBB8W CgB9BYJhUb5mAwsJBwkQrVYavcvr/fBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnzwhUxd49DC6eBz/KhFHRWFgmKdrtXKQNM6sMI8uSAZYD FQoIApsBAh4BFiEEKrCMBvx5WsJmc7I8rVYavcvr/fAAAM7FAQCYaRjrxDBQIhf1 z1qS+/uum4gIa3Z8jphO4PLqCkeJhQEA0XMF3MrZZ6v104wLM2LnSQn4sf4qfNqD 6e7H2CNX/QnNFDx0YXJnZXRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhUb5mAwsJ BwkQrVYavcvr/fBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JneF2tSOfZnRzgCPkGiGMXbBnlVx83Ljo1LxoF8/5ojVIDFQoIApkBApsBAh4B FiEEKrCMBvx5WsJmc7I8rVYavcvr/fAAANyjAQDPRcvvngaVnQ0BXBqps0GRiA7K 3bQES8v3UpKrMlidtQD9HvVrd1bwTCgsTlAwrb5LkN1odukDAmnNXNYu60o1fgnH WARhUb5mFgkrBgEEAdpHDwEBB0Dr9ztPkV0fqqQpaxS9HEI3+ok8bGxel6SRdEhm BFuE3wAA/RLVjf9zGv6vZWtE/POZfB8xHl0IyV0/gZxgy/5/FjBiEGfCwL8EGBYK ATEFgmFRvmYJEK1WGr3L6/3wRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ4+kiULMfxXArqTiLvB1mBsRFrhFJGe0Q2UFKSE3yR/fApsCvqAE GRYKAG8FgmFRvmYJEAwDb0xOSUH8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZxl7hP2oP9AyR6fBJHw+iEqkUtJjluuU7xWbu+ENYJAlFiEE G6IeqG/SzuTMU82sDANvTE5JQfwAALi0AP9n2fNnkzJef37iweCrDM8ylkr7XyiF 6aCZdvzn4rGg1gD/R+onnUHC1jEJzBirhQHVi2d2gU4ePjMLzmwnLVM+wg4WIQQq sIwG/HlawmZzsjytVhq9y+v98AAAllUA/R71f1wyUzf7KuU1TI3mKmCpoBDG6zGG oesV/l7Au1wzAQCPWaZJf1EE9OvZF+j5fl8CF4NPgEqFt/m+t1ZB4SkpDQ== =o0HT -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root/target.pgp000064400000000000000000000035371046102023000207340ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVG+ZhYJKwYBBAHaRw8BAQdADxEm25Fsep0qMEnaEDG2t+dabOZxWKTAciJw 6flyK4jCwAsEHxYKAH0FgmFRvmYDCwkHCRCtVhq9y+v98EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfPCFTF3j0MLp4HP8qEUdFYWCYp2u1c pA0zqwwjy5IBlgMVCggCmwECHgEWIQQqsIwG/HlawmZzsjytVhq9y+v98AAAzsUB AJhpGOvEMFAiF/XPWpL7+66biAhrdnyOmE7g8uoKR4mFAQDRcwXcytlnq/XTjAsz YudJCfix/ip82oPp7sfYI1f9Cc0UPHRhcmdldEBleGFtcGxlLm9yZz7CwA4EExYK AIAFgmFRvmYDCwkHCRCtVhq9y+v98EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmd4Xa1I59mdHOAI+QaIYxdsGeVXHzcuOjUvGgXz/miNUgMV CggCmQECmwECHgEWIQQqsIwG/HlawmZzsjytVhq9y+v98AAA3KMBAM9Fy++eBpWd DQFcGqmzQZGIDsrdtARLy/dSkqsyWJ21AP0e9Wt3VvBMKCxOUDCtvkuQ3Wh26QMC ac1c1i7rSjV+CcLABwQQFgoAeQWCYVG+ogWDCWeaOwOFCngJEJ0ph2afeSs1RxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+CnICfieSEaztyh Jj5/CH2Kp89LsDaHJNiV8RlpMEm3FiEEd6b31L7gNp9wsklXnSmHZp95KzUAAEoW AQDE9cJulYs70TZ0Ox3qZD8AgYJoUwn35lR8R+aPdBQKoQD9EeREFBgYVsQ5JNy2 f//JjJCUO+0X2z7ORT9/htLKfQ7CwAcEEBYKAHkFgmFRvqIFgwlnmjsDhQoyCRBA Lo1dnX1lZ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme0 yT5RKe4rJL1WAhGneuoT/2Zj6yof6W2N9MjN8MXxiBYhBFbURBH5gnWBaeRoG0Au jV2dfWVnAACtcwEA1AaJuQzcBDyNwI7TYCSIZARKWG8nu4nhNtMUbpMFRaUBAIQJ y4bVFn73VJLY0HTP8s+U8PzBPbaCSvJg3FrFrwgLzjMEYVG+ZhYJKwYBBAHaRw8B AQdA6/c7T5FdH6qkKWsUvRxCN/qJPGxsXpekkXRIZgRbhN/CwL8EGBYKATEFgmFR vmYJEK1WGr3L6/3wRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ4+kiULMfxXArqTiLvB1mBsRFrhFJGe0Q2UFKSE3yR/fApsCvqAEGRYKAG8F gmFRvmYJEAwDb0xOSUH8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZxl7hP2oP9AyR6fBJHw+iEqkUtJjluuU7xWbu+ENYJAlFiEEG6IeqG/S zuTMU82sDANvTE5JQfwAALi0AP9n2fNnkzJef37iweCrDM8ylkr7XyiF6aCZdvzn 4rGg1gD/R+onnUHC1jEJzBirhQHVi2d2gU4ePjMLzmwnLVM+wg4WIQQqsIwG/Hla wmZzsjytVhq9y+v98AAAllUA/R71f1wyUzf7KuU1TI3mKmCpoBDG6zGGoesV/l7A u1wzAQCPWaZJf1EE9OvZF+j5fl8CF4NPgEqFt/m+t1ZB4SkpDQ== =XB2M -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root/yellow-priv.pgp000064400000000000000000000027741046102023000217410ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 86CB 4639 D1FE 096B A941 D058 22B8 AF50 198C 49DD Comment: xVgEYVG+ZhYJKwYBBAHaRw8BAQdAePl4EaUsYW32l+5BIhQGEDYI5rbrXOy3r+UF 7dgZ5S8AAQCPKocZLVFThy8F8ppvJcTjyFpnqWn9QTeqhIMFgGHVHQ5GwsALBB8W CgB9BYJhUb5mAwsJBwkQIrivUBmMSd1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn4v1CfMRpDS9WB68RYhQWicTPXQeRLDes7nFnW+giQZkD FQoIApsBAh4BFiEEhstGOdH+CWupQdBYIrivUBmMSd0AAEGtAQCZpjIahABuFlyB pbAF8XJQ6Lgjd29yCGq048J+mER+6QD/Y4Oa3VHisYDHO3QREmcjYia2Cnd/zBF+ 4XsmA3XnDArNFDx5ZWxsb3dAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhUb5mAwsJ BwkQIrivUBmMSd1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnQO+AVxCrbWJlREKGGM+ekk9hPP9xwqtdQ7rZn0jNl9oDFQoIApkBApsBAh4B FiEEhstGOdH+CWupQdBYIrivUBmMSd0AAO58AQDbn3ZHXT477RSUqOuZRCxDdQ1t ydZojuMRzwsw74AFCAD/QNVuUJu88/xXDKV3dCBBelQ63GYbQbRpMuhFJIBZow3H WARhUb5mFgkrBgEEAdpHDwEBB0Agp2LFotJ4CsBGi1d0Og07kSbUT5oWHTRqFJ3e IxTMygABAM3cu8JlZ3FKIazzB1t2V0EFJYjnaB29BX3mk7cr3VY3DwDCwL8EGBYK ATEFgmFRvmYJECK4r1AZjEndRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ4QKs7JRvSOhYGdOb5dmAvFf0ATVLBETNd/M08gwLgvrApsCvqAE GRYKAG8FgmFRvmYJECefrNTL1c3mRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZxrDDHIvYpBzAf1Xqn9muQ0nmixJbvfKM3PzwOeYjw+tFiEE eR0YITM+9LuMK8RjJ5+s1MvVzeYAALTkAQCzM+JHNetPffQ0BKat+TLmIBu6Z2C9 aAQ0JwaUUGtYYgEA5v0AjjYjf8IQcxqhYKrsYJrmriPhHTc8iBqcCUUWMQwWIQSG y0Y50f4Ja6lB0FgiuK9QGYxJ3QAACCUA/0RQbSDNW3bgU6sH5EkDAEkoD8qHE16S 1TI6u9CFiQZ9AP0TgF4XEUjvTq9qitL16Bd5TBeSbF4eJ2/Mq+1a8kBrCQ== =PCkP -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root/yellow.pgp000064400000000000000000000031131046102023000207470ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVG+ZhYJKwYBBAHaRw8BAQdAePl4EaUsYW32l+5BIhQGEDYI5rbrXOy3r+UF 7dgZ5S/CwAsEHxYKAH0FgmFRvmYDCwkHCRAiuK9QGYxJ3UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfi/UJ8xGkNL1YHrxFiFBaJxM9dB5Es N6zucWdb6CJBmQMVCggCmwECHgEWIQSGy0Y50f4Ja6lB0FgiuK9QGYxJ3QAAQa0B AJmmMhqEAG4WXIGlsAXxclDouCN3b3IIarTjwn6YRH7pAP9jg5rdUeKxgMc7dBES ZyNiJrYKd3/MEX7heyYDdecMCs0UPHllbGxvd0BleGFtcGxlLm9yZz7CwA4EExYK AIAFgmFRvmYDCwkHCRAiuK9QGYxJ3UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdA74BXEKttYmVEQoYYz56ST2E8/3HCq11DutmfSM2X2gMV CggCmQECmwECHgEWIQSGy0Y50f4Ja6lB0FgiuK9QGYxJ3QAA7nwBANufdkddPjvt FJSo65lELEN1DW3J1miO4xHPCzDvgAUIAP9A1W5Qm7zz/FcMpXd0IEF6VDrcZhtB tGky6EUkgFmjDcLABwQQFgoAeQWCYVG+ogWDCWeaOwOFCjIJEL8SxNHSj9/7RxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2IcFRqlanuJhOFi Y4oWmOR2JaWzZ1KR+8sSE43mzYQOFiEEuV/1sdBV0m91j9TjvxLE0dKP3/sAAOhZ AQDa3ZbxaQOGGPzyv5A+York7RgzLiZGYB0MIC9WRDNNOAD/USdBI1cI5Rs6c05r OxkK3jiq59kmWd9/5xssX5jx7AfOMwRhUb5mFgkrBgEEAdpHDwEBB0Agp2LFotJ4 CsBGi1d0Og07kSbUT5oWHTRqFJ3eIxTMysLAvwQYFgoBMQWCYVG+ZgkQIrivUBmM Sd1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnhAqzslG9 I6FgZ05vl2YC8V/QBNUsERM138zTyDAuC+sCmwK+oAQZFgoAbwWCYVG+ZgkQJ5+s 1MvVzeZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnGsMM ci9ikHMB/Veqf2a5DSeaLElu98ozc/PA55iPD60WIQR5HRghMz70u4wrxGMnn6zU y9XN5gAAtOQBALMz4kc160999DQEpq35MuYgG7pnYL1oBDQnBpRQa1hiAQDm/QCO NiN/whBzGqFgquxgmuauI+EdNzyIGpwJRRYxDBYhBIbLRjnR/glrqUHQWCK4r1AZ jEndAAAIJQD/RFBtIM1bduBTqwfkSQMASSgPyocTXpLVMjq70IWJBn0A/ROAXhcR SO9Or2qK0vXoF3lMF5JsXh4nb8yr7VryQGsJ =h9jn -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root/zebra-priv.pgp000064400000000000000000000027671046102023000215330ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 56D4 4411 F982 7581 69E4 681B 402E 8D5D 9D7D 6567 Comment: xVgEYVG+ZhYJKwYBBAHaRw8BAQdAETEZjg8JmeJhYxpHXfooNuZMvI0udYYfrqCs Jb9v8gEAAPwLioX7IoGmWkTLpNe12ls/uwipe/jque8wRjHgHbXgbxKAwsALBB8W CgB9BYJhUb5mAwsJBwkQQC6NXZ19ZWdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn7Q1AzoJAYVugAfjnLR9lksYV1HpdaL1u0mIlk+C4BlsD FQoIApsBAh4BFiEEVtREEfmCdYFp5GgbQC6NXZ19ZWcAAJ63AQDmnMk/Z5nHHxTo s+Ed35wSEdR/56DrmDzBC/b/JaNuyAEA1ufTeHZtP7egn+0tBFQxnyiJ2SPwmo4h omIag91+OAbNEzx6ZWJyYUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFRvmYDCwkH CRBALo1dnX1lZ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdFr7lFOw4Suu8ZUDSpBTPHGUPkHm9YiBAUB/i/fhoNygMVCggCmQECmwECHgEW IQRW1EQR+YJ1gWnkaBtALo1dnX1lZwAAnOYBAKLRv8vJX8reKsqwPGNEP8nEJIHa TjY4TY+1zSm5PJETAP9JbDjKaGmiMRQQMADD2/TRBbjJecDdUyMxlaw5HCsFCcdY BGFRvmYWCSsGAQQB2kcPAQEHQCNkNzecTa57qn2/FGUv2FqFqBOsiFKI+zUdcTYO oCObAAEAgIYmCxHrHvSrHj6G5MnQYePVfbdBqk1JgeyLZ1viffcRLsLAvwQYFgoB MQWCYVG+ZgkQQC6NXZ19ZWdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnRQDTzAsAWpqUQtutk7/z+lc4k7VP+qxZbnF7TIOY/foCmwK+oAQZ FgoAbwWCYVG+ZgkQEu26sGKWDLxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnlhVegUgHDD057Yn2fuXzzVsGX0wvFiDRT1c8tA8Um1AWIQS4 8jhDk6rbXd5+yj0S7bqwYpYMvAAAoKMBAIULH5GmrkyOpPSgWXC8jQ/ZPCkfQmOo d4s5i8rFno5nAQCa8XEeMxFn7rDoMPxpo+5fq+a309AdI5dUG0Mr1E2xARYhBFbU RBH5gnWBaeRoG0AujV2dfWVnAACHGAEA9alOxTy1fp05m69E2sY9pijJsSB3a27w m0CYaFVasw0A/2FvFemkze/CAggl68ubnn8aczzIU9093Wr0qxmriZcK =tp9s -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root/zebra.pgp000064400000000000000000000031131046102023000205370ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVG+ZhYJKwYBBAHaRw8BAQdAETEZjg8JmeJhYxpHXfooNuZMvI0udYYfrqCs Jb9v8gHCwAsEHxYKAH0FgmFRvmYDCwkHCRBALo1dnX1lZ0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmftDUDOgkBhW6AB+OctH2WSxhXUel1o vW7SYiWT4LgGWwMVCggCmwECHgEWIQRW1EQR+YJ1gWnkaBtALo1dnX1lZwAAnrcB AOacyT9nmccfFOiz4R3fnBIR1H/noOuYPMEL9v8lo27IAQDW59N4dm0/t6Cf7S0E VDGfKInZI/CajiGiYhqD3X44Bs0TPHplYnJhQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVG+ZgMLCQcJEEAujV2dfWVnRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ0WvuUU7DhK67xlQNKkFM8cZQ+Qeb1iIEBQH+L9+Gg3KAxUK CAKZAQKbAQIeARYhBFbURBH5gnWBaeRoG0AujV2dfWVnAACc5gEAotG/y8lfyt4q yrA8Y0Q/ycQkgdpONjhNj7XNKbk8kRMA/0lsOMpoaaIxFBAwAMPb9NEFuMl5wN1T IzGVrDkcKwUJwsAHBBAWCgB5BYJhUb6iBYMJZ5o7A4UKMgkQIrivUBmMSd1HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JncVKMezKHLiFIRL6Y gWbZl5lPAmX2nhSzNDe0B9ORu/0WIQSGy0Y50f4Ja6lB0FgiuK9QGYxJ3QAAOtoB AP7Fh/fvdhltpiRmed2yvXb6HOE49wDA6uOMDFvpMVdqAP4pXWHS74lRiRGqTMvH 4kMwfVF3I52gu73fc9hejPCIBM4zBGFRvmYWCSsGAQQB2kcPAQEHQCNkNzecTa57 qn2/FGUv2FqFqBOsiFKI+zUdcTYOoCObwsC/BBgWCgExBYJhUb5mCRBALo1dnX1l Z0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdFANPMCwBa mpRC262Tv/P6VziTtU/6rFlucXtMg5j9+gKbAr6gBBkWCgBvBYJhUb5mCRAS7bqw YpYMvEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeWFV6B SAcMPTntifZ+5fPNWwZfTC8WINFPVzy0DxSbUBYhBLjyOEOTqttd3n7KPRLturBi lgy8AACgowEAhQsfkaauTI6k9KBZcLyND9k8KR9CY6h3izmLysWejmcBAJrxcR4z EWfusOgw/Gmj7l+r5rfT0B0jl1QbQyvUTbEBFiEEVtREEfmCdYFp5GgbQC6NXZ19 ZWcAAIcYAQD1qU7FPLV+nTmbr0Taxj2mKMmxIHdrbvCbQJhoVVqzDQD/YW8V6aTN 78ICCCXry5uefxpzPMhT3T3davSrGauJlwo= =Fn/K -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root.pgp000064400000000000000000000220551046102023000174420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVG+ZhYJKwYBBAHaRw8BAQdAtdsP6WxEKhz0Hlc3oNBnUCdEdQ0TL7iRSzB5 qoauNtzCwAsEHxYKAH0FgmFRvmYDCwkHCRCdKYdmn3krNUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdq+txOS4WmRytttTJbstrZeUVff5AK S/Cgso2zLbxjSwMVCggCmwECHgEWIQR3pvfUvuA2n3CySVedKYdmn3krNQAAGi4A /2OnTQcMgE/XnApp2loueCzMTE9BMuurNELIlsvH5rNlAQDcSrO3buOu1zN2iBVe wsHF5m6p5VkFIiyw9MuQdp+dDc0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVG+ZgMLCQcJEJ0ph2afeSs1RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ6mkj1mcU0ePSGN0HGwlQsfjVIsNXhq/SjJDMs5HPS5lAxUK CAKZAQKbAQIeARYhBHem99S+4DafcLJJV50ph2afeSs1AADiUQEA1sR8eYcAsfYl n8xxkGvJNIBwma3sdjNZUIewq781QS4A/1CFjkbDphqebEKMy6tLdIvC1PJl3tLt Nt1XojF5EtkGwsAHBBAWCgB5BYJhUb6iBYMJZ5o7A4UKeAkQwEjf+WYB2b1HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnu06YdDh0oqZ/PR9J wfNni4kdDHRqakE39f82pH8MjZYWIQRqi57H0KGyl7XUp6HASN/5ZgHZvQAAKrAB AIgb/maaqGjvekaTZZ6ZLrm7yN3o/T5YSqcFiQhCCAkvAP45lS+pl6ZiyTdjhCfv AiRzVrjIiC5jZZGXsd68pSqeD84zBGFRvmYWCSsGAQQB2kcPAQEHQBJRCBxyGfbm /xDAQf8Cbhn+b0wKDGVi2eKKp/fD50YcwsC/BBgWCgExBYJhUb5mCRCdKYdmn3kr NUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcgXBOBo19E FZLxiZgOhgPQoYxn2/IS0UYoIPiRs4Z4WQKbAr6gBBkWCgBvBYJhUb5mCRCOWe/r HOpknkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfEpXIZ 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 59kmWd9/5xssX5jx7AfOMwRhUb5mFgkrBgEEAdpHDwEBB0Agp2LFotJ4CsBGi1d0 Og07kSbUT5oWHTRqFJ3eIxTMysLAvwQYFgoBMQWCYVG+ZgkQIrivUBmMSd1HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnhAqzslG9I6FgZ05v l2YC8V/QBNUsERM138zTyDAuC+sCmwK+oAQZFgoAbwWCYVG+ZgkQJ5+s1MvVzeZH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnGsMMci9ikHMB /Veqf2a5DSeaLElu98ozc/PA55iPD60WIQR5HRghMz70u4wrxGMnn6zUy9XN5gAA tOQBALMz4kc160999DQEpq35MuYgG7pnYL1oBDQnBpRQa1hiAQDm/QCONiN/whBz GqFgquxgmuauI+EdNzyIGpwJRRYxDBYhBIbLRjnR/glrqUHQWCK4r1AZjEndAAAI JQD/RFBtIM1bduBTqwfkSQMASSgPyocTXpLVMjq70IWJBn0A/ROAXhcRSO9Or2qK 0vXoF3lMF5JsXh4nb8yr7VryQGsJxjMEYVG+ZhYJKwYBBAHaRw8BAQdA3gLEoo5N Qo65WGpyLWgvA8hrFSjJ0cuULq5En3cIkpfCwAsEHxYKAH0FgmFRvmYDCwkHCRDA SN/5ZgHZvUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeS dsZ/hsxXLqtMoqpks0go13beDgRuabMrX0vyQiG0KwMVCggCmwECHgEWIQRqi57H 0KGyl7XUp6HASN/5ZgHZvQAAnOAA/0K5xyd62gYm3O0jsvjFAaORukvyYdFI4dav WLn0pCuGAQDOX/985pOEM2qo6fwMmvIyB3Aya8AyH15kHRT3zWZpDs0RPGJvYkBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgmFRvmYDCwkHCRDASN/5ZgHZvUcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmftn31Kb0lfvDfKgqfk/wa5 WKd0pa9sdIgjCRSUoBn6jgMVCggCmQECmwECHgEWIQRqi57H0KGyl7XUp6HASN/5 ZgHZvQAAd9YA/15bWZ+7nwQJ3+gtCAG5IZCrBtEzicQ0uj89zXyuC9SvAP9NwkHB UhvkZ1G/V2xvnWKrx3tbQvNsbjehxiqqbfjFCcLABwQQFgoAeQWCYVG+ogWDCWea OwOFCngJEL8SxNHSj9/7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ9FN5ZWk9vGF1Ik/QBaK98YETkm5EYK/1tW4j+kkwOMzFiEEuV/1sdBV 0m91j9TjvxLE0dKP3/sAAIXwAP0a8R5Pj2haj9pG8FG7bkApz5w4hULStiHwLgGK MtVNMwEA34cn9weR2AmYMACODV+LY01SOqT3XvP4eyUE7ydkHAPOMwRhUb5mFgkr BgEEAdpHDwEBB0CYFpFQqqkkprOV+kHW5PBgRi5uD+i8BKxMya22yOrNC8LAvwQY FgoBMQWCYVG+ZgkQwEjf+WYB2b1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnosQCXlYachJTg4xf3sBXijHYCvubmBnvGM4LCOQQr+0CmwK+ oAQZFgoAbwWCYVG+ZgkQb5eTU2hVY5hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnx7pbElDoeBjCBNj3Ho8ZaNQgosLtbO3sEZ4QC1beuK0W IQQOauvaJfRpkXt6zsBvl5NTaFVjmAAA8TkBAKLuLPW6h8ipAMea8fRGnDacAAKO y/ZHEZMdaSJIoaypAQDi7VD3j67yRpTVl0M66DzleinkO085FQlHP/UzBTyvBhYh BGqLnsfQobKXtdSnocBI3/lmAdm9AABcYAEAwInWhvRBAEElclbO6JvcijAOfMKh tSxrVCVzCLkTJL0A/RI+Of0QWp9BMvElx5hDM/YKhxhYdr1CLopo0USqwPIKxjME YVG+ZhYJKwYBBAHaRw8BAQdAETEZjg8JmeJhYxpHXfooNuZMvI0udYYfrqCsJb9v 8gHCwAsEHxYKAH0FgmFRvmYDCwkHCRBALo1dnX1lZ0cUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmftDUDOgkBhW6AB+OctH2WSxhXUel1ovW7S YiWT4LgGWwMVCggCmwECHgEWIQRW1EQR+YJ1gWnkaBtALo1dnX1lZwAAnrcBAOac yT9nmccfFOiz4R3fnBIR1H/noOuYPMEL9v8lo27IAQDW59N4dm0/t6Cf7S0EVDGf KInZI/CajiGiYhqD3X44Bs0TPHplYnJhQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YVG+ZgMLCQcJEEAujV2dfWVnRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ0WvuUU7DhK67xlQNKkFM8cZQ+Qeb1iIEBQH+L9+Gg3KAxUKCAKZ AQKbAQIeARYhBFbURBH5gnWBaeRoG0AujV2dfWVnAACc5gEAotG/y8lfyt4qyrA8 Y0Q/ycQkgdpONjhNj7XNKbk8kRMA/0lsOMpoaaIxFBAwAMPb9NEFuMl5wN1TIzGV rDkcKwUJwsAHBBAWCgB5BYJhUb6iBYMJZ5o7A4UKMgkQIrivUBmMSd1HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JncVKMezKHLiFIRL6YgWbZ l5lPAmX2nhSzNDe0B9ORu/0WIQSGy0Y50f4Ja6lB0FgiuK9QGYxJ3QAAOtoBAP7F h/fvdhltpiRmed2yvXb6HOE49wDA6uOMDFvpMVdqAP4pXWHS74lRiRGqTMvH4kMw fVF3I52gu73fc9hejPCIBM4zBGFRvmYWCSsGAQQB2kcPAQEHQCNkNzecTa57qn2/ FGUv2FqFqBOsiFKI+zUdcTYOoCObwsC/BBgWCgExBYJhUb5mCRBALo1dnX1lZ0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdFANPMCwBampRC 262Tv/P6VziTtU/6rFlucXtMg5j9+gKbAr6gBBkWCgBvBYJhUb5mCRAS7bqwYpYM vEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeWFV6BSAcM PTntifZ+5fPNWwZfTC8WINFPVzy0DxSbUBYhBLjyOEOTqttd3n7KPRLturBilgy8 AACgowEAhQsfkaauTI6k9KBZcLyND9k8KR9CY6h3izmLysWejmcBAJrxcR4zEWfu sOgw/Gmj7l+r5rfT0B0jl1QbQyvUTbEBFiEEVtREEfmCdYFp5GgbQC6NXZ19ZWcA AIcYAQD1qU7FPLV+nTmbr0Taxj2mKMmxIHdrbvCbQJhoVVqzDQD/YW8V6aTN78IC CCXry5uefxpzPMhT3T3davSrGauJlwrGMwRhUb5mFgkrBgEEAdpHDwEBB0APESbb kWx6nSowSdoQMba351ps5nFYpMByInDp+XIriMLACwQfFgoAfQWCYVG+ZgMLCQcJ EK1WGr3L6/3wRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z88IVMXePQwungc/yoRR0VhYJina7VykDTOrDCPLkgGWAxUKCAKbAQIeARYhBCqw jAb8eVrCZnOyPK1WGr3L6/3wAADOxQEAmGkY68QwUCIX9c9akvv7rpuICGt2fI6Y TuDy6gpHiYUBANFzBdzK2Wer9dOMCzNi50kJ+LH+Knzag+nux9gjV/0JzRQ8dGFy Z2V0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVG+ZgMLCQcJEK1WGr3L6/3wRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3hdrUjn2Z0c4Aj5 BohjF2wZ5VcfNy46NS8aBfP+aI1SAxUKCAKZAQKbAQIeARYhBCqwjAb8eVrCZnOy PK1WGr3L6/3wAADcowEAz0XL754GlZ0NAVwaqbNBkYgOyt20BEvL91KSqzJYnbUA /R71a3dW8EwoLE5QMK2+S5DdaHbpAwJpzVzWLutKNX4JwsAHBBAWCgB5BYJhUb6i BYMJZ5o7A4UKeAkQnSmHZp95KzVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn4KcgJ+J5IRrO3KEmPn8IfYqnz0uwNock2JXxGWkwSbcWIQR3 pvfUvuA2n3CySVedKYdmn3krNQAAShYBAMT1wm6VizvRNnQ7HepkPwCBgmhTCffm VHxH5o90FAqhAP0R5EQUGBhWxDkk3LZ//8mMkJQ77RfbPs5FP3+G0sp9DsLABwQQ FgoAeQWCYVG+ogWDCWeaOwOFCjIJEEAujV2dfWVnRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7TJPlEp7iskvVYCEad66hP/ZmPrKh/pbY30 yM3wxfGIFiEEVtREEfmCdYFp5GgbQC6NXZ19ZWcAAK1zAQDUBom5DNwEPI3AjtNg JIhkBEpYbye7ieE20xRukwVFpQEAhAnLhtUWfvdUktjQdM/yz5Tw/ME9toJK8mDc WsWvCAvOMwRhUb5mFgkrBgEEAdpHDwEBB0Dr9ztPkV0fqqQpaxS9HEI3+ok8bGxe l6SRdEhmBFuE38LAvwQYFgoBMQWCYVG+ZgkQrVYavcvr/fBHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnj6SJQsx/FcCupOIu8HWYGxEWuEUk Z7RDZQUpITfJH98CmwK+oAQZFgoAbwWCYVG+ZgkQDANvTE5JQfxHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnGXuE/ag/0DJHp8EkfD6ISqRS 0mOW65TvFZu74Q1gkCUWIQQboh6ob9LO5MxTzawMA29MTklB/AAAuLQA/2fZ82eT Ml5/fuLB4KsMzzKWSvtfKIXpoJl2/OfisaDWAP9H6iedQcLWMQnMGKuFAdWLZ3aB Th4+MwvObCctUz7CDhYhBCqwjAb8eVrCZnOyPK1WGr3L6/3wAACWVQD9HvV/XDJT N/sq5TVMjeYqYKmgEMbrMYah6xX+XsC7XDMBAI9Zpkl/UQT069kX6Pl+XwIXg0+A SoW3+b63VkHhKSkN =SZhf -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/best-via-root.sh000075500000000000000000000005271046102023000172710ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=best-via-root ${@:+"$@"} key alice key bob key carol key yellow key zebra key target certify alice -a 120 -d 10 bob certify bob -a 120 -d 10 carol certify carol -a 120 -d 10 target certify alice -a 50 -d 10 yellow certify yellow -a 50 -d 10 zebra certify zebra -a 50 -d 10 target finish sequoia-wot-0.11.0/tests/data/cert-expired/README.md000064400000000000000000000010231046102023000201010ustar 00000000000000Check that an expired certificate can't be authenticated and can't be used to authenticate other certificates. t0: Create A, B, C t1: Create certifications (amount = 60) t2: B expires. t3: Create certifications (amount = 120) ``` A | 1/60 B | 1/60 C ``` At t3, the new certifications are ignored, because they were created after B expired. At t3, B can still be used as a trusted introducer for C, because the initial certifications were created before it expired, but it is no longer possible to authenticate B. sequoia-wot-0.11.0/tests/data/cert-expired/alice-priv.pgp000064400000000000000000000015651046102023000214000ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 1FA6 2523 FB7C 06E7 1EEF B82B B515 9F3F C3EB 3AC9 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdATXrAyUpui/3b3LgHbAOQYhFwMoEuaSG4qgzg L+mcE6IAAQDYmyaHbhqduVKdUZiE48hBsC0+Ytzda5b1l7/3yhXgBhGFwsALBB8W CgB9BYJeC+EAAwsJBwkQtRWfP8PrOslHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jne1BHl5HijvA3CM/nTKc7DDxauWNw6ZI8bGc/S7O0PtwD FQoIApsBAh4BFiEEH6YlI/t8Buce77grtRWfP8PrOskAAOsOAP9mi7Wgwg7rUZaE 0ef/Jf+CLxag58FoD1WZtJ3imKwirQEAzcC6nf1Fb3xfs71tpjGsfFE+sHzkwpzE 7RBdujSr5g7NEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRC1FZ8/w+s6yUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmefKDGxs7+8Va1xt8Vr97WmEXSxCTiKmJ3rjQZSc6sVNAMVCggCmQECmwECHgEW IQQfpiUj+3wG5x7vuCu1FZ8/w+s6yQAAB/IBAIjZxJ0Ng1KXl15+6Z6XAQDFBGbo 3UTcgXP5figJSU0cAP9Wc+vcFxGrZ/V+6UuN6QEgmESADFWmmxX57AQWjsCwAA== =b+cO -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-expired/alice.pgp000064400000000000000000000014771046102023000204240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 1FA6 2523 FB7C 06E7 1EEF B82B B515 9F3F C3EB 3AC9 Comment: xjMEXgvhABYJKwYBBAHaRw8BAQdATXrAyUpui/3b3LgHbAOQYhFwMoEuaSG4qgzg L+mcE6LCwAsEHxYKAH0Fgl4L4QADCwkHCRC1FZ8/w+s6yUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd7UEeXkeKO8DcIz+dMpzsMPFq5Y3Dp kjxsZz9Ls7Q+3AMVCggCmwECHgEWIQQfpiUj+3wG5x7vuCu1FZ8/w+s6yQAA6w4A /2aLtaDCDutRloTR5/8l/4IvFqDnwWgPVZm0neKYrCKtAQDNwLqd/UVvfF+zvW2m Max8UT6wfOTCnMTtEF26NKvmDs0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJELUVnz/D6zrJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ58oMbGzv7xVrXG3xWv3taYRdLEJOIqYneuNBlJzqxU0AxUK CAKZAQKbAQIeARYhBB+mJSP7fAbnHu+4K7UVnz/D6zrJAAAH8gEAiNnEnQ2DUpeX Xn7pnpcBAMUEZujdRNyBc/l+KAlJTRwA/1Zz69wXEatn9X7pS43pASCYRIAMVaab FfnsBBaOwLAA =pKNz -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-expired/bob-priv.pgp000064400000000000000000000016001046102023000210530ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B166 B31A E5F9 5600 B3F7 184F E74C 6CE6 2821 686F Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdABIJwX4aZZ+yg0WZB9pOWot1w60qpT9eSgfcP gCRz+6gAAQCApS+NXnTbJeVGQai0AYP7KJ/PFLu5arMXT0zagBSPnA+BwsARBB8W CgCDBYJeC+EABYkAO1OAAwsJBwkQ50xs5ighaG9HFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnEYzrF4sIztep1jbw9rXQOdtNoOzTNH7GySDD tdzYcGEDFQoIApsBAh4BFiEEsWazGuX5VgCz9xhP50xs5ighaG8AACHQAP9aUAlv D9RpAUVxMnQ6Y2GlvHy8yJZjganxdZONgB40ygD+P1JDhddx0+DNxe95g8wHG3eH gaJw9NCk+3TKN+DXyAvNETxib2JAZXhhbXBsZS5vcmc+wsAUBBMWCgCGBYJeC+EA BYkAO1OAAwsJBwkQ50xs5ighaG9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnb0ESP02owyzhUGuneFuFcbNdPmfhzstouocg82bwG+MDFQoI ApkBApsBAh4BFiEEsWazGuX5VgCz9xhP50xs5ighaG8AAHxGAQCV8yA70heXpERl MpT+JEldvgOfLI2qzqSzO3rraAyIaAD8CrVt6j09a6a60OCAS+JAUkkfmaJzXQSA ppdlmv/TrAg= =iOqs -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-expired/bob.pgp000064400000000000000000000024061046102023000201020ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdABIJwX4aZZ+yg0WZB9pOWot1w60qpT9eSgfcP gCRz+6jCwBEEHxYKAIMFgl4L4QAFiQA7U4ADCwkHCRDnTGzmKCFob0cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcRjOsXiwjO16nWNvD2tdA5 202g7NM0fsbJIMO13NhwYQMVCggCmwECHgEWIQSxZrMa5flWALP3GE/nTGzmKCFo bwAAIdAA/1pQCW8P1GkBRXEydDpjYaW8fLzIlmOBqfF1k42AHjTKAP4/UkOF13HT 4M3F73mDzAcbd4eBonD00KT7dMo34NfIC80RPGJvYkBleGFtcGxlLm9yZz7CwBQE ExYKAIYFgl4L4QAFiQA7U4ADCwkHCRDnTGzmKCFob0cUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmdvQRI/TajDLOFQa6d4W4Vxs10+Z+HOy2i6 hyDzZvAb4wMVCggCmQECmwECHgEWIQSxZrMa5flWALP3GE/nTGzmKCFobwAAfEYB AJXzIDvSF5ekRGUylP4kSV2+A58sjarOpLM7eutoDIhoAPwKtW3qPT1rprrQ4IBL 4kBSSR+ZonNdBICml2Wa/9OsCMLAAQQQFgoAcwWCXoPZgAOFAXgJELUVnz/D6zrJ RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwUM6yU3aTp0 uK2RbgzWDZ4NyPuEhU6nozuKwuuhSZpoFiEEH6YlI/t8Buce77grtRWfP8PrOskA AOx/AP44qJCZ4ngiWbDZIE1OlcdiB78s94Lw8JcHboXRgvZ+ngD/b6E1U5kT7LFV HiqBoiODew1iYpvLDNK2ABiJMyrUvQTCwAEEEBYKAHMFgl40v4ADhQE8CRC1FZ8/ w+s6yUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJDQk4 i8Gw6FyK8XN1hbHOTX/Uh11CBiq+bJeKR+HkQhYhBB+mJSP7fAbnHu+4K7UVnz/D 6zrJAAB8mAD+IblINnsm1c+y9xG9V/lftswLtJq2z8RFyGw1fSBIyNABAPFovLKu UKBtZhcRcT1X3Ac43/7uxDIKTnN3408/kGQO =YaH7 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-expired/carol-priv.pgp000064400000000000000000000015651046102023000214230ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 81CD 118A C5BD 9156 DC11 3772 6262 22D7 6ACD FFCF Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAzUb8eFTHAXSA2SSHOZHcHVArNx9Xh234FDqa cBEHFtAAAQCMAem3Pi1nyV4/5nX1K7vVcGbIBSTGUAA4QfUz10LhhQ9uwsALBB8W CgB9BYJeC+EAAwsJBwkQYmIi12rN/89HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnpsH8DBimxHKOn5y2tNV1dmlE6bJP2xcEKSkXzm4xQCID FQoIApsBAh4BFiEEgc0RisW9kVbcETdyYmIi12rN/88AACMHAP9xdMxIYa8xXDvV JlvwNVAqoBll9jvM+ALL76ovG6H8ywD/cqtKzFZEQSs8dl8e7cRzB6inLGrK7rLx XmLj0osZOAfNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRBiYiLXas3/z0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdK9Q9TWmJ99cfJwLbU7iBj14j8Agu9HwdFRZBrj72/XgMVCggCmQECmwECHgEW IQSBzRGKxb2RVtwRN3JiYiLXas3/zwAAHTwA/iI8lURaDUEC77V8bXh00s9+A8EU xzrSKc2NDmpaJd5TAQCqULjyiX0O4ZfqnmnZS1QbzPtibdT9TzjxEv5yUG99CQ== =9cvf -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-expired/carol.pgp000064400000000000000000000023721046102023000204420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAzUb8eFTHAXSA2SSHOZHcHVArNx9Xh234FDqa cBEHFtDCwAsEHxYKAH0Fgl4L4QADCwkHCRBiYiLXas3/z0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmemwfwMGKbEco6fnLa01XV2aUTpsk/b FwQpKRfObjFAIgMVCggCmwECHgEWIQSBzRGKxb2RVtwRN3JiYiLXas3/zwAAIwcA /3F0zEhhrzFcO9UmW/A1UCqgGWX2O8z4Asvvqi8bofzLAP9yq0rMVkRBKzx2Xx7t xHMHqKcsasrusvFeYuPSixk4B80TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEGJiItdqzf/PRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ0r1D1NaYn31x8nAttTuIGPXiPwCC70fB0VFkGuPvb9eAxUK CAKZAQKbAQIeARYhBIHNEYrFvZFW3BE3cmJiItdqzf/PAAAdPAD+IjyVRFoNQQLv tXxteHTSz34DwRTHOtIpzY0Oalol3lMBAKpQuPKJfQ7hl+qeadlLVBvM+2Jt1P1P OPES/nJQb30JwsABBBAWCgBzBYJeg9mAA4UBeAkQ50xs5ighaG9HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnmci/smAcjO2qXVUWPLeW0GfG tblTecaNGlk9oLl0qFIWIQSxZrMa5flWALP3GE/nTGzmKCFobwAAtvkA/A+QnD4s YtHJdwdo55jJpCL+ryqsHqYx4pQ70UYamqaMAQDUJ8Fdvs8+eXBNVputSZB4hGlz OrpqI1nvZkk86abTBMLAAQQQFgoAcwWCXjS/gAOFATwJEOdMbOYoIWhvRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4kEVS3AEUP+GyNzfNl0 9E8C+asrfRxDmtBKyN7fynxpFiEEsWazGuX5VgCz9xhP50xs5ighaG8AAIAEAP9+ g2LHdFWY4wwZHKmQx1XDAvDZFkKe6r8WbSXC6Kn5hQD/aVCyFnJyB3s5HZf2OlIK aUrHgM0ThUPsV5rRfLiBJwk= =oFcD -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-expired.pgp000064400000000000000000000061071046102023000173420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- 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 Tz+QZA4= =Sesf -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-expired.sh000075500000000000000000000005201046102023000171620ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=cert-expired ${@:+"$@"} t0=20200101 t1=20200201 t2=20200301 t3=20200401 key -t $t0 alice key -t $t0 bob -e 45d key -t $t0 carol set -x certify -t $t1 alice -a 60 -d 1 bob certify -t $t1 bob -a 60 -d 1 carol certify -t $t3 alice -a 120 -d 1 bob certify -t $t3 bob -a 120 -d 1 carol finish sequoia-wot-0.11.0/tests/data/cert-revoked-hard/README.md000064400000000000000000000000731046102023000210200ustar 00000000000000The same as cert-revoked-soft, but using hard revocations. sequoia-wot-0.11.0/tests/data/cert-revoked-hard/alice-priv.pgp000064400000000000000000000027671046102023000223200ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 219A AB66 1C8A AF45 26DB C31A A751 A7A0 5328 63BA Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAmBAnRPbQ8kxpYFYNyi/iJs2L/1EvB44dVd0Z KfrP+KUAAP4sfikrk48o5FqtMVO4SIfgKgWaED5XBoel7wb9VPe5tA9mwsALBB8W CgB9BYJeC+EAAwsJBwkQp1GnoFMoY7pHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnrrp8nGBKAS9s9DPi1DF/eWrc2X5GuVbqwo1obIQiVekD FQoIApsBAh4BFiEEIZqrZhyKr0Um28Map1GnoFMoY7oAAOAAAP95Yjlzc6c1DRgG 6RRxLyl6WQ+Yt++bqNPvVBeCE/JaUAD+KVzz6tg0laxg73Wa3A86PWl8DSP/sM+V Cj1F59rWSgvNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRCnUaegUyhjukcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmf+nLRresM4OUw5IQ2F65CoRxZJZDcxRH8u+bjpOOn4NwMVCggCmQECmwECHgEW IQQhmqtmHIqvRSbbwxqnUaegUyhjugAAXL0BAOMGTJjnr/0aMBPshQUDaOqSmCjC JnpmBBjxvvvbbZmeAP98rIcBjEcWy/hlrIX3qzhSrql8R5Gwdki0HOc+ShSICMdY BF4L4QAWCSsGAQQB2kcPAQEHQKo3pl6tubfeHKSKbpVKikfAzPUCBMndCS09W9Vr Trm9AAEAribOSTFYuMV9/lT2MOVEzaC+UTk51cp66yeOFoadZ0wQo8LAvwQYFgoB MQWCXgvhAAkQp1GnoFMoY7pHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnIxpOnoggkhxqfgrQ9hl1HzSw26rfn6aTXSjJYi6IlUoCmwK+oAQZ FgoAbwWCXgvhAAkQFTOtU8J+KZ5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnJgzHoFOTSk00GIJArhJs6yftKv7YMYbhaw+tNq8m1hEWIQQ1 93t1QeMWecnP2ZcVM61Twn4pngAA/h4BAN+yKBCPqkM2bcOqhhRROKBisUX5rr64 lpfABetMWH+BAP41Vl8optaB23KW3DEoQxieGQ65d57/24jBlzVQR58cABYhBCGa q2Yciq9FJtvDGqdRp6BTKGO6AAD7bwD+OKq0/6zLmLjrfPjdyW7HsetdzxBHx3eq 7XpWiMjkb30BAMepoQwNqIdDTADwEsi5sjAquj1i8CVevythvHCBBL0F =P7s8 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-hard/alice.pgp000064400000000000000000000026241046102023000213320ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 219A AB66 1C8A AF45 26DB C31A A751 A7A0 5328 63BA Comment: xjMEXgvhABYJKwYBBAHaRw8BAQdAmBAnRPbQ8kxpYFYNyi/iJs2L/1EvB44dVd0Z KfrP+KXCwAsEHxYKAH0Fgl4L4QADCwkHCRCnUaegUyhjukcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeuunycYEoBL2z0M+LUMX95atzZfka5 VurCjWhshCJV6QMVCggCmwECHgEWIQQhmqtmHIqvRSbbwxqnUaegUyhjugAA4AAA /3liOXNzpzUNGAbpFHEvKXpZD5i375uo0+9UF4IT8lpQAP4pXPPq2DSVrGDvdZrc Dzo9aXwNI/+wz5UKPUXn2tZKC80TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEKdRp6BTKGO6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ/6ctGt6wzg5TDkhDYXrkKhHFklkNzFEfy75uOk46fg3AxUK CAKZAQKbAQIeARYhBCGaq2Yciq9FJtvDGqdRp6BTKGO6AABcvQEA4wZMmOev/Row E+yFBQNo6pKYKMImemYEGPG++9ttmZ4A/3yshwGMRxbL+GWshferOFKuqXxHkbB2 SLQc5z5KFIgIzjMEXgvhABYJKwYBBAHaRw8BAQdAqjemXq25t94cpIpulUqKR8DM 9QIEyd0JLT1b1WtOub3CwL8EGBYKATEFgl4L4QAJEKdRp6BTKGO6RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyMaTp6IIJIcan4K0PYZdR80 sNuq35+mk10oyWIuiJVKApsCvqAEGRYKAG8Fgl4L4QAJEBUzrVPCfimeRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyYMx6BTk0pNNBiCQK4S bOsn7Sr+2DGG4WsPrTavJtYRFiEENfd7dUHjFnnJz9mXFTOtU8J+KZ4AAP4eAQDf sigQj6pDNm3DqoYUUTigYrFF+a6+uJaXwAXrTFh/gQD+NVZfKKbWgdtyltwxKEMY nhkOuXee/9uIwZc1UEefHAAWIQQhmqtmHIqvRSbbwxqnUaegUyhjugAA+28A/jiq tP+sy5i463z43clux7HrXc8QR8d3qu16VojI5G99AQDHqaEMDaiHQ0wA8BLIubIw Kro9YvAlXr8rYbxwgQS9BQ== =U4qF -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-hard/bob-priv.pgp000064400000000000000000000027611046102023000217770ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 90E0 2BFB 03FA A047 14D1 D3D8 7543 157E F3B1 2BE9 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAbVLG9NJpNM1NJQ7UW/cOT6hWoClypLrIwhaB ZmW+Fh8AAQCQZrllyACKSQGWxa5PBtrPCwefddRyH7q9mG2O47TJhRAywsALBB8W CgB9BYJeC+EAAwsJBwkQdUMVfvOxK+lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnMIBwRvqbORueUzCqQ6wTO3J6OM1Hw+kJgrHjKRdkeUcD FQoIApsBAh4BFiEEkOAr+wP6oEcU0dPYdUMVfvOxK+kAAJ0NAP0fpH/6ofJPHGY2 5LCNQ5ZrPxTAZo27QSeFzrxW0j+OxwD8CKpHFEbFYB8fBtHAjp2vIxT7RmOgbBQk 1f5EGhapBAvNETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJeC+EAAwsJBwkQ dUMVfvOxK+lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 5DxIDi+CjKIOl3tHtGdSSVe8b7apUMFKCUOY/klX8iQDFQoIApkBApsBAh4BFiEE kOAr+wP6oEcU0dPYdUMVfvOxK+kAAI0JAP4mnv7AMpN8fCkUhIdUq8jH6f3FxJJt cU2/fizsBZTosQEArrHk48dLpatStgg+1QW81Tue1/xaEgDZSWfkCylH1Q3HWARe C+EAFgkrBgEEAdpHDwEBB0DAI+t8F3a8w3DQ9pOf6p+9fHurzvBUen7KaOVouzNG hAABANaat2ubQ5OseZrLFlJtUwGH9ryyM67pdMomBAFzF6dXD13CwL4EGBYKATEF gl4L4QAJEHVDFX7zsSvpRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ57VR075ZN2qlF28j5qvlxAzy7adKLiRPqE4XzHj0r/oApsCvqAEGRYK AG8Fgl4L4QAJEG/AHB9KQ9btRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ8WH+N/BwioZW4c7RSvWP2fKvT0QfQm/eE5nPwPFRQirFiEEPCgk ZJcYEz28X741b8AcH0pD1u0AABvnAQCwdYkarlm9cdiX58b3QFekrEP97dZTQyib arYMvJ0GgwD+M1STvxpBJcijEODWNEUvZ03ntqOKKgB5kNmYXDX9yAsWIQSQ4Cv7 A/qgRxTR09h1QxV+87Er6QAA4Z0A/3Cf5wik7vn9kmu3AI43t3qplxn2Lua7VDll voXIesRpAPjc8ZUNmQ1O1pNOBjjGcGNSvVB0ZO3wSJ5/RC7BpW4G =P555 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-hard/bob.pgp000064400000000000000000000041571046102023000210220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAbVLG9NJpNM1NJQ7UW/cOT6hWoClypLrIwhaB ZmW+Fh/CwAwEIBYKAH4Fgl5a+wAJEHVDFX7zsSvpRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZy+zx1jl9pB39k5EuejcqXv7Fue2wyyQ4fsW Mt1McFn8Dh0Cc29tZSBtZXNzYWdlFiEEkOAr+wP6oEcU0dPYdUMVfvOxK+kAAGs7 AP9HZGe5ptuJ2I2va50Z8lSqWYOP0Qw3kNsbah9r3gO5UQEA0c8RJiG0f/1Zi4dm PsJx8CeXgER9wEFOOPivAhyM5AzCwAsEHxYKAH0Fgl4L4QADCwkHCRB1QxV+87Er 6UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcwgHBG+ps5 G55TMKpDrBM7cno4zUfD6QmCseMpF2R5RwMVCggCmwECHgEWIQSQ4Cv7A/qgRxTR 09h1QxV+87Er6QAAnQ0A/R+kf/qh8k8cZjbksI1Dlms/FMBmjbtBJ4XOvFbSP47H APwIqkcURsVgHx8G0cCOna8jFPtGY6BsFCTV/kQaFqkEC80RPGJvYkBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgl4L4QADCwkHCRB1QxV+87Er6UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfkPEgOL4KMog6Xe0e0Z1JJV7xvtqlQ wUoJQ5j+SVfyJAMVCggCmQECmwECHgEWIQSQ4Cv7A/qgRxTR09h1QxV+87Er6QAA jQkA/iae/sAyk3x8KRSEh1SryMfp/cXEkm1xTb9+LOwFlOixAQCuseTjx0ulq1K2 CD7VBbzVO57X/FoSANlJZ+QLKUfVDcLABwQQFgoAeQWCXoPZgAWDCWeaOwOFAXgJ EKdRp6BTKGO6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+zSewCnb33cP3iOUnDmWZiJjgJVmpx2CD508r8lj9ncFiEEIZqrZhyKr0Um28Ma p1GnoFMoY7oAADiIAP9vz9V8jE9J7Y39baihKhjI/WznaWU5So4j3Wcz2eA98QEA xtBWdfHGxrPJbXm5lGFn4VPrjrit6iX//sVGLe09mwnCwAcEEBYKAHkFgl40v4AF gwlnmjsDhQJaCRCnUaegUyhjukcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcn/2KB21Lup15WJivpaYxUjnxR9w9+cQQjrt2y7MtSEhYhBCGa q2Yciq9FJtvDGqdRp6BTKGO6AABOQwD8CGBz1DLDmY1toyV1SMPwog5Ws0Q8dG6r aHnNlzIAVyEBAIoHWZ7SSID21+NYFwHnsrlhTvEmAcl8H7SjcO6JkKIMzjMEXgvh ABYJKwYBBAHaRw8BAQdAwCPrfBd2vMNw0PaTn+qfvXx7q87wVHp+ymjlaLszRoTC wL4EGBYKATEFgl4L4QAJEHVDFX7zsSvpRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ57VR075ZN2qlF28j5qvlxAzy7adKLiRPqE4XzHj0r/o ApsCvqAEGRYKAG8Fgl4L4QAJEG/AHB9KQ9btRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ8WH+N/BwioZW4c7RSvWP2fKvT0QfQm/eE5nPwPF RQirFiEEPCgkZJcYEz28X741b8AcH0pD1u0AABvnAQCwdYkarlm9cdiX58b3QFek rEP97dZTQyibarYMvJ0GgwD+M1STvxpBJcijEODWNEUvZ03ntqOKKgB5kNmYXDX9 yAsWIQSQ4Cv7A/qgRxTR09h1QxV+87Er6QAA4Z0A/3Cf5wik7vn9kmu3AI43t3qp lxn2Lua7VDllvoXIesRpAPjc8ZUNmQ1O1pNOBjjGcGNSvVB0ZO3wSJ5/RC7BpW4G =OiL/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-hard/carol-priv.pgp000064400000000000000000000027671046102023000223430ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BF68 0710 128E 6BCC B226 8154 569F 5F6B FB95 C544 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAF0FWhnPMkrCgYp57M0GD5zeJPkKrClWe5UgN X3V1KroAAP9vYnnNWUTPpeOWCAwMNCwgk7YuRibbbyU64NsSNCCjnw4vwsALBB8W CgB9BYJeC+EAAwsJBwkQVp9fa/uVxURHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnzmjmSYYuZSx9sTMeUO8OMRzj7iPRyd/SNdoX/ixCFykD FQoIApsBAh4BFiEEv2gHEBKOa8yyJoFUVp9fa/uVxUQAACTbAQCMrzPWaCJCWoIp Yqilw7jNxMBqvIy2d1o1BWj8N8555QEAyYG0wX4p2DAj+ryycZ9y/POqIDnIgYlw zVo0DJkCeg7NEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRBWn19r+5XFREcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cme4+iFL+cquSeo+b/p2YaLWqJKAijic6Yu16sXI+QWHwgMVCggCmQECmwECHgEW IQS/aAcQEo5rzLImgVRWn19r+5XFRAAArZ4A/joE4JRGwMH7QXt9n0v/PRY+xNeT c62PnAEyN2IpOEi/AP0QOQhE6XzFUOG+W/UrkIg9vbktk5EOkHyd4Ak101Y1DcdY BF4L4QAWCSsGAQQB2kcPAQEHQKm2Tb3fOhPaK5JJPbJabGifppKAaIn86ue4W007 rE1BAAD9FFWcoe7iFgwFITkawj034NJ24Ykxlv91s38OlRR8OTsO6sLAvwQYFgoB MQWCXgvhAAkQVp9fa/uVxURHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnFHJ0x6RDawJeN7JwrJ3Cfhh7wWCnGkDn6yNbsbNQj2kCmwK+oAQZ FgoAbwWCXgvhAAkQ5q91RF7gAoZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnLvJPwopgkycqUSXzBTYYrBIHcqNg5Pv9D3odTLOtPyEWIQTL pOHueQFmZKbTuubmr3VEXuAChgAAy8ABALr8v3m5pUoykqPyzZZdVm4qlq0kAtep Sq+x5LpQykRcAPwICbC6BwpU7v4GEcZTWpTtel0IxNSU4XQ3W6WNOMSGBxYhBL9o BxASjmvMsiaBVFafX2v7lcVEAAA/RAD9EiA5uaBj2YSPE4Mbo4xKRCI02bEdmFYn YpiBOAX/+aYA/RShkFupW3ToidZQQptPk0DW1DjdJawamPKbOmz11woL =q4pt -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-hard/carol.pgp000064400000000000000000000031131046102023000213470ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAF0FWhnPMkrCgYp57M0GD5zeJPkKrClWe5UgN X3V1KrrCwAsEHxYKAH0Fgl4L4QADCwkHCRBWn19r+5XFREcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfOaOZJhi5lLH2xMx5Q7w4xHOPuI9HJ 39I12hf+LEIXKQMVCggCmwECHgEWIQS/aAcQEo5rzLImgVRWn19r+5XFRAAAJNsB AIyvM9ZoIkJagiliqKXDuM3EwGq8jLZ3WjUFaPw3znnlAQDJgbTBfinYMCP6vLJx n3L886ogOciBiXDNWjQMmQJ6Ds0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEFafX2v7lcVERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7j6IUv5yq5J6j5v+nZhotaokoCKOJzpi7Xqxcj5BYfCAxUK CAKZAQKbAQIeARYhBL9oBxASjmvMsiaBVFafX2v7lcVEAACtngD+OgTglEbAwftB e32fS/89Fj7E15NzrY+cATI3Yik4SL8A/RA5CETpfMVQ4b5b9SuQiD29uS2TkQ6Q fJ3gCTXTVjUNwsAHBBAWCgB5BYJeNL+ABYMJZ5o7A4UCHgkQp1GnoFMoY7pHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnrAEixh5NlLy2Zff/ /Y06tr3dYGdY3HoWO6IScmStTeYWIQQhmqtmHIqvRSbbwxqnUaegUyhjugAAc8kA /0Qpvj7TH4h4E0ZJ8fmGhtDsjUY+Um68BPpIofPSyrghAQC8cghb7GsHK/CeGtft fd0xIoarBuEYlxJOwcfmxk2gAM4zBF4L4QAWCSsGAQQB2kcPAQEHQKm2Tb3fOhPa K5JJPbJabGifppKAaIn86ue4W007rE1BwsC/BBgWCgExBYJeC+EACRBWn19r+5XF REcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcUcnTHpENr Al43snCsncJ+GHvBYKcaQOfrI1uxs1CPaQKbAr6gBBkWCgBvBYJeC+EACRDmr3VE XuAChkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcu8k/C imCTJypRJfMFNhisEgdyo2Dk+/0Peh1Ms60/IRYhBMuk4e55AWZkptO65uavdURe 4AKGAADLwAEAuvy/ebmlSjKSo/LNll1WbiqWrSQC16lKr7HkulDKRFwA/AgJsLoH ClTu/gYRxlNalO16XQjE1JThdDdbpY04xIYHFiEEv2gHEBKOa8yyJoFUVp9fa/uV xUQAAD9EAP0SIDm5oGPZhI8TgxujjEpEIjTZsR2YVidimIE4Bf/5pgD9FKGQW6lb dOiJ1lBCm0+TQNbUON0lrBqY8ps6bPXXCgs= =uhRg -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-hard/dave-priv.pgp000064400000000000000000000027661046102023000221610ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4694 5292 F8F6 43F0 573A F711 83F9 C1A4 759A 16D6 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAphEiSlXRoECEiSURPMObGBeWj+HNwIuGvUmw V0sORvwAAQC2WwJ01vZWSyiXdDVSsEGbX7L30o6gokFAjqYT/TGJUw+3wsALBB8W CgB9BYJeC+EAAwsJBwkQg/nBpHWaFtZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JngbOv6FgdebucVO+uiuSIE/dTPnOMh2MkjTn5dfyEaRwD FQoIApsBAh4BFiEERpRSkvj2Q/BXOvcRg/nBpHWaFtYAAA4VAQC/OKE9QSY/1Uec vMqndgMlJs9KKfYa0DHv21LBw17AGQEA5tSjkgPyF2h/MsPVwcErodK4DPIUeTk1 Nnw06DQEmgvNEjxkYXZlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCXgvhAAMLCQcJ EIP5waR1mhbWRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZycXivKq8tnrdR9nFB75kN9eQQhWhTP2wYdP/AK0ZYRQAxUKCAKZAQKbAQIeARYh BEaUUpL49kPwVzr3EYP5waR1mhbWAAAOowEAoQaKLFOGCqer9TZfyDpo9zBVcMsd M6dE/r5IvacVUCABAOvCcL/L+6+iTgHmiuvB3/Mdhy0ni8Q7w/RSnUbrYiYCx1gE XgvhABYJKwYBBAHaRw8BAQdA385Q2fcP6nlpCnJ3aBJorQNWcx++UMFG2y1deO1q 23IAAPkBsTWT/5x2i4tDJAwhw6o7dCMqodbbrU4vvjowzNNbWg+PwsC/BBgWCgEx BYJeC+EACRCD+cGkdZoW1kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfvijXUBX+lm+WOPfviz2WJVjwakHEZtzV4yVtIwqEoegKbAr6gBBkW CgBvBYJeC+EACRBsnVdShVEgHEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc2CfZC5wnP4Unz/xVwDYPWiBNMTGdJWV9QmqaXh/ENTRYhBDKa FFXmzwQDe2tXW2ydV1KFUSAcAABKjAEAuv9bDVZZf/tMALQuqArRhWAr3zC0nKgv x5gzW2zbHCcA+gIio/VO2Inqy8ppN3lEDcu/GJD71yh/xGUVtxhugR4KFiEERpRS kvj2Q/BXOvcRg/nBpHWaFtYAANz+AQDO+mU63A1/Fw7cmArgLso/cSOo3s6RoX8S mgxBJB8SUQD9FmbB8vnAwPFFSnrJ0Kpm3nPDL/14rQMOy2SloOvxzAA= =jfPv -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-hard/dave.pgp000064400000000000000000000041531046102023000211730ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAphEiSlXRoECEiSURPMObGBeWj+HNwIuGvUmw V0sORvzCwAsEHxYKAH0Fgl4L4QADCwkHCRCD+cGkdZoW1kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeBs6/oWB15u5xU766K5IgT91M+c4yH YySNOfl1/IRpHAMVCggCmwECHgEWIQRGlFKS+PZD8Fc69xGD+cGkdZoW1gAADhUB AL84oT1BJj/VR5y8yqd2AyUmz0op9hrQMe/bUsHDXsAZAQDm1KOSA/IXaH8yw9XB wSuh0rgM8hR5OTU2fDToNASaC80SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJeC+EAAwsJBwkQg/nBpHWaFtZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnJxeK8qry2et1H2cUHvmQ315BCFaFM/bBh0/8ArRlhFADFQoI ApkBApsBAh4BFiEERpRSkvj2Q/BXOvcRg/nBpHWaFtYAAA6jAQChBoosU4YKp6v1 Nl/IOmj3MFVwyx0zp0T+vki9pxVQIAEA68Jwv8v7r6JOAeaK68Hf8x2HLSeLxDvD 9FKdRutiJgLCwAcEEBYKAHkFgl6D2YAFgwlnmjsDhQF4CRB1QxV+87Er6UcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJIv/4zF++nIok0RKS 8Xu1W2gixiBl5n2ZNiwrqrytVBYhBJDgK/sD+qBHFNHT2HVDFX7zsSvpAADjBQEA k4y/wJS/ZlCUTaxzDKZg0dbGR23Y4mQHMYqpKyV9nSoBAOdvU7r+CJloN8dIqR4O 204Ib9PkEFQexqo8d1HVL80BwsAHBBAWCgB5BYJeNL+ABYMJZ5o7A4UBeAkQVp9f a/uVxURHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnVMyu R9tgbOK5IQh9p+JC75TiKGj5nL6hgb6KiCG3GxwWIQS/aAcQEo5rzLImgVRWn19r +5XFRAAAvH0A/3djPc3hO6YhBEwgAyvEeZo9ju420XTS2wA09kQ26bCHAP9cvewo n6WcqeTpY5GD1LAV1mLppaHgO+i1SRO/NIi7BcLABwQQFgoAeQWCXjS/gAWDCWea OwOFATwJEHVDFX7zsSvpRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ+jJ1tpyvYRUZ+7xIgvzQtwaTCfUJqi6TzaIFsNy06eSFiEEkOAr+wP6 oEcU0dPYdUMVfvOxK+kAABzPAQDGyEy6IlgN4PlgtkpdGUNd73irKE/kqSlBC8qi 08d+WwEAsbcTJuSlAieuBmhjtbhAvK+3pMjgnfx7gvnlnArZfgPOMwReC+EAFgkr BgEEAdpHDwEBB0DfzlDZ9w/qeWkKcndoEmitA1ZzH75QwUbbLV147WrbcsLAvwQY FgoBMQWCXgvhAAkQg/nBpHWaFtZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn74o11AV/pZvljj374s9liVY8GpBxGbc1eMlbSMKhKHoCmwK+ oAQZFgoAbwWCXgvhAAkQbJ1XUoVRIBxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnNgn2QucJz+FJ8/8VcA2D1ogTTExnSVlfUJqml4fxDU0W IQQymhRV5s8EA3trV1tsnVdShVEgHAAASowBALr/Ww1WWX/7TAC0LqgK0YVgK98w tJyoL8eYM1ts2xwnAPoCIqP1TtiJ6svKaTd5RA3LvxiQ+9cof8RlFbcYboEeChYh BEaUUpL49kPwVzr3EYP5waR1mhbWAADc/gEAzvplOtwNfxcO3JgK4C7KP3EjqN7O kaF/EpoMQSQfElEA/RZmwfL5wMDxRUp6ydCqZt5zwy/9eK0DDstkpaDr8cwA =muTX -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-hard.pgp000064400000000000000000000155561046102023000202650ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAmBAnRPbQ8kxpYFYNyi/iJs2L/1EvB44dVd0Z KfrP+KXCwAsEHxYKAH0Fgl4L4QADCwkHCRCnUaegUyhjukcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeuunycYEoBL2z0M+LUMX95atzZfka5 VurCjWhshCJV6QMVCggCmwECHgEWIQQhmqtmHIqvRSbbwxqnUaegUyhjugAA4AAA /3liOXNzpzUNGAbpFHEvKXpZD5i375uo0+9UF4IT8lpQAP4pXPPq2DSVrGDvdZrc Dzo9aXwNI/+wz5UKPUXn2tZKC80TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEKdRp6BTKGO6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ/6ctGt6wzg5TDkhDYXrkKhHFklkNzFEfy75uOk46fg3AxUK CAKZAQKbAQIeARYhBCGaq2Yciq9FJtvDGqdRp6BTKGO6AABcvQEA4wZMmOev/Row E+yFBQNo6pKYKMImemYEGPG++9ttmZ4A/3yshwGMRxbL+GWshferOFKuqXxHkbB2 SLQc5z5KFIgIzjMEXgvhABYJKwYBBAHaRw8BAQdAqjemXq25t94cpIpulUqKR8DM 9QIEyd0JLT1b1WtOub3CwL8EGBYKATEFgl4L4QAJEKdRp6BTKGO6RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyMaTp6IIJIcan4K0PYZdR80 sNuq35+mk10oyWIuiJVKApsCvqAEGRYKAG8Fgl4L4QAJEBUzrVPCfimeRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyYMx6BTk0pNNBiCQK4S bOsn7Sr+2DGG4WsPrTavJtYRFiEENfd7dUHjFnnJz9mXFTOtU8J+KZ4AAP4eAQDf sigQj6pDNm3DqoYUUTigYrFF+a6+uJaXwAXrTFh/gQD+NVZfKKbWgdtyltwxKEMY nhkOuXee/9uIwZc1UEefHAAWIQQhmqtmHIqvRSbbwxqnUaegUyhjugAA+28A/jiq tP+sy5i463z43clux7HrXc8QR8d3qu16VojI5G99AQDHqaEMDaiHQ0wA8BLIubIw Kro9YvAlXr8rYbxwgQS9BcYzBF4L4QAWCSsGAQQB2kcPAQEHQKYRIkpV0aBAhIkl ETzDmxgXlo/hzcCLhr1JsFdLDkb8wsALBB8WCgB9BYJeC+EAAwsJBwkQg/nBpHWa FtZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JngbOv6Fgd ebucVO+uiuSIE/dTPnOMh2MkjTn5dfyEaRwDFQoIApsBAh4BFiEERpRSkvj2Q/BX OvcRg/nBpHWaFtYAAA4VAQC/OKE9QSY/1UecvMqndgMlJs9KKfYa0DHv21LBw17A GQEA5tSjkgPyF2h/MsPVwcErodK4DPIUeTk1Nnw06DQEmgvNEjxkYXZlQGV4YW1w bGUub3JnPsLADgQTFgoAgAWCXgvhAAMLCQcJEIP5waR1mhbWRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZycXivKq8tnrdR9nFB75kN9eQQhW hTP2wYdP/AK0ZYRQAxUKCAKZAQKbAQIeARYhBEaUUpL49kPwVzr3EYP5waR1mhbW AAAOowEAoQaKLFOGCqer9TZfyDpo9zBVcMsdM6dE/r5IvacVUCABAOvCcL/L+6+i TgHmiuvB3/Mdhy0ni8Q7w/RSnUbrYiYCwsAHBBAWCgB5BYJeg9mABYMJZ5o7A4UB eAkQdUMVfvOxK+lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnSSL/+MxfvpyKJNESkvF7tVtoIsYgZeZ9mTYsK6q8rVQWIQSQ4Cv7A/qgRxTR 09h1QxV+87Er6QAA4wUBAJOMv8CUv2ZQlE2scwymYNHWxkdt2OJkBzGKqSslfZ0q AQDnb1O6/giZaDfHSKkeDttOCG/T5BBUHsaqPHdR1S/NAcLABwQQFgoAeQWCXjS/ gAWDCWeaOwOFAXgJEFafX2v7lcVERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ1TMrkfbYGziuSEIfafiQu+U4iho+Zy+oYG+ioghtxscFiEE v2gHEBKOa8yyJoFUVp9fa/uVxUQAALx9AP93Yz3N4TumIQRMIAMrxHmaPY7uNtF0 0tsANPZENumwhwD/XL3sKJ+lnKnk6WORg9SwFdZi6aWh4DvotUkTvzSIuwXCwAcE EBYKAHkFgl40v4AFgwlnmjsDhQE8CRB1QxV+87Er6UcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfoydbacr2EVGfu8SIL80LcGkwn1Caouk82 iBbDctOnkhYhBJDgK/sD+qBHFNHT2HVDFX7zsSvpAAAczwEAxshMuiJYDeD5YLZK XRlDXe94qyhP5KkpQQvKotPHflsBALG3EybkpQInrgZoY7W4QLyvt6TI4J38e4L5 5ZwK2X4DzjMEXgvhABYJKwYBBAHaRw8BAQdA385Q2fcP6nlpCnJ3aBJorQNWcx++ UMFG2y1deO1q23LCwL8EGBYKATEFgl4L4QAJEIP5waR1mhbWRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ++KNdQFf6Wb5Y49++LPZYlWPBqQ cRm3NXjJW0jCoSh6ApsCvqAEGRYKAG8Fgl4L4QAJEGydV1KFUSAcRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzYJ9kLnCc/hSfP/FXANg9aI E0xMZ0lZX1CappeH8Q1NFiEEMpoUVebPBAN7a1dbbJ1XUoVRIBwAAEqMAQC6/1sN Vll/+0wAtC6oCtGFYCvfMLScqC/HmDNbbNscJwD6AiKj9U7YierLymk3eUQNy78Y kPvXKH/EZRW3GG6BHgoWIQRGlFKS+PZD8Fc69xGD+cGkdZoW1gAA3P4BAM76ZTrc DX8XDtyYCuAuyj9xI6jezpGhfxKaDEEkHxJRAP0WZsHy+cDA8UVKesnQqmbec8Mv /XitAw7LZKWg6/HMAMYzBF4L4QAWCSsGAQQB2kcPAQEHQG1SxvTSaTTNTSUO1Fv3 Dk+oVqApcqS6yMIWgWZlvhYfwsAMBCAWCgB+BYJeWvsACRB1QxV+87Er6UcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcvs8dY5faQd/ZORLno 3Kl7+xbntsMskOH7FjLdTHBZ/A4dAnNvbWUgbWVzc2FnZRYhBJDgK/sD+qBHFNHT 2HVDFX7zsSvpAABrOwD/R2RnuabbidiNr2udGfJUqlmDj9EMN5DbG2ofa94DuVEB ANHPESYhtH/9WYuHZj7CcfAnl4BEfcBBTjj4rwIcjOQMwsALBB8WCgB9BYJeC+EA AwsJBwkQdUMVfvOxK+lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnMIBwRvqbORueUzCqQ6wTO3J6OM1Hw+kJgrHjKRdkeUcDFQoIApsBAh4B FiEEkOAr+wP6oEcU0dPYdUMVfvOxK+kAAJ0NAP0fpH/6ofJPHGY25LCNQ5ZrPxTA Zo27QSeFzrxW0j+OxwD8CKpHFEbFYB8fBtHAjp2vIxT7RmOgbBQk1f5EGhapBAvN ETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJeC+EAAwsJBwkQdUMVfvOxK+lH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn5DxIDi+CjKIO l3tHtGdSSVe8b7apUMFKCUOY/klX8iQDFQoIApkBApsBAh4BFiEEkOAr+wP6oEcU 0dPYdUMVfvOxK+kAAI0JAP4mnv7AMpN8fCkUhIdUq8jH6f3FxJJtcU2/fizsBZTo sQEArrHk48dLpatStgg+1QW81Tue1/xaEgDZSWfkCylH1Q3CwAcEEBYKAHkFgl6D 2YAFgwlnmjsDhQF4CRCnUaegUyhjukcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfs0nsAp2993D94jlJw5lmYiY4CVZqcdgg+dPK/JY/Z3BYh BCGaq2Yciq9FJtvDGqdRp6BTKGO6AAA4iAD/b8/VfIxPSe2N/W2ooSoYyP1s52ll OUqOI91nM9ngPfEBAMbQVnXxxsazyW15uZRhZ+FT6464reol//7FRi3tPZsJwsAH BBAWCgB5BYJeNL+ABYMJZ5o7A4UCWgkQp1GnoFMoY7pHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnJ/9igdtS7qdeViYr6WmMVI58UfcPfnEE I67dsuzLUhIWIQQhmqtmHIqvRSbbwxqnUaegUyhjugAATkMA/Ahgc9Qyw5mNbaMl dUjD8KIOVrNEPHRuq2h5zZcyAFchAQCKB1me0kiA9tfjWBcB57K5YU7xJgHJfB+0 o3DuiZCiDM4zBF4L4QAWCSsGAQQB2kcPAQEHQMAj63wXdrzDcND2k5/qn718e6vO 8FR6fspo5Wi7M0aEwsC+BBgWCgExBYJeC+EACRB1QxV+87Er6UcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmee1UdO+WTdqpRdvI+ar5cQM8u2 nSi4kT6hOF8x49K/6AKbAr6gBBkWCgBvBYJeC+EACRBvwBwfSkPW7UcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfFh/jfwcIqGVuHO0Ur1j9n yr09EH0Jv3hOZz8DxUUIqxYhBDwoJGSXGBM9vF++NW/AHB9KQ9btAAAb5wEAsHWJ Gq5ZvXHYl+fG90BXpKxD/e3WU0Mom2q2DLydBoMA/jNUk78aQSXIoxDg1jRFL2dN 57ajiioAeZDZmFw1/cgLFiEEkOAr+wP6oEcU0dPYdUMVfvOxK+kAAOGdAP9wn+cI pO75/ZJrtwCON7d6qZcZ9i7mu1Q5Zb6FyHrEaQD43PGVDZkNTtaTTgY4xnBjUr1Q dGTt8Eief0QuwaVuBsYzBF4L4QAWCSsGAQQB2kcPAQEHQBdBVoZzzJKwoGKeezNB g+c3iT5CqwpVnuVIDV91dSq6wsALBB8WCgB9BYJeC+EAAwsJBwkQVp9fa/uVxURH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnzmjmSYYuZSx9 sTMeUO8OMRzj7iPRyd/SNdoX/ixCFykDFQoIApsBAh4BFiEEv2gHEBKOa8yyJoFU Vp9fa/uVxUQAACTbAQCMrzPWaCJCWoIpYqilw7jNxMBqvIy2d1o1BWj8N8555QEA yYG0wX4p2DAj+ryycZ9y/POqIDnIgYlwzVo0DJkCeg7NEzxjYXJvbEBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgl4L4QADCwkHCRBWn19r+5XFREcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme4+iFL+cquSeo+b/p2YaLWqJKAijic 6Yu16sXI+QWHwgMVCggCmQECmwECHgEWIQS/aAcQEo5rzLImgVRWn19r+5XFRAAA rZ4A/joE4JRGwMH7QXt9n0v/PRY+xNeTc62PnAEyN2IpOEi/AP0QOQhE6XzFUOG+ W/UrkIg9vbktk5EOkHyd4Ak101Y1DcLABwQQFgoAeQWCXjS/gAWDCWeaOwOFAh4J EKdRp6BTKGO6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6wBIsYeTZS8tmX3//2NOra93WBnWNx6FjuiEnJkrU3mFiEEIZqrZhyKr0Um28Ma p1GnoFMoY7oAAHPJAP9EKb4+0x+IeBNGSfH5hobQ7I1GPlJuvAT6SKHz0sq4IQEA vHIIW+xrByvwnhrX7X3dMSKGqwbhGJcSTsHH5sZNoADOMwReC+EAFgkrBgEEAdpH DwEBB0Cptk293zoT2iuSST2yWmxon6aSgGiJ/OrnuFtNO6xNQcLAvwQYFgoBMQWC XgvhAAkQVp9fa/uVxURHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnFHJ0x6RDawJeN7JwrJ3Cfhh7wWCnGkDn6yNbsbNQj2kCmwK+oAQZFgoA bwWCXgvhAAkQ5q91RF7gAoZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnLvJPwopgkycqUSXzBTYYrBIHcqNg5Pv9D3odTLOtPyEWIQTLpOHu eQFmZKbTuubmr3VEXuAChgAAy8ABALr8v3m5pUoykqPyzZZdVm4qlq0kAtepSq+x 5LpQykRcAPwICbC6BwpU7v4GEcZTWpTtel0IxNSU4XQ3W6WNOMSGBxYhBL9oBxAS jmvMsiaBVFafX2v7lcVEAAA/RAD9EiA5uaBj2YSPE4Mbo4xKRCI02bEdmFYnYpiB OAX/+aYA/RShkFupW3ToidZQQptPk0DW1DjdJawamPKbOmz11woL =RvKX -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-hard.sh000075500000000000000000000007071046102023000201040ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=cert-revoked-hard ${@:+"$@"} t0=20200101 t1=20200201 t2=20200301 t3=20200401 set -x key -t $t0 alice key -t $t0 bob key -t $t0 carol key -t $t0 dave certify -t $t1 alice -a 90 -d 2 bob certify -t $t1 bob -a 60 -d 1 dave certify -t $t1 alice -a 30 -d 2 carol certify -t $t1 carol -a 120 -d 1 dave revoke -t $t2 bob compromised certify -t $t3 alice -a 120 -d 1 bob certify -t $t3 bob -a 120 -d 1 dave finish sequoia-wot-0.11.0/tests/data/cert-revoked-soft/README.md000064400000000000000000000045031046102023000210570ustar 00000000000000If a certificate is revoked, this impacts the validity of a certification on it and the validity of a certification that it makes. There are 8 scenarios: 1./2. t1 - A, B created t2 - A certifies B OR B certifies A t3 - A is soft revoked => certification is okay 3./4. t1 - A, B created t2 - A is soft revoked t3 - A certifies B OR B certifies A => certification is bad 5./6. t1 - A, B created t2 - A certifies B OR B certifies A t3 - A is hard revoked => certification is bad 7./8. t1 - A, B created t2 - A is hard revoked t3 - A certifies B OR B certifies A => certification is bad We want to consider both B as issuer of a certification and as the target of a certification. When B is an interior node (i.e., a trusted introducer), we do both. (Note: when B is the binding that we are authenticating, then B also has to be valid at the reference time!) To check them separately, we can consider a path that is just two nodes long where either the root or the target is revoked. Since roots are targets are treated specially, we also want to check when the revoked node is an interior node. Thus, we need to also consider the subgraph A - B and the subgraph B - D. Consider the following timeline: t0 A, B, C, D are created t1 A certifies B - 2/120 B certifies D - 1/60 A certifies C - 2/30 C certifies D - 1/120 This results in: ```text o A 2/90 / \ 2/30 v v B C 1/60 \ / 1/120 v o D ``` t2 B is soft revoked This does not change the network as the certification was made before the soft revocation. That is, we will be able to use B as a trust introducers for certifications involving it prior to the revocation. But, we won't be able to authenticate a binding involving B, because it is revoked at the reference time: ```text o A 2/90 / \ 2/30 v v B C 1/60 \ / 1/120 v o D ``` t3 A certifies B (amount = 120) B certifies D (amount = 120) Because these certifications are created after B was revoked, they should be ignored. ```text o A 2/90 / \ 2/30 v v B C 1/60 \ / 1/120 v o D ``` sequoia-wot-0.11.0/tests/data/cert-revoked-soft/alice-priv.pgp000064400000000000000000000027671046102023000223550ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6603 7F98 B444 BBAF DFE9 8E87 1738 DFAB 8687 8262 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAO7PvTFIdl2Y6U8U6FPv5sYC311Yl26Xdnq4E C4LQemIAAP9qZdOMPVDq3/R0Pl6An35TRlfMTi/s20Nel5kFTRXPghCtwsALBB8W CgB9BYJeC+EAAwsJBwkQFzjfq4aHgmJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn8ei4XbDg0jU6Zxg1qs8L+xWIEzff3a9efsZdcP3ylR0D FQoIApsBAh4BFiEEZgN/mLREu6/f6Y6HFzjfq4aHgmIAACg8AP9jqokwnvBNhm7O bAwC8TdxoxG6mVNhv+uon1WD/PDO6gD8DpzHBrgvuvS87eUAelkuTOJN9m46udFo N0C8iMdLagfNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRAXON+rhoeCYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcKzsyguAPAEjTm2nNpLqC7EmR1ZtTbaOTUhhJKPx/XPAMVCggCmQECmwECHgEW IQRmA3+YtES7r9/pjocXON+rhoeCYgAAIpsBAOIzZ5SLTu8p1n9XT02k6p/IHUra ayDaS4e0xQmAvbsdAPwK/lOe8mmLGb1KyAmCeHire3KInouFxS9B9K8Jl5ZUBcdY BF4L4QAWCSsGAQQB2kcPAQEHQJOMaGWUZQ2Y6+3ARQfgUgDEsYz6KvYsYdE1H3kS mh4cAAEArofT6UGfq5MEYbgg5LTPyMYgO7xfW7e6axvn54i3Yv0SdsLAvwQYFgoB MQWCXgvhAAkQFzjfq4aHgmJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn97oULRhVHq5ZP6f1id084rz8L1T16u/wWPVexcsR3VgCmwK+oAQZ FgoAbwWCXgvhAAkQykTOGHWDZTVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnGRNGtIrVpyVAEGWrC9vCkc97FNj1WY0E+Wu/AdwJVOEWIQRk XATWyzoFEJkIz7LKRM4YdYNlNQAAMMMBAKyDu1Y4qcp/ez2kBhTlUKkWyjLQurwd Mn7q51A3ZwndAQC2w6UYzJqjf5lU4zf+2D8KrCx5Ve8O44kfW+e8x+GqDBYhBGYD f5i0RLuv3+mOhxc436uGh4JiAADesgD+L/B2CU9d8CNa6KpB2tlTwC69/8+WR/m/ 5sXZKlanBr4A/RRr0iBU3y5DOcbE/FJDDXgpsFtn2Ij8kRxG8JsK1OIC =Pm3o -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-soft/alice.pgp000064400000000000000000000026241046102023000213670ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 6603 7F98 B444 BBAF DFE9 8E87 1738 DFAB 8687 8262 Comment: xjMEXgvhABYJKwYBBAHaRw8BAQdAO7PvTFIdl2Y6U8U6FPv5sYC311Yl26Xdnq4E C4LQemLCwAsEHxYKAH0Fgl4L4QADCwkHCRAXON+rhoeCYkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfx6LhdsODSNTpnGDWqzwv7FYgTN9/d r15+xl1w/fKVHQMVCggCmwECHgEWIQRmA3+YtES7r9/pjocXON+rhoeCYgAAKDwA /2OqiTCe8E2Gbs5sDALxN3GjEbqZU2G/66ifVYP88M7qAPwOnMcGuC+69Lzt5QB6 WS5M4k32bjq50Wg3QLyIx0tqB80TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEBc436uGh4JiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZwrOzKC4A8ASNObac2kuoLsSZHVm1Nto5NSGEko/H9c8AxUK CAKZAQKbAQIeARYhBGYDf5i0RLuv3+mOhxc436uGh4JiAAAimwEA4jNnlItO7ynW f1dPTaTqn8gdStprINpLh7TFCYC9ux0A/Ar+U57yaYsZvUrICYJ4eKt7coiei4XF L0H0rwmXllQFzjMEXgvhABYJKwYBBAHaRw8BAQdAk4xoZZRlDZjr7cBFB+BSAMSx jPoq9ixh0TUfeRKaHhzCwL8EGBYKATEFgl4L4QAJEBc436uGh4JiRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/e6FC0YVR6uWT+n9YndPOK8 /C9U9erv8Fj1XsXLEd1YApsCvqAEGRYKAG8Fgl4L4QAJEMpEzhh1g2U1RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxkTRrSK1aclQBBlqwvb wpHPexTY9VmNBPlrvwHcCVThFiEEZFwE1ss6BRCZCM+yykTOGHWDZTUAADDDAQCs g7tWOKnKf3s9pAYU5VCpFsoy0Lq8HTJ+6udQN2cJ3QEAtsOlGMyao3+ZVOM3/tg/ CqwseVXvDuOJH1vnvMfhqgwWIQRmA3+YtES7r9/pjocXON+rhoeCYgAA3rIA/i/w dglPXfAjWuiqQdrZU8Auvf/Plkf5v+bF2SpWpwa+AP0Ua9IgVN8uQznGxPxSQw14 KbBbZ9iI/JEcRvCbCtTiAg== =pM1z -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-soft/bob-priv.pgp000064400000000000000000000027651046102023000220400ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4CD8 737F 76C2 B897 C4F0 58DB F28C 4754 0FA2 C3B3 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdA8y8LlHJUsnwhFSABHa3yF1nyAFealUz2kXNY XA2Ocw0AAQDg30W+ijv6g8ZEnUlJCywTRDmaKwtmp0PTYogZh2UK5g3XwsALBB8W CgB9BYJeC+EAAwsJBwkQ8oxHVA+iw7NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnHsksZTSo/gtt/a7pgqXcMATgGfL4OziBC0aT7GO9RqAD FQoIApsBAh4BFiEETNhzf3bCuJfE8Fjb8oxHVA+iw7MAAGENAQDL95cabDoSqUEp 08s3LLZc+ijunrH3xjtv1Fpk/YO9rgEAxTbXZrfuvJC/scs2AujY2pMmOvPyFkI/ uWaDq0WOow3NETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJeC+EAAwsJBwkQ 8oxHVA+iw7NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Yoe+IV3HuGlD9+erx+NZ7ladYsGWhL8RnYUMIEMUhIcDFQoIApkBApsBAh4BFiEE TNhzf3bCuJfE8Fjb8oxHVA+iw7MAAB4hAQCHNP66eOJePhK2vgYit2FdgN+KroV3 tnMCp1XYUDRKngD/SVQ2hjvDD6oGkFk7Yj2rgeh79e8Ch47BOeRE2K/E5wfHWARe C+EAFgkrBgEEAdpHDwEBB0B7XjLjBuy6BJdMJhtxu0ppsNvXicfXgr1MFwR8K0Bm RQABAO2OynO07cAvtqtkxTYFufmfsaBoXYH6nImlR5yqAzIjEZ/CwL8EGBYKATEF gl4L4QAJEPKMR1QPosOzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ6vBgjxxKBwIjqiNrmmJIZtFkwPD4IJEqIINOzhfkXuQApsCvqAEGRYK AG8Fgl4L4QAJEBwHgaRywjVWRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ2n0ohIR9Kt6y2F8OtH8MLzO6Dgjv25Ca4eXH5s3qlDTFiEEFrmn +aCTonj3IYT6HAeBpHLCNVYAAJb5AP0ULxpF8Kh+QlYqiYojpKYomPTgZqkbc7JY 0KwHXNcHkAEAogL9yMeDnbjZiPUWODlf1ED41HprrbZZN7ADpZyl2wgWIQRM2HN/ dsK4l8TwWNvyjEdUD6LDswAAb3oBAJ5b/ObUGFEcE6J0lk3ldvGMJEVpF+g6bllo zfqdxNdiAP9zL+8yZTrNO9UjKrZoe2n4gKJ2kNQvkydmmzl7ZcbvCQ== =YTfF -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-soft/bob.pgp000064400000000000000000000041641046102023000210550ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdA8y8LlHJUsnwhFSABHa3yF1nyAFealUz2kXNY XA2Ocw3CwAwEIBYKAH4Fgl5a+wAJEPKMR1QPosOzRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+thHblIkK5D/QLIZJJj/Mm9DGMxmC/mdlDK WBr0vBCxDh0Dc29tZSBtZXNzYWdlFiEETNhzf3bCuJfE8Fjb8oxHVA+iw7MAAICo AQDA+uUFrs+GBvyTt04m6XZai5ldct0sC4xErmLFMuS9UAD9FYz7oIXutX4enk3w h4ZIZy77rSJxymz5Zjwl9T3nGgnCwAsEHxYKAH0Fgl4L4QADCwkHCRDyjEdUD6LD s0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmceySxlNKj+ C239rumCpdwwBOAZ8vg7OIELRpPsY71GoAMVCggCmwECHgEWIQRM2HN/dsK4l8Tw WNvyjEdUD6LDswAAYQ0BAMv3lxpsOhKpQSnTyzcstlz6KO6esffGO2/UWmT9g72u AQDFNtdmt+68kL+xyzYC6NjakyY68/IWQj+5ZoOrRY6jDc0RPGJvYkBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgl4L4QADCwkHCRDyjEdUD6LDs0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdih74hXce4aUP356vH41nuVp1iwZaE vxGdhQwgQxSEhwMVCggCmQECmwECHgEWIQRM2HN/dsK4l8TwWNvyjEdUD6LDswAA HiEBAIc0/rp44l4+Era+BiK3YV2A34quhXe2cwKnVdhQNEqeAP9JVDaGO8MPqgaQ WTtiPauB6Hv17wKHjsE55ETYr8TnB8LABwQQFgoAeQWCXoPZgAWDCWeaOwOFAXgJ EBc436uGh4JiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZwNcOTuNVCIsPtlMm3nLYgkOAeY6b61S9yHdn4yPhKm0FiEEZgN/mLREu6/f6Y6H Fzjfq4aHgmIAAGhuAQDjCDll4c9g/+yzEziWnL/etMC5gu7WKeBgLJsqldrFrgEA yt8Ff2L4SrVhn/inohDKwP0Kh/Zu0qUS0LItMoQqugvCwAcEEBYKAHkFgl40v4AF gwlnmjsDhQJaCRAXON+rhoeCYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcqC54B5MxUjdUYFYc1G0z3IFY9bl9hVmGZYzALO7qunxYhBGYD f5i0RLuv3+mOhxc436uGh4JiAACi+wD+KH+AobqIzKRgsTldN+0ZUZneU3Age13E ZgAaI+Y4YssBAMfKO19CuESpUIBUy08T791o+cbxRgidVfBeGMUl95cGzjMEXgvh ABYJKwYBBAHaRw8BAQdAe14y4wbsugSXTCYbcbtKabDb14nH14K9TBcEfCtAZkXC wL8EGBYKATEFgl4L4QAJEPKMR1QPosOzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ6vBgjxxKBwIjqiNrmmJIZtFkwPD4IJEqIINOzhfkXuQ ApsCvqAEGRYKAG8Fgl4L4QAJEBwHgaRywjVWRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ2n0ohIR9Kt6y2F8OtH8MLzO6Dgjv25Ca4eXH5s3 qlDTFiEEFrmn+aCTonj3IYT6HAeBpHLCNVYAAJb5AP0ULxpF8Kh+QlYqiYojpKYo mPTgZqkbc7JY0KwHXNcHkAEAogL9yMeDnbjZiPUWODlf1ED41HprrbZZN7ADpZyl 2wgWIQRM2HN/dsK4l8TwWNvyjEdUD6LDswAAb3oBAJ5b/ObUGFEcE6J0lk3ldvGM JEVpF+g6bllozfqdxNdiAP9zL+8yZTrNO9UjKrZoe2n4gKJ2kNQvkydmmzl7Zcbv CQ== =1jy4 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-soft/carol-priv.pgp000064400000000000000000000027671046102023000224000ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: AB4E 3F8E E8BB D345 9754 D75A CE57 0F9B 8C7D C75D Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdASYbfuQwwL3e+3w1mMQvkSdH8jvImTWrZ4bED vjYK0XIAAQCFSSupoxVPZ4KqbDBLPrqshRCeZuAHHAtFkTlHy+kGeAz3wsALBB8W CgB9BYJeC+EAAwsJBwkQzlcPm4x9x11HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnrKJp/aXaFoYBgI6gkXtm4miJV/TxTfEGD1O0wyh8gPsD FQoIApsBAh4BFiEEq04/jui700WXVNdazlcPm4x9x10AAB3bAP4i5kQ4E77mN7OZ 6ACJzcjH+oR0No/TFde4btGbqR489wD9GfGQicBIggpMuAnTP5zBP2ms2nrhhkhH UkQG8qGMoQbNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRDOVw+bjH3HXUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmewF5F9pkRuPmNnH31hZNIOkl35LHR9Cmho+B6mFLNpMAMVCggCmQECmwECHgEW IQSrTj+O6LvTRZdU11rOVw+bjH3HXQAAhBkBAMt4lixh6S2ImVbXUioErxLxuxBu B2E2WsxRIJ5q2R07AP9f+0FgJN0ISnwxL8niquitIsqmVuA7+GKDgBElDuztAcdY BF4L4QAWCSsGAQQB2kcPAQEHQE0s5as06xAgTh17BInKES9N9gfXrccysgF7LUjB nL+5AAD/bnIbmPa+heDjaJpMDDvJLq7uMu5K91QltzkT1AEAmgAQAsLAvwQYFgoB MQWCXgvhAAkQzlcPm4x9x11HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnHwi3xuF9psgAwV1tk66sJYGaVNRHIIOVaLyZW5HvLzQCmwK+oAQZ FgoAbwWCXgvhAAkQ4m/muShyJo5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnGWopJRL50QygoU0FyV1LjtlXQT/hPCrn6neawPZ5OKsWIQSy j8IcEhXQ6YLEEorib+a5KHImjgAAvCoBAPbmsL+aeEfT2XmK9dlH0aymA8nspTTw 74AJdpDnvXZfAQDJtjmrawFWTj8+20o35vPOxvF4SY62Py+ZCE0AT5aaChYhBKtO P47ou9NFl1TXWs5XD5uMfcddAADF1gEAvvqBzPS5XscFn/98sXQ9JcfKwEfRa3pc +ESwv7vQzpEBAIWq4V6QS/Tuy/HU3NRgqwe+pa6b3G2ii6c1DOEFsGII =tlJ0 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-soft/carol.pgp000064400000000000000000000031131046102023000214040ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdASYbfuQwwL3e+3w1mMQvkSdH8jvImTWrZ4bED vjYK0XLCwAsEHxYKAH0Fgl4L4QADCwkHCRDOVw+bjH3HXUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmesomn9pdoWhgGAjqCRe2biaIlX9PFN 8QYPU7TDKHyA+wMVCggCmwECHgEWIQSrTj+O6LvTRZdU11rOVw+bjH3HXQAAHdsA /iLmRDgTvuY3s5noAInNyMf6hHQ2j9MV17hu0ZupHjz3AP0Z8ZCJwEiCCky4CdM/ nME/aazaeuGGSEdSRAbyoYyhBs0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEM5XD5uMfcddRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7AXkX2mRG4+Y2cffWFk0g6SXfksdH0KaGj4HqYUs2kwAxUK CAKZAQKbAQIeARYhBKtOP47ou9NFl1TXWs5XD5uMfcddAACEGQEAy3iWLGHpLYiZ VtdSKgSvEvG7EG4HYTZazFEgnmrZHTsA/1/7QWAk3QhKfDEvyeKq6K0iyqZW4Dv4 YoOAESUO7O0BwsAHBBAWCgB5BYJeNL+ABYMJZ5o7A4UCHgkQFzjfq4aHgmJHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnB9CwyerGxGO3UFAy nL/sovD1rzSIHjCLMd8pL/d6V5YWIQRmA3+YtES7r9/pjocXON+rhoeCYgAAyUkA /jyNKbGt+lC9UTu1h22jcIFkFMmHJEsCnKcJq/Jjmb5uAQDf36nBkzugLTpRrh4S kB/3NhZNHTUFxfR6efWQ9AzQCc4zBF4L4QAWCSsGAQQB2kcPAQEHQE0s5as06xAg Th17BInKES9N9gfXrccysgF7LUjBnL+5wsC/BBgWCgExBYJeC+EACRDOVw+bjH3H XUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcfCLfG4X2m yADBXW2TrqwlgZpU1Ecgg5VovJlbke8vNAKbAr6gBBkWCgBvBYJeC+EACRDib+a5 KHImjkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcZaikl EvnRDKChTQXJXUuO2VdBP+E8Kufqd5rA9nk4qxYhBLKPwhwSFdDpgsQSiuJv5rko ciaOAAC8KgEA9uawv5p4R9PZeYr12UfRrKYDyeylNPDvgAl2kOe9dl8BAMm2Oatr AVZOPz7bSjfm887G8XhJjrY/L5kITQBPlpoKFiEEq04/jui700WXVNdazlcPm4x9 x10AAMXWAQC++oHM9LlexwWf/3yxdD0lx8rAR9Frelz4RLC/u9DOkQEAharhXpBL 9O7L8dTc1GCrB76lrpvcbaKLpzUM4QWwYgg= =CAGQ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-soft/dave-priv.pgp000064400000000000000000000027661046102023000222160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: DF6A 440E D9DE 723B 0EBC 7F50 E24F BB1B 9FAD C999 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAMtE78IZuJp7rnZYtP19vBz4ygIKoa0Wgo5Pq E+WynDkAAQDuRmbJ/80YBWEZsA65aEZOzxJsdrMQalpJS3C07CKYkg50wsALBB8W CgB9BYJeC+EAAwsJBwkQ4k+7G5+tyZlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnYUdPd0PzfWEYp9ZzD1vmO1ko9VuWN/2GA4Ws9lOTjHQD FQoIApsBAh4BFiEE32pEDtnecjsOvH9Q4k+7G5+tyZkAACfkAP4u3Wj6Yrn7/zVR hd34+j7qUX3Z5snDr1wWp0NGR62TWAD/eJedIfzmPlWloQ1ND4Oz5USYsopmFMy3 my/Rkq7ybwPNEjxkYXZlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCXgvhAAMLCQcJ EOJPuxufrcmZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6UcXqrxmqmolg3unKr/fnN9QL0wPEzjHNX7a6qlIcgfAxUKCAKZAQKbAQIeARYh BN9qRA7Z3nI7Drx/UOJPuxufrcmZAAD63gEA5T4cxzzNwM+IDNEyFU6aMoi0zD2J sLWH6Gq1bklb+dkA/RWfWWBgLrPg07CtKwXLv684Aw0KehSU7/k8M+kWxcQKx1gE XgvhABYJKwYBBAHaRw8BAQdAr6StRwze1t8ycBcEB/LoR4N8VoxPXi9hSPyW1PHe Jw4AAQCL17OP4IepOWMz9gNcCZ+rB0pFF4AalzzPz7Rg9wuP1w9gwsC/BBgWCgEx BYJeC+EACRDiT7sbn63JmUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfzY4uOkDt+uue9I10vEIukXRiGI2eUo8hHSRttKlpTuQKbAr6gBBkW CgBvBYJeC+EACRDSJvNOcAZHOkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfRuu7gSeIn102gZIGhmOExuC3kUkB2yNZmt58LD6whtRYhBAEU p2aXb0VqHu0XU9Im805wBkc6AAAknQEAsuenUBRmkfkxdTQStjf932XtSWeJm3a+ q+aqXMmpyHAA/0Y2TA+GYOnluJbUxvvHhDaM8FczX8TTxvJuUFCVEd4PFiEE32pE DtnecjsOvH9Q4k+7G5+tyZkAANcYAP9S1CEOyx3D2WQMfwG+MatpgOqds4JOLXUt PP9Vd7vkVwEAr+SSVgX5BZ0pCBZ4/5UxptDlxkqn8tQg4gTOJ8PosAI= =cWV3 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-soft/dave.pgp000064400000000000000000000041531046102023000212300ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAMtE78IZuJp7rnZYtP19vBz4ygIKoa0Wgo5Pq E+WynDnCwAsEHxYKAH0Fgl4L4QADCwkHCRDiT7sbn63JmUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdhR093Q/N9YRin1nMPW+Y7WSj1W5Y3 /YYDhaz2U5OMdAMVCggCmwECHgEWIQTfakQO2d5yOw68f1DiT7sbn63JmQAAJ+QA /i7daPpiufv/NVGF3fj6PupRfdnmycOvXBanQ0ZHrZNYAP94l50h/OY+VaWhDU0P g7PlRJiyimYUzLebL9GSrvJvA80SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJeC+EAAwsJBwkQ4k+7G5+tyZlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnpRxeqvGaqaiWDe6cqv9+c31AvTA8TOMc1ftrqqUhyB8DFQoI ApkBApsBAh4BFiEE32pEDtnecjsOvH9Q4k+7G5+tyZkAAPreAQDlPhzHPM3Az4gM 0TIVTpoyiLTMPYmwtYfoarVuSVv52QD9FZ9ZYGAus+DTsK0rBcu/rzgDDQp6FJTv +Twz6RbFxArCwAcEEBYKAHkFgl6D2YAFgwlnmjsDhQF4CRDyjEdUD6LDs0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdSzZw8Gb6AVCw68s1O 3yTZYpqnlMxaWu+SOahmSy5kJBYhBEzYc392wriXxPBY2/KMR1QPosOzAACJ0AD8 C6ViSnmB73y5xxRea+Lcy+8v38ZkHab3k7/bneLvk58BAOy18jQxIvaOFbf6DCzi zbl0U9uzClh5i2H1PJREhcwGwsAHBBAWCgB5BYJeNL+ABYMJZ5o7A4UBeAkQzlcP m4x9x11HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnosny +xkUickvb/oaF1iZhfKkfryDUBD8i0OnWD+KhboWIQSrTj+O6LvTRZdU11rOVw+b jH3HXQAA5cYA/3XRGpKFnNamvKeNnA6z7ZEC1M50sAdopY8kU+FFTj7RAP9Cso75 J50fWcqyTLD649VHZZPUKHWf6Up26Hl8ONg7DsLABwQQFgoAeQWCXjS/gAWDCWea OwOFATwJEPKMR1QPosOzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ4ZEd+wavtsVzggrRXWKz4K7ehDz/wvijhHmEr7+Wl/xFiEETNhzf3bC uJfE8Fjb8oxHVA+iw7MAAL/gAQDQcLkBr7f2cCXyJ7t9VYlQcnYq4sjuqRBBTeT1 pjxqMwEAzfwzLIq7zh/QV/xNp8VVto2yKnc6i9aJf5zkQzt53g3OMwReC+EAFgkr BgEEAdpHDwEBB0CvpK1HDN7W3zJwFwQH8uhHg3xWjE9eL2FI/JbU8d4nDsLAvwQY FgoBMQWCXgvhAAkQ4k+7G5+tyZlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn82OLjpA7frrnvSNdLxCLpF0YhiNnlKPIR0kbbSpaU7kCmwK+ oAQZFgoAbwWCXgvhAAkQ0ibzTnAGRzpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn0bru4EniJ9dNoGSBoZjhMbgt5FJAdsjWZrefCw+sIbUW IQQBFKdml29Fah7tF1PSJvNOcAZHOgAAJJ0BALLnp1AUZpH5MXU0ErY3/d9l7Uln iZt2vqvmqlzJqchwAP9GNkwPhmDp5biW1Mb7x4Q2jPBXM1/E08byblBQlRHeDxYh BN9qRA7Z3nI7Drx/UOJPuxufrcmZAADXGAD/UtQhDssdw9lkDH8BvjGraYDqnbOC Ti11LTz/VXe75FcBAK/kklYF+QWdKQgWeP+VMabQ5cZKp/LUIOIEzifD6LAC =cvys -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-soft.pgp000064400000000000000000000155621046102023000203170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdA8y8LlHJUsnwhFSABHa3yF1nyAFealUz2kXNY XA2Ocw3CwAwEIBYKAH4Fgl5a+wAJEPKMR1QPosOzRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+thHblIkK5D/QLIZJJj/Mm9DGMxmC/mdlDK WBr0vBCxDh0Dc29tZSBtZXNzYWdlFiEETNhzf3bCuJfE8Fjb8oxHVA+iw7MAAICo AQDA+uUFrs+GBvyTt04m6XZai5ldct0sC4xErmLFMuS9UAD9FYz7oIXutX4enk3w h4ZIZy77rSJxymz5Zjwl9T3nGgnCwAsEHxYKAH0Fgl4L4QADCwkHCRDyjEdUD6LD s0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmceySxlNKj+ C239rumCpdwwBOAZ8vg7OIELRpPsY71GoAMVCggCmwECHgEWIQRM2HN/dsK4l8Tw WNvyjEdUD6LDswAAYQ0BAMv3lxpsOhKpQSnTyzcstlz6KO6esffGO2/UWmT9g72u AQDFNtdmt+68kL+xyzYC6NjakyY68/IWQj+5ZoOrRY6jDc0RPGJvYkBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgl4L4QADCwkHCRDyjEdUD6LDs0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdih74hXce4aUP356vH41nuVp1iwZaE vxGdhQwgQxSEhwMVCggCmQECmwECHgEWIQRM2HN/dsK4l8TwWNvyjEdUD6LDswAA HiEBAIc0/rp44l4+Era+BiK3YV2A34quhXe2cwKnVdhQNEqeAP9JVDaGO8MPqgaQ WTtiPauB6Hv17wKHjsE55ETYr8TnB8LABwQQFgoAeQWCXoPZgAWDCWeaOwOFAXgJ EBc436uGh4JiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZwNcOTuNVCIsPtlMm3nLYgkOAeY6b61S9yHdn4yPhKm0FiEEZgN/mLREu6/f6Y6H Fzjfq4aHgmIAAGhuAQDjCDll4c9g/+yzEziWnL/etMC5gu7WKeBgLJsqldrFrgEA yt8Ff2L4SrVhn/inohDKwP0Kh/Zu0qUS0LItMoQqugvCwAcEEBYKAHkFgl40v4AF gwlnmjsDhQJaCRAXON+rhoeCYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcqC54B5MxUjdUYFYc1G0z3IFY9bl9hVmGZYzALO7qunxYhBGYD f5i0RLuv3+mOhxc436uGh4JiAACi+wD+KH+AobqIzKRgsTldN+0ZUZneU3Age13E ZgAaI+Y4YssBAMfKO19CuESpUIBUy08T791o+cbxRgidVfBeGMUl95cGzjMEXgvh ABYJKwYBBAHaRw8BAQdAe14y4wbsugSXTCYbcbtKabDb14nH14K9TBcEfCtAZkXC wL8EGBYKATEFgl4L4QAJEPKMR1QPosOzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ6vBgjxxKBwIjqiNrmmJIZtFkwPD4IJEqIINOzhfkXuQ ApsCvqAEGRYKAG8Fgl4L4QAJEBwHgaRywjVWRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ2n0ohIR9Kt6y2F8OtH8MLzO6Dgjv25Ca4eXH5s3 qlDTFiEEFrmn+aCTonj3IYT6HAeBpHLCNVYAAJb5AP0ULxpF8Kh+QlYqiYojpKYo mPTgZqkbc7JY0KwHXNcHkAEAogL9yMeDnbjZiPUWODlf1ED41HprrbZZN7ADpZyl 2wgWIQRM2HN/dsK4l8TwWNvyjEdUD6LDswAAb3oBAJ5b/ObUGFEcE6J0lk3ldvGM JEVpF+g6bllozfqdxNdiAP9zL+8yZTrNO9UjKrZoe2n4gKJ2kNQvkydmmzl7Zcbv CcYzBF4L4QAWCSsGAQQB2kcPAQEHQDuz70xSHZdmOlPFOhT7+bGAt9dWJdul3Z6u BAuC0HpiwsALBB8WCgB9BYJeC+EAAwsJBwkQFzjfq4aHgmJHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn8ei4XbDg0jU6Zxg1qs8L+xWIEzff 3a9efsZdcP3ylR0DFQoIApsBAh4BFiEEZgN/mLREu6/f6Y6HFzjfq4aHgmIAACg8 AP9jqokwnvBNhm7ObAwC8TdxoxG6mVNhv+uon1WD/PDO6gD8DpzHBrgvuvS87eUA elkuTOJN9m46udFoN0C8iMdLagfNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYK AIAFgl4L4QADCwkHCRAXON+rhoeCYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmcKzsyguAPAEjTm2nNpLqC7EmR1ZtTbaOTUhhJKPx/XPAMV CggCmQECmwECHgEWIQRmA3+YtES7r9/pjocXON+rhoeCYgAAIpsBAOIzZ5SLTu8p 1n9XT02k6p/IHUraayDaS4e0xQmAvbsdAPwK/lOe8mmLGb1KyAmCeHire3KInouF xS9B9K8Jl5ZUBc4zBF4L4QAWCSsGAQQB2kcPAQEHQJOMaGWUZQ2Y6+3ARQfgUgDE sYz6KvYsYdE1H3kSmh4cwsC/BBgWCgExBYJeC+EACRAXON+rhoeCYkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf3uhQtGFUerlk/p/WJ3Tzi vPwvVPXq7/BY9V7FyxHdWAKbAr6gBBkWCgBvBYJeC+EACRDKRM4YdYNlNUcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcZE0a0itWnJUAQZasL 28KRz3sU2PVZjQT5a78B3AlU4RYhBGRcBNbLOgUQmQjPsspEzhh1g2U1AAAwwwEA rIO7Vjipyn97PaQGFOVQqRbKMtC6vB0yfurnUDdnCd0BALbDpRjMmqN/mVTjN/7Y PwqsLHlV7w7jiR9b57zH4aoMFiEEZgN/mLREu6/f6Y6HFzjfq4aHgmIAAN6yAP4v 8HYJT13wI1roqkHa2VPALr3/z5ZH+b/mxdkqVqcGvgD9FGvSIFTfLkM5xsT8UkMN eCmwW2fYiPyRHEbwmwrU4gLGMwReC+EAFgkrBgEEAdpHDwEBB0BJht+5DDAvd77f DWYxC+RJ0fyO8iZNatnhsQO+NgrRcsLACwQfFgoAfQWCXgvhAAMLCQcJEM5XD5uM fcddRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6yiaf2l 2haGAYCOoJF7ZuJoiVf08U3xBg9TtMMofID7AxUKCAKbAQIeARYhBKtOP47ou9NF l1TXWs5XD5uMfcddAAAd2wD+IuZEOBO+5jezmegAic3Ix/qEdDaP0xXXuG7Rm6ke PPcA/RnxkInASIIKTLgJ0z+cwT9prNp64YZIR1JEBvKhjKEGzRM8Y2Fyb2xAZXhh bXBsZS5vcmc+wsAOBBMWCgCABYJeC+EAAwsJBwkQzlcPm4x9x11HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnsBeRfaZEbj5jZx99YWTSDpJd +Sx0fQpoaPgephSzaTADFQoIApkBApsBAh4BFiEEq04/jui700WXVNdazlcPm4x9 x10AAIQZAQDLeJYsYektiJlW11IqBK8S8bsQbgdhNlrMUSCeatkdOwD/X/tBYCTd CEp8MS/J4qrorSLKplbgO/hig4ARJQ7s7QHCwAcEEBYKAHkFgl40v4AFgwlnmjsD hQIeCRAXON+rhoeCYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmcH0LDJ6sbEY7dQUDKcv+yi8PWvNIgeMIsx3ykv93pXlhYhBGYDf5i0RLuv 3+mOhxc436uGh4JiAADJSQD+PI0psa36UL1RO7WHbaNwgWQUyYckSwKcpwmr8mOZ vm4BAN/fqcGTO6AtOlGuHhKQH/c2Fk0dNQXF9Hp59ZD0DNAJzjMEXgvhABYJKwYB BAHaRw8BAQdATSzlqzTrECBOHXsEicoRL032B9etxzKyAXstSMGcv7nCwL8EGBYK ATEFgl4L4QAJEM5XD5uMfcddRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZx8It8bhfabIAMFdbZOurCWBmlTURyCDlWi8mVuR7y80ApsCvqAE GRYKAG8Fgl4L4QAJEOJv5rkociaORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZxlqKSUS+dEMoKFNBcldS47ZV0E/4Twq5+p3msD2eTirFiEE so/CHBIV0OmCxBKK4m/muShyJo4AALwqAQD25rC/mnhH09l5ivXZR9GspgPJ7KU0 8O+ACXaQ5712XwEAybY5q2sBVk4/PttKN+bzzsbxeEmOtj8vmQhNAE+WmgoWIQSr Tj+O6LvTRZdU11rOVw+bjH3HXQAAxdYBAL76gcz0uV7HBZ//fLF0PSXHysBH0Wt6 XPhEsL+70M6RAQCFquFekEv07svx1NzUYKsHvqWum9xtoounNQzhBbBiCMYzBF4L 4QAWCSsGAQQB2kcPAQEHQDLRO/CGbiae652WLT9fbwc+MoCCqGtFoKOT6hPlspw5 wsALBB8WCgB9BYJeC+EAAwsJBwkQ4k+7G5+tyZlHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnYUdPd0PzfWEYp9ZzD1vmO1ko9VuWN/2GA4Ws 9lOTjHQDFQoIApsBAh4BFiEE32pEDtnecjsOvH9Q4k+7G5+tyZkAACfkAP4u3Wj6 Yrn7/zVRhd34+j7qUX3Z5snDr1wWp0NGR62TWAD/eJedIfzmPlWloQ1ND4Oz5USY sopmFMy3my/Rkq7ybwPNEjxkYXZlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCXgvh AAMLCQcJEOJPuxufrcmZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ6UcXqrxmqmolg3unKr/fnN9QL0wPEzjHNX7a6qlIcgfAxUKCAKZAQKb AQIeARYhBN9qRA7Z3nI7Drx/UOJPuxufrcmZAAD63gEA5T4cxzzNwM+IDNEyFU6a Moi0zD2JsLWH6Gq1bklb+dkA/RWfWWBgLrPg07CtKwXLv684Aw0KehSU7/k8M+kW xcQKwsAHBBAWCgB5BYJeg9mABYMJZ5o7A4UBeAkQ8oxHVA+iw7NHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnUs2cPBm+gFQsOvLNTt8k2WKa p5TMWlrvkjmoZksuZCQWIQRM2HN/dsK4l8TwWNvyjEdUD6LDswAAidAA/AulYkp5 ge98uccUXmvi3MvvL9/GZB2m95O/253i75OfAQDstfI0MSL2jhW3+gws4s25dFPb swpYeYth9TyURIXMBsLABwQQFgoAeQWCXjS/gAWDCWeaOwOFAXgJEM5XD5uMfcdd RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6LJ8vsZFInJ L2/6GhdYmYXypH68g1AQ/ItDp1g/ioW6FiEEq04/jui700WXVNdazlcPm4x9x10A AOXGAP910RqShZzWprynjZwOs+2RAtTOdLAHaKWPJFPhRU4+0QD/QrKO+SedH1nK skyw+uPVR2WT1Ch1n+lKduh5fDjYOw7CwAcEEBYKAHkFgl40v4AFgwlnmjsDhQE8 CRDyjEdUD6LDs0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeGRHfsGr7bFc4IK0V1is+Cu3oQ8/8L4o4R5hK+/lpf8RYhBEzYc392wriXxPBY 2/KMR1QPosOzAAC/4AEA0HC5Aa+39nAl8ie7fVWJUHJ2KuLI7qkQQU3k9aY8ajMB AM38MyyKu84f0Ff8TafFVbaNsip3OovWiX+c5EM7ed4NzjMEXgvhABYJKwYBBAHa Rw8BAQdAr6StRwze1t8ycBcEB/LoR4N8VoxPXi9hSPyW1PHeJw7CwL8EGBYKATEF gl4L4QAJEOJPuxufrcmZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ/Nji46QO366570jXS8Qi6RdGIYjZ5SjyEdJG20qWlO5ApsCvqAEGRYK AG8Fgl4L4QAJENIm805wBkc6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ9G67uBJ4ifXTaBkgaGY4TG4LeRSQHbI1ma3nwsPrCG1FiEEARSn ZpdvRWoe7RdT0ibzTnAGRzoAACSdAQCy56dQFGaR+TF1NBK2N/3fZe1JZ4mbdr6r 5qpcyanIcAD/RjZMD4Zg6eW4ltTG+8eENozwVzNfxNPG8m5QUJUR3g8WIQTfakQO 2d5yOw68f1DiT7sbn63JmQAA1xgA/1LUIQ7LHcPZZAx/Ab4xq2mA6p2zgk4tdS08 /1V3u+RXAQCv5JJWBfkFnSkIFnj/lTGm0OXGSqfy1CDiBM4nw+iwAg== =KuPt -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cert-revoked-soft.sh000075500000000000000000000007031046102023000201350ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=cert-revoked-soft ${@:+"$@"} t0=20200101 t1=20200201 t2=20200301 t3=20200401 set -x key -t $t0 alice key -t $t0 bob key -t $t0 carol key -t $t0 dave certify -t $t1 alice -a 90 -d 2 bob certify -t $t1 bob -a 60 -d 1 dave certify -t $t1 alice -a 30 -d 2 carol certify -t $t1 carol -a 120 -d 1 dave revoke -t $t2 bob retired certify -t $t3 alice -a 120 -d 1 bob certify -t $t3 bob -a 120 -d 1 dave finish sequoia-wot-0.11.0/tests/data/certification-liveness/README.md000064400000000000000000000010651046102023000221650ustar 00000000000000Consider the following timeline: t0 A, B, C are created t1 A certifies B - 2/60 B certifies C - 1/60 t2 A certifies B (expires at t3) - 2/120 B certifies C - 1/120 t3 A's certification of B at t2 expires. This results in: t1: ```text o A 2/60 | v B 1/60 | v o C ``` t2: ```text o A 2/120 | v B 1/120 | v o C ``` t3: ```text o A 2/60 | v B 1/60 | v o C ``` sequoia-wot-0.11.0/tests/data/certification-liveness/alice-priv.pgp000064400000000000000000000027671046102023000234630ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 77C0 7725 0C26 357E 5E64 A58A 4142 6350 B1D7 F738 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAXWPlntnFYE1OUQN02H8OUuAvFmhxzeSgnAn+ A/BUEA8AAP4g2AS7Q2mkmGCUFUuAsDPgZk3PU37zrPY7YrpTIhjKaxA1wsALBB8W CgB9BYJeC+EAAwsJBwkQQUJjULHX9zhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JntZmL4Uy8+rHMVuYAmH7EVb5ZYyKSk/VylGKqy6Tm6XID FQoIApsBAh4BFiEEd8B3JQwmNX5eZKWKQUJjULHX9zgAAMHVAP9cb9i3BbzFSG9d XXOqUXonRlmKfHVQVPpbhljeBr8oPgD+MrX8qJj274PJQs+KEcffZ3GEMW5kBnEb i7lI7sa5HgzNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRBBQmNQsdf3OEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cme0u/cVkDd4E2LpuuWZL4rap3tPTyedU0eA04SXsaHf4AMVCggCmQECmwECHgEW IQR3wHclDCY1fl5kpYpBQmNQsdf3OAAACj4BAIOAci2+EQC4mggupnrAblreH0wY Xiz2XyPCJVAq8xVsAP9akpN9HGHQ+ZlbHV/4nv+pexcof2X65s6OP5fqSJgtAsdY BF4L4QAWCSsGAQQB2kcPAQEHQK86EY/JeUFQtjDua3qn0p/iO5TiToGcISwrQwNS CcSaAAEA/2NwVoDLi3pcaG9fD5IWSFh9mwK9//uQAMX0aUXvZoEQAMLAvwQYFgoB MQWCXgvhAAkQQUJjULHX9zhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn0GnzlmEe/bRvgSbsdW7tVS6dH+nKcwS6G4r4LOziBFkCmwK+oAQZ FgoAbwWCXgvhAAkQzJskh/fJVRJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn5CDbUWI7aaLzw4aR6eG5+JUWnOT7o4MMNckk0KLrBuMWIQTD afMP1xut2D7Y3zrMmySH98lVEgAAANIBAJDelB63IZ4S6hBxdDXU4U9YD3Gxr7Rh 9X80+tESn/JIAP9yQ809Nft5u2dIAbVziAs8HwHr2MQdcbytbf179oQABBYhBHfA dyUMJjV+XmSlikFCY1Cx1/c4AAB1QwEAtdxkd3IdBEGy2yPaQSy6UO/SMOuLBrvD 5gY9A18L7ZYA/iMspwmIjsgPfoHPIDTIW+kpVXgwsgoZwD7ESehVqykE =yuz5 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-liveness/alice.pgp000064400000000000000000000026241046102023000224750ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 77C0 7725 0C26 357E 5E64 A58A 4142 6350 B1D7 F738 Comment: xjMEXgvhABYJKwYBBAHaRw8BAQdAXWPlntnFYE1OUQN02H8OUuAvFmhxzeSgnAn+ A/BUEA/CwAsEHxYKAH0Fgl4L4QADCwkHCRBBQmNQsdf3OEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme1mYvhTLz6scxW5gCYfsRVvlljIpKT 9XKUYqrLpObpcgMVCggCmwECHgEWIQR3wHclDCY1fl5kpYpBQmNQsdf3OAAAwdUA /1xv2LcFvMVIb11dc6pReidGWYp8dVBU+luGWN4Gvyg+AP4ytfyomPbvg8lCz4oR x99ncYQxbmQGcRuLuUjuxrkeDM0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEEFCY1Cx1/c4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7S79xWQN3gTYum65Zkvitqne09PJ51TR4DThJexod/gAxUK CAKZAQKbAQIeARYhBHfAdyUMJjV+XmSlikFCY1Cx1/c4AAAKPgEAg4ByLb4RALia CC6mesBuWt4fTBheLPZfI8IlUCrzFWwA/1qSk30cYdD5mVsdX/ie/6l7Fyh/Zfrm zo4/l+pImC0CzjMEXgvhABYJKwYBBAHaRw8BAQdArzoRj8l5QVC2MO5reqfSn+I7 lOJOgZwhLCtDA1IJxJrCwL8EGBYKATEFgl4L4QAJEEFCY1Cx1/c4RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9Bp85ZhHv20b4Em7HVu7VUu nR/pynMEuhuK+Czs4gRZApsCvqAEGRYKAG8Fgl4L4QAJEMybJIf3yVUSRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+Qg21FiO2mi88OGkenh ufiVFpzk+6ODDDXJJNCi6wbjFiEEw2nzD9cbrdg+2N86zJskh/fJVRIAAADSAQCQ 3pQetyGeEuoQcXQ11OFPWA9xsa+0YfV/NPrREp/ySAD/ckPNPTX7ebtnSAG1c4gL PB8B69jEHXG8rW39e/aEAAQWIQR3wHclDCY1fl5kpYpBQmNQsdf3OAAAdUMBALXc ZHdyHQRBstsj2kEsulDv0jDriwa7w+YGPQNfC+2WAP4jLKcJiI7ID36BzyA0yFvp KVV4MLIKGcA+xEnoVaspBA== =INHF -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-liveness/bob-priv.pgp000064400000000000000000000027651046102023000231460ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8408 9156 2819 D3A1 08C4 DA1B B314 38DE 34F8 CF69 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdABH7eBrDJ7sYVsKsZV1ePs6jkwIL0Pwkmsrin KIFubVEAAQDHFSPH6lN3G3lLAXA/V8tx/vdIF1LAYPGsypRiAL9gvg+dwsALBB8W CgB9BYJeC+EAAwsJBwkQsxQ43jT4z2lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnpyr4eEJcwLfz1UTyy24CLWqBtd3xLNe69wrSi/RJoxcD FQoIApsBAh4BFiEEhAiRVigZ06EIxNobsxQ43jT4z2kAAII1AQCjefft6ZFnO4m7 dnpOUlq6ZmT8Ome9PSXrgYUEXShDCgEAgSU70d55v45eMnNhUtITEJxjgtBLALO/ OE1nijYVdgHNETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJeC+EAAwsJBwkQ sxQ43jT4z2lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn rloAr4zoXEWc4UfkKYbUACOFFrVHdRKfVcJu91pg1C8DFQoIApkBApsBAh4BFiEE hAiRVigZ06EIxNobsxQ43jT4z2kAAPzRAP4yJFnmOozbmLy2B3s0lPtEgbh0elE/ sohWFcXcf+hzugD+JZzrWU0hqdlbQXxK0MTeLquAQOcVfRZBBPNz994VwA/HWARe C+EAFgkrBgEEAdpHDwEBB0B9qsEKl3Zy558JbDQpDCVesfMcMSGCj9IVzH1hNRWN qwABAKb/yXvW1YXnzY6fO/DNe1y3kcVyUazMi7T913TnFpu1FObCwL8EGBYKATEF gl4L4QAJELMUON40+M9pRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ2mpAgJNdZyGrELmxR0p43mH8Hk+/ImlDMViIhsl0u+RApsCvqAEGRYK AG8Fgl4L4QAJEApNhk4ZQmTGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ0BEmcZXZvocp25yJE/y+NsJR/tPfPSAGc4u0I5FPFcjFiEEXI3Q Ht2SMxazoiIeCk2GThlCZMYAAIWEAP9XZbeGx6p+SNu2mF1AqDkZ24Ztaxdfy5Dh 1CBcg5R7ugD9EP7rbHZKXhYt53fLadSpyJbLqwen2K4BqxfVlrxQAw0WIQSECJFW KBnToQjE2huzFDjeNPjPaQAAPDsA/1kL3/4tA8OoXWpOsLH2jNCZLA337zNgYY1Z BZAK531GAQCqG1exlZS+ruiqfdpmqgtbLFv/qTSPPDrgw/+1PrAlDQ== =Qbpi -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-liveness/bob.pgp000064400000000000000000000035331046102023000221620ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdABH7eBrDJ7sYVsKsZV1ePs6jkwIL0Pwkmsrin KIFubVHCwAsEHxYKAH0Fgl4L4QADCwkHCRCzFDjeNPjPaUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmenKvh4QlzAt/PVRPLLbgItaoG13fEs 17r3CtKL9EmjFwMVCggCmwECHgEWIQSECJFWKBnToQjE2huzFDjeNPjPaQAAgjUB AKN59+3pkWc7ibt2ek5SWrpmZPw6Z709JeuBhQRdKEMKAQCBJTvR3nm/jl4yc2FS 0hMQnGOC0EsAs784TWeKNhV2Ac0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gl4L4QADCwkHCRCzFDjeNPjPaUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeuWgCvjOhcRZzhR+QphtQAI4UWtUd1Ep9Vwm73WmDULwMVCggC mQECmwECHgEWIQSECJFWKBnToQjE2huzFDjeNPjPaQAA/NEA/jIkWeY6jNuYvLYH ezSU+0SBuHR6UT+yiFYVxdx/6HO6AP4lnOtZTSGp2VtBfErQxN4uq4BA5xV9FkEE 83P33hXAD8LABwQQFgoAeQWCXlr7AAWDACjegAOFAngJEEFCY1Cx1/c4RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2cyhXqG/QO1UIr/iQOs hnGd9d5T1T+WhBRlwmR5UTYRFiEEd8B3JQwmNX5eZKWKQUJjULHX9zgAAEUAAQCM YYLnsUOqJPl+xGT5Gv/gJv+J8PsqcSKd6iOxaO4CcwD9GP/8KSTfxJ3V0/Jr+eVZ SE8GYDOply5nt5FmkbC2mgrCwAcEEBYKAHkFgl40v4AFgwlnmjsDhQI8CRBBQmNQ sdf3OEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcPhvRq ySFCDUtqMrvQoWH5hR8xOR2JJW6tmbjDo7p71BYhBHfAdyUMJjV+XmSlikFCY1Cx 1/c4AAChGAD/fk5BkTtqmKBbGM3HQH1m9/sr8yCg8yDQF44UMt/In8cA/38/UPFI udV9hyfH2TyJyKbiJg9GJtCqzWZpQ7qScBQGzjMEXgvhABYJKwYBBAHaRw8BAQdA farBCpd2cuefCWw0KQwlXrHzHDEhgo/SFcx9YTUVjavCwL8EGBYKATEFgl4L4QAJ ELMUON40+M9pRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2mpAgJNdZyGrELmxR0p43mH8Hk+/ImlDMViIhsl0u+RApsCvqAEGRYKAG8Fgl4L 4QAJEApNhk4ZQmTGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ0BEmcZXZvocp25yJE/y+NsJR/tPfPSAGc4u0I5FPFcjFiEEXI3QHt2SMxaz oiIeCk2GThlCZMYAAIWEAP9XZbeGx6p+SNu2mF1AqDkZ24Ztaxdfy5Dh1CBcg5R7 ugD9EP7rbHZKXhYt53fLadSpyJbLqwen2K4BqxfVlrxQAw0WIQSECJFWKBnToQjE 2huzFDjeNPjPaQAAPDsA/1kL3/4tA8OoXWpOsLH2jNCZLA337zNgYY1ZBZAK531G AQCqG1exlZS+ruiqfdpmqgtbLFv/qTSPPDrgw/+1PrAlDQ== =NEVu -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-liveness/carol-priv.pgp000064400000000000000000000027671046102023000235060ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E8BB 154D 000C 17AC 8729 1D72 7155 3C83 6973 FE01 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAgonKpYDdgHuJSVSiXe7SAI3i5h4ax6tCarOR dMq0gckAAP4z059v1Tci4Xghoz9gy1jAy1uyFqY0evbQt9V2Wjlg7hHKwsALBB8W CgB9BYJeC+EAAwsJBwkQcVU8g2lz/gFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnM1vWLYDdeI3Co0alX6SPimDtvCsGHOe9xpkzbWv5l4YD FQoIApsBAh4BFiEE6LsVTQAMF6yHKR1ycVU8g2lz/gEAABoXAQDmMX58rSQGeGVW 8mMbf+TiRctYTtDIOhl22178qcml1AEAoEWCAFsWifVwPQ3ZPHkhcpGvNAetQ6ci U/johAxwxwbNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRBxVTyDaXP+AUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmf+Zbf995D2hyMhOhB174B8Rc02xMnCbp64BbIdsOjt5AMVCggCmQECmwECHgEW IQTouxVNAAwXrIcpHXJxVTyDaXP+AQAA/4UA/0Kgv9i2F+weU0tXVUIZxABtsGIp S8MUDpHU9QII8CISAP9G9UJUDaJy2vFvQ2eJEOZyZNt82Xvq6+cDECj+ZEeBA8dY BF4L4QAWCSsGAQQB2kcPAQEHQNtoxwUDpF22Fkja4Fcavv8NXvU+QFMinag8xHQF FPRUAAEAtEGKPcv7SmpS3v/CJB92HydLtBhT0s8AzofxAKphjKkPuMLAvwQYFgoB MQWCXgvhAAkQcVU8g2lz/gFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnWI2mynlOEfPxEgd+xMZoEr2YPraK3w8V/bUPu9UkRgECmwK+oAQZ FgoAbwWCXgvhAAkQnhVUoRvJO3BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnMcCiIeMFn3i4H87ZOq4IgjOvzarDemlAZd2y0IbRy68WIQSl KLGYLgnmtRyOUMWeFVShG8k7cAAAUIQBAKpqbxlHHayTvMCCxPKOaGCLAWuRha0j 2A1tKV/GurVdAP9AYhylITOFv7dgV2Jj+cLNzfBXVnu4maATbzicwGVzAhYhBOi7 FU0ADBeshykdcnFVPINpc/4BAACIhwEA/XAwXZNt5QTCV2oggdrllW9TTjQzJA9w W5LuLchgJSkBAIZd8/YvZZKQ5CLbOG2OJEPDxo/it8fXPSOuGnFJfxgN =0dC+ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-liveness/carol.pgp000064400000000000000000000035331046102023000225200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAgonKpYDdgHuJSVSiXe7SAI3i5h4ax6tCarOR dMq0gcnCwAsEHxYKAH0Fgl4L4QADCwkHCRBxVTyDaXP+AUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmczW9YtgN14jcKjRqVfpI+KYO28KwYc 573GmTNta/mXhgMVCggCmwECHgEWIQTouxVNAAwXrIcpHXJxVTyDaXP+AQAAGhcB AOYxfnytJAZ4ZVbyYxt/5OJFy1hO0Mg6GXbbXvypyaXUAQCgRYIAWxaJ9XA9Ddk8 eSFyka80B61DpyJT+OiEDHDHBs0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEHFVPINpc/4BRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ/5lt/33kPaHIyE6EHXvgHxFzTbEycJunrgFsh2w6O3kAxUK CAKZAQKbAQIeARYhBOi7FU0ADBeshykdcnFVPINpc/4BAAD/hQD/QqC/2LYX7B5T S1dVQhnEAG2wYilLwxQOkdT1AgjwIhIA/0b1QlQNonLa8W9DZ4kQ5nJk23zZe+rr 5wMQKP5kR4EDwsAHBBAWCgB5BYJeWvsABYMAKN6AA4UBeAkQsxQ43jT4z2lHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnkioNXrj8hS1vocKZ C7D2JQ7/B/Kqez75I9bSr6oel0MWIQSECJFWKBnToQjE2huzFDjeNPjPaQAAoC0A /iJ5DyQRdxglp+Z0o3mm2Q2+xLrOfOmykY0fy4ip6ZNLAP43cIc0ddUyRsljQdhP iVPeEdAxqWkUUCWlp4PTGtzbCcLABwQQFgoAeQWCXjS/gAWDCWeaOwOFATwJELMU ON40+M9pRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/zX /3t21vLxv5kfYkT75O6cdkdKlGR48hwfcdtOyNTmFiEEhAiRVigZ06EIxNobsxQ4 3jT4z2kAABTMAP9ReR0Gf0L/ZBlajI3SqC+UhURRJuULU9P3GrifaZZICwEA6Pur oRGks6Z1rlLGbJAIhSN2JODPuZXu9IyPP0+wMArOMwReC+EAFgkrBgEEAdpHDwEB B0DbaMcFA6RdthZI2uBXGr7/DV71PkBTIp2oPMR0BRT0VMLAvwQYFgoBMQWCXgvh AAkQcVU8g2lz/gFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnWI2mynlOEfPxEgd+xMZoEr2YPraK3w8V/bUPu9UkRgECmwK+oAQZFgoAbwWC XgvhAAkQnhVUoRvJO3BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnMcCiIeMFn3i4H87ZOq4IgjOvzarDemlAZd2y0IbRy68WIQSlKLGYLgnm tRyOUMWeFVShG8k7cAAAUIQBAKpqbxlHHayTvMCCxPKOaGCLAWuRha0j2A1tKV/G urVdAP9AYhylITOFv7dgV2Jj+cLNzfBXVnu4maATbzicwGVzAhYhBOi7FU0ADBes hykdcnFVPINpc/4BAACIhwEA/XAwXZNt5QTCV2oggdrllW9TTjQzJA9wW5LuLchg JSkBAIZd8/YvZZKQ5CLbOG2OJEPDxo/it8fXPSOuGnFJfxgN =WxIb -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-liveness.pgp000064400000000000000000000115161046102023000214200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAXWPlntnFYE1OUQN02H8OUuAvFmhxzeSgnAn+ A/BUEA/CwAsEHxYKAH0Fgl4L4QADCwkHCRBBQmNQsdf3OEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme1mYvhTLz6scxW5gCYfsRVvlljIpKT 9XKUYqrLpObpcgMVCggCmwECHgEWIQR3wHclDCY1fl5kpYpBQmNQsdf3OAAAwdUA /1xv2LcFvMVIb11dc6pReidGWYp8dVBU+luGWN4Gvyg+AP4ytfyomPbvg8lCz4oR x99ncYQxbmQGcRuLuUjuxrkeDM0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEEFCY1Cx1/c4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7S79xWQN3gTYum65Zkvitqne09PJ51TR4DThJexod/gAxUK CAKZAQKbAQIeARYhBHfAdyUMJjV+XmSlikFCY1Cx1/c4AAAKPgEAg4ByLb4RALia CC6mesBuWt4fTBheLPZfI8IlUCrzFWwA/1qSk30cYdD5mVsdX/ie/6l7Fyh/Zfrm zo4/l+pImC0CzjMEXgvhABYJKwYBBAHaRw8BAQdArzoRj8l5QVC2MO5reqfSn+I7 lOJOgZwhLCtDA1IJxJrCwL8EGBYKATEFgl4L4QAJEEFCY1Cx1/c4RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9Bp85ZhHv20b4Em7HVu7VUu nR/pynMEuhuK+Czs4gRZApsCvqAEGRYKAG8Fgl4L4QAJEMybJIf3yVUSRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+Qg21FiO2mi88OGkenh ufiVFpzk+6ODDDXJJNCi6wbjFiEEw2nzD9cbrdg+2N86zJskh/fJVRIAAADSAQCQ 3pQetyGeEuoQcXQ11OFPWA9xsa+0YfV/NPrREp/ySAD/ckPNPTX7ebtnSAG1c4gL PB8B69jEHXG8rW39e/aEAAQWIQR3wHclDCY1fl5kpYpBQmNQsdf3OAAAdUMBALXc ZHdyHQRBstsj2kEsulDv0jDriwa7w+YGPQNfC+2WAP4jLKcJiI7ID36BzyA0yFvp KVV4MLIKGcA+xEnoVaspBMYzBF4L4QAWCSsGAQQB2kcPAQEHQAR+3gawye7GFbCr GVdXj7Oo5MCC9D8JJrK4pyiBbm1RwsALBB8WCgB9BYJeC+EAAwsJBwkQsxQ43jT4 z2lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnpyr4eEJc wLfz1UTyy24CLWqBtd3xLNe69wrSi/RJoxcDFQoIApsBAh4BFiEEhAiRVigZ06EI xNobsxQ43jT4z2kAAII1AQCjefft6ZFnO4m7dnpOUlq6ZmT8Ome9PSXrgYUEXShD CgEAgSU70d55v45eMnNhUtITEJxjgtBLALO/OE1nijYVdgHNETxib2JAZXhhbXBs ZS5vcmc+wsAOBBMWCgCABYJeC+EAAwsJBwkQsxQ43jT4z2lHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnrloAr4zoXEWc4UfkKYbUACOFFrVH dRKfVcJu91pg1C8DFQoIApkBApsBAh4BFiEEhAiRVigZ06EIxNobsxQ43jT4z2kA APzRAP4yJFnmOozbmLy2B3s0lPtEgbh0elE/sohWFcXcf+hzugD+JZzrWU0hqdlb QXxK0MTeLquAQOcVfRZBBPNz994VwA/CwAcEEBYKAHkFgl5a+wAFgwAo3oADhQJ4 CRBBQmNQsdf3OEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdnMoV6hv0DtVCK/4kDrIZxnfXeU9U/loQUZcJkeVE2ERYhBHfAdyUMJjV+XmSl ikFCY1Cx1/c4AABFAAEAjGGC57FDqiT5fsRk+Rr/4Cb/ifD7KnEineojsWjuAnMA /Rj//Ckk38Sd1dPya/nlWUhPBmAzqZcuZ7eRZpGwtpoKwsAHBBAWCgB5BYJeNL+A BYMJZ5o7A4UCPAkQQUJjULHX9zhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnD4b0askhQg1LajK70KFh+YUfMTkdiSVurZm4w6O6e9QWIQR3 wHclDCY1fl5kpYpBQmNQsdf3OAAAoRgA/35OQZE7apigWxjNx0B9Zvf7K/MgoPMg 0BeOFDLfyJ/HAP9/P1DxSLnVfYcnx9k8icim4iYPRibQqs1maUO6knAUBs4zBF4L 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 =Khkp -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-liveness.sh000075500000000000000000000005411046102023000212430ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=certification-liveness ${@:+"$@"} t0=20200101 t1=20200201 t2=20200301 t3=20200401 set -x key -t $t0 alice key -t $t0 bob key -t $t0 carol certify -t $t1 alice -a 60 -d 2 bob certify -t $t1 bob -a 60 -d 1 carol certify -t $t2 alice -e 31d -a 120 -d 2 bob certify -t $t2 bob -e 31d -a 120 -d 1 carol finish sequoia-wot-0.11.0/tests/data/certification-network/README.md000064400000000000000000000002211046102023000220170ustar 00000000000000Four certificates that only make certifications (depth is always 0). ``` alice | |\ v | bob | | | v | carol| | | v / dave ``` sequoia-wot-0.11.0/tests/data/certification-network/alice-priv.pgp000064400000000000000000000023671046102023000233200ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B2B3 7121 4EF7 1AFD 16E4 2C62 D813 60B4 C048 9225 Comment: xVgEY8kujBYJKwYBBAHaRw8BAQdAUFd1GAhNCADp2xh8Vvi7cVwpi2mFyQHpr+nm NdgokwQAAP41ccL6uKVEdeWOPqAwMT37G0VuVKCVXGBJWrtHrlxBIQ+EwsALBB8W CgB9BYJjyS6MAwsJBwkQ2BNgtMBIkiVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn7dlG1W4g4mRG3EU31qEwGEdYXZHHdQ2tbKVdCLlMv3gD FQoIApsBAh4BFiEEsrNxIU73Gv0W5Cxi2BNgtMBIkiUAADxdAP4+M+gHh97kpSng WVGipPraVgeTNwYcwXuvaRXQWuhyAAEA0jm/onVv6N1SV2+Xgt9foBerKv6KDGwV Hgn+xvqW8ArNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmPJLowDCwkH CRDYE2C0wEiSJUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeeu4szqki3SohdgP6wgd1C8UuI20AqOz007ifL4Mbn3QMVCggCmQECmwECHgEW IQSys3EhTvca/RbkLGLYE2C0wEiSJQAAM5oA/ilm9JLDxm3oXIECIpMMNVvpIeHq u5kBDVVz2Tvqwt+OAP0TX1DSn5oMVjOXtQVtVZ2WzIn8B4kpVP3yF9g20qg7BMdY BGPJLowWCSsGAQQB2kcPAQEHQC9ciUWozqpsB4350C0fVCVO3s4L9W5L+6d8Te7D lN5oAAEA964oePGzcxS+RZSdve9iYpY6MrQY69rlzO/5oi5mtd8TC8LAAAQYFgoA cgWCY8kujAkQ2BNgtMBIkiVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn8UtikEUrQ7QMQ2nTjgbkpBkD0nrQlZE4Z0gZtbpKQ7MCmyAWIQSy s3EhTvca/RbkLGLYE2C0wEiSJQAAwtIA/ipjA7zxhUdNdJNt8852CQvBvIGUzuxV 1HtXsv5km3bOAQDykZCsIYoPG1vqViW9h7qnmGVwektqf59cPRf1oot0Dg== =eHPs -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-network/alice.pgp000064400000000000000000000024771046102023000223440ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEY8kujBYJKwYBBAHaRw8BAQdAUFd1GAhNCADp2xh8Vvi7cVwpi2mFyQHpr+nm NdgokwTCwAsEHxYKAH0FgmPJLowDCwkHCRDYE2C0wEiSJUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmft2UbVbiDiZEbcRTfWoTAYR1hdkcd1 Da1spV0IuUy/eAMVCggCmwECHgEWIQSys3EhTvca/RbkLGLYE2C0wEiSJQAAPF0A /j4z6AeH3uSlKeBZUaKk+tpWB5M3BhzBe69pFdBa6HIAAQDSOb+idW/o3VJXb5eC 31+gF6sq/ooMbBUeCf7G+pbwCs0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCY8kujAMLCQcJENgTYLTASJIlRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ567izOqSLdKiF2A/rCB3ULxS4jbQCo7PTTuJ8vgxufdAxUK CAKZAQKbAQIeARYhBLKzcSFO9xr9FuQsYtgTYLTASJIlAAAzmgD+KWb0ksPGbehc gQIikww1W+kh4eq7mQENVXPZO+rC344A/RNfUNKfmgxWM5e1BW1VnZbMifwHiSlU /fIX2DbSqDsEwsABBBAWCgBzBYJjyS7JA4UAPAkQAjzAGXPtnfNHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnHLXtOBaxT8cR8KlNhRvwRXNR h3lXfxBi1LcB9824rXIWIQSaGuk3tcuLxGBIq2MCPMAZc+2d8wAAsAQA/3P3jDpq vSRoe2O4/2TzOB7aMp3yo+Y2lXyBleRiG30PAQD/hpyl5ELpKxL0nOgN+ddplHfP lVHsrHt2dT1oTM+yC84zBGPJLowWCSsGAQQB2kcPAQEHQC9ciUWozqpsB4350C0f VCVO3s4L9W5L+6d8Te7DlN5owsAABBgWCgByBYJjyS6MCRDYE2C0wEiSJUcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfxS2KQRStDtAxDadOO BuSkGQPSetCVkThnSBm1ukpDswKbIBYhBLKzcSFO9xr9FuQsYtgTYLTASJIlAADC 0gD+KmMDvPGFR010k23zznYJC8G8gZTO7FXUe1ey/mSbds4BAPKRkKwhig8bW+pW Jb2HuqeYZXB6S2p/n1w9F/Wii3QO =eGb8 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-network/bob-priv.pgp000064400000000000000000000023611046102023000227770ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A68D F00E B82F 9C49 C27C C772 3C5F 5BBE 6B79 0C05 Comment: xVgEY8kujBYJKwYBBAHaRw8BAQdA4cAHLeVcg9bGjBCRtpUVDRwuQC26MvDz52gn 7h+nwT8AAP9lofxDCDOUuBOR781IIznGQAF33Tt5WHhsHsYiAKhddA6ZwsALBB8W CgB9BYJjyS6MAwsJBwkQPF9bvmt5DAVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnSyaLLnixq5yHwDipm8CrZivV8lpAsmnTnGbfE08b9m8D FQoIApsBAh4BFiEEpo3wDrgvnEnCfMdyPF9bvmt5DAUAAJl5AQCagw8CscAg1c0L PXf9Hqh2v0+AmroddUKSkWYRTHeWzgD/dsgkway+TTq5A1CA8rmILRc/XeGH5mtw 5FqCAEmIngLNETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJjyS6MAwsJBwkQ PF9bvmt5DAVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn as43kkiFruNQKFzqf9LbGOBy4KSJf8UgXJl9CIRo2FwDFQoIApkBApsBAh4BFiEE po3wDrgvnEnCfMdyPF9bvmt5DAUAAGXmAP0QfQGCRvcYqR5HyNeKkAJC6If6CHw2 ApS60WfNkB8tTgEAq4moDSQJ8S0v5MOgKJF7C8K5XprGTB9WVpaoIIpsagvHWARj yS6MFgkrBgEEAdpHDwEBB0DT2pfGALscMDCeC6nidkYlKNwIArfJG2Vse1VznadS 0wABAJYUbGwH54ALNKpWEpevHa9EFu13q78SVyJUT+DKo75PDgTCwAAEGBYKAHIF gmPJLowJEDxfW75reQwFRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZxaoYqMIoa+mNbdjnCVrdkN6ulLykBLpr+3RkV4fltHvApsgFiEEpo3w DrgvnEnCfMdyPF9bvmt5DAUAAHTjAQDT118jtjM5WUlB96axrHiOSQlaYgNa1zYT Wmf9tVHYAAD+LYnzJgQ40Gm1OlZvsO2eCXhQFjEokCWNMaXL5XzS+ws= =x4HC -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-network/bob.pgp000064400000000000000000000024671046102023000220300ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEY8kujBYJKwYBBAHaRw8BAQdA4cAHLeVcg9bGjBCRtpUVDRwuQC26MvDz52gn 7h+nwT/CwAsEHxYKAH0FgmPJLowDCwkHCRA8X1u+a3kMBUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdLJosueLGrnIfAOKmbwKtmK9XyWkCy adOcZt8TTxv2bwMVCggCmwECHgEWIQSmjfAOuC+cScJ8x3I8X1u+a3kMBQAAmXkB AJqDDwKxwCDVzQs9d/0eqHa/T4Cauh11QpKRZhFMd5bOAP92yCTBrL5NOrkDUIDy uYgtFz9d4Yfma3DkWoIASYieAs0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmPJLowDCwkHCRA8X1u+a3kMBUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdqzjeSSIWu41AoXOp/0tsY4HLgpIl/xSBcmX0IhGjYXAMVCggC mQECmwECHgEWIQSmjfAOuC+cScJ8x3I8X1u+a3kMBQAAZeYA/RB9AYJG9xipHkfI 14qQAkLoh/oIfDYClLrRZ82QHy1OAQCriagNJAnxLS/kw6AokXsLwrlemsZMH1ZW lqggimxqC8K9BBAWCgBvBYJjyS7ICRDYE2C0wEiSJUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmeObgWaD/Y4PsfKS3mxeOaZdUJKyU4a7TXf ElnoNwFaaRYhBLKzcSFO9xr9FuQsYtgTYLTASJIlAADFPwEAuM5kIqG11Nqnb2ru bGEBu2x741cSKV3uwjkS101g26gA/iqHRsbxEGqgXvuVz9msWCb42Od3f8CMyS7o QUypIQsGzjMEY8kujBYJKwYBBAHaRw8BAQdA09qXxgC7HDAwngup4nZGJSjcCAK3 yRtlbHtVc52nUtPCwAAEGBYKAHIFgmPJLowJEDxfW75reQwFRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxaoYqMIoa+mNbdjnCVrdkN6ulLy kBLpr+3RkV4fltHvApsgFiEEpo3wDrgvnEnCfMdyPF9bvmt5DAUAAHTjAQDT118j tjM5WUlB96axrHiOSQlaYgNa1zYTWmf9tVHYAAD+LYnzJgQ40Gm1OlZvsO2eCXhQ FjEokCWNMaXL5XzS+ws= =IeiY -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-network/carol-priv.pgp000064400000000000000000000023671046102023000233430ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: AB9E F1C8 9631 5198 42ED 5596 9755 7DD1 47D9 9C97 Comment: xVgEY8kujBYJKwYBBAHaRw8BAQdAnqM1Z+1fZpk20V8PO6F2H7kpjqAXHVI3rVah U8f88fsAAQC9tTMPN4HFDWAbfR0TcvOLPKdIWGb/TMpZ4K36lyBRtQ7ywsALBB8W CgB9BYJjyS6MAwsJBwkQl1V90UfZnJdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnkhxtZnryVhQyLTTT5f/w00URs4Dz8TQcQ2VjSaLnqzID FQoIApsBAh4BFiEEq57xyJYxUZhC7VWWl1V90UfZnJcAAOl4AP98aWISk6rp375P 8ywEOc5CETP1lfyESd/hJC3KPCvSFQEAo54tjOKY+o3UV2kTwVSi9fuY5wYfup19 dJCZ7+AeBgrNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmPJLowDCwkH CRCXVX3RR9mcl0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmetMDuDD1Ejjhio9Ke0uA+cMzYdArfmmV9G/fFsx36wrAMVCggCmQECmwECHgEW IQSrnvHIljFRmELtVZaXVX3RR9mclwAAxTABAOPVsvlhsWWh3x1drzwu4O1w4AP4 MjrvBEzTzcpCnCZ+AQD4FW/21GK6jSi71X1f3nxbPY8MSXxLcxGTVq4iPUrmAsdY BGPJLowWCSsGAQQB2kcPAQEHQODvK/SjQGyri0xT6wCs333GAjoP9Vr0a0X1pNTy sJNrAAEAhuN/XzNw/PVeAtwRq4ZQSexk5RP3fJoahBMbF0qU9CgPJcLAAAQYFgoA cgWCY8kujAkQl1V90UfZnJdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnc7ffNU15HetQpVOpgkALrqxPDwRa4w02nQ9Xwo2/bT0CmyAWIQSr nvHIljFRmELtVZaXVX3RR9mclwAAlDsA/Aq5wrS02RYO12VF1MpDSo7XcU8N6EXg 1RsyOkrRCTLlAQDnv4z9vV0U/NMQQqT+W4rT9sF5NejUyZC5OaOF2Jw5Cg== =7dTf -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-network/carol.pgp000064400000000000000000000024731046102023000223630ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEY8kujBYJKwYBBAHaRw8BAQdAnqM1Z+1fZpk20V8PO6F2H7kpjqAXHVI3rVah U8f88fvCwAsEHxYKAH0FgmPJLowDCwkHCRCXVX3RR9mcl0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeSHG1mevJWFDItNNPl//DTRRGzgPPx NBxDZWNJouerMgMVCggCmwECHgEWIQSrnvHIljFRmELtVZaXVX3RR9mclwAA6XgA /3xpYhKTqunfvk/zLAQ5zkIRM/WV/IRJ3+EkLco8K9IVAQCjni2M4pj6jdRXaRPB VKL1+5jnBh+6nX10kJnv4B4GCs0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCY8kujAMLCQcJEJdVfdFH2ZyXRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ60wO4MPUSOOGKj0p7S4D5wzNh0Ct+aZX0b98WzHfrCsAxUK CAKZAQKbAQIeARYhBKue8ciWMVGYQu1VlpdVfdFH2ZyXAADFMAEA49Wy+WGxZaHf HV2vPC7g7XDgA/gyOu8ETNPNykKcJn4BAPgVb/bUYrqNKLvVfV/efFs9jwxJfEtz EZNWriI9SuYCwr0EEBYKAG8FgmPJLskJEDxfW75reQwFRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwxGyg5GiOfvTneUoj5Xyt1JtWP/tqH2 lCJkLVOix805FiEEpo3wDrgvnEnCfMdyPF9bvmt5DAUAAPyOAPwLE/r8QK6hZV63 wKnh5tlJ0NAySlC52J8JpZC1Sf9o/AD+LcXec17fwZj2F4uA1JmQKhjzwrqCML7Q b1EFpppG8ATOMwRjyS6MFgkrBgEEAdpHDwEBB0Dg7yv0o0Bsq4tMU+sArN99xgI6 D/Va9GtF9aTU8rCTa8LAAAQYFgoAcgWCY8kujAkQl1V90UfZnJdHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnc7ffNU15HetQpVOpgkALrqxP DwRa4w02nQ9Xwo2/bT0CmyAWIQSrnvHIljFRmELtVZaXVX3RR9mclwAAlDsA/Aq5 wrS02RYO12VF1MpDSo7XcU8N6EXg1RsyOkrRCTLlAQDnv4z9vV0U/NMQQqT+W4rT 9sF5NejUyZC5OaOF2Jw5Cg== =ZudL -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-network/dave-priv.pgp000064400000000000000000000023621046102023000231550ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9A1A E937 B5CB 8BC4 6048 AB63 023C C019 73ED 9DF3 Comment: xVgEY8kujBYJKwYBBAHaRw8BAQdAWTNBNzb2n4kEsVt5MnuxTlHtoKVatVpguukL zByL1NcAAQD+dpUCSrUpoBlUy98C8LaVQjYDuvefrDCr6LyQUlzfOxB2wsALBB8W CgB9BYJjyS6MAwsJBwkQAjzAGXPtnfNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnzmbspMX2cXLiZjNgkHay4Wl9S+eoE1UbdOoFnvdnMGQD FQoIApsBAh4BFiEEmhrpN7XLi8RgSKtjAjzAGXPtnfMAAA+vAP46XMyTpIzYbRot WZnq9d6tVH2t8qEjOQIffhp6r7VOOAEA69w1l0X10og1dTiEUWQKVriSIeqk2BYI vr3V1X2JJwjNEjxkYXZlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCY8kujAMLCQcJ EAI8wBlz7Z3zRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zwwe4eorf8AOIVcoOxhGXXDIHUQt6jK0ETs9xs/bUQznAxUKCAKZAQKbAQIeARYh BJoa6Te1y4vEYEirYwI8wBlz7Z3zAAAnGQD+OnW5SGKB58i5q9Ivg+XYikeI3S4c F0VijmQH8YyHupYBAK/P9A1FGFhBoKoI0vxLFUZfD5X+JL77HOIKt5vcORwAx1gE Y8kujBYJKwYBBAHaRw8BAQdA9J3p6w6wZXEoyG4T5hyd63Ar7PRBj6t3PByFi+cV xV8AAQDACX+rX8IeZyho/5WwzcpUySyzXl5h4hfB3Mw1gJaHEBBiwsAABBgWCgBy BYJjyS6MCRACPMAZc+2d80cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmdbLv9YW0qYCTdo+AuOIGwxFwDQw8NZby2iZXnP/VzRjAKbIBYhBJoa 6Te1y4vEYEirYwI8wBlz7Z3zAADp9AEAsdNWIDf7Wa3r48F+9nH66yk/tj+ZYnVV coFDNKPXEpEBAN8s3XLBpHCFa2Slf8PqnvOYMfN4bUx5JlsHn4zJz24B =pMyT -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-network/dave.pgp000064400000000000000000000024671046102023000222050ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEY8kujBYJKwYBBAHaRw8BAQdAWTNBNzb2n4kEsVt5MnuxTlHtoKVatVpguukL zByL1NfCwAsEHxYKAH0FgmPJLowDCwkHCRACPMAZc+2d80cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfOZuykxfZxcuJmM2CQdrLhaX1L56gT VRt06gWe92cwZAMVCggCmwECHgEWIQSaGuk3tcuLxGBIq2MCPMAZc+2d8wAAD68A /jpczJOkjNhtGi1Zmer13q1Ufa3yoSM5Ah9+GnqvtU44AQDr3DWXRfXSiDV1OIRR ZApWuJIh6qTYFgi+vdXVfYknCM0SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJjyS6MAwsJBwkQAjzAGXPtnfNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnDB7h6it/wA4hVyg7GEZdcMgdRC3qMrQROz3Gz9tRDOcDFQoI ApkBApsBAh4BFiEEmhrpN7XLi8RgSKtjAjzAGXPtnfMAACcZAP46dblIYoHnyLmr 0i+D5diKR4jdLhwXRWKOZAfxjIe6lgEAr8/0DUUYWEGgqgjS/EsVRl8Plf4kvvsc 4gq3m9w5HADCvQQQFgoAbwWCY8kuyQkQl1V90UfZnJdHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnfA3OtnGbuuceG0sNijXElTPlJdBD4lWL +hvesdXDeiQWIQSrnvHIljFRmELtVZaXVX3RR9mclwAAL/sA/1KK+ZTRbb4wo/j7 vVMd43pUNLxMdH/IXa0wbacR2qTHAP4/9osbkWshzvGEEsz1zNmW4+TRNHZPcdWZ PuUCeKb5B84zBGPJLowWCSsGAQQB2kcPAQEHQPSd6esOsGVxKMhuE+YcnetwK+z0 QY+rdzwchYvnFcVfwsAABBgWCgByBYJjyS6MCRACPMAZc+2d80cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdbLv9YW0qYCTdo+AuOIGwxFwDQ w8NZby2iZXnP/VzRjAKbIBYhBJoa6Te1y4vEYEirYwI8wBlz7Z3zAADp9AEAsdNW IDf7Wa3r48F+9nH66yk/tj+ZYnVVcoFDNKPXEpEBAN8s3XLBpHCFa2Slf8PqnvOY MfN4bUx5JlsHn4zJz24B =xkb5 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-network.pgp000064400000000000000000000117651046102023000212670ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEY8kujBYJKwYBBAHaRw8BAQdAWTNBNzb2n4kEsVt5MnuxTlHtoKVatVpguukL zByL1NfCwAsEHxYKAH0FgmPJLowDCwkHCRACPMAZc+2d80cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfOZuykxfZxcuJmM2CQdrLhaX1L56gT VRt06gWe92cwZAMVCggCmwECHgEWIQSaGuk3tcuLxGBIq2MCPMAZc+2d8wAAD68A /jpczJOkjNhtGi1Zmer13q1Ufa3yoSM5Ah9+GnqvtU44AQDr3DWXRfXSiDV1OIRR ZApWuJIh6qTYFgi+vdXVfYknCM0SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJjyS6MAwsJBwkQAjzAGXPtnfNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnDB7h6it/wA4hVyg7GEZdcMgdRC3qMrQROz3Gz9tRDOcDFQoI ApkBApsBAh4BFiEEmhrpN7XLi8RgSKtjAjzAGXPtnfMAACcZAP46dblIYoHnyLmr 0i+D5diKR4jdLhwXRWKOZAfxjIe6lgEAr8/0DUUYWEGgqgjS/EsVRl8Plf4kvvsc 4gq3m9w5HADCvQQQFgoAbwWCY8kuyQkQl1V90UfZnJdHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnfA3OtnGbuuceG0sNijXElTPlJdBD4lWL +hvesdXDeiQWIQSrnvHIljFRmELtVZaXVX3RR9mclwAAL/sA/1KK+ZTRbb4wo/j7 vVMd43pUNLxMdH/IXa0wbacR2qTHAP4/9osbkWshzvGEEsz1zNmW4+TRNHZPcdWZ PuUCeKb5B84zBGPJLowWCSsGAQQB2kcPAQEHQPSd6esOsGVxKMhuE+YcnetwK+z0 QY+rdzwchYvnFcVfwsAABBgWCgByBYJjyS6MCRACPMAZc+2d80cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdbLv9YW0qYCTdo+AuOIGwxFwDQ w8NZby2iZXnP/VzRjAKbIBYhBJoa6Te1y4vEYEirYwI8wBlz7Z3zAADp9AEAsdNW IDf7Wa3r48F+9nH66yk/tj+ZYnVVcoFDNKPXEpEBAN8s3XLBpHCFa2Slf8PqnvOY MfN4bUx5JlsHn4zJz24BxjMEY8kujBYJKwYBBAHaRw8BAQdA4cAHLeVcg9bGjBCR tpUVDRwuQC26MvDz52gn7h+nwT/CwAsEHxYKAH0FgmPJLowDCwkHCRA8X1u+a3kM BUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdLJosueLGr nIfAOKmbwKtmK9XyWkCyadOcZt8TTxv2bwMVCggCmwECHgEWIQSmjfAOuC+cScJ8 x3I8X1u+a3kMBQAAmXkBAJqDDwKxwCDVzQs9d/0eqHa/T4Cauh11QpKRZhFMd5bO AP92yCTBrL5NOrkDUIDyuYgtFz9d4Yfma3DkWoIASYieAs0RPGJvYkBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmPJLowDCwkHCRA8X1u+a3kMBUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdqzjeSSIWu41AoXOp/0tsY4HLgpIl/ xSBcmX0IhGjYXAMVCggCmQECmwECHgEWIQSmjfAOuC+cScJ8x3I8X1u+a3kMBQAA ZeYA/RB9AYJG9xipHkfI14qQAkLoh/oIfDYClLrRZ82QHy1OAQCriagNJAnxLS/k w6AokXsLwrlemsZMH1ZWlqggimxqC8K9BBAWCgBvBYJjyS7ICRDYE2C0wEiSJUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeObgWaD/Y4PsfK S3mxeOaZdUJKyU4a7TXfElnoNwFaaRYhBLKzcSFO9xr9FuQsYtgTYLTASJIlAADF PwEAuM5kIqG11Nqnb2rubGEBu2x741cSKV3uwjkS101g26gA/iqHRsbxEGqgXvuV z9msWCb42Od3f8CMyS7oQUypIQsGzjMEY8kujBYJKwYBBAHaRw8BAQdA09qXxgC7 HDAwngup4nZGJSjcCAK3yRtlbHtVc52nUtPCwAAEGBYKAHIFgmPJLowJEDxfW75r eQwFRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxaoYqMI oa+mNbdjnCVrdkN6ulLykBLpr+3RkV4fltHvApsgFiEEpo3wDrgvnEnCfMdyPF9b vmt5DAUAAHTjAQDT118jtjM5WUlB96axrHiOSQlaYgNa1zYTWmf9tVHYAAD+LYnz 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 uqeYZXB6S2p/n1w9F/Wii3QO =eBns -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-network.sh000075500000000000000000000003121046102023000211000ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=certification-network ${@:+"$@"} key alice key bob key carol key dave certify alice bob certify bob carol certify carol dave certify -a 60 dave alice finish sequoia-wot-0.11.0/tests/data/certification-revoked/README.md000064400000000000000000000012311046102023000217670ustar 00000000000000Alice may realize that she made a certification in error, e.g., she realizes that she was tricked into certifying an incorrect identity by Mallory. Or, circumstances may change. A person may leave an organization, so the CA admin needs to invalidate the certification of their organizational identity. Consider the following timeline: t0: A, B, and C are created t1: A certifies B and B certifies C. ``` A | 1/60 B | 0/120 C ``` t2: A revokes their certification of B A should now no longer be able to authenticate B or C. t3: A recertifies B ``` A | 1/120 B | 0/120 C ``` A should be able to authenticate B and C. sequoia-wot-0.11.0/tests/data/certification-revoked/alice-priv.pgp000064400000000000000000000015651046102023000232650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 817C 2BE1 8D9F F48F FE58 FF39 B699 FC21 AD92 EFDC Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAxIupsF+qp/2EwvOKBq+G07sEZ9Vg58/TopCP VojB8kUAAP44W+OZ062isCsNKGPwFwcmNvA8Hr3bSqp1b1R1Gu3tVA/XwsALBB8W CgB9BYJeC+EAAwsJBwkQtpn8Ia2S79xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnTWq4554+JEw1NFOPtV1UqBK0WB2GqObiMJKjQSkFAWgD FQoIApsBAh4BFiEEgXwr4Y2f9I/+WP85tpn8Ia2S79wAAGzHAP9DLxHIB2uVkxG3 ByM6AFhkwRxFfTQgWYP2MyNy2WYcpgEAmlmwrx+GPH1k/GRt9hQ02wLe4Jt6DYrc iSBN4WS0vQTNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRC2mfwhrZLv3EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdLvT5s6NZa2kFMFNCh4G7v6i8g5WqdpFw4H2nBxWkUwwMVCggCmQECmwECHgEW IQSBfCvhjZ/0j/5Y/zm2mfwhrZLv3AAAqtAA/062wn9BChYvmxUdk1WFA7QH3PIu 7fTo58I8v3ycut0aAQC3HxSRd7olmNebDBVI5T0CzqoaeUIlbn0Mrsx47CRhCg== =ZoiM -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-revoked/alice.pgp000064400000000000000000000014771046102023000223110ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 817C 2BE1 8D9F F48F FE58 FF39 B699 FC21 AD92 EFDC Comment: xjMEXgvhABYJKwYBBAHaRw8BAQdAxIupsF+qp/2EwvOKBq+G07sEZ9Vg58/TopCP VojB8kXCwAsEHxYKAH0Fgl4L4QADCwkHCRC2mfwhrZLv3EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdNarjnnj4kTDU0U4+1XVSoErRYHYao 5uIwkqNBKQUBaAMVCggCmwECHgEWIQSBfCvhjZ/0j/5Y/zm2mfwhrZLv3AAAbMcA /0MvEcgHa5WTEbcHIzoAWGTBHEV9NCBZg/YzI3LZZhymAQCaWbCvH4Y8fWT8ZG32 FDTbAt7gm3oNityJIE3hZLS9BM0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJELaZ/CGtku/cRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ0u9Pmzo1lraQUwU0KHgbu/qLyDlap2kXDgfacHFaRTDAxUK CAKZAQKbAQIeARYhBIF8K+GNn/SP/lj/ObaZ/CGtku/cAACq0AD/TrbCf0EKFi+b FR2TVYUDtAfc8i7t9Ojnwjy/fJy63RoBALcfFJF3uiWY15sMFUjlPQLOqhp5QiVu fQyuzHjsJGEK =vwCl -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-revoked/bob-priv.pgp000064400000000000000000000015571046102023000227530ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4258 ACF6 C3C8 FCE1 30D6 EBAB 0CC5 158A EA25 F24A Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAYUxobqoH7XvKql1Y/XKJBciCj6PrSGgScn5q 0pkd06wAAQCZ1E0a03UdCy7KYj2M9khrj4/pWRuCphYVdw4/IY3dnw3NwsALBB8W CgB9BYJeC+EAAwsJBwkQDMUViuol8kpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnPoJnwioLOlX1SkwwFnwpZdrndW9C/IvTR+4c2iOAdzMD FQoIApsBAh4BFiEEQlis9sPI/OEw1uurDMUViuol8koAACeMAP4ytXzmGTMMRYqS WRT43YrLEN1p4JL0/OLc7kYVPtWrZwEAtUU9ncIi5Y6mJoO5jLImmTWf4VqFdakB b0Ev9g8gLQPNETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJeC+EAAwsJBwkQ DMUViuol8kpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn F9hg5IUyiZW0vmySKUxJo4yfZZbYtsA7f7DrONV56EwDFQoIApkBApsBAh4BFiEE Qlis9sPI/OEw1uurDMUViuol8koAADUFAP4kFfDMU8tKMf3bOtV2tMN4+yFxr5+z CPI1z22Mr/63HAD/TdOKQYES2Tpsr8yh6Nx9dT1dVVNE2bGjJ7XYgErWigU= =aVhs -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-revoked/bob.pgp000064400000000000000000000030161046102023000217650ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAYUxobqoH7XvKql1Y/XKJBciCj6PrSGgScn5q 0pkd06zCwAsEHxYKAH0Fgl4L4QADCwkHCRAMxRWK6iXySkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc+gmfCKgs6VfVKTDAWfCll2ud1b0L8 i9NH7hzaI4B3MwMVCggCmwECHgEWIQRCWKz2w8j84TDW66sMxRWK6iXySgAAJ4wA /jK1fOYZMwxFipJZFPjdissQ3WngkvT84tzuRhU+1atnAQC1RT2dwiLljqYmg7mM siaZNZ/hWoV1qQFvQS/2DyAtA80RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gl4L4QADCwkHCRAMxRWK6iXySkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcX2GDkhTKJlbS+bJIpTEmjjJ9llti2wDt/sOs41XnoTAMVCggC mQECmwECHgEWIQRCWKz2w8j84TDW66sMxRWK6iXySgAANQUA/iQV8MxTy0ox/ds6 1Xa0w3j7IXGvn7MI8jXPbYyv/rccAP9N04pBgRLZOmyvzKHo3H11PV1VU0TZsaMn tdiAStaKBcLAAQQQFgoAcwWCXoPZgAOFAXgJELaZ/CGtku/cRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+xm7SDUS71I67y6xUfXASs8m0ff b4cNIBElbwo4oe44FiEEgXwr4Y2f9I/+WP85tpn8Ia2S79wAACftAQDMSwwHVGXO ffgaFuS9QvzzORS+c2gAHJBEpMxZEydVIQD/UFiEi8S6OvIM4WUmsSJEFqD9BdL3 SjnHwjrdt2cM7QXCwAEEEBYKAHMFgl40v4ADhQE8CRC2mfwhrZLv3EcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfZeGeVt1brBE5qvcYX5fQV YFDkHZT6Uc8+OdSHPL4C6BYhBIF8K+GNn/SP/lj/ObaZ/CGtku/cAACERwD9H+oy LqIe5Tl3RhIRJ1mY/op54pRL5qfldJCd9vOROZ0BAKjVJeRdx4Nl93RLhLLK/z4L 5+bHUdTRJXORKkfvxAcBwsAMBDAWCgB+BYJeWvsACRC2mfwhrZLv3EcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeCNNLJMnuXe6WdCiFsg9de UCr4WxjR67TTLpTidh7tyQ4dIHNvbWUgbWVzc2FnZRYhBIF8K+GNn/SP/lj/ObaZ /CGtku/cAACvngD/So5TJmSA8cc6LbbdZkHPGN87x+7f7nrEaiCk/XJ4D+kBAPO0 5RdpI/TJIjKHzZJnscYrpQGhcpjWWCThltCoI2AI =FLPl -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-revoked/carol-priv.pgp000064400000000000000000000015611046102023000233040ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3676 6215 FFD2 FA00 0B08 04BF F545 7758 0DDC 1741 Comment: xVcEXgvhABYJKwYBBAHaRw8BAQdAoO8+HL5GUTPfyz/d40rN5sOrIyiN0759JSDL bHaJGagAAPiV1cbnYzQ4D098eQW8YsOPqG7JEDS4b99by//2OP02EVXCwAsEHxYK AH0Fgl4L4QADCwkHCRD1RXdYDdwXQUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmeMdimt54PIWNAfjbEYS/eKbLjzVRx9DJ/TYkGmWt/v3QMV CggCmwECHgEWIQQ2dmIV/9L6AAsIBL/1RXdYDdwXQQAAAKEBAPggUKXhr56+IZ9L sVkOgHW2/0aH5muLRhPvqUUszHLmAQCMezbU4/7HDIXP7shbie72KYsHIUd6Hyhe u8Z1KnTaAc0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCXgvhAAMLCQcJ EPVFd1gN3BdBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z20rwE0RuELAFifoMELIybf6acjfkpS4NNBldhCnRvH2AxUKCAKZAQKbAQIeARYh BDZ2YhX/0voACwgEv/VFd1gN3BdBAADo5QEA4g9cAZivzmvTErH/IpJI4dhX5shl ZRI2Qv9xus5jh7wA/1Ty1+vwKW+xKHWD3iQyX7OHgOgs8Xxs13BnmdnrBbcM =noFI -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-revoked/carol.pgp000064400000000000000000000017521046102023000223300ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAoO8+HL5GUTPfyz/d40rN5sOrIyiN0759JSDL bHaJGajCwAsEHxYKAH0Fgl4L4QADCwkHCRD1RXdYDdwXQUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeMdimt54PIWNAfjbEYS/eKbLjzVRx9 DJ/TYkGmWt/v3QMVCggCmwECHgEWIQQ2dmIV/9L6AAsIBL/1RXdYDdwXQQAAAKEB APggUKXhr56+IZ9LsVkOgHW2/0aH5muLRhPvqUUszHLmAQCMezbU4/7HDIXP7shb ie72KYsHIUd6Hyheu8Z1KnTaAc0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEPVFd1gN3BdBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ20rwE0RuELAFifoMELIybf6acjfkpS4NNBldhCnRvH2AxUK CAKZAQKbAQIeARYhBDZ2YhX/0voACwgEv/VFd1gN3BdBAADo5QEA4g9cAZivzmvT ErH/IpJI4dhX5shlZRI2Qv9xus5jh7wA/1Ty1+vwKW+xKHWD3iQyX7OHgOgs8Xxs 13BnmdnrBbcMwr0EEBYKAG8Fgl40v4AJEAzFFYrqJfJKRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxDX4Ah0wP0scv/afi9ZC8kRxvfb4PKk Vso7X1Q6PgUsFiEEQlis9sPI/OEw1uurDMUViuol8koAALg9AQCDrcrhR4ibGVlE qVF7K9B7ilLXmIkxnSeY7UGEg7HeAAD5ASuHVyAZWl0qsqQOaQ9J8HnInHLiPuBl b2S05mT37Q4= =XB6w -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-revoked.pgp000064400000000000000000000060761046102023000212340ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAoO8+HL5GUTPfyz/d40rN5sOrIyiN0759JSDL bHaJGajCwAsEHxYKAH0Fgl4L4QADCwkHCRD1RXdYDdwXQUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeMdimt54PIWNAfjbEYS/eKbLjzVRx9 DJ/TYkGmWt/v3QMVCggCmwECHgEWIQQ2dmIV/9L6AAsIBL/1RXdYDdwXQQAAAKEB APggUKXhr56+IZ9LsVkOgHW2/0aH5muLRhPvqUUszHLmAQCMezbU4/7HDIXP7shb ie72KYsHIUd6Hyheu8Z1KnTaAc0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEPVFd1gN3BdBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ20rwE0RuELAFifoMELIybf6acjfkpS4NNBldhCnRvH2AxUK CAKZAQKbAQIeARYhBDZ2YhX/0voACwgEv/VFd1gN3BdBAADo5QEA4g9cAZivzmvT ErH/IpJI4dhX5shlZRI2Qv9xus5jh7wA/1Ty1+vwKW+xKHWD3iQyX7OHgOgs8Xxs 13BnmdnrBbcMwr0EEBYKAG8Fgl40v4AJEAzFFYrqJfJKRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxDX4Ah0wP0scv/afi9ZC8kRxvfb4PKk Vso7X1Q6PgUsFiEEQlis9sPI/OEw1uurDMUViuol8koAALg9AQCDrcrhR4ibGVlE qVF7K9B7ilLXmIkxnSeY7UGEg7HeAAD5ASuHVyAZWl0qsqQOaQ9J8HnInHLiPuBl b2S05mT37Q7GMwReC+EAFgkrBgEEAdpHDwEBB0BhTGhuqgfte8qqXVj9cokFyIKP o+tIaBJyfmrSmR3TrMLACwQfFgoAfQWCXgvhAAMLCQcJEAzFFYrqJfJKRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZz6CZ8IqCzpV9UpMMBZ8 KWXa53VvQvyL00fuHNojgHczAxUKCAKbAQIeARYhBEJYrPbDyPzhMNbrqwzFFYrq JfJKAAAnjAD+MrV85hkzDEWKklkU+N2KyxDdaeCS9Pzi3O5GFT7Vq2cBALVFPZ3C IuWOpiaDuYyyJpk1n+FahXWpAW9BL/YPIC0DzRE8Ym9iQGV4YW1wbGUub3JnPsLA DgQTFgoAgAWCXgvhAAMLCQcJEAzFFYrqJfJKRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZxfYYOSFMomVtL5skilMSaOMn2WW2LbAO3+w6zjV eehMAxUKCAKZAQKbAQIeARYhBEJYrPbDyPzhMNbrqwzFFYrqJfJKAAA1BQD+JBXw zFPLSjH92zrVdrTDePshca+fswjyNc9tjK/+txwA/03TikGBEtk6bK/MoejcfXU9 XVVTRNmxoye12IBK1ooFwsABBBAWCgBzBYJeg9mAA4UBeAkQtpn8Ia2S79xHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7GbtINRLvUjrvLrF R9cBKzybR99vhw0gESVvCjih7jgWIQSBfCvhjZ/0j/5Y/zm2mfwhrZLv3AAAJ+0B AMxLDAdUZc59+BoW5L1C/PM5FL5zaAAckESkzFkTJ1UhAP9QWISLxLo68gzhZSax IkQWoP0F0vdKOcfCOt23ZwztBcLAAQQQFgoAcwWCXjS/gAOFATwJELaZ/CGtku/c RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9l4Z5W3VusE Tmq9xhfl9BVgUOQdlPpRzz451Ic8vgLoFiEEgXwr4Y2f9I/+WP85tpn8Ia2S79wA AIRHAP0f6jIuoh7lOXdGEhEnWZj+innilEvmp+V0kJ3285E5nQEAqNUl5F3Hg2X3 dEuEssr/Pgvn5sdR1NElc5EqR+/EBwHCwAwEMBYKAH4Fgl5a+wAJELaZ/CGtku/c RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4I00skye5d7 pZ0KIWyD115QKvhbGNHrtNMulOJ2Hu3JDh0gc29tZSBtZXNzYWdlFiEEgXwr4Y2f 9I/+WP85tpn8Ia2S79wAAK+eAP9KjlMmZIDxxzottt1mQc8Y3zvH7t/uesRqIKT9 cngP6QEA87TlF2kj9MkiMofNkmexxiulAaFymNZYJOGW0KgjYAjGMwReC+EAFgkr BgEEAdpHDwEBB0DEi6mwX6qn/YTC84oGr4bTuwRn1WDnz9OikI9WiMHyRcLACwQf FgoAfQWCXgvhAAMLCQcJELaZ/CGtku/cRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ01quOeePiRMNTRTj7VdVKgStFgdhqjm4jCSo0EpBQFo AxUKCAKbAQIeARYhBIF8K+GNn/SP/lj/ObaZ/CGtku/cAABsxwD/Qy8RyAdrlZMR twcjOgBYZMEcRX00IFmD9jMjctlmHKYBAJpZsK8fhjx9ZPxkbfYUNNsC3uCbeg2K 3IkgTeFktL0EzRM8YWxpY2VAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJeC+EAAwsJ BwkQtpn8Ia2S79xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnS70+bOjWWtpBTBTQoeBu7+ovIOVqnaRcOB9pwcVpFMMDFQoIApkBApsBAh4B FiEEgXwr4Y2f9I/+WP85tpn8Ia2S79wAAKrQAP9OtsJ/QQoWL5sVHZNVhQO0B9zy Lu306OfCPL98nLrdGgEAtx8UkXe6JZjXmwwVSOU9As6qGnlCJW59DK7MeOwkYQo= =4JM9 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/certification-revoked.sh000075500000000000000000000005411046102023000210520ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=certification-revoked ${@:+"$@"} t0=20200101 t1=20200201 t2=20200301 t3=20200401 key -t $t0 alice key -t $t0 bob key -t $t0 carol certify -t $t1 alice -a 60 -d 1 bob certify -t $t1 bob -a 120 -d 0 carol revoke -r alice -t $t2 -u '' bob retired certify -t $t3 alice -a 120 -d 1 bob finish sequoia-wot-0.11.0/tests/data/cliques/README.md000064400000000000000000000033051046102023000171600ustar 00000000000000Creates 4 10 element cliques. To authenticate the target, the path finder must find it's way through them. If the algorithm is NP complete, then it will take a long time to do this. The cliques-local-optima variant includes an additional certification from the target to a-0, which will trip up simple heuristics. For added fun, we also add a local optimum in the -local-optimum variant: - root -- 200/30 --> a1 - root -- 255/30 --> b0 And a second local optimum in the -local-optimum-2 variant: - b1 -- 255/30 --> c1 ``` root ----------------------+-. 100/120 | | | | 200/30 | | 255/30 v | | a0 a9 a8 a7 a6 | | \ | | / / | | 100/120 Clique | | / | | \ \ | | a1 _a2 a3 a4 a5 | | | |\.---------------------' | 100/120 | .-----------------------' v |/_ b0 b9 b8 b7 b6 \ | | / / 100/120 Clique / | | \ \ b1 b2 b3 b4 b5 100/120 | \---------------------. v | c0 c9 c8 c7 c6 | \ | | / / | 255/30 100/120 Clique | / | | \ \ | c1 c2 c3 c4 c5 | 100/120 | \---------------------' v d0 d9 d8 d7 d6 \ | | / / 100/120 Clique / | | \ \ d1 d2 d3 d4 d5 100/120 | v e0 100/120 | v f0 100/120 | v target ``` sequoia-wot-0.11.0/tests/data/cliques/a-0-priv.pgp000064400000000000000000000036031046102023000177450ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3630 82E9 EEB2 2E50 AD30 3D8B 1BFE 9BA3 F4AB D40E Comment: xVgEYAlsuxYJKwYBBAHaRw8BAQdArngHaNiiCEo9M8rGuWg5FC8Uiv+7lMAvmMAR JnF0b0kAAP4+BsuBED0n//3iM1Jw23bMSv6SG8gwpa+5u2iZzDWozRIewsALBB8W CgB9BYJgCWy7AwsJBwkQG/6bo/Sr1A5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jndsv7M0z8MrCTBY5yaEHzJaJKfcPmzyiJG+aa6oqxLaAD FQoIApsBAh4BFiEENjCC6e6yLlCtMD2LG/6bo/Sr1A4AALvhAQCYFufUXQuBIcc9 a+0Zv78LCrKC/BJt1xv5ewHlIevT5wD/ZNCRksm0ISiu+3+fbQv0NIS//rL1T14t N8ksbbUwGADNETxhLTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy7AwsJBwkQ G/6bo/Sr1A5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn SVNPqBkkPNt4QjWZ+SlhcR1q/ei7qs/VKPqhgLN97/kDFQoIApkBApsBAh4BFiEE NjCC6e6yLlCtMD2LG/6bo/Sr1A4AAAVkAP9TEzjDXZZVoY9L6qlwGO/H14kX2yWE vEqV/aewGx0tlwEA9PJmziPdt8wVcQUR7VtMHyAitZonVP8XTUmjlhuCfwbHWARg CWy7FgkrBgEEAdpHDwEBB0AkSW8vvjgEj2W/FOvamLVAoCk4irplq2d2I61DWupM 7QABAIYiIoR87IonHifrr/K97DaBrAgUV8G35Ci/z0jzHSFnD6rCwMIEGBYKATQF gmAJbLsJEBv+m6P0q9QORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZy4csxYQVD3vQu7Mil/2ice6zkcauPplZR9XuAfAWXR2ApsCAh4BvqAE GRYKAG8FgmAJbLsJEFKan2ct+j6vRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ23IMWPgU3kjyNKgMAp828hnD6kkmbsxPDwgwLEGRGKJFiEE YoXYioc6FK64mlyEUpqfZy36Pq8AAKDBAQDMNRBLr5IGLLCPBVk2Rkm6xM5YL/sb pq6Sslz4lN92qQEAzR9+DX5VH3ARxqicjWF1wRBw5TmEk3BmShU3/KX+mwIWIQQ2 MILp7rIuUK0wPYsb/puj9KvUDgAAtGsA/0FiXFnAhoNUYfDY1YWDmb+BKIPEcfwd 7VfttJ69A0tyAQDXJtE1X52S6yrikHDyDaQgEj2uFlAXjPg4np+i6PgTCcddBGAJ bLsSCisGAQQBl1UBBQEBB0CSdTGrOx4EKMUPAGHnVdn0PlUdnxp7EzFKCGQkDIyU XwMBCAkAAP9l8UUFjhgLcUOCF3SXrtIUARN8wIVEkIvuUUcNNLW9yA5xwsADBBgW CgB1BYJgCWy7CRAb/puj9KvUDkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcl3+Bpc3/uDjQyYy5lez7CZ49Lj2uNCtZ+3GMgqCjYxgKbDAIe ARYhBDYwgunusi5QrTA9ixv+m6P0q9QOAACchAEA46xj+sU4iOBzwIbe80TjGBOr cCj3n04WO7OoJgXt2D4A/jpDEuZ8vRGip7T6ESRCWsTlKpZa8z/usQoB3tcduG0L =XYfp -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/a-1-priv.pgp000064400000000000000000000036031046102023000177460ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7974 C04E 8D5B 540D 23CD 4E62 DDFA 779D 91C6 9894 Comment: xVgEYAlsvBYJKwYBBAHaRw8BAQdA5n5FjGpEz8f/llQUP08TjywBMryZPvFvQ3SB C5xX+0oAAP90KwDXwcCo4U0CUeIviexLX7FXDREETxXt6blXt0e6TA/HwsALBB8W CgB9BYJgCWy8AwsJBwkQ3fp3nZHGmJRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnZPYcd7mePD2V3eMhIaJm2bk7SJQj1TY5vuYuSnvkIBcD FQoIApsBAh4BFiEEeXTATo1bVA0jzU5i3fp3nZHGmJQAALKdAP4w00lFQYE9xroX 7hkTpHBH8KoZaUzlHESODeeKq9SZ5QD+NdVVqj6m4nJr5IWpqx4jhWr+y7XRx8X3 Fn5Tdb4wWg7NETxhLTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ 3fp3nZHGmJRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn MBlXWa/axqD5oeVTzq/FcoRiTK308ygExVxB9uPALEQDFQoIApkBApsBAh4BFiEE eXTATo1bVA0jzU5i3fp3nZHGmJQAAH6sAQDhQc5nkkWzY7DM2D0n4ccuLsTo7oDP P0iAhWOZO2/FoAD8CnXsGTdy1D0Q9SWvR/+kOxsNEgxuWEHgrTNwMXEgBwvHWARg CWy8FgkrBgEEAdpHDwEBB0A2cUkk+kqy/2J/YtnwlxPKpnhBmRZNKKx6CRQMxuMm lwAA+gNdMMZxlamk8Cw7/YxO8EA6mqS1il5dlTAR04G5vv2cEa3CwMIEGBYKATQF gmAJbLwJEN36d52RxpiURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ0bbcRXi2lgAYVsg/RA2arPB9YcGD/0lu+BeHfqHedwrApsCAh4BvqAE GRYKAG8FgmAJbLwJEDrQpmMwEmuARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ+Omw3VSHG4UPrDyjQLJevBFg2mSGtaDl3SZScBq0Rr6FiEE L5nJ2FCBPEFqGhWlOtCmYzASa4AAAFxVAP9z+U39Dqzpl5kg8R4dXSqx1PCVxtBd 0zx/+MC+K7U0cQEAuLEdOsFR9QiCkCz7QtPggIHqxuvuFvYupMXeUZEk/QoWIQR5 dMBOjVtUDSPNTmLd+nedkcaYlAAA/hwBAMPvJqGTTHJ5jmEASpcuHTliasTOPWZk 3VfBFEfSafiVAQDOnJP62tbugR09tNYug8QHgTt8oRLL9gKPX5HDOlmeD8ddBGAJ bLwSCisGAQQBl1UBBQEBB0AsAi6WoCyDe7fFiogFxpPFv41Hg8qXIr1lmP4hV679 QAMBCAkAAP9a2ux+a8xAUsod22/ZVLmv2gmIuSgXZx9MMXWvWQVheA/twsADBBgW CgB1BYJgCWy8CRDd+nedkcaYlEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc7qYwPd8zcxn+SVTGeXCGxALPc82CCbE2cB3gBt1wW/AKbDAIe ARYhBHl0wE6NW1QNI81OYt36d52RxpiUAAAS/AEAwoxAnSwcy8AG3Fcl2OhMSBFE UqMLBNfsN5ckG2XyMfAA/iuF8eSoSqQeBk46+dLfzlcqUYlsiMnpAh1BtGQNY3gN =CGAb -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/a-2-priv.pgp000064400000000000000000000036031046102023000177470ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E61B 631D 5666 BEDC 9C25 4E79 A96D 991D A47C 0A3D Comment: xVgEYAlsvBYJKwYBBAHaRw8BAQdAMnJ3utFAekU/hMuPZktlNYWHI7TbR1/eeM3P mcWjM5gAAQCo03uXMqJjZMPwgs45WXB8vcdQ6rT5CUjJtpdEo0ymuBINwsALBB8W CgB9BYJgCWy8AwsJBwkQqW2ZHaR8Cj1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnrmbWIRvxQrjwNa+qk4Q1ELNPrzXZP6OHo7fH4VoQEg8D FQoIApsBAh4BFiEE5htjHVZmvtycJU55qW2ZHaR8Cj0AAAsNAP0WPx7/a3KQLbkG P8EW9usuNt7VPMwDGRGtbTODIUzn7QEA/aL080yqaXq8xs1qJqXO5lSh04Dhh1aa oUZWWU9GGgXNETxhLTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ qW2ZHaR8Cj1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn iv9Jgpk3RAnWq3h7yuSk02/+0SMc6ar88aAYkqQ2sjMDFQoIApkBApsBAh4BFiEE 5htjHVZmvtycJU55qW2ZHaR8Cj0AAFEjAQCBjSokTnxU0/fFSeXyHSBn+rmA813/ MB3fsWUMSQjG/wD9FCIDXbZsNrR7wqitbnHeU1QamE5DABOg/BpupKOQiQnHWARg CWy8FgkrBgEEAdpHDwEBB0DbBiVitpSGnuQfkYh3WYq2jlrQqWnOLGybFkcU819D tQABANgQNWrkUj5A+TdUmUIQRjvMH2RYB+DJYhFpN0Fr9+CuDcfCwMIEGBYKATQF gmAJbLwJEKltmR2kfAo9RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ8sCsLm3cVUKKO0jjHDl7LhWbc4hfsgAEWvgIy2v7pUZApsCAh4BvqAE GRYKAG8FgmAJbLwJENPZPbcOPw2PRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ308/YmmMlfgrk2t1NcUUFd91EdisnGu9/2qnT5G+o/fFiEE HFUCqhQdGurozztC09k9tw4/DY8AAPHJAP9gfnsgCmDJqGbZfDufzoGEinZ0Jd0G NSn2b+x0VuGRcwEAryw0nTzXKP86/bK3K8bNUZym6zaZYr+7LUpLpIgXVQIWIQTm G2MdVma+3JwlTnmpbZkdpHwKPQAAx5YBAPLRCzKckoRkL8iBWZV0eA3xi/mBJB99 XSySdFr13995AQDEPsnRuYtruoITCu12t6jD9W78dsuRn0j3TUqgO/kHDcddBGAJ bLwSCisGAQQBl1UBBQEBB0BUBqrIvZPP7haFkH26y0JEYcbzPpr8bVZD/xoAT9Fd FgMBCAkAAP9it0at9M2vJMVQjxCgKIbIAO3rIEfqgr39F//0Dz0s+BJIwsADBBgW CgB1BYJgCWy8CRCpbZkdpHwKPUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc3wSrK52u9wjO1dWTQeatovzPGvzMkGn0iGspM/kwHhQKbDAIe ARYhBOYbYx1WZr7cnCVOealtmR2kfAo9AACbOwD/ecDXbMvjCgIYRqhZ5n4g1jAK /Uiawl98J+zmoKyuS5cA/3yLapuwbwYbqaxUCbq51Q2y4iRkVvYtLKPmDmykC7IP =0wI0 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/a-3-priv.pgp000064400000000000000000000036031046102023000177500ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4352 557B AB73 FF95 B632 EE5D 9BD5 5C9E 133E 8CBE Comment: xVgEYAlsvBYJKwYBBAHaRw8BAQdAcZWkX/ET9zP6IlE+5CpUoFENloZbEFgn147g 1fofn7YAAPkB/o6p+WrmtDDRn7Y2apXgOsLwR8r1W6FHXsSA366L8xR5wsALBB8W CgB9BYJgCWy8AwsJBwkQm9VcnhM+jL5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnumOGp/5NH2bsf/c6vi7QBVHjodiY9cxVYs6arjE/A+ID FQoIApsBAh4BFiEEQ1JVe6tz/5W2Mu5dm9VcnhM+jL4AAJrgAP9U3Qnxe+0p6xmk u8F/ix/alVuuq8jkMaYoc1idTl56iAD/XP0dWp7wlIj0FHhmY3nP22Bgy/qm9etK BHGG3HgbnwDNETxhLTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ m9VcnhM+jL5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn OieKkZeZ4oP7JkZ3LKMXHNXEw6sl2A5VJIULoFxofNADFQoIApkBApsBAh4BFiEE Q1JVe6tz/5W2Mu5dm9VcnhM+jL4AABT5AP97mZInHfBApn3hqWkgOz40iSWlaZcP oZ70Fli836Ft6QEAxoSaIOCUuHa4/osI5Cr0i8sBxeWGiE9v8JGHvzPIdwDHWARg CWy8FgkrBgEEAdpHDwEBB0Bt4pzHlCPVC5jf1/BoWlKOV6t91gZ9VpyKgksHPeGE RQABAKzu7RRXc2CZygvjs+TYOs0HQx9XALNPGbP/JOqQOtgdD+fCwMIEGBYKATQF gmAJbLwJEJvVXJ4TPoy+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZxLgFIBFtsI1dxhMXNRvDaQWv46of42yp2EejGDNj7AyApsCAh4BvqAE GRYKAG8FgmAJbLwJEEhoap/KVCx7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7jYRIdbWHwe0GWbcMCpn++TgZvN8iWXdWs+7/Y3n7qbFiEE 3XYCQ1hTI8txdAihSGhqn8pULHsAAAK+AQCQol5yC2YzxkzZEABWp38qnFBu3u1M FeD0C4E5wLV99gEAzmzynajKMhPyifPY8TRxXonFsmLCXkxG159gVLgNzwkWIQRD UlV7q3P/lbYy7l2b1VyeEz6MvgAAIJsA/0L1CveYb5Ud4hbQKvKsuBJzsqdZubKb +M1HpH78K9TNAQCry5q3qt1APfJj4yQoxbjgLOqyPNoifIgqq5rqk3nTCMddBGAJ bLwSCisGAQQBl1UBBQEBB0BMgtlYNlRteyOMuHawTWu0cy57K+C7oyeDwKWX3D3U fQMBCAkAAP9pg8FWm+dUkNInYLcqlDuotRPID2NNKGBvFWqOmjQP0A8ZwsADBBgW CgB1BYJgCWy8CRCb1VyeEz6MvkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmd9WaUPPqNJKv/iKkXK8R/SIXDTwGjeN89ZWrStUQ5dCwKbDAIe ARYhBENSVXurc/+VtjLuXZvVXJ4TPoy+AABTZgD9GvD7uHsn9f3MbEyB4FUYk+Wd wsqzLMEOEIOghRk0X6QBAJArTDD/QQ/JTyH0C/ox0bCrLHIC3xwc41bPZ7aO/QgM =w00W -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/a-4-priv.pgp000064400000000000000000000036031046102023000177510ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B927 D06D 9213 7EB3 4FC7 D5A7 25C2 C0EE 83D6 A900 Comment: xVgEYAlsvBYJKwYBBAHaRw8BAQdADGNr5wHiQg55YHMPfOzzKQ4A7r7+kaV8C7FK byCY6CEAAP4nB7dw2993VEFBMjbYPl7Km7V/96wkBcMd45cbSQpjcA82wsALBB8W CgB9BYJgCWy8AwsJBwkQJcLA7oPWqQBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnOCaEPmU/F4+04Rdt+JdNukrXb/w79fE2GGqBhCRqtaMD FQoIApsBAh4BFiEEuSfQbZITfrNPx9WnJcLA7oPWqQAAAKIVAQCHtI+ELH7Ojlc2 9ebsuWtpgXMlBsC6PsFTDMeZBQR39QEA3/CCxVO6N3CTlESjsffNKL99PStZIJ4Y NE6e97DS0wfNETxhLTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ JcLA7oPWqQBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn v5N/xMCz7/S41ibSb4HASP10WFSewmown1U0rWYhISUDFQoIApkBApsBAh4BFiEE uSfQbZITfrNPx9WnJcLA7oPWqQAAAHHuAP0Sd26dyBqVzZYR+8h+uqo85Ne9FjTC TDsgx3HMsZ0/3wEAqkmUHFOGugHipYlGRzg3QS69QYU4fThbqpb+bOARjwnHWARg CWy8FgkrBgEEAdpHDwEBB0Aju26XimYhd5Dlr/q2l+zfGjqBqr+iocaaTDKGnxGb HAABAPNHaOOU8Azk1OZPI1uLGqma0IDQ1PKO9uukmUYRyFJ3EuPCwMIEGBYKATQF gmAJbLwJECXCwO6D1qkARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ7r2IZGGPbFGRZmxZGB+kw2buRu3JKsUg9JrX3tQwQpiApsCAh4BvqAE GRYKAG8FgmAJbLwJECoACV5FiuH8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7PNZ5m9bFf5MWDuh/j+rxLyBM6t5yW+02UKwtwaw80SFiEE 4igQ04JjikwYZkW7KgAJXkWK4fwAAMe9AQD42mu/YxIHZ37R3QLtl7og3OgZLUMI NBy+rbjsSk2POgEAnyR0046ueYDzHf7CtQpeWUx+M6phR81iAnxvqNGZ8A0WIQS5 J9BtkhN+s0/H1aclwsDug9apAAAAKIQA/0dmKWVWjlMsa8YW8IKDeVxIfhh1Ce6z Ag8IEByJUeVNAP46sTbSJmBF1Ep/H0FMS+il1p9lr68aTBJIdmXLWuIQAsddBGAJ bLwSCisGAQQBl1UBBQEBB0AqB1NaC9fh90U9eJcUqQSnSDP5WNvC2pMYUZJMuvSI FQMBCAkAAP97E1aKd7mieGXUghAyj/vYHjpt2Sp5QpdzM/5i5vZZkBD7wsADBBgW CgB1BYJgCWy8CRAlwsDug9apAEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfgDiSZjz4YHrcFMgexjxwQ3B8CxTgGt3tQFQu/Zm1pDAKbDAIe ARYhBLkn0G2SE36zT8fVpyXCwO6D1qkAAAAN7wD/T9nxFD/njkMVWVQ9BeMlK6Vh TEchlmPjGCDeXrxc/1UBALUsblWXqHBlNvqdgsIvTPbJ+RBsaOPuU5MD9HsScVsN =KDRK -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/a-5-priv.pgp000064400000000000000000000036031046102023000177520ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2F90 C5C5 3B10 DFD4 F7DC 7DB2 D437 9A9E AE26 A23F Comment: xVgEYAlsvBYJKwYBBAHaRw8BAQdAAtTdtiq1JI1/MMgDM9jg5xhsdNWc/9U7ywUl pJK6cBoAAP994unBU54bMm40/s6yQaX18CJE8vN8nGj5yJVQLcrNJBOKwsALBB8W CgB9BYJgCWy8AwsJBwkQ1Deanq4moj9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnzM/15yIeYlc4JPku/lHRdpp2tb30bwh1HhJJ6+Lh5XQD FQoIApsBAh4BFiEEL5DFxTsQ39T33H2y1Deanq4moj8AAAQFAPwN8I5rrjffdayh +INtzloEnArqvEMooUJ21gElABhlBQD6A7Yt/ySwBnhUwSN9oXD9dZXLfbslzbAa vtTBRwbjyQPNETxhLTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ 1Deanq4moj9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn adrlAWM+adkSQaSy3Jfgf2xq5K8QnUzKpc3I/q5OMtcDFQoIApkBApsBAh4BFiEE L5DFxTsQ39T33H2y1Deanq4moj8AAL7oAQD4X9BovJrfUhB9iHblI6ESpoz6/MyU BPKVIgIHQWNlGwD/TrbGoIoUkNQUUMGZsCn4ymllMnJBUV+tjz37dePFfAfHWARg CWy8FgkrBgEEAdpHDwEBB0DcXTM/9ZB08TMzG2RFpinZID7BZJ14AndGEm2wuIlL YgABAJA/lqc8hxArVljyHd66oWFFJhkeUpIxFoWbhRLyM0jIDRvCwMIEGBYKATQF gmAJbLwJENQ3mp6uJqI/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZxHqbUDl8ZZfkGhnj35V6xivUJxYO+L+8HqJiZqNRiZqApsCAh4BvqAE GRYKAG8FgmAJbLwJEFzMOvRgHFlqRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZzwHgbk5SApW6CnCtK6wLemM/dpI5THUlqpV3fX6CqmmFiEE oIsFvL+JwjMGuQlNXMw69GAcWWoAALdjAQD6GdSU8zklARJffs+c58nZKOd+nsrT rhwt8iL5qwld/AD/cyOLCfeCWNUpcZMHqLRW1ZBSGgSeHV4RgLOKjI5D2wEWIQQv kMXFOxDf1PfcfbLUN5qeriaiPwAAU3oBAPErx6B5F6aRqyq9vUz4gS/neTE4sJ9n yc+K+6gu4Mz0AQChJsKXk9AcbMh6dq4U0ezqgBR5yRSexQqUWx8ZQ6PIAMddBGAJ bLwSCisGAQQBl1UBBQEBB0DQ/4RcGzGkUdSslWbckLrKNZAxrzkv0oqgDgXmaZZP KwMBCAkAAP9JSIEVt0cj/NGzg2jwURPkxHDcv/7inR3MhI9UuoHRcBMCwsADBBgW CgB1BYJgCWy8CRDUN5qeriaiP0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeltjtC26xIRU4EGiM+E3tUPzT8/5WTYTT0IpgmVD5cSAKbDAIe ARYhBC+QxcU7EN/U99x9stQ3mp6uJqI/AAA7nwEA+NPtkG+ztBFrgd/jgKELwE8f yfVJaYzi2sRPZPfxCQcBAOCmJBcTDwn9wBXPr4PcrsPSdAIEL3AZ7zhiSl1ZLDwC =CGq4 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/a-6-priv.pgp000064400000000000000000000036031046102023000177530ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3C93 0447 108E 6F1A A921 D9C0 0392 53EF 0EB9 9104 Comment: xVgEYAlsvBYJKwYBBAHaRw8BAQdAeKmR30HyJ5wk2nXsySJT8zENvYBzefgR/DKA fnfQABoAAP9IeMAkTP2fEyRaSPf66D8C3hjcAO8Acn4LKHWftdS9ehA2wsALBB8W CgB9BYJgCWy8AwsJBwkQA5JT7w65kQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn9Dt56sEwMuCTb6DmfAB6MF2pHJeM4YnV8+Q9oTXbeIED FQoIApsBAh4BFiEEPJMERxCObxqpIdnAA5JT7w65kQQAAC+dAQDuex16roLt8qcx p/ByvyaWrwsRZD1U65X3XKgmWi+ahAD+KNP36lvWBU8yIer6sE2N/VgcWb9Dzwom XlTWyuOeZQzNETxhLTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ A5JT7w65kQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn q6qCb+rUKASQLPZwCjRqcWr9/5KrPWg/UH1CYoD7JTkDFQoIApkBApsBAh4BFiEE PJMERxCObxqpIdnAA5JT7w65kQQAAHHvAP4sT4FXr/54Wg0kVnz8EZq7Zc8L7eWg 2x+zU/QgxflljQEAkZBmHY1Kpxc6RB/Kk5SPzbuCS8s2CEwtVU4nUXi2vQbHWARg CWy8FgkrBgEEAdpHDwEBB0AGELVyD0CQsItvJ5kI5pfTAmgrAKYjG0tcFpc62utF TwAA/0qz2SV7NaCoFbiTjp+WDzT/8XleBdfWl0aIjCajEgvWEH7CwMIEGBYKATQF gmAJbLwJEAOSU+8OuZEERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ5UGLGeBQrWj1CRtKJ44YxgUWnkgetxtNjm0TQin67rhApsCAh4BvqAE GRYKAG8FgmAJbLwJEFqSE8pONxPeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ3GQjFbl87nY67b62mOBgQsh0HMa/MjGOv/c66ymus2oFiEE Qq6WLx1YAvXhpgx7WpITyk43E94AABdxAQCttkfDM+RqLJNMHVQDrSxL9L6oW0sP obwr7QtgHl6VbgEAhm8tEAqyLogpgQTAPkDjinPdmWx25c3h8tLLvt7dnwwWIQQ8 kwRHEI5vGqkh2cADklPvDrmRBAAA0tQA/j18RiiV/q4BxeKHTLOIPuqwVCctsZM9 YLjfKS06VkR+AQD/ljP/1e4DO3SQlDaPfDNblEdDge1qL3m14zakWHTdCMddBGAJ bLwSCisGAQQBl1UBBQEBB0CmPmoWB+ATMHviw3DV/AqPPnjGjfiDeL3RxKD8TwI3 IwMBCAkAAP9vXZSewADWDA42wpJYWJ7zgZl65P0M3OXcP2roJl2fiBHRwsADBBgW CgB1BYJgCWy8CRADklPvDrmRBEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcfokxbLx+vm3j2FFA0on5urRAp31jQq0IfEjRz3ZnxTgKbDAIe ARYhBDyTBEcQjm8aqSHZwAOSU+8OuZEEAAB2YwD9HJW15ivp44WW4RT4ZbNCFqG3 bgOfYWkUKTaET1onjIABAOb6NXjGkDGjHUFyBDmgnH5j5jR9/VwurC4VxCbScMkC =hDK4 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/a-7-priv.pgp000064400000000000000000000036031046102023000177540ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 97E4 08F7 6A08 9546 1045 D75A DC92 D65F AF46 532D Comment: xVgEYAlsvBYJKwYBBAHaRw8BAQdAjjCHPo1VWlGracnHpxiANu66QyVVa23LmUkV wNHGH0wAAQDEjiH65RUHpKonlawFMDPumOed6e+MERFD4qMeG0M1HA6ywsALBB8W CgB9BYJgCWy8AwsJBwkQ3JLWX69GUy1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnK85dIj9qanwMxzFPgsUUZnrct3aE358bWNJHtxk0sEYD FQoIApsBAh4BFiEEl+QI92oIlUYQRdda3JLWX69GUy0AAPxHAQDV/Heltmg8oisq u144BGXE1iN6Jubw7VU0EqtsdyBH7wD/XKzNfXvoS2fhOSor3SgNv8Kmyb2/dBOx VU4K3DZvmgbNETxhLTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ 3JLWX69GUy1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn FrOSeR7ejo8CHQwVzNtFY7nklDO5KAi6XbRC+iks9ncDFQoIApkBApsBAh4BFiEE l+QI92oIlUYQRdda3JLWX69GUy0AAJJ5AQDfheKpiec1MIf382ILB5x1OZVJj/Fj 1ae2cgSBbi4fngD/fXg39XPEunMvwAQmRg8xSJLD7xXfCdhn+teIccK5XgvHWARg CWy8FgkrBgEEAdpHDwEBB0DKemSgeRGySJTXUhav8eZFR5PYecR4MRgCpSHaeYHp FwABAOiFU4Emf/0VZY1/xEA42dxLmkY7QqZtAkXA7DQ5asG6D1vCwMIEGBYKATQF gmAJbLwJENyS1l+vRlMtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ62J5jrWbRPV3oeeKxfHO8JeKLBk3r0rHF56mHUBw9UuApsCAh4BvqAE GRYKAG8FgmAJbLwJEOj5jXkUuPgqRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ2g9yJrtEP8pGl7hFZWw/QaEUFjbUlKz4L451UauRcyDFiEE LtlKG87GpNmIyS/y6PmNeRS4+CoAAFqvAQDW64NofS2kzdtoRKK+hZgI70Kv/43c od6Pil6XUf7a5QEA0AXEr2nuK1QeDH7v6C2FsE649KO7OOnBYd1jZNKvcwAWIQSX 5Aj3agiVRhBF11rcktZfr0ZTLQAALkwBAIGTMaczEMND0/jPRgn9UahNKk2TU3HX sovjvSTkzxFbAP9gCCd4cpWWDr2GmG+MpSWmovpStkpv3HCsHsoyU8vkDMddBGAJ bLwSCisGAQQBl1UBBQEBB0Cdmc5964Xm/UoYao4iOX4jqPjOGH5+BIOVq9quP6tN XQMBCAkAAP9KH8O+ddLZ51bG/zHHh1ecwFrPkvXqrKph+bWsVR0UwBQuwsADBBgW CgB1BYJgCWy8CRDcktZfr0ZTLUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfQhr2yZih++DoU8J6Rq2WtYTJzvJf/fwG+9Hawf2VNAwKbDAIe ARYhBJfkCPdqCJVGEEXXWtyS1l+vRlMtAADtDgEAwq5RbxFz0lLU/mcXe3tkLnCd AETbxGT2nEr6Eqcpsa8A/RKXxhC+EQKv62SwJ0FIL6OgwJp82/GaFIZ1300GjMsE =Q1hs -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/a-8-priv.pgp000064400000000000000000000036031046102023000177550ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 536A D562 B921 7B98 3966 2056 FA61 E73C 6F5D CB46 Comment: xVgEYAlsvBYJKwYBBAHaRw8BAQdA0hFm4LasacWC2lgvDBK/iaUCwgCQKicNMi3S 8Rb8e5kAAQCd7EMBVU1iv1F1s17wHo0lsukSr8IwSZthVof1sxnstQ/6wsALBB8W CgB9BYJgCWy8AwsJBwkQ+mHnPG9dy0ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnMJdB+bs7Kfo9zV9hCjtjIL46/e+kP545etqfRoYIdzED FQoIApsBAh4BFiEEU2rVYrkhe5g5ZiBW+mHnPG9dy0YAAJPEAP4zB6OyvdHwfEOT 3o5N128S65LzThUvG0akRi9k5e1evwEArH/mdNfFHSODGBQaRK+0FwQF3rgzaOti znVjW6DNtQDNETxhLThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ +mHnPG9dy0ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn +SpCB59vGoSu+ye02r0Wa/CJMqo65PWhLlZctwX/atIDFQoIApkBApsBAh4BFiEE U2rVYrkhe5g5ZiBW+mHnPG9dy0YAACkwAP91GVFqh9KdQ+cWF878vGdGAGL0X3+s D3DFIru0ahJuDgEArcumvKl+KeN9l41iskKamuPrVVtNgolQKeMvmH4icAnHWARg CWy8FgkrBgEEAdpHDwEBB0ApFMwVfYropsJ+GseOvXN/+hV5MkDWNfsQTltlj15F JAABAN9AWBKcarLeJe6+7+4RyMVPNBxqlZoB/7KK6ftYCGT+EYbCwMIEGBYKATQF gmAJbLwJEPph5zxvXctGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZxTB1N2Zbt9ndJ+l+dNCDY+7n5IJAlbjc6aVhLM0RZE0ApsCAh4BvqAE GRYKAG8FgmAJbLwJEFtqTXMT9GhKRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ6Lv+yNLZqYmGG6t4ILPmyaVd7/NO6kaUPEy/7LRVYpaFiEE 73WIxUd9Ntm53Le9W2pNcxP0aEoAAIQdAP9zeKJ6MH4CAiay5d+9mZbsGRW25dy7 fMiBoWedzhl0EQD8CpEO8ucqt0A/SmBvm1iFV91Us0OBjATIWqvjCP07tA0WIQRT atViuSF7mDlmIFb6Yec8b13LRgAAX5QBAK/FM50qtX/vdW1tF4LI/icm8r+JDfMK UG6lIP8aMyPsAP46LECUR/x/3WU32xrqgIqNxaex0JHE8BWS2pfQRLWnA8ddBGAJ bLwSCisGAQQBl1UBBQEBB0B8Frz8klJg/KoG8waCMJh6PvbZOE22z20wTK7OPTBK CAMBCAkAAP9jpScfneLJVUm3Sv5JtKVekeSv93eVxU01Xkuit4ZWMBGuwsADBBgW CgB1BYJgCWy8CRD6Yec8b13LRkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcGEbM4iQFxb5YP68mSsFaOVuByRCcWxq3Bow3X5hAqwQKbDAIe ARYhBFNq1WK5IXuYOWYgVvph5zxvXctGAAA5jAEAjcYgikSg0WeWJiAVWYl+TZ6D U/ZXiqkvqmpWUf7bwZUBAIxDE1lzBqad8jmVyj4rlj5q0urcuZvTZXmcTYq4cjoC =/OWR -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/a-9-priv.pgp000064400000000000000000000036031046102023000177560ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4797 776B 2598 F97D C9EF 94CA FEDC 6E5C 46AA AB13 Comment: xVgEYAlsvBYJKwYBBAHaRw8BAQdAbBAdbHSsPqAIYHzr0zuxtdPyhkKmyx4V/6Cp +6625NIAAQCMhpU3H9SzJd9BSGzBl7b50zqNz1MhRtzsrS/lBCFGuxBXwsALBB8W CgB9BYJgCWy8AwsJBwkQ/txuXEaqqxNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JntmXSgpnmgxOrbjqDci/fFcQ+y3EaXHCChYtekSdePYsD FQoIApsBAh4BFiEER5d3ayWY+X3J75TK/txuXEaqqxMAAKfDAPsHBGKKyChNCZ9a AS7C19X4Psa/6ZIMVZFcMKWTqzWdMQD/RFjdcw4x0Keq5SQw9yFEbSfZ5HDnr3yy HkXPHpeP0AvNETxhLTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ /txuXEaqqxNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn ltLTmWn9N0cFkWqniO+wxAJluXczHrWn7KByml3gZuYDFQoIApkBApsBAh4BFiEE R5d3ayWY+X3J75TK/txuXEaqqxMAANdJAQD4xHKF4W8G2RcTtuKjfv+HSBDYh+dj U/Ev+ibkHEEPugD7B1LQXX/ChY09EG0zEsI58xbf//EBDj34LfHDIYzc+ATHWARg CWy8FgkrBgEEAdpHDwEBB0BTKFkCBgSj9Ra+InfBeG3VV1eKM7ukOXnPaGkKc3cs jwAA/Rl+Nhtce2IJm1hhLYoYGQRweaJnZwz9xEJVlJNAI+hLDOHCwMIEGBYKATQF gmAJbLwJEP7cblxGqqsTRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ41RCQ9h5mv0VXhJl8/FcBhUxruGcwjKikOyG7msxn9iApsCAh4BvqAE GRYKAG8FgmAJbLwJEKNR9XL3rbyeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ77wVpNsSDioS1oZNLLS5V/HSJi6fWM7+PrrEO6NmCr8FiEE OVtU/5wg57gyPtH7o1H1cvetvJ4AAOx1AQCWjb8k+RY68308osnOtxHpy8+wQwp9 TmLheHM/TMLTiAD/RtyV79E2iets0nGP0BYaQmXadqssb9alLx5RS3cgTQwWIQRH l3drJZj5fcnvlMr+3G5cRqqrEwAA8SkA/jxhyAsDwiyWbBcP2fEbIte79IwKWJu2 +109+Ns+y66sAP9PXziXBlK+AXhcYi2jtFAbY6xzJksVXWZLUHlq8smHBMddBGAJ bLwSCisGAQQBl1UBBQEBB0D97iE5Rnj6Vahj0uH77E395OHTnJ9F6uQvsvBcEcdn SAMBCAkAAP9HMq7IodyQ7fO4stILlInNBkbd/9neYeKHHsoR92DmIBQLwsADBBgW CgB1BYJgCWy8CRD+3G5cRqqrE0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdX3StBaGdvvXIkYsq9ea5/yECamhJSUsUU80+rRnQgAAKbDAIe ARYhBEeXd2slmPl9ye+Uyv7cblxGqqsTAAC75gD/RILk26EgfCcKBaLeWGQ1si2U OrHSXPfexhf1sDbNXSoBAJLT7uX+7YKpSgCsnRksEo+WTwM3biduujDDYlfjN4YP =NPc8 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/b-0-priv.pgp000064400000000000000000000036031046102023000177460ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 25D8 EAAB 8947 05BB 64D4 A6A8 9649 EF81 AEFE 5162 Comment: xVgEYAlsyBYJKwYBBAHaRw8BAQdAsu1YEllA9He3s5UacchtDHECtqC3mZcv0xxH zE3loRoAAQCZwZMlj+RM7NjDTlN98JKvRGEajshOykF99o3eV31AqRGxwsALBB8W CgB9BYJgCWzIAwsJBwkQlknvga7+UWJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnIY3FL6Tc4c8VXWnMtnpwXT+OCyco2kng93yLVDinRlYD FQoIApsBAh4BFiEEJdjqq4lHBbtk1Kaolknvga7+UWIAAMF2AQCGyrx+WR84espQ PBDUcM/OPJxXtccM0EuWphCxO97loQD+Kn9FhWVdlL5+aSn2hjrbEVVG2wa5+Ves +JONK/He9Q7NETxiLTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJBwkQ lknvga7+UWJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn mW0PfuMQQMhqvaOeu4+QJsiF3FzCSfkT/8oALqjELf8DFQoIApkBApsBAh4BFiEE Jdjqq4lHBbtk1Kaolknvga7+UWIAAECeAQCx+TBjoJewbM0nHkcsP0BOGRBsgwsl ZLTcE3zTsUU/tgD/TIbw2IT9JfGlYkM7vHe6EirU6vR9Fe2b58UE6mRNAwTHWARg CWzIFgkrBgEEAdpHDwEBB0Bm/ogArAJTmPYe+7BbwkzQJXW/PaAwV8zjyzevYIby UAABAOOIuK1GlJTi0wbnjEQQd1KJhPKbA7MwCwHhu22dQwhSD1nCwMIEGBYKATQF gmAJbMgJEJZJ74Gu/lFiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ/JpvtUy4fYm2ygn4G/WrJ+yO60hMdS+Eydg98WOU+ijApsCAh4BvqAE GRYKAG8FgmAJbMgJEA6GAe0VTMYtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ6645J7VdzJdSvMtFyoBh+A51TIqu0VZOUB65UA5sOQeFiEE R/ofLQPHbgEUZUuSDoYB7RVMxi0AAIcQAP4+5+GerYVnlws2UOnv0y8azKIUxr+1 J0/u0LxiK8RHJQD6A0k+jL5oYMhTs22Izum3/fz0Du/bS050urJUs8fxEg4WIQQl 2OqriUcFu2TUpqiWSe+Brv5RYgAA5asA/iUJBEVIEaViVpES7BY4V8Hz192+kcf1 vSeRwbbrzRBGAQCWdTKWbG6/ipmt8MfOILw5hQSzaZnq1gMH5OZ6Y9NUAsddBGAJ bMgSCisGAQQBl1UBBQEBB0BDmaee3ZzGwrBQTNHSBQYjYkQxssElzVH0FcgEIiA2 SwMBCAkAAP9zNyH08hkexJO7llq8H65VdfwVeXgfDxHmITOYKMpsaA8VwsADBBgW CgB1BYJgCWzICRCWSe+Brv5RYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdY53PXPX1O3Uh3L4czXbPHI1A0vDITQYXXmpBiElAkmAKbDAIe ARYhBCXY6quJRwW7ZNSmqJZJ74Gu/lFiAAC3iwEAycx5pA+4PX6jtsFa4qCvtJT0 gEepiqEDP+SWkmZTbP4A/2QssK1vntxvwek0wa0vHwDrjjG7OZgHnbs5uNjdpJoO =/Jd9 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/b-1-priv.pgp000064400000000000000000000036031046102023000177470ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 46D2 F5CE D9BD 3D63 A11D DFEE 1BA0 1950 6BE6 7FBB Comment: xVgEYAlsyBYJKwYBBAHaRw8BAQdACwd+GV2hm5mdthx5xlYqGmdq1G1JqdgoB2sj cmQKhewAAP48+5QMFSz6qK/ItMmfWdiivKvexIZDesoZwkYPidopSRI5wsALBB8W CgB9BYJgCWzIAwsJBwkQG6AZUGvmf7tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnEGqcHTwKsftptBDk2SA/ZUlA+TOApsUGTSy9Q+TUW7cD FQoIApsBAh4BFiEERtL1ztm9PWOhHd/uG6AZUGvmf7sAAMV3AQD+PL8dg4jOziTO 0TwigbXCHYZpgfhhuiuba5tS6iv7pAEAjLXN3cbFS1G1pF3BW7VHVxDDdBmMAz+T V8E2DddG/wnNETxiLTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJBwkQ G6AZUGvmf7tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn YDlnnvYL+ULu1wU+yvE2Kr62zxBZi5Pzt+VBpV4HrpsDFQoIApkBApsBAh4BFiEE RtL1ztm9PWOhHd/uG6AZUGvmf7sAAEpRAP950P59KlXV6IsddtiX2dntxI4yCs1i J996LO7nX651UQD/Rr6vbw/hlxhc5/5ci1YlANySSjsUHzrEJZLCTMSxWgnHWARg CWzIFgkrBgEEAdpHDwEBB0C/TlXawgfn6aa7ufJVR+Q/gWRXVrKkr4rUYHwc7rh8 +AABAOmguL5aWOaUGaLvppuhTzejmqJ24AdYrKOmgWSALZuBEXXCwMIEGBYKATQF gmAJbMgJEBugGVBr5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZzK5Dn50VmQZNlVyCAg5Gi1kA/VvkuK6dOJS7hIOhiTNApsCAh4BvqAE GRYKAG8FgmAJbMgJEAeJOj5NI+SYRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ/ZQVU/l+cqC/VGwIA6ApE1gWqoIpAkMSRf2/i7zLSo+FiEE PUGqTo33vstDLHwYB4k6Pk0j5JgAANOeAP4jFbagRqgbhibfMOqPSQKisC9Zi2GY aP387ywa+auD3wD9ERKdZCgsjjVBDJxxNt0A7eYbckDiAbXFBOaaJ4m6uQEWIQRG 0vXO2b09Y6Ed3+4boBlQa+Z/uwAAmeoBALOWwi62lKD1TjdkEukhiJF3Vr5buXaG v5oIWYdssNKZAQC48Bc51w6isOPS/kByPQ6wz/dZhZ5+tweXi/WrOhJCA8ddBGAJ bMgSCisGAQQBl1UBBQEBB0D8RD6PiNWlwiY9YMbygVuJvGt5m8/LRaJ4CuCIdlXG MQMBCAkAAP9Ni5zJhAkv12rwbSegMTPDDDfW3I8HDTnZo7wAxqxJQA+IwsADBBgW CgB1BYJgCWzICRAboBlQa+Z/u0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmesv+DpGS5wux1URxXpphAp1t1livBWvEMsll4TRico6wKbDAIe ARYhBEbS9c7ZvT1joR3f7hugGVBr5n+7AABp1QEA6LXFN6GwgnipkdTAmle6phha yMFeyQZOs++9di8rcfEBAJVpR8Ovqe8HiyKm7lJ8ijkw7JWFmHmtiKORulWccJQB =qvS5 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/b-2-priv.pgp000064400000000000000000000036031046102023000177500ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 27E3 5FEB 486C BF5B 1660 0270 783F 1A8F C727 FC3D Comment: xVgEYAlsyBYJKwYBBAHaRw8BAQdAZVx6pz4rn7mf/BwqLNMSVu/o9xr8/AYzw3ER EX3uPUcAAQDr2iWA5ODDGljBXehp8I8PX2fIU09WaMLok7TdB151gxF6wsALBB8W CgB9BYJgCWzIAwsJBwkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnkWn+7HqLE0siCDuhYDkkAC5gl6hVYyY+6c3zYnfSGfoD FQoIApsBAh4BFiEEJ+Nf60hsv1sWYAJweD8aj8cn/D0AAOl6AQDWTP8S6+D5lf/L nn6ct8wurEcxdCCqT+1464pG9kxC0wD+IvyNp2Uz6P88I08ExAA5f5cEo26En3Oc dwaq0RuRKwvNETxiLTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJBwkQ eD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn +mKyPk92oQWxU9P8vxPFCaVEkXo0Pg8RV3W3gLlYiZADFQoIApkBApsBAh4BFiEE J+Nf60hsv1sWYAJweD8aj8cn/D0AAOMKAQC9YlTghZBi52IMmxpoer9q6CDxqkCm 7EFHU33LGkDa4gEA9QRd7eiOpVC1mDe9wbL5xT2zpFHj+1CizKexCtfZCQ/HWARg CWzIFgkrBgEEAdpHDwEBB0AKNFzGBzORNWcjz0b1f8CKHqfcDBpr2n+QMOdmVPUy JQABANPEECnqhEMIR612V0BoQTTgKg+iLDblNOR/RTiwJoKODWTCwMIEGBYKATQF gmAJbMgJEHg/Go/HJ/w9RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZxHD+GBwqKtkAfh/L8V0bFZrppIaIuMToqc+KUC1BQLJApsCAh4BvqAE GRYKAG8FgmAJbMgJED0TMG9YZLtNRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZxXtXo8abRV5xSEg9AYH0PrzLuYcUUr4AeMPhbPuC3xqFiEE n7rzD41t7gtLQ4e4PRMwb1hku00AAOlXAP9P89/BYp+9RfqEvSDi1iK4rumbRCBp MkZkDFjBXA01WQEA4Np1SKIkg1GZz8UZpV9Vg81gOd5ZfjsMZfwOC4tSZwkWIQQn 41/rSGy/WxZgAnB4PxqPxyf8PQAAwLwBAIwAUQT4tBdWjmQaTw1C/3LMjiFKsa6F n5Bh9/VDskMcAP9czT0qjwOC89vOgvWmndkKMrau+a35arHnvKwU3eokBsddBGAJ bMgSCisGAQQBl1UBBQEBB0AMnb4qIbcaPktA5r63Yf3tZ0wO37epnaz562TKDarx XwMBCAkAAP9Ajyo3NExnEec398PMw8O0Hm5nnxuee+jCcYFktmCCgBDjwsADBBgW CgB1BYJgCWzICRB4PxqPxyf8PUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcrNG4rWRhgZVBpodzyLc4IfUNzWdIQ0AZwGneBMBLqsgKbDAIe ARYhBCfjX+tIbL9bFmACcHg/Go/HJ/w9AAAZHAD8CMT4oQPRFMag2t9G01ymK0H5 kvtAr1fiQfg7Z+cV7rMA/RP6kKLTvt9pFluhu7+/Su5q7VoiEgjAfwYlGSj+y18P =Loiq -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/b-3-priv.pgp000064400000000000000000000036031046102023000177510ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A2C1 9DD7 C993 5F8B 479B 5D03 0853 FDBB 900E 05B0 Comment: xVgEYAlsyBYJKwYBBAHaRw8BAQdAzMTuGrHo7cxVOUZMPmxsLk88kXDstiDn9ljM L9H2kcIAAP41PW9cRgaYcq0OLejqjES6J4dw71Yri8eDDFdiYu0drA8VwsALBB8W CgB9BYJgCWzIAwsJBwkQCFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnkFJzxVpraQKmlCsEECNwJH5qESVhfsLuMr1t0AQ8BsED FQoIApsBAh4BFiEEosGd18mTX4tHm10DCFP9u5AOBbAAAM8eAP9TrJb/NniPBu0l i+TQZCrW90p+C0lPiSOecDwd3nFFgAEA5KgbZFM9xZ83DnlZTC/OngTxMKhYL/Gd N2QTH6/+FAzNETxiLTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJBwkQ CFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Of6bx4daF1rMYACIUaFr/cAThL7vq4nLFIi9ptNOc4UDFQoIApkBApsBAh4BFiEE osGd18mTX4tHm10DCFP9u5AOBbAAAOM9AP9iFmBfmPB+4LjxEnBFKx69S4Ur0a+z AskTVWTIWKB8VAD9EjMUE+w3spesicSVxZcFW6oS/kmPmM7hv8aFRCPWDQLHWARg CWzIFgkrBgEEAdpHDwEBB0CRGIa/5InlyLBL3QIbJ/P71KoC3OoF1QiWnOw75tuU VQABALI61wcHAulMWmzrsu88xaLPT3E6g6vjFAnTdser1jcJD8bCwMIEGBYKATQF gmAJbMgJEAhT/buQDgWwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ30zYiR0D7mFDgewc617lUJX4yHdYre6LWnlrHxApighApsCAh4BvqAE GRYKAG8FgmAJbMgJEIQuKqaaiI6KRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ/OmRx3RLitMO/o+YExvQiiFykSJ91rHCKQTFbww2xBQFiEE dNj/MmaIIW57fi/UhC4qppqIjooAAGjoAP0TyQikAzRw939P3vQb60t6Yi3Hlmwt DfV3D1l2GAUhEAEAlwk1bigcAU29bu+fdlWsuNgxn9Cesbfr7/qlHY1lTg8WIQSi wZ3XyZNfi0ebXQMIU/27kA4FsAAA9EQA/iQITg7+lTftYbs9rrfQpAgP0zHKyjCQ Dt1SghMSU2L+AP96QD5S6HXsdvBuzAqHKUHnvaZohxtwP3UxTlZjNUUFBMddBGAJ bMgSCisGAQQBl1UBBQEBB0AvKabbZaPaUQ5wtzNuKyLkm8pkqj7jLHbM1WkLup7B GwMBCAkAAP9icc7CXsQlWoRJ8SmqLBKn7Pw/q+DRDGfnRq0/YJUTQBDQwsADBBgW CgB1BYJgCWzICRAIU/27kA4FsEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcNAnnakwr9aPhklhE6SFU1V3BZGqxSPkSf+IU2hVHvzQKbDAIe ARYhBKLBndfJk1+LR5tdAwhT/buQDgWwAABwRgD/aL9hvj3sU6geymSG6jxp8/6Y H7pqU4DGlExhMl0ZIwUA/joyYWub2LBi3tZbRXgWzrGaToSV3vwLEu2yeRRD2XkA =fal2 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/b-4-priv.pgp000064400000000000000000000036031046102023000177520ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 90A9 DD3E 7721 C221 9E8D 74DC 2AF6 A3EE 5D75 FA3E Comment: xVgEYAlsyBYJKwYBBAHaRw8BAQdABVjfdQqmyC40BamLPinXyOey92rvEtXBjr/z 74fREWAAAQCZtBmVhFGS3VyiFXRTXcdHgt6+IkeNliDcKnNrPztWCw4OwsALBB8W CgB9BYJgCWzIAwsJBwkQKvaj7l11+j5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnW4hRIkOd8BgHWD+4hfe6wd/UKMa0qeR3lD9uGPXscw4D FQoIApsBAh4BFiEEkKndPnchwiGejXTcKvaj7l11+j4AANIUAQDIb9z2TbhKN1jz BHtmrOZSQsXHWk8pAjDzOIrbnhE1iwD+MBMby1tMnD/yLfqXOyuB29IrhrzcEHP4 ogLzehfPqQbNETxiLTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJBwkQ Kvaj7l11+j5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 9X04kL5g283FAzU8U8UsFss6SV0JUXt3790jpfEIpWEDFQoIApkBApsBAh4BFiEE kKndPnchwiGejXTcKvaj7l11+j4AAJA5AQCItN/Rj2qVuvYGF9WePV/XzLGSaX52 F4vkymFj0vm9EwEAjRVITRwEZh5wBj+ts6LJFhUoxG3o+AZz4+ZjawTO/ALHWARg CWzIFgkrBgEEAdpHDwEBB0BuneQYy2ktv74tBv6YkEWQtJJ164Y1a1O2Mdho4ljV agABAMafiwXaXVFXc2Lvbdl43nZzj9fcCcpUNWYq8MCQrvsYEU3CwMIEGBYKATQF gmAJbMgJECr2o+5ddfo+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ1r7BfkBTbrJCslvL1ZYI6yPZoH06DjIBmPGyN1zwAjIApsCAh4BvqAE GRYKAG8FgmAJbMgJEJkPvf5qLBrBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ9MKF/f8v5KTcBtkjMYDUx387VQsMnOiZFK3jplANCS8FiEE 0PmXgo+Uz0beiylrmQ+9/mosGsEAAIrxAP0T74Ob5F4j/Ec1hN/keYNxiy0Q0lpu 6usAkWNF8GO2vwD+KxAJXaDtG4g/l+4yBOYnlC9vn1G29nqYyf+lZBkQiAYWIQSQ qd0+dyHCIZ6NdNwq9qPuXXX6PgAAxIwA/1phZUWFzapFtPHaJZUQhV4zyFyYqK1w eUVdxPI7tURAAQD9+X1eu7RpydgqNnz+fduNLwyUSV+JsW1gfShwUx9eCcddBGAJ bMgSCisGAQQBl1UBBQEBB0A6TeqvitXGaImKPbfwuLGC8APHRbnzAXvhOZi5vndf CgMBCAkAAP9jVqxzWQHYcZDhu8i/nOgFHr3ZYLcl2aBq40wLGBlK4BEewsADBBgW CgB1BYJgCWzICRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfHCJskTBsH5jaAcv1YtIHe15BetfU+zP2ONDJQtsTfjgKbDAIe ARYhBJCp3T53IcIhno103Cr2o+5ddfo+AAD35AD+LceAz5+X4TIAXxgZgTKOqMek OOndbcHRXr/qNvsabIgBAOurF8flSqxEHMmCtrqblnR8hSy07utdWgedRtGxifcN =HPp4 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/b-5-priv.pgp000064400000000000000000000036031046102023000177530ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BB09 ECEF 50A3 763B 786B 9D8C 7E5D B420 E40E B11E Comment: xVgEYAlsyBYJKwYBBAHaRw8BAQdAp+2+raUWTo8hMf0ivXz+d6V3KZnaKgGwLJR2 RIEURekAAP9PPZ2uyTsFwGhHBFkEg78z8giWGCJRA5iegsvCxsJY4Q9IwsALBB8W CgB9BYJgCWzIAwsJBwkQfl20IOQOsR5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JngH3twifLfMc3+zjxIej8wPxCGQpjWQQa/HYHsryXRRED FQoIApsBAh4BFiEEuwns71Cjdjt4a52Mfl20IOQOsR4AAKpkAP92TRZYEi+QrjyM U+CJooC9sp3G86IMp63CJ7eHNCUhNwEAz9SV5cVBdZFUv1wI6u4xoM4ds8xo4s+S ath/RsRJIwrNETxiLTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJBwkQ fl20IOQOsR5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 1ABQWsRWqhGjy8SfnNsy5FdOS/D/F35O5Kbw6NrSftADFQoIApkBApsBAh4BFiEE uwns71Cjdjt4a52Mfl20IOQOsR4AAEGfAQDXwd+qecekES8MRsSv8XxaZge3GfFj QdNj81mB6SkMWQEA7VMc5HLxvqcOH8U05KRQ/r0DJleNY2vFH0bkrCJZDgDHWARg CWzIFgkrBgEEAdpHDwEBB0AsVXQU608jm42P95G0weMjjTw2Ck64jcWLBfqTYBxy ogAA/0Qoqu/zTQCYwnl6rnzO+utG3ofHERzOEcRw/4VkIhmqEe3CwMIEGBYKATQF gmAJbMgJEH5dtCDkDrEeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ6tjDua4Q1U7OgMg3F6qih6/ZzBkM6mgwlAyLqZVp3XvApsCAh4BvqAE GRYKAG8FgmAJbMgJENOTagRtxcMERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7Q96p/V6w9myFKEkjCsw4IkNi/tMKtsu+WzBPn8a4ZeFiEE +jXtmXSZ2CHfBgfk05NqBG3FwwQAACObAQDeD9xBFCOedtu/2WeKVWJ7Rso5mEBr PIU5DPhPs9utnQEA4lHUc86aUfmQRUT1ZtewOY2AmdO5iwU19fOlGq9QagcWIQS7 CezvUKN2O3hrnYx+XbQg5A6xHgAA41ABAJMMxjreZmryu1CKWGHhulhJG4DKgcmX NjdtRGR+p1BVAP0UxHVmnNIy4MpuirIKFE91RBeI/+HBJFwSAsc2JrHaAcddBGAJ bMgSCisGAQQBl1UBBQEBB0Aocghu7WyHRxSvP3Z+uO5RMat/cGmUTpvbeIPeRhFq FAMBCAkAAP9WMBMRTzmI3XekJC5xd/DqEeC+JGgcICU0nRg0VhBtqAz5wsADBBgW CgB1BYJgCWzICRB+XbQg5A6xHkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmey6DQQYM7Pg2wG5n2yKtgflAhw8qv0FGzLAZ6yOebt4QKbDAIe ARYhBLsJ7O9Qo3Y7eGudjH5dtCDkDrEeAAAtrgD/enLYHiWJqgp4e8GGuFOgtzgb +whO5hveRs06VHMlk0kA/1GM85PIkfEfgbDt+jIT7CCgXKvzcxVnwewVzWkwaUEG =xe+f -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/b-6-priv.pgp000064400000000000000000000036031046102023000177540ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: FD27 278B 0513 F8FD CFB8 32EF 2C7F DC53 5F06 AA14 Comment: xVgEYAlsyRYJKwYBBAHaRw8BAQdAnx+wVHpmlfrQvzDgBnaxB5tjJUNpY385Cm2O SsTgv3gAAP9YqhlEjfRdMgwToHDGPwd0YkJ2TXee9tCVtdg2VJhRsA+kwsALBB8W CgB9BYJgCWzJAwsJBwkQLH/cU18GqhRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnqRdxKrgTNTDMTTPjQ0mtv4qIinPvwadDb5ZoVSZlmYYD FQoIApsBAh4BFiEE/ScniwUT+P3PuDLvLH/cU18GqhQAAE5PAP9Gu3Q/1IX9LD6Y urZjiNXqkWQllqKmJyv8tY0IbwGEZgEAqjy1udoWy2S0yoLXMHz2qy/eeWcQlQEM 4gDS0GlBSAvNETxiLTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzJAwsJBwkQ LH/cU18GqhRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 3jkS1pAmQBBOnfR3aWsSETVWxV9rm2RbiTSr8kzhRNADFQoIApkBApsBAh4BFiEE /ScniwUT+P3PuDLvLH/cU18GqhQAAJdNAP40gosvrdb17bstbIW+gzAu4VPVwkG4 wNXPzYzbbnmnIgD/VxjjVGEBgYPZ0dJWQl9OySH+I5XCjaTfUcl+ZUCV5g/HWARg CWzJFgkrBgEEAdpHDwEBB0C6XgDRRMdeuYkZpNJfSqmRF0zB7yynB9VPo8Jfviz7 PQAA/RaMoJTub2LHre9O1JyOj1pDK/EvmCDwRrKvM1kl6bpnEcLCwMIEGBYKATQF gmAJbMkJECx/3FNfBqoURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ92LHbIt0h6r813AWXbviJaJDOKHxFLg9hUW8p6xHdcVApsCAh4BvqAE GRYKAG8FgmAJbMkJEPnKqJwlFPqsRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ+nCpROTxQYV1deqSV/oRQwVes5KeMrG1jfhUPrkan4PFiEE doNVBWk26FHVekXM+cqonCUU+qwAAH5OAQD5gmJrTdLYn7+oW8G1R+JyNyTVPVL6 +SMGpK+a8sTRDAD/QI5yhrudOsvl4aJyfp37Xe4bvuFSVhn7d5dEGitSpQoWIQT9 JyeLBRP4/c+4Mu8sf9xTXwaqFAAAe/IBALIWou3MtFsepQUg/H4inAtghjSpNr2X d+nSVfIb2iy1AP0TF0DfmWGbwdDdZbdAKz6CBkPF7d0R8kuNZ29OH5cyB8ddBGAJ bMkSCisGAQQBl1UBBQEBB0DbmU5jMBguFH6QbYBm5WxZTkXxNe2bJsgURGs+4HB1 XQMBCAkAAP96/XssSgboC2Nq7bja1dtwUaFTgC0Tp31lsBjCjxPISBCWwsACBBgW CgB1BYJgCWzJCRAsf9xTXwaqFEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdmFq6xF8aLyhrwhcQ8rnmiGQ0mHhZNhLwRJ2dxULZh9QKbDAIe ARYhBP0nJ4sFE/j9z7gy7yx/3FNfBqoUAAAVJAD3S23je1y5kdf/KAio1o07qlVx 85dCeKLmmUDxwZHlAQEAvAC9wEuevxid7vVsgLJ9MlCiMEaCl4FjRN0HtX7uiwo= =ukNA -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/b-7-priv.pgp000064400000000000000000000036031046102023000177550ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D364 4310 A347 8F67 34DC 2436 AFE8 85F9 34BF 137C Comment: xVgEYAlsyRYJKwYBBAHaRw8BAQdAVxnYANs2fQyvBYpvAcU1rCcuRtHipaBRWkX8 1NHq4ugAAQCH7LijLF7s0eXH1weu9j/60PKz1ElQqRz7af8Imr/hoBRpwsALBB8W CgB9BYJgCWzJAwsJBwkQr+iF+TS/E3xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnvAzj5IoIvIYsp1fKMGZ2jub9tl74bhsk8Y1KmLqdSeMD FQoIApsBAh4BFiEE02RDEKNHj2c03CQ2r+iF+TS/E3wAALtHAP49iiMnfx228n4O 5y5PCfH/ziGTZOQCiuSNSB/LfQUqAgEAvw1ujVxxZ/x5V6n9LX6HehbTBIM2/mA6 uDHmaCYtJA7NETxiLTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzJAwsJBwkQ r+iF+TS/E3xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn yt6QqYYTaOaprCHITxLHa5nvcGzKvrjSCYbSVo1kg74DFQoIApkBApsBAh4BFiEE 02RDEKNHj2c03CQ2r+iF+TS/E3wAAKUOAQDX0IKDq9lAA48ycn2qfgL18d8qXe8U 6sF0WboY2q2psQD/ZEwfkTrAaJkTIb/tSOJ58R44nMqgdlnjsLQ4RUe0YAHHWARg CWzJFgkrBgEEAdpHDwEBB0CDN2z0GQJ8tgOJPH9murQdn/qCBbYVpPsvPSwKi5Tq EwAA/j5wsv+xUBrs6OQONFPIZIrDj1IlJvWe9WQFCQD5bc5CENrCwMEEGBYKATMF gmAJbMkJEK/ohfk0vxN8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ8qbRXRBW/BThEoFj8/8jQU+yEZw6LdybyWYVwgq3k5jApsCAh4BvaAE GRYKAG8FgmAJbMkJEFBeymyNUrrFRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ72jKEG4uGfsJC4XO13kgCrMPYRLgpBSVWq9FlAWJUxaFiEE m16afRI+hT8dIeAVUF7KbI1SusUAAOtkAQCwG8819PXB5Qo1vZfPTE+Jb+xzLQDk NdPKoh44A0NozQD49euOEDyrfXgO3ecMq9qlETUzG3byCDDKNMTqz3jzDBYhBNNk QxCjR49nNNwkNq/ohfk0vxN8AADY5gD/StF1H/HC93PfJxqPm4MkemM9Dpz4c4wi N6yWZ9rrInkBAJWAD3Vnw9j2M4KXTa9sLDsgOs/raFAKxZTsYoW7R9sIx10EYAls yRIKKwYBBAGXVQEFAQEHQC9IrAaaYoqYD1BQMBgsHDTBqq6C0tbe+XK1KcXEbm1S AwEICQAA/2Msycvu8xEsL7qyVaJgYK8osWEVufRahMvF2z3aTACIEXHCwAMEGBYK AHUFgmAJbMkJEK/ohfk0vxN8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ7JpuDRvFaxtYWS66SfapFOVcIKKIe6LktUgdFAuIEerApsMAh4B FiEE02RDEKNHj2c03CQ2r+iF+TS/E3wAAPyxAP9O9Ipab0MHO4/WpFYcfeg6cqB1 B8hQkbauRkpXChj6oQEAiue6mefgIP2/I5XEo4vsaluGb5I7JCQP9bMkIFd9DAI= =himV -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/b-8-priv.pgp000064400000000000000000000036031046102023000177560ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BFC3 1A69 EA94 74EB 89FC CC2E 78C5 7D9D E95C 16F3 Comment: xVgEYAlsyRYJKwYBBAHaRw8BAQdA3RlboRpfZFUMS8sqNfpDp03V34NixoZFlAej jTjtSnIAAP4tMer5TVldGum+CuKaPIzAaxbk1l+kTL5wdedG8ay0NhHywsALBB8W CgB9BYJgCWzJAwsJBwkQeMV9nelcFvNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnfZL4fAwDI1R7776T6Lp4ae4XX3AzwlZsbzS0xp+COfcD FQoIApsBAh4BFiEEv8MaaeqUdOuJ/MwueMV9nelcFvMAAN0cAQDZyQeRO8Lmfb4b od0PTpvhLy2qlEJfOa2Z1yWu4AyncQD/T5hoaxBT+Bp3YWq7vtIYrsIdndT4tYBa CJ5ZWQA4PQDNETxiLThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzJAwsJBwkQ eMV9nelcFvNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn /tNNs7QEpkPWaApKDF25g8cGi4LyMxKG3bdXF8rBX+UDFQoIApkBApsBAh4BFiEE v8MaaeqUdOuJ/MwueMV9nelcFvMAANY8AP0VcTtJ7i89Ou1zAbH6EEoXEiKB1h5b 7MNPMfI7JimUAQD/Ranpdeu2dR++ikf8HM7rbWpdbA59wtKfS7WU8djTbgzHWARg CWzJFgkrBgEEAdpHDwEBB0DQz9pGrj/nU2FG8pLdxM6rIfD1iKjbtE9GnOzz/iLB mAABAIAe4iSs2vG/x0APE27SvrxRL256wxIm7IewrVNI5PUlEIrCwMEEGBYKATQF gmAJbMkJEHjFfZ3pXBbzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ+sAEa64ZWCyi1uZER0HCbGpCvXPHfNGCqc4hVbUPPEWApsCAh4BvqAE GRYKAG8FgmAJbMkJEBGLyoB2rEY4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZznriYDVXSrkOR6jkzafA15Ei+lnvsT4rg0kBzZaSRPtFiEE Nnb7D6DpsKG7dZvkEYvKgHasRjgAAH25APwKPu6hL+bhbzru/aPxQjqV06W2tAkf BB2us9rPsC4LNgD+KxRogJefUlR6a1dnZlPhwUyF11mKD5eb1zmph21oqQEWIQS/ wxpp6pR064n8zC54xX2d6VwW8wAA0dwA+OPLyaupaqLe2eIKA/Umeb7xKOoUDniI V5gwX9HbiL8BAKllDd7XQtk6tjBfhAf52+MWvh1z4NG68qoWD7dB1x0Gx10EYAls yRIKKwYBBAGXVQEFAQEHQP5512SNBPXVvm9FaFpLfV+34iwfHPjZzT5S5G4tmzZ6 AwEICQAA/2/2hWoOwE0Ryn6o0n+1qH8/7QYrwuHXS5kLMTsDqiv4EJ7CwAMEGBYK AHUFgmAJbMkJEHjFfZ3pXBbzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ6pQD/i/YVpG4jkpk7GyF74hY/bIjlN/pAbK1XhZYZqpApsMAh4B FiEEv8MaaeqUdOuJ/MwueMV9nelcFvMAACm5AQD+rBBuSJ2VCcfmYX14mLaMcAVE 8aglxhnKek7YkindygEAsO/PlZ1xH21BslzArjnBgOHMqoM8BCQ66EBDjOTfUQU= =31gH -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/b-9-priv.pgp000064400000000000000000000036031046102023000177570ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 92BB 1A56 0BFF CCE4 717B 05DC 4696 A5C6 29EA 31FA Comment: xVgEYAlsyRYJKwYBBAHaRw8BAQdAAycc+t9KOyobUaVzdVXSBk3OrI4v1b6/OrZA 8WJwSpEAAP48DuEBKuHbuK8xp0ejx3Runyh+l7MtFyuAdFZig6fdZA/3wsALBB8W CgB9BYJgCWzJAwsJBwkQRpalxinqMfpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnH25tlvrTopi4YwFD+dypzCt1LNnZtKbATV87yLt03tkD FQoIApsBAh4BFiEEkrsaVgv/zORxewXcRpalxinqMfoAABubAQCkEnTJBMRfUJed 9zNwBKO+YiQY+wPczPf8OpZczjmgBgD/Q1BzY7p9Mwh/JSH6C6Kmls6Vbgw5k359 phefeKPU8w7NETxiLTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzJAwsJBwkQ RpalxinqMfpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn heM9PqD3R9Oix5qknRwV4u3SxlrTaLaMK7Tyl2gINngDFQoIApkBApsBAh4BFiEE krsaVgv/zORxewXcRpalxinqMfoAAHj5AQC1VgAAkTsHFgjFIxCwiFJ7y9Qac5e5 0fm66K0mMSM/vwEAr08tafiS1LwSt5P0eTDzUi4ZxovrlAihZw/ojRX6HwLHWARg CWzJFgkrBgEEAdpHDwEBB0DQpK4DJWWa+LT9ctCX3YfJ/lDTmExWRUEcdAD4UWZJ OgABAKz1Oq7JkK9ATJJIkReuQj81/lyewAkgf5vbsIdrQ4LcEB3CwMIEGBYKATQF gmAJbMkJEEaWpcYp6jH6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ5v8TkXmHO2RmaHXnVTIlNtkjUelvdEpp9e6RJppg/9rApsCAh4BvqAE GRYKAG8FgmAJbMkJEPbeaLDcTUaaRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ8lvI3gOVQiKl4i3bLilxaAC/wLPPbYEe2se7sBXx5CeFiEE gIz1o/zygH+RiVYM9t5osNxNRpoAAJNXAQDzpznT1xzkw+SVWHp6b82duDgi++fW EXHJQ16dcaiJFgEA/M32/KHX0OM/UsWLKd+zCC5DfUwmYUOF7Ub51BCIZQ8WIQSS uxpWC//M5HF7BdxGlqXGKeox+gAAWzoA/AhEIilM/wJdlzJtbPBXm8mzmDdOzEUd V9U+iT/ZMGPcAQDWBObkIu1KrnFUyeLUwdXszHXUDsEkEW+aFrXs9E2WAMddBGAJ bMkSCisGAQQBl1UBBQEBB0A77Mq04MG5zJEt0XRbT+5JXWznY+G4TU7fRWOl4S+O WQMBCAkAAP9JO0i0UzPJIjo7VpRYhLC8uKBeMxo6IbKXfiL7QsgYwA67wsADBBgW CgB1BYJgCWzJCRBGlqXGKeox+kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcsIxwZvlW9n/+V58685YelCbKM80PxRIYwj38a8L0giQKbDAIe ARYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AACSTAEAoy9PEoSz6EuxQp15LS+zIrS4 xG1hSFD3z4jolGmT0bUA/RiodFYxGGeKLMx63puHx6dicUeULNnZh8aaJJJH2UAH =FrHq -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/c-0-priv.pgp000064400000000000000000000036031046102023000177470ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A0CD 8758 2C21 743C 0E30 637F 7FAD B1C3 FEFB FE59 Comment: xVgEYAls1RYJKwYBBAHaRw8BAQdAyKX9J8CggvfTVfIP2x3m538LpZGX1gotemaR MeIevzYAAQCFLkpzZEdeu7F5tLAVBatFtam488HWreSjDqxFiC+ptxC3wsALBB8W CgB9BYJgCWzVAwsJBwkQf62xw/77/llHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnkQbu013xXST8QKpIB+QSDjTeQTjExhFkjeBjpt0i6yED FQoIApsBAh4BFiEEoM2HWCwhdDwOMGN/f62xw/77/lkAAGLpAP0fC5eHCjWpzSBS mfXq2yHtiKqwVoPIQfTQmCuASjx4XwD8CE76fwWCHc8+e+QsIGbMPTpMFX9GLlSC /N2oHpKQ4g3NETxjLTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ f62xw/77/llHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn m177O8qNSYAjpmZgIPkQ17Q+L86l/te46qkw8aNgUP0DFQoIApkBApsBAh4BFiEE oM2HWCwhdDwOMGN/f62xw/77/lkAALSmAQDZ2T1hFZFIbJZZ+hrv/BFrgkKmSwfU oPiVvkWbDQ7nqAD+PT0Lm6IQvBkMO2O+p/KgEr0RK4J3AHIwYLtYEyXLGwHHWARg CWzVFgkrBgEEAdpHDwEBB0DIlL1k5vNeEeenalw9ANpesABOsiDSDSagYodvE+kv rwAA/1gs2QhVclJOjzKw4Jux55Vnz10GL841nWBr/bnyU5m/EWrCwMIEGBYKATQF gmAJbNUJEH+tscP++/5ZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ7Wa7pyp/RijmQ1z7awONx9oc/8XdtJr96xdV7oIti3QApsCAh4BvqAE GRYKAG8FgmAJbNUJEMZBpX+k2O3JRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ/Ctiovv2iW2CoG+cleNm9y8nyI50Zngc02WyYIbnJphFiEE 3eG0MhJE8SQ1G3MpxkGlf6TY7ckAAEVyAQDh/pvQusQIJF8Et9SEna/e0IPq+haK 9PgNUpi3GhYL6QD/WwpO0mB2i55DlsCCQDwZwOZV2JTJGkUA0M6fJCjnaQYWIQSg zYdYLCF0PA4wY39/rbHD/vv+WQAAtuwA/0FxQwVECF2/XJOGjwsY3l68DNWKmjiY YTKIWvt9s9xuAP45J4uJhYEGt8tT+2XMFlDNV8A7zF+VhbWTJyFcgbroD8ddBGAJ bNUSCisGAQQBl1UBBQEBB0C7boSerRi+WbFP4EzOtJyN+veeFTOTcI7ZIyjCx0tT MAMBCAkAAP9KcrhoHjASDHiWst3VbHhZYwqucDqse8go/8JvbJgAwA/GwsADBBgW CgB1BYJgCWzVCRB/rbHD/vv+WUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdEFrBibVW/DwZxFe5/sNYKSFJpJULF+IJamTuwisK3lAKbDAIe ARYhBKDNh1gsIXQ8DjBjf3+tscP++/5ZAABE1QEA+dwLkTIkFxvCdFpxoyrZb2UP KNaF/BOsR/w1Avo1prcA/iutckHp86Ozg7GCBfIlSW53W/kW7BY8HR0+oRpKLoUC =idkq -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/c-1-priv.pgp000064400000000000000000000036031046102023000177500ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5277 C14F 9D37 A0F4 D615 DD9C CDCC 1AC8 464C 8FE5 Comment: xVgEYAls1RYJKwYBBAHaRw8BAQdA7HlwOrAwXgWd9q2vIrq4PHFiGBAj6vb1/KCt L9oLDW4AAQDKtKrOog7v7gAeebUKm8ZQjNhxl19sB4+5cV0R/EfNhxCHwsALBB8W CgB9BYJgCWzVAwsJBwkQzcwayEZMj+VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnsi3FPX9BwVpmLFGqKQnr6Asg45gY4UtBqkO6XUrR9/ID FQoIApsBAh4BFiEEUnfBT503oPTWFd2czcwayEZMj+UAADe/AQDgAQ5qKxB5zb2R Uzj/glZqit8eTQL/7qWshK53R6eevAEAlaw5OzAaxMdB1QceaV1mDyTNWioO6XcF 6AeoXCXaxw3NETxjLTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ zcwayEZMj+VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn RotNojeITmz2B0YE7wf9dg1UOECOXv91q+7zUJFEQYkDFQoIApkBApsBAh4BFiEE UnfBT503oPTWFd2czcwayEZMj+UAAP6tAP4+UiYUkcbVabDtM0fN2hUJDHCGYkD8 ESKStp94aKBfqQD9HgrpfAGOBZEcREupxZqaKSAH+RNFarTyrNDxncYx/QbHWARg CWzVFgkrBgEEAdpHDwEBB0CDgOdtErE43Qt4NcWx4iIYFIYotrRd09AjT7ImXCH4 GQABAI+Yn+DIFldQtU73tIGEgoiKlxlhOI248NL4g+kbe/FhEg/CwMIEGBYKATQF gmAJbNUJEM3MGshGTI/lRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ+KDv2y4qZBhGHcrOcIJsnVdtV0hABU8wMHcK/9ahDYHApsCAh4BvqAE GRYKAG8FgmAJbNUJEEyvLx1QRQQ+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ2bIoDXOITqKtLNRFUzh3wcPu55rlLl5fWhVEuP7+qtpFiEE PoYjXi+d7UUZZex4TK8vHVBFBD4AACVxAP904Au4c8YdY2HonUP9iZ7WawHanW86 fxL9oJxLqaF5HgEAjVqfaEqcd0Vaa1IacIap3CFlkNwqkdhyyrTJoXEwFg4WIQRS d8FPnTeg9NYV3ZzNzBrIRkyP5QAA9I8BAJYGwM6r5CNpSavFDOdRDNrxdw0k5Rki VBY/+1XtUyJzAQDPIuSBg978UHLDafnaMcR1sKbtHTGoFCBVlHqXP4tmD8ddBGAJ bNUSCisGAQQBl1UBBQEBB0C/JN05QFPuxHpmb5LASKh52sEeHjdtgbL4YkPGx9St MgMBCAkAAP9U/ICkdQ9XF0Cf1z8DWgutNg6kJsyEZDhB4eC5p6fO8BAwwsADBBgW CgB1BYJgCWzVCRDNzBrIRkyP5UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc6MPU464y6n6lWV9WrhOvXPMq7zyLEDOjeDy1tR7ll9wKbDAIe ARYhBFJ3wU+dN6D01hXdnM3MGshGTI/lAABcgQEAlqMKhb8rQoC1FzAaDABIDgR6 woBqJI99Y09HFoavyB8A/0dBVRA0HUvK78z1cDyB01G+Iwf+prwfhotEHJ52isMN =MHGx -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/c-2-priv.pgp000064400000000000000000000036031046102023000177510ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BE37 DBC4 6AF8 0428 9DE6 84BD 10A9 BB30 23CB F558 Comment: xVgEYAls1RYJKwYBBAHaRw8BAQdAX8uqUh+vJosbRb7Jeeylmq4rDaSOQHhiwhQG 1l3vqkkAAP9jSxXSa1q1e1LdpQWacuXqRAbyzd8oMjnNDc4PKQLVbg/dwsALBB8W CgB9BYJgCWzVAwsJBwkQEKm7MCPL9VhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnG+e0itjxLIwTqixgsyKzqvwxKpw8qQoIbw/yMLSEiR0D FQoIApsBAh4BFiEEvjfbxGr4BCid5oS9EKm7MCPL9VgAABIAAQDPYfDW6fGbC87V 2RAktzIsPsczukbiIUIVMlY4Cs8/SgD/SIIOTgfCTI+k5RsE2kCLR1Qn70bIzRS8 hgKbljobJwfNETxjLTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ EKm7MCPL9VhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn luD+rneJjzOWpAZQjEMWBf9iaZxK6fA86hOjqHd7XyIDFQoIApkBApsBAh4BFiEE vjfbxGr4BCid5oS9EKm7MCPL9VgAACA4AQCzTMr5GBUSoE3tz7FGxhHPGrofFHkZ eZ5ffhtu43EDswD9GMbCCXAQY2Wft4WS8qbMDiGOKtzrjxgpmejZPJEOCgrHWARg CWzVFgkrBgEEAdpHDwEBB0DHwErecUoD52K/fUqoLbzuWJdE/Yb9tCBEd+q59D5I wQAA/jrDxky+eGKZkhxCw6FtNs6PYkY83mxLyeRP2et4Z78KEXPCwMIEGBYKATQF gmAJbNUJEBCpuzAjy/VYRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ3FcUmcbc7wPXfyPNTQJL6CIqDYiWNPtbu3dIot8sFeFApsCAh4BvqAE GRYKAG8FgmAJbNUJED+3aPvVGhQYRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZx1dbFwZHgz+X3Z0YLcQeG46pLn71G4+TNm8DF2SivueFiEE EaztDk5Xz8FBioiwP7do+9UaFBgAADfiAQCBBnx6pg2VNfCY8pOk61TLpx5X6hYT xCdk5zeyT/zgeQEAiawMQoib2+KaL/EjTc8lxtT3jxEZ32h0QcvPOLl8tg0WIQS+ N9vEavgEKJ3mhL0QqbswI8v1WAAA/FsA/AvxJVhjvnukZeVlOrXD61jL74Z/CDX2 j7+KlQd5ePnuAQDO0aZISQa70tRxVkbmo6TlCrWUxm9xtSF1++lJ8hi/BMddBGAJ bNUSCisGAQQBl1UBBQEBB0C4p0GwFpS9mCLznhar4CUA+YpgXAqRek9paABympO7 SwMBCAkAAP9X8T1ae+xmcVwFS7+I/lSZQ+Fgs1yW3oS8l2zMWqEogBGzwsADBBgW CgB1BYJgCWzVCRAQqbswI8v1WEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcPnb6u2+hHy5RXaO7sLfmYfZicfW0i4Umb4GyMu/9+dwKbDAIe ARYhBL4328Rq+AQoneaEvRCpuzAjy/VYAAD8bgEAqYntPzlsE2NerUKmuG2TIx7D 56JOaOkASaHUpYwtJkoBAOqdiDUdxUaQdEUzYvbRkX56iWOv2BFxMHvrBTLq4mYP =4W57 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/c-3-priv.pgp000064400000000000000000000036031046102023000177520ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0FBF 9A48 A5AB E5CA 0094 EE49 0BAC D38D 2E6D 2B43 Comment: xVgEYAls1RYJKwYBBAHaRw8BAQdAq7NgCdVrzAMOoinS4+8ULEO4qeiCBF2ZN3/r thnC1HEAAQDI1Fgyb7l+Z8GgcMxOYdpkzlIQHiZFui/rW6eC+qYmXg/zwsALBB8W CgB9BYJgCWzVAwsJBwkQC6zTjS5tK0NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnq4eRp/XzRLnGI5Fcr5bd3Co9kZLwZvUv2iWWBaUs5mQD FQoIApsBAh4BFiEED7+aSKWr5coAlO5JC6zTjS5tK0MAAFKfAQCZwCxQkkHWEFuf R9iOzU97OOH7paCKI6UrmGU0e1WvVQEAiAlsf4IjQjBMNHmlZySNnxrIDPPNHHpQ SrigclSL9wTNETxjLTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ C6zTjS5tK0NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 5tCkak8O3+uBtE+aYeQVeYMUnf3pEB64TeYwmNMBQSoDFQoIApkBApsBAh4BFiEE D7+aSKWr5coAlO5JC6zTjS5tK0MAAEeFAP0QK3cH0AOpu7PmxJSEnEUbio8wOYnb 1e4FahB9fAAU0AD/WzlJmR5sP+ZoXg3enPAHRrEDK3D0HK86U+1LN6efOgbHWARg CWzVFgkrBgEEAdpHDwEBB0BO/KqiQharQkpMLEV7X3H6bbgX8R/WYp7RsSeHTzYO BAABANwXqXpAKGwCOTvm3KDx4SqtOp6nu7JTpXl+um4aHJQ/D3jCwMIEGBYKATQF gmAJbNUJEAus040ubStDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ9VZEi+6rvlkQ16P+zTAqCaEQqKvkGc6fFP0mcsjflx5ApsCAh4BvqAE GRYKAG8FgmAJbNUJEKPizvQLBVIORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ4xoLc6ITt18ICj4zvLz3rxIkVZThP7wNX3y9qKH6tHKFiEE hkGv45OPK7KkAfOso+LO9AsFUg4AAPX+AQC85njM8kr9t8e5m1ziG1cISby6g7+s Hg6WNcCtOwmZpAD/ZIH8Omw9h5YhRtw9es09THT/5+vkchp+65hO7HpeRAMWIQQP v5pIpavlygCU7kkLrNONLm0rQwAAoooA/1xBAt7WZ2a40MJutYnr8Bq9J2XNjbuD 40Ap6P+rrq/kAP4st2DSq2Vxxulp2mlgFmxubWJekBBOe+zBwPBkhUv4CsddBGAJ bNUSCisGAQQBl1UBBQEBB0D2Z2sJdw5jY4ATBZlhcRCGAXQFmssQ/rEpsp0NUNVm fwMBCAkAAP9rVts00xrnvr6Gc/jIHZ5dQl47HdasM65XheMUVjS++BFewsADBBgW CgB1BYJgCWzVCRALrNONLm0rQ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdEqsfKQbD25yL2e3FRGlnMwTUiIU0peqPIF03gqbd/6QKbDAIe ARYhBA+/mkilq+XKAJTuSQus040ubStDAABz3QD9HSgiT4pupRgm8p8pwO/ymXDC s9b467NHuJ+HjCHV4IcBAPbPRzRvJPyomaxq/PgRBxgu5hZFhMPjU4uOUFFyzAYI =fjxM -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/c-4-priv.pgp000064400000000000000000000036031046102023000177530ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4ED6 A531 BF62 51E7 C36C 4539 F1C5 CC27 B3D9 97F1 Comment: xVgEYAls1RYJKwYBBAHaRw8BAQdARhIuWWnoHYA8Rw6Jy3c0XmItFaNfy18Zviqk CXq4QxwAAP9nR+Eq6B3g75PGM9pQg7OQrAYOcMMuiDEuOA4WJ73l4xAYwsALBB8W CgB9BYJgCWzVAwsJBwkQ8cXMJ7PZl/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnQUW/QOPneUI/Xj2I1bdHCTST8GCMRJ/n7LmoPBVkUOED FQoIApsBAh4BFiEETtalMb9iUefDbEU58cXMJ7PZl/EAABzYAP9TD4Pj/yXjnOVx lljssHFkCya1s/7VsPb8ggBXlV9YCgD/eTgRieDvBqeMZcGXDD4EDuHQYKjJk5PB 03TOF6GGTAHNETxjLTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ 8cXMJ7PZl/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn KuryRsqEoSX67BLUJw6Uv2fv4gqEtAkXWnkVg59uM+wDFQoIApkBApsBAh4BFiEE TtalMb9iUefDbEU58cXMJ7PZl/EAAEMZAP9AFqK6FpIXJf88TVfe+ok7NzTiR5TC XQLHI5uWckQvuQEAnVNtQ5cegPw96AedAOCzxob2fltC4a9dmvLO58KcPQHHWARg CWzVFgkrBgEEAdpHDwEBB0AGhZoMo7t9OZTUE9cLQwN11ySFSAiVCqcJFjxsKipg vAAA/3eixg0Kfx5Fv+ByxkR1367W32qh0MxarZHPClABkg/7Ea7CwMIEGBYKATQF gmAJbNUJEPHFzCez2ZfxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ737p455btW7f2Flk6mQ31llzoYe6Ic2d3vHhe3JF5V+ApsCAh4BvqAE GRYKAG8FgmAJbNUJEJ6P2XvTv07jRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ2BdObTWyCKf0QjEtC7o3s/kaE+D2EYcKbyiyagUwbsgFiEE YD/sY2RI4KW50hdTno/Ze9O/TuMAAF0jAQCpwji5tHM7akian7Ovlzx9WuX/Nlp+ QFZscU+5VAh+egD+Nv/Ls7UoI0USj/2sx9tp9h1Iuglp5RE5yVn4pDHNAAsWIQRO 1qUxv2JR58NsRTnxxcwns9mX8QAA8BoBAO9LU3SjnGeA0CvZx6y/mxkS1dxNssrn r7nGs/O7LtTBAQCQ2oSyHPnDnKG4x7WDDsufHQCjfvEVR1vo0laHk2znBcddBGAJ bNUSCisGAQQBl1UBBQEBB0AFpjQgJcFpeQnNmZssAtHvc8Yg98uKf8dI/KRauJc7 WAMBCAkAAP9TLs+9jBI/wZny7Q2tJFPSrrcJJsWgbLwNAb1Wzgl2CA+8wsADBBgW CgB1BYJgCWzVCRDxxcwns9mX8UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcKummspgcNkGMqy/U6QddPED7eKhje5WEwYq/ruiNNvwKbDAIe ARYhBE7WpTG/YlHnw2xFOfHFzCez2ZfxAABRqQD9EfM4qD0ffYMWuT9I1pPFygLz WbhUpSxthpp/h8J9EssBAPD/4EN/cVyyQiTFE698/vHjbZNj93R9uEufjJAzvjUB =6346 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/c-5-priv.pgp000064400000000000000000000036031046102023000177540ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6C70 043E 1903 5BD5 A805 0044 EF10 3036 0325 BD13 Comment: xVgEYAls1RYJKwYBBAHaRw8BAQdANbwBc4gnBMm1qiJC64tyCA0UnmyVf2AZyfXU lVJCK9YAAQCymc1wAO3dM2k4UJ0nl7HlHLi3ODITe8aUJ5QECdPNCQ62wsALBB8W CgB9BYJgCWzVAwsJBwkQ7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnYxkWFcItwj2hCtJWdJlbCAGV9WmUvo0/t1riNaGUnM8D FQoIApsBAh4BFiEEbHAEPhkDW9WoBQBE7xAwNgMlvRMAAJ8PAQCIcikqlHf1zckG K1VveVy2fQj6O1SAasBanyomwXYQgAD+M6xSwCAPZYaHZ4GdzCGToS+MKdTmc43r lJZCrzZO9gLNETxjLTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ 7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn KTLzmkSh3R0poiG3qqPqQh0ZCD/03aOHof3kLkFdYGwDFQoIApkBApsBAh4BFiEE bHAEPhkDW9WoBQBE7xAwNgMlvRMAAKGWAP4tnkK9gNTKPEpDOd9a2/lJFcsW+jD6 eowhv6raVzJDSAD8DD4BeD2/Pv9LUSJbpJhNhawLqofb78iloTJJxDvzlwDHWARg CWzVFgkrBgEEAdpHDwEBB0B6s4oTRtGMz9xBeFbVVm/Jcz2DQav0uPiL0MB2soU1 2gAA/i6MVVwMTiYB6EXOrUS1mLRVNDDKnivX5faOGeCi4HKSEOLCwMIEGBYKATQF gmAJbNUJEO8QMDYDJb0TRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ0Fn3J3gdUjUAySwtseQJOA7nVjUousewLVpbBv0NNdwApsCAh4BvqAE GRYKAG8FgmAJbNUJEOF/rfhbRO3LRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ80tofgUsgIjLZ2rbyjc+4+8NKhowVShZIB29xWsdJe3FiEE CZwxSYQTqswPb//e4X+t+FtE7csAAN9OAP40aO3Itpwzup+s+ufbrKJkZBthAVs9 dNWtUdjwOfrMYgEA5RfUV+2nzuRVaD1EjqbrPA6K0BMZrx74bcY0xJA3oAcWIQRs cAQ+GQNb1agFAETvEDA2AyW9EwAA+1EA/RLIBTgPoHQK8/ctLefm0W0D+Fas4W2n CwCa/+FD/cKMAP9vBn0wtU53v5nCffFVDc0yfyKsaWGWGXfaTfFx+FlCBMddBGAJ bNUSCisGAQQBl1UBBQEBB0AEEEsRLXh39MNFQAPYTU9MwraqhnD1RUfsvs0VJvDh cgMBCAkAAP90Qd6tMH2GgXGFOsDBos8Hs8rP3my3bEC5Ki8UEK47qBDcwsADBBgW CgB1BYJgCWzVCRDvEDA2AyW9E0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmd3p9GzoUFm94go49yZB7HT8fBglzdb1hLctUPRF3v4EAKbDAIe ARYhBGxwBD4ZA1vVqAUARO8QMDYDJb0TAABVIQD/QGCbvrgNXd/EBK9oQ3qc/dMj 8d+MCwEpvJSi2yxviH8A/1a876hkr0KKHSnOCp824rKF4oGePv5yKTPLIEgWhnUK =wBwe -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/c-6-priv.pgp000064400000000000000000000036031046102023000177550ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 568C 3762 236F BC76 854B D4E6 3AC3 7BDE 31BE 65A1 Comment: xVgEYAls1RYJKwYBBAHaRw8BAQdARvQURrjFy56wNzN6l0t5wLlgA+wa11HoihFn xMeSnMkAAP94bVzW4U6eeWW1IWuGcpplKiTgXGKJ+JllYgHf81I9qxDTwsALBB8W CgB9BYJgCWzVAwsJBwkQOsN73jG+ZaFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJELf+D2MrHk+jwneu3gDzMJBKrtf/3s2ElBfMyaRuY8D FQoIApsBAh4BFiEEVow3YiNvvHaFS9TmOsN73jG+ZaEAAA2eAQCs9t0fKg88eSIF GX8q6T5xuJn+hSpOXQU/kokyAuzppAEAq1Jd7J6mA0oBbRGbagg7tPUxTUPbsFwW DsZwOYTPpwjNETxjLTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ OsN73jG+ZaFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn KHaFG+rmMV5aJ9wGZqCK+I+ttys4noBukoE+dRPjvooDFQoIApkBApsBAh4BFiEE Vow3YiNvvHaFS9TmOsN73jG+ZaEAAODnAQCT+/DxRr3R6BOwVlsQvcuk5pIRm3v/ 0Br9kNCDs+q8DAD7Byocd3eE9JBqHzg+CYp8PCnGx7p3WlFUTR/qzP6oyQDHWARg CWzVFgkrBgEEAdpHDwEBB0D5o/Y7bMIXw6DpoFsUHXd1pzO6EHBQYgZkyqSkmz2b iAAA/ihCVtiKa7Wqf8Hc8Gka5YleWvgJmSdo+3MLLhTgPNyPEQrCwMIEGBYKATQF gmAJbNUJEDrDe94xvmWhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZx32+R1haa43/mvNN6fhEJxOtFJT3CT8AqBQLyeNWmKtApsCAh4BvqAE GRYKAG8FgmAJbNUJEM7YJMj71/HsRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ5tW3l1uqv8isRP1WmOgApMlPW57cS50vClciTufwA+cFiEE BBLEtGhqpqI/5GHaztgkyPvX8ewAAOpiAQCMvnaPM75qKXJgHTJEhbtapJ5mCPzP L4tf1jC0RmjlugEA0Xn/2vKEwtKh4dVs6XrmPt0PEpFpeB59Lzb1lUsncgwWIQRW jDdiI2+8doVL1OY6w3veMb5loQAALqwA+wWnRkQEXez5dlV/5LmYIlJHnnZaRhMq YHYk7nRIeYT5AQCWnfmWSwx0oMkLOi2BaeOJBl1cUP1YlAjwQmJhP7iMCcddBGAJ bNUSCisGAQQBl1UBBQEBB0DOxv0M4qxp/wwXo1HhEPDTtmwGKm6UvJ+umGaRxKH4 AAMBCAkAAP91V81y13uuIkJNHMGJ1llil7U0kljRg3KlMKfcgXfn0BHpwsADBBgW CgB1BYJgCWzVCRA6w3veMb5loUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmclBQcxO4BFTBPltZ6IBLb04EuvZsksJwRsH9TlN1oDigKbDAIe ARYhBFaMN2Ijb7x2hUvU5jrDe94xvmWhAADtHQD/XbTfwQUllD4huD5/K7iQOne6 ohoNEIkFfhLGI9IxZIwA/jxk8azoDcKJYf8yI0xUrzEPdmPTDxK6j7g8etYBBCoK =CCUS -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/c-7-priv.pgp000064400000000000000000000036031046102023000177560ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 28B7 4AA7 C517 721C 39AC 8287 84AD DB07 A105 7E9D Comment: xVgEYAls1RYJKwYBBAHaRw8BAQdACalkl8XPlfB29BffkLCZY0c2WlNIBxV3O8m5 sh3K+f8AAP431evMF5j0dTuemCjApK8IMkfRHH7GXagryjrwv4bh9hJ3wsALBB8W CgB9BYJgCWzVAwsJBwkQhK3bB6EFfp1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnsBfzbl3yt40Pl171xIsTBbTGH4DIX4OT8yyjRTXdYjcD FQoIApsBAh4BFiEEKLdKp8UXchw5rIKHhK3bB6EFfp0AAPN6AQCaiDCU5sm0J4kL QjaLfbPtxmauK2s9TSZGdpHtgpHJmAEAhte1ktb+szTBTl1VsG4xieyj4xDa0Mdw hkPQ5C+T/QPNETxjLTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ hK3bB6EFfp1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn lnkeEfeursYYYxp41Ecj7gHogaN1YQaS6dqTwrRS1gUDFQoIApkBApsBAh4BFiEE KLdKp8UXchw5rIKHhK3bB6EFfp0AALKHAPsE92iLxAoYjdzWShVC38/6uW/CbXqb UnJBt+pEi0E6AQEA57Jx+fTvQ1m9p7DN7QfuzMVyxTtpr5uEOwOEqUuAjQPHWARg CWzVFgkrBgEEAdpHDwEBB0ByXqzm40NW4o6T6WMJ41h0L95LKbeijwf9g9FcQ6ym rAAA/1jIb7s9a0nyLXQKHwDmdaLrvwwf5bffaEAn4ZJH74snEG3CwMIEGBYKATQF gmAJbNUJEISt2wehBX6dRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ7AFc4EZvG/SQsgwiSKy8OFsDghnjLcMCERgBo+V4tA+ApsCAh4BvqAE GRYKAG8FgmAJbNUJEAwuHDyOB24yRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ++gEYrad2GTAUUsBKijO7NEHEavYrEsl6ST/l0gJJe3FiEE OmRC13rMtL2d0Rn9DC4cPI4HbjIAABzHAP9+JHl0c+KFMFdDgj+5m3One/wCxqmM cdiZE4rfAZMwYQD/c9YKreajgCoi8NcG2x/MSvAWrgH+jtnnjKguoSmMbgIWIQQo t0qnxRdyHDmsgoeErdsHoQV+nQAAHRwA/0u6OkCJz5XSiWEDDNk1I99ex91CJeoD mWmKOZ7NfpTbAP92s/8yVTiulMCQJPjbhpu0c3YuQG0LWYSPmU4/66nlBMddBGAJ bNUSCisGAQQBl1UBBQEBB0Cb5nnzvyt+A65pE3z884ESElczhu3VKgGmZJSBHTUW XQMBCAkAAP9Q8j7MOIL8n5G/k0krUIKytb0xRKqiuVo2so3x25bU+BNkwsADBBgW CgB1BYJgCWzVCRCErdsHoQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmedpDZFNYIBJaLr0s7rmORzHiYM2NbHC2FFtmpYoa9qCQKbDAIe ARYhBCi3SqfFF3IcOayCh4St2wehBX6dAABAagEAnLntLHf6tIEQjzxGCpT6m8kR c6LxRKVL4Hg1NSs5cm4BANaCjeORlg8EAg4pcQBnFYdxM31dae41Tve+A0SYWbQE =NM8Y -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/c-8-priv.pgp000064400000000000000000000036031046102023000177570ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0C60 D434 D513 C465 BC07 42AA DCC3 A274 10AE 2A3E Comment: xVgEYAls1RYJKwYBBAHaRw8BAQdAPROwHZZMlG9DLOyZ/d8Zbn26th6rtql647r/ vypxfWwAAQDUgoVtAYzk2n3LizvaN2mL1YAX+aUBL0PgVhZPCsqNRQ9lwsALBB8W CgB9BYJgCWzVAwsJBwkQ3MOidBCuKj5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnt8M8cKLewFSWq85K9zkGuGL9yUgaJauTpvsXEbkRBd4D FQoIApsBAh4BFiEEDGDUNNUTxGW8B0Kq3MOidBCuKj4AANCuAP4iZnAzKGKv7Rgh fizwGHl8EgLzcXUJEIazO0ZtEuvGhQEA+gQ3W1zMG+rWL1DloBdPfqyHwHB9FVSx 8BSUpw/Y7wzNETxjLThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ 3MOidBCuKj5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn cxggiS2JbUjxqkx6LH5GAV2icjhlJWTBaNiugyAYIj8DFQoIApkBApsBAh4BFiEE DGDUNNUTxGW8B0Kq3MOidBCuKj4AAKhMAP9MUlhPFpF5jEFE5dkkC3NNUv/0B77z o0wlRho8cpIhdQEAuh2U6uPQ0AuHjMIddy6CcAQzVDqNWW1xQgfyGgosOwPHWARg CWzVFgkrBgEEAdpHDwEBB0AADijxSlX5P0aOq9ZqYieK65H+bNUkrbIw90RE33cd qgAA/0bO9SFgRtSaZCAQB6jmc4Gx9v7VNedjAygxf2cNgj/EECfCwMIEGBYKATQF gmAJbNUJENzDonQQrio+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ7bCc7/8S4UXSv/nOoAATNfbWr0iti6trq1hVYbNDbHLApsCAh4BvqAE GRYKAG8FgmAJbNUJELCIDht6NWk2RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ6kBYSh11+BV+xB1/q7sc88E9PwPcRFHFq0jT9wkPM+YFiEE iDV6oXvDt7ZuKZ/TsIgOG3o1aTYAAKeAAP9HlQfsAYeelgVJhHC1oXee93PyvZNN TC8+aro2pBXHPwD/emr/aShsIeXvweAwonjb7i2Ox3qxFFOogO3QuxbtbgQWIQQM YNQ01RPEZbwHQqrcw6J0EK4qPgAAT2sA/1l9HE3QE5JOo56Cjmb3P7xQB/j4uH8C xK7Q+xdxGy6dAQD0D/28NPFs4amcObc5+JlXeZ0lMyJdCz6OMd8tgnBiDsddBGAJ bNUSCisGAQQBl1UBBQEBB0A2mr65/tjHxF4SJFzojlIR0hEwkai51pEGNihidXic YQMBCAkAAP9P2P6Kzl5mhYYHMs8gvmJ6gHVUIrDL+IIN/3/kme9CABGmwsADBBgW CgB1BYJgCWzVCRDcw6J0EK4qPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmes5yVOZI0SiZVxdM/hvutxvr/TGkLewxKSBBuPzW4/BAKbDAIe ARYhBAxg1DTVE8RlvAdCqtzDonQQrio+AACvHwD6A3Rs1czW1ohXljNCZIMCUirX 375oU8Rf7MNqIoBSw7kA/0OKV8xcmuIKpnD8p6SLPJAYVvZG6MKVJttntUO9k9ME =3+oX -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/c-9-priv.pgp000064400000000000000000000036031046102023000177600ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B42A FD30 BB1B DD2E B9EB BDB8 D45E E022 6D5D F71E Comment: xVgEYAls1RYJKwYBBAHaRw8BAQdAl7MZoNItkrNkUv7BasN3Gx/IudpyA0sTka4A 6TDABTQAAQDS7VsVxYVFC12fhcN8wTsHnFkylcCWZ5ED3m4gBpZIHw4JwsALBB8W CgB9BYJgCWzVAwsJBwkQ1F7gIm1d9x5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn4X8yy7BA6KTSd8HEKbwFaiwHN8HKg7zY27/VUlWLiDUD FQoIApsBAh4BFiEEtCr9MLsb3S6567241F7gIm1d9x4AAFMWAQCCGFfUWP1DgpuO RzRYfGkeC9GcYOoT6O/dp6ad/Za38gD/Q28IwujpOX75uoH8jrnj9lmR2zfDkdz7 djM++HVQ+wTNETxjLTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ 1F7gIm1d9x5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn gTbD3+odpJSRGkI58S5LDyUb+MuUmQ7fgsT7nqTU3lgDFQoIApkBApsBAh4BFiEE tCr9MLsb3S6567241F7gIm1d9x4AAKO9AP4iZ4Ga3Qybx6MAeI93ioJCa7Z8fat2 YSAS8hKl4uFPTwD/YjNNPljPkIPxoAHMrR4sTml48hS00TqAgI4jnh6aIwXHWARg CWzVFgkrBgEEAdpHDwEBB0C9KcOQbBizDz1rr4KJc+wagyvSWhbzb0IpwmsMJzsN 2wABAK7snMDHMI1x4Twcp7udfqfnek/1WOHzEIbmEf7EU6xXEr/CwMIEGBYKATQF gmAJbNUJENRe4CJtXfceRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ/U6L9X0enoPGPEGv9D4AavNFIphTGRR1YWq3syrUvZLApsCAh4BvqAE GRYKAG8FgmAJbNUJEPxhvPdp+SEZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ+UtIA8NF9M26AiQKg/pYfv8syAP9rrWQ9s/hfP+sAqQFiEE WDGwMch4TmmgEvlK/GG892n5IRkAAK2QAQCqGgq9keieHqZI5646cWQfcjyPEgen 0/CmysEQk0KEAQD/RWh5lMq/q9pXVhwZ8hfagYl9/BhyD8RY5Vs5w03KjQoWIQS0 Kv0wuxvdLrnrvbjUXuAibV33HgAAS7cA/0LHHpHP+FmOTgx5QxpNEWZugoW8U+nn DrxrdFPgQbwwAPwITNNStW7J2Ru5HuJhm5tS3iyc/A7adtGPK3xUSfr+BsddBGAJ bNUSCisGAQQBl1UBBQEBB0CrwEf9B3s/HYaIooPdtShSDnXJsUYRtBRO0Tn2GSGb TAMBCAkAAP9muv6G3YDfVjPqrv3TbTF6LzoPg9fW32yfhOu17KOE+BSpwsADBBgW CgB1BYJgCWzVCRDUXuAibV33HkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmccTBwaPFffb3F/q3KE33XlRj1ZlOW53XithckzCupsoAKbDAIe ARYhBLQq/TC7G90uueu9uNRe4CJtXfceAAB9lQD/aJd49HjjtsmRkfG5lqAzmC8v 6XZ6oz/YWWkyd4CkAkYBALROqL1VYPWZIoLq76wVURIOhBQ20SvlSw915j4sVlIN =Ni64 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/d-0-priv.pgp000064400000000000000000000036031046102023000177500ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: C24C C091 02D2 2E38 E839 3C55 1669 8256 1E14 0C03 Comment: xVgEYAls5xYJKwYBBAHaRw8BAQdAAu5BHXZ6iACag7ao2BL83b0GXUU3OiXAbThi jHwy9QAAAQDJ/SbUMSfdUjtuAxe0QROKg7Xy1rdkr/ZyB4UYPRuNUg6qwsALBB8W CgB9BYJgCWznAwsJBwkQFmmCVh4UDANHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnwIcR0My/hHm29jhsF/XuOEBPBBd6Vn6d308ARAHU0dUD FQoIApsBAh4BFiEEwkzAkQLSLjjoOTxVFmmCVh4UDAMAABTEAQDBnnlUEUgW7h7d ECAxrtU/4rnKTixOGcHTXarZma2nUwD/a91TKmjrNVJH7tdPB4hZjk5HYaw5g/Vs Ng1Sufeg/wTNETxkLTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ FmmCVh4UDANHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn HkoscQW2dZi4MwF6HEOY6iHCk0sET1sR0s11cnVXproDFQoIApkBApsBAh4BFiEE wkzAkQLSLjjoOTxVFmmCVh4UDAMAABA6AP0e4RaR8dpEkUBlPOknoBaWcilztjsK MGtEQzgVjGCczgEA6L+Oc0TVOkn6fDGgJyWvqth/ZPj/MnnQe+XiPfstAQ/HWARg CWznFgkrBgEEAdpHDwEBB0BV13wIaztDLWbOkmMnXfitIVZjxnJUecSs4zeF9oaY SQABAPB068HSWHbtJ0wO8mhnL2HFVphp4AXLGl+CDwmj14kHD1nCwMIEGBYKATQF gmAJbOcJEBZpglYeFAwDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ//giGue2VtnbJzT2dAdw3D3KjnT2pci2mjmqykCOllkApsCAh4BvqAE GRYKAG8FgmAJbOcJECVvV9cQomnJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ2HDXbb4y+SHbi3W4NTQzjlu5U6roXQJQs7GXEGnduOYFiEE KFqu55C6CgMiJhXeJW9X1xCiackAAMTxAQD1tyVWBqZJUP0v2i/Ty19aO5IXNrPP tkCt/PKFEMWHwQEA63NWUGH8Sjais0ykYyQiR6Sesj32OFVEyvwAWhUaLgYWIQTC TMCRAtIuOOg5PFUWaYJWHhQMAwAARegBAPXY7icasAT9hN2MPchLE8xPQj5YYVeH T5mvXC5ujX/DAP98mIonSh8o613DELRNWB30hvVl5JzJsSi4YAQXugo2CMddBGAJ bOcSCisGAQQBl1UBBQEBB0Dt7oXDOEwwiual+apfOeZfZhfCoKQiMHYqNUgiMWCh JgMBCAkAAP9wMaErIxLc5uKU3s8+9AvirunaC+eb6Z1//mJuC857mBNiwsADBBgW CgB1BYJgCWznCRAWaYJWHhQMA0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfUIGzIohLbdSztHe8tfHA+nTSsNTy7IlVEyjL7546SigKbDAIe ARYhBMJMwJEC0i446Dk8VRZpglYeFAwDAACfLAD/UUJ7FbvgDCs0j73BhNXWBC0A y9OFb9Cf4wrkLB5SUqEBAJS84+FuMY8B7FbwXJUOElwJ77dYfcP+M4G+HlKusz4L =fsnJ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/d-1-priv.pgp000064400000000000000000000036031046102023000177510ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7A80 DB53 30B7 D900 D5BD 1F82 EAD7 2FF7 9140 78B2 Comment: xVgEYAls5xYJKwYBBAHaRw8BAQdAhhYF44/4ViGN+qUq86mr4N1XCRTbYkdVOC+v pIQqrhkAAQDEcEnP2CBwuRD7n/Z+GkPS+wgJOf58/PchOIwS8vHdsBHUwsALBB8W CgB9BYJgCWznAwsJBwkQ6tcv95FAeLJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnpzKWiA9oVf+IgeuUdgJZYfaaEVnF1H7XCH643nNb2DkD FQoIApsBAh4BFiEEeoDbUzC32QDVvR+C6tcv95FAeLIAAJPYAQD67UXb+CZO6IsJ x18UN+by6s+D2wCI2RQ7dCGp+7wlFwEAuVUcSdQtHv9SrPAy0DANttcbdU5+x5NO 0Sy4ssaSRgXNETxkLTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ 6tcv95FAeLJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 1HbfSSviIckx1jh0jVAIyeSfLwcuKhtBC6he43ImPUsDFQoIApkBApsBAh4BFiEE eoDbUzC32QDVvR+C6tcv95FAeLIAACxXAQD1AfakL+4wvHzIcJLzLe34RpzxmLtE r2FtQc1tsrLjOwEA298VsUz5hRSnYe0QINwZHwZB9n+kNzxng0aKElbhTQnHWARg CWznFgkrBgEEAdpHDwEBB0CkIZ+h90U0P0+KCR4Q/d3l4RMpkli783GFXwcWwoUN gwABAIFPJfBCgARlZEmm3yDo9kvZ3ebKnL45+mRGTO9XMqQkELXCwMIEGBYKATQF gmAJbOcJEOrXL/eRQHiyRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ1Zoer2JeRBhSSb1ZMX8kOzrARuB5y41s/TPWx2JVC8yApsCAh4BvqAE GRYKAG8FgmAJbOcJEOMw4nqnO8bvRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ362uGnfwZNGky4NchMx5Pt+72looDApYVOPcb2xz/+oFiEE b+/9Zx4Xg+QlAMPR4zDieqc7xu8AAEDtAPoD4OHO8G9jnjxjkjSm+QQanuRr9370 NGfNJbZ9MSs+PQD/ddHmUu7aVWsfsuIcWnBm7s9QZ+3atDQJ5yGPhc0iDwgWIQR6 gNtTMLfZANW9H4Lq1y/3kUB4sgAAOOAA/3h8mIO2RnoxUmFcELZf4wDMNwZn0LBQ CESwlTD/GzZZAP4gSyGpByUjt1X/zcRkg3ghab/Ni0i+hII6JHucJYvuAsddBGAJ bOcSCisGAQQBl1UBBQEBB0D+4X1dRImltqFzfpVlCucotOPEHlP/BCllA6NAqD2M FQMBCAkAAP9Jnqz4oBR/sePa3krdHZBfxdpD9YjSh2dpWrtJUKerUBMUwsADBBgW CgB1BYJgCWznCRDq1y/3kUB4skcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfe1tW6oTI/u3WqfGzFznzR9ldyW1gnuwmqdwBKb/GsQwKbDAIe ARYhBHqA21Mwt9kA1b0fgurXL/eRQHiyAAB4HgEA/mIePLscm40o3Z5l1pWBPUv4 vpk6sXepjPr5BpLu4PwA/0UD2gP/bFffO5M7goPGWOSsWbHkl9cyEJHTtHVRI/wB =a72X -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/d-2-priv.pgp000064400000000000000000000036031046102023000177520ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 16E1 07A0 6886 C6C1 E1A4 47C7 EE47 730E 5D1D 7390 Comment: xVgEYAls5xYJKwYBBAHaRw8BAQdABYUyuy0voSpJMgn6sy2NonCbjUqAgh8qaUmp nmWRpqUAAQCvXLRzPAlh3mFoAwcw4zPegPEg2wtTXNj70xBOtp7JQw84wsALBB8W CgB9BYJgCWznAwsJBwkQ7kdzDl0dc5BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnS0OcK/5pCXWeU6Rp5cGYb3cW5Rttjfia1Rcol5Lx9uQD FQoIApsBAh4BFiEEFuEHoGiGxsHhpEfH7kdzDl0dc5AAAKm3AP469fLfkfjbpc7y YjCkrrD7W/12eYo9hy9Oube+cUe8+wEAw3uBdMVsnRKhGs6SpipGGGvDQ1RzDkH3 iVIi/3CIYwTNETxkLTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ 7kdzDl0dc5BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 1XYdoasxLxGq7ZXhv6uVNdbIY8G2ADIphEFzUSliVqIDFQoIApkBApsBAh4BFiEE FuEHoGiGxsHhpEfH7kdzDl0dc5AAAB5xAQDyuM5HSLVL7zoPzcvRDyAV23oY7BOz oVdNiEnXqDWfOQD/bAh9l7yhrEsbARJcHFWhqZJFZBY6dht7xMmkoY4VFw7HWARg CWznFgkrBgEEAdpHDwEBB0DqyEy70VtFuQPlhNiE253biIlLEDbYaddMLNVMoyll FQABAIHOHL+AUrcA1wrQmXRBymyDgLD2uZn3CTaSIm66WqbKEMDCwMIEGBYKATQF gmAJbOcJEO5Hcw5dHXOQRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ1oNNUJM8abeuuSRV4Hfy77pB6ESgebRVvqvsoO4DAqtApsCAh4BvqAE GRYKAG8FgmAJbOcJEJGwmBkzsOFSRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ+xTGS7sdWS2OisURBHHqf+BT7+eEv0zD6Wb4I/TW9ytFiEE AlbeEcuk9k9XLR2bkbCYGTOw4VIAAHESAQCU9lUIdrDlPJ6RUmGLbMheOWKzU1Gx y9R/dcYsP31EFQEAzh4pBAKm6osPmObpuT1iSoa1N36T9dOw091Q3z9I7ggWIQQW 4QegaIbGweGkR8fuR3MOXR1zkAAAlUYBAIKZ1B2UPqkjtoi50/ws3U+ovOdVMmKi HQ1tpxEbsmZ4AQDYKyezjVfg+U7rr/X0BSyo9lEmMgqVusBGZcJaBD1LDcddBGAJ bOcSCisGAQQBl1UBBQEBB0DheE2oQY5c4cQVk7/p8K9fjyrSF3POK6zHTT46dWoP KAMBCAkAAP9kR8lvte/cT9IBRaEuyqFRgwf8mU8RiZ7QsMXAOY5++BI8wsADBBgW CgB1BYJgCWznCRDuR3MOXR1zkEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdFWFgmz5IS55WDeQH87A944+r36nFvdziLLrQtMtpgmAKbDAIe ARYhBBbhB6BohsbB4aRHx+5Hcw5dHXOQAABozQD9Hqviytua2rC+Ks4SCBz39zD1 A7TFCz8eDtnXp+2PRCoA/3yFvHmpH5fm+SnwP79ud0sADOFxYCDE6vqAIG0Sd4cP =BXFj -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/d-3-priv.pgp000064400000000000000000000036031046102023000177530ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A371 E1A0 8AEE 1955 4BD8 F6FE F350 9900 7EFD D83E Comment: xVgEYAls5xYJKwYBBAHaRw8BAQdAAQxiQwKdwQQTQwZdRYZcFsK7TohmjptQaaKJ tO6mfSEAAP4miEgPlwFJiXHx13fpzktnzYlcOz9ElRv4Ud04r/FLvRCswsALBB8W CgB9BYJgCWznAwsJBwkQ81CZAH792D5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnWiCVmBfj4eIBPqnzkuJxA4EFvuapoVOczy69zQepU9UD FQoIApsBAh4BFiEEo3HhoIruGVVL2Pb+81CZAH792D4AAB2/AP4mA79WtW3ekPJ/ W/4PngeRElgPBdrPHew64IWQr5Ry8AEA47CMj4OM6SuMjSNnBesDFB7zB/X6hmhV OiOETXIQbgPNETxkLTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ 81CZAH792D5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn c781Umuc4iCNYBjUMMau82OagNpSiq/2E/O3smtvg4YDFQoIApkBApsBAh4BFiEE o3HhoIruGVVL2Pb+81CZAH792D4AANWYAQCe1uwGrhjt2WCxsDTDBxvSlF2w9qIC JASFY7CgDYZDiwD7BjpBIdGULhnlelJD76yd+vgBAQcJk1xypbSfMMihQgzHWARg CWznFgkrBgEEAdpHDwEBB0Cqh8U8UxS4VbuuARSH8Q0A2L5dxlhs8ImQmqahcsEu ZQABAKY6eVWffMUlldRZqp40x4WnJXU7paTed8DfnUvFNQl3EFnCwMIEGBYKATQF gmAJbOcJEPNQmQB+/dg+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZy28Xt7Rgfkh42wu2Z1f6PX7UbyyhjYMc90BeB2eWi8WApsCAh4BvqAE GRYKAG8FgmAJbOcJEPbHlKcZvrx0RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZwQWLcIjK2E1CHkBJ+sV7q/lR4AvjLT+0DxueEHfxmk1FiEE grqE9h48Ut42MERL9seUpxm+vHQAAI/nAQC8PgSSLLdST+whytKnJ5z8KQpZJhnp iBdq52hBSTO2GgD8D/h2M0yuSr+3iwocQfHK4AR8a1jeyK9BwajKdlr1RQcWIQSj ceGgiu4ZVUvY9v7zUJkAfv3YPgAAAdYBAM13Ap6vABo1fCOv/SFGeVxoSc3ye04E g6SO9Pxa5yxTAQC4bMJ1QD5HwAcUYo6ignS7iUNn2T6a9660q4XN2vfmD8ddBGAJ bOcSCisGAQQBl1UBBQEBB0D0PDjB3NOlgf5H77wWXukKbqCG23dr6RUYEsicc3O2 BAMBCAkAAP9oXcbqwnBI6pHKoLxKNDJFA0TRO2hHWT/ZZYd+BjG0mA/kwsADBBgW CgB1BYJgCWznCRDzUJkAfv3YPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdfZxk8Wk/hWB6MaaV8VsFxRTPpDZgnlnZ3AMtUr1rBtQKbDAIe ARYhBKNx4aCK7hlVS9j2/vNQmQB+/dg+AABG0gD+KCeUOpRhvMHbGqvRjE1TXHCs yueoHe6Wjo5svCe3F4cA/0jdhcq3juVCybY5/RyKBYEJK5I6OLthFCmDmrZ0PgMP =LR9l -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/d-4-priv.pgp000064400000000000000000000036031046102023000177540ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 13C8 B8DC 2020 9CB0 E155 64E1 FD9D 8B01 5745 020B Comment: xVgEYAls5xYJKwYBBAHaRw8BAQdAs79LvNns2Y2vdZ0FnRaTfnHEAqFoRXTJ1/GJ /Bgcqj8AAQCTRE5LLl0aTS0mDsoLVGHl6QOpJbi8JvLmVLy2B+Yr9A4xwsALBB8W CgB9BYJgCWznAwsJBwkQ/Z2LAVdFAgtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnKXTTXV5/vpiMXh5aMKXt4mRyOKVLlL72aFpBZl90TF4D FQoIApsBAh4BFiEEE8i43CAgnLDhVWTh/Z2LAVdFAgsAAJpqAQDwBY3ZRLbiADZq HI3AKb8PJEoiHLMg66bia9LS+AUSKgEA0QXZ5IOPXYXi00GnBJcfoKaEUEhXSWMz SytoaJ1Ibg3NETxkLTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ /Z2LAVdFAgtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 5MkXGhBYMRJ5swBYW70G/FctGl33IkpAJXy0FlD6Th4DFQoIApkBApsBAh4BFiEE E8i43CAgnLDhVWTh/Z2LAVdFAgsAAGNzAP9jBHGmAZfDTEE0C/Su67WGtNviZjZs YkSEXutG7l9/3AD/TllBEGHVLwBWKVIPLxmDQpT6+wn8kkWng9o0c4hW2A3HWARg CWznFgkrBgEEAdpHDwEBB0AoZTGLsmN4xKDdU/KblS71NHTr16txrOmztUadOyiz ogABALerRqcVV+p41gUtjAxj2depCPL6jPbkZFhUqIU+I0AkD9bCwMIEGBYKATQF gmAJbOcJEP2diwFXRQILRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ0TeiRhP0Zq1PDgWcOYiNtlRqTzNfv9H4TQOOi50883NApsCAh4BvqAE GRYKAG8FgmAJbOcJELU5tz1g4nFfRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ4IV7vFZGGAbqZd8lsD8Bltf9N4RuKM25j16YJkc/TiUFiEE xEpKGFFwQqnG2+t3tTm3PWDicV8AAGVuAP4vrYsrn47LIoj6Aoj/9weUKnDANYOA 2n6hEjf9mEHKDwEAwdEjrQYSICNJW9tklmhk6mFq35QDlmBBqOSFky4CdQcWIQQT yLjcICCcsOFVZOH9nYsBV0UCCwAArVAA/RY0N1lItJcDQ9P/vLtnNEEirhaec/ig 0a0zEtwMNK0XAQD5rozxqL1hXKBws/Qw0JzwKm+wcGlKW31OcY+FkBNHB8ddBGAJ bOcSCisGAQQBl1UBBQEBB0C7+/ki8lNDN9u4JSlDRLSMbIJhgMgJOK54enZBq+th MAMBCAkAAP94RnyE/GU94nWDOfdK0b69PaP8dEPw19JM9Eg1+YELYBLJwsADBBgW CgB1BYJgCWznCRD9nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdcGNGOtho9QGPSB6b416+iNiBq9ebf/PK98/BCA4kxmAKbDAIe ARYhBBPIuNwgIJyw4VVk4f2diwFXRQILAAD2oAD8Ct+xEGn4vkxQWvcxn9r0dJd5 agFp239HXbM5GjXboEcBAP0WDh9jB4rLbb75dakajSC2gFWoclLq5NXpRM9qYcUA =NNqs -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/d-5-priv.pgp000064400000000000000000000036031046102023000177550ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CF70 1E77 B79F EBDE DF88 B455 58A3 8231 7F54 D7C5 Comment: xVgEYAls5xYJKwYBBAHaRw8BAQdA110U4zu4EKjTAzPWLSDiXoT/5PoDCX+KZhIl ugPqIS0AAP9M9lnr41lW1thfucVaXQkiqxVvOtBwiOrKdYjZVHBKThGbwsALBB8W CgB9BYJgCWznAwsJBwkQWKOCMX9U18VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JntreUuBSbdNohIBa0SBfunl+ynDBtzVWZNBEKWx3dzokD FQoIApsBAh4BFiEEz3Aed7ef697fiLRVWKOCMX9U18UAAMj4AQDHg7Va0yOC0M/H tsyU3Kz+S75ravDRsrg63dD6dcopDAEAsqnmUvg5yZcbJ2qzOv7szq5Lf/McjSa3 mwKeuw485wvNETxkLTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ WKOCMX9U18VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn CEiEiyflj2EyFvs5zo9Zpykj+2fynJ6KV7CdUbkxxV0DFQoIApkBApsBAh4BFiEE z3Aed7ef697fiLRVWKOCMX9U18UAAKvSAQDHAPuETg6tEwCIN1YXZzRPIdSUrmo1 VsUsH9i7BCUM/wEA3IK0NiA0YwRRaO8/1Y96YnDfeSuFA3cq6NaMWfmUGgXHWARg CWznFgkrBgEEAdpHDwEBB0CFcZHV3mwFznHkFkRIwZL/Bdd+dzV7a/et7AjQ7fVw 0QABAMhbC+JnrdyTJ8PmZHLPgIiTnM+4pic8ixLZGh7f4QwBEEvCwMIEGBYKATQF gmAJbOcJEFijgjF/VNfFRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ7WTlf3/tPkOqeuaEsYiV/f7Dmlgz1Prb9xPE+JzNFgxApsCAh4BvqAE GRYKAG8FgmAJbOcJEAyToRdtVbJURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ4LNLy1k6ys/x4Ow9G48Yz3onhE5O7tl7AB/ZmmEzbisFiEE LdIf8dWXWOIZvif4DJOhF21VslQAADzLAQD9FYRjTsv12pvh7gTDA0Cx/VTev+2w LoUvdLtd4zkc9QD7BfALoRLtHEzS1/3Cg9LNeC23dMJrZVZvbDCADvbD8AYWIQTP cB53t5/r3t+ItFVYo4Ixf1TXxQAAfMMBAJFTpud0giTx3pTIX4rKDS54059N64fK lNE9EL9KXwJTAP4uMzshlelBZ058+DJDoTv8d4WNN+IKcBGe2REgoiR8AcddBGAJ bOcSCisGAQQBl1UBBQEBB0AGUzWJgUZmOtGp75tPxHCWgwTXOkHohmAnoKzb/nOs PQMBCAkAAP93XknoDL5Dk8qA0n5kkncBMr8WPRhKV+xVtsw8Zb3bsBBWwsADBBgW CgB1BYJgCWznCRBYo4Ixf1TXxUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdmGn2LJRo67MeMJ1nqBGOKqX15jcuu3I657/FSGkzXggKbDAIe ARYhBM9wHne3n+ve34i0VVijgjF/VNfFAAB10wEA1HnYCpvMurKEYtA+rf1oxpcM uiKkfOI9Z0SeB7DsQfIA/09xFe5QFbKuO6988IwO7xWB9zGBVKkC4c7cUO3PlQYD =cYEX -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/d-6-priv.pgp000064400000000000000000000036031046102023000177560ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A35B D3AE A723 62F5 C3A6 1090 A54D 5D63 B0BF C67B Comment: xVgEYAls5xYJKwYBBAHaRw8BAQdAkIO/U5or8DtRKot2/I67o8g+QAsskVvl8RsF aVOcZm0AAQD0lf8poM+43QQ6AotBneTnzBKrmgFx9iprzdDizX05URGdwsALBB8W CgB9BYJgCWznAwsJBwkQpU1dY7C/xntHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnFrY+caXBviBMMstl8IM1xrrq5Fcxc3aKW/yUJ1bjED4D FQoIApsBAh4BFiEEo1vTrqcjYvXDphCQpU1dY7C/xnsAAPWVAP9F3x27db2jxA4j sKRWMjf+xP2HIOrkxw6qpibteEiGjgEA2MSOu3RuEMvbiQM5mW6dK7pGNVGWTXMx TPPWdRByIgTNETxkLTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ pU1dY7C/xntHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn TOegMDWA6xFT3IZvvc6OTZXMdhES+4tGhc6q349PN9gDFQoIApkBApsBAh4BFiEE o1vTrqcjYvXDphCQpU1dY7C/xnsAAFAdAQDuNWimPZ8si78rbfrU7zmKpeq+yYo1 XYgUP0euncO1dQD/YaPdW7UlDMNl6ttUjSzCEdJNCLFhbuSkgrx57CkWJwHHWARg CWznFgkrBgEEAdpHDwEBB0BKgYlCQj5B9j0t++Q6FcNMQAuouEteSZXTYnAR8Fbv IgABAIAnQy3wq+lF42wOkgiEoLQrjpIUqvsFHqNJ5xu50ZRnD0rCwMIEGBYKATQF gmAJbOcJEKVNXWOwv8Z7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ1RqwjsWyUkUgxmp4Ysv/siMj/VZ7yl4EKzkNoB36yUdApsCAh4BvqAE GRYKAG8FgmAJbOcJEDrH+aAW5M72RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZzsXd7j6f17i3qK4vhA/DbRl+INs+wSnYZyB1vZV12zaFiEE 41zoFHd0wW2TeQ5QOsf5oBbkzvYAAH+2AP9fIxfKBa7b1WtCgRp5CGN/Cj9qmA70 kUdAzPKGa9mbSwEArzHpbxPU+a/7SIx8kjhjESinabNsTaIGCkgPVcEOewUWIQSj W9OupyNi9cOmEJClTV1jsL/GewAAeuwBAMTkmvXlyT1rBZOUbgyf75xtWXlWgBRw 6siSOIJ8rAmyAQDpq+AjaiHqBz3MMA1Q1W/xJMwSy8eTAYMJI/0ayOyNDMddBGAJ bOcSCisGAQQBl1UBBQEBB0C/pS4CjKRDY7HL2DlNqw8NLz6r5E3dXl1C3yQm2023 FQMBCAkAAP9saW6RxlikzIOWxCox77pTNHB6n6Va0gctnb2zbgyf0BFNwsADBBgW CgB1BYJgCWznCRClTV1jsL/Ge0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdInW0/j4Djo/KXpblMghF1ynWPMBK5f3F+FLl5dFg9FwKbDAIe ARYhBKNb066nI2L1w6YQkKVNXWOwv8Z7AACCagEA9LR/ORZ+qSHX1uy6/gx6FgQU E5UFf7cggENO3lFLddYA/ioswPXtWmHlpqBsiSxdoySSdIhLiYmObi7poJTEONAL =2kWr -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/d-7-priv.pgp000064400000000000000000000036031046102023000177570ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: F302 B83E 90CD 6AC3 E3C5 9D3B 2287 7A12 8B6F AB31 Comment: xVgEYAls5xYJKwYBBAHaRw8BAQdAV/nuBmRuDstj0+tImJyPshE890+jAX/pn9gi FftLHvAAAP9/6ujpu/axTcgJ49lAW29rnRN1k44e9TdJtaE3U1ifLhHIwsALBB8W CgB9BYJgCWznAwsJBwkQIod6EotvqzFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JncMs2dE53PUtRA7WEsbukqQtBZHhu49IiPrFPJ6IpCOED FQoIApsBAh4BFiEE8wK4PpDNasPjxZ07Iod6EotvqzEAABkXAPwICWPUzSbjElJR qiiH1Y2cmYkEJydrLJQ2yCya0leHxAEAlu1wq9xf0et9X73HTjSc5Zw3Tfru83W3 IUN7YkEY9ALNETxkLTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ Iod6EotvqzFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn o4xg0CrkPkAMrVw4GtOhFGGVS+22tvE1vme6PhUuHSQDFQoIApkBApsBAh4BFiEE 8wK4PpDNasPjxZ07Iod6EotvqzEAAIaJAP42lqywkpF6kCE7ib8XJgVo5aqQo1dJ P8cJRTPLvGnWEwD/XjgoT3YrKOhKaBvJjkyusGbf80mWI4GHohaPSsTjGgnHWARg CWznFgkrBgEEAdpHDwEBB0DP7P9LB7JnVVj1kfw8ZAKgMmpUxTJag70mhDAU8LB7 DgABAKvR6uU9/x1Bp1w30rnSwS4QlWIvEk7yM4avNwZIIUNADoXCwMIEGBYKATQF gmAJbOcJECKHehKLb6sxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ8noG6/8RzwZGz89WeQJLMVwDA6xOJkoWLEaPUYyEZjhApsCAh4BvqAE GRYKAG8FgmAJbOcJEFxFb25JepXaRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7lxuiFeb6speDOFZ5FqwCRTuXZpAs73tHDBJGwMpDLdFiEE UGfPohKEs2JgAzzFXEVvbkl6ldoAAAraAQCtz02ewFHzkdjVj6TCOys11aPXk3ki oBWkQDVMnPMSOAD/eRO1LNrBAtro8UWbE5fCS/zznU0+CfnlKugS6F9r1QgWIQTz Arg+kM1qw+PFnTsih3oSi2+rMQAAvQIBANm0RaZ4ldcMdnw4j9c6VnDp51JHMyY2 kgDk5ZZSesLVAP0TpKJ4EHSmR8EZUElfDQoDoDZBXlk1TJXh7kkS9UwhA8ddBGAJ bOcSCisGAQQBl1UBBQEBB0DP6z+5WPUH0kcID4u7bGzG0YQcLP529R+kaTqUrUqF dwMBCAkAAP9S5v2mPmex00C0EfZgwAYrVtZ6lJiuifmJ4P+a5Fq10BQWwsADBBgW CgB1BYJgCWznCRAih3oSi2+rMUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmf3Zb66BTmFO4sSunmtEgI3zmaFEyjDGSmQ/zQnJomp0AKbDAIe ARYhBPMCuD6QzWrD48WdOyKHehKLb6sxAADg9gEA6cO4hKD+huUdsrGTb6nlaGjO Q6CL8Q+xQ+xjdIB4Ag4A/igT6a9tqz+Vlg5PFr6AKrInQiGQLRKUNNty8707ndwM =Gbc+ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/d-8-priv.pgp000064400000000000000000000036031046102023000177600ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BE6C 5721 EDCB A817 4C59 D996 D6E8 65A3 B88F 8881 Comment: xVgEYAls5xYJKwYBBAHaRw8BAQdAzWXjDvPfYT+Kh9IBC3OzQeAhyj/8XrYqYnNV qFtt+KcAAQCPPxeAfiFUhOWPBkh8syu8B8IB4zCJuSTOkm5S4Aojqw3QwsALBB8W CgB9BYJgCWznAwsJBwkQ1uhlo7iPiIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnCK5/VliwgUD6sw1tb2ruEDkbSPShkX1SvaqIzLZUxaMD FQoIApsBAh4BFiEEvmxXIe3LqBdMWdmW1uhlo7iPiIEAANYBAP92TLqga9jS0XNO n2HZIXfhJ2J1904K79nluoKWP78LrgD9Gu4UdJ7ZDCqNb/SyWbfNL8h6PU1Vnuym 6VsUqKMCLA/NETxkLThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ 1uhlo7iPiIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 49/yCgU/+PwBNgDjuYrtoadrQWtsIGv6otEj1LAXmRkDFQoIApkBApsBAh4BFiEE vmxXIe3LqBdMWdmW1uhlo7iPiIEAAC3OAQCH5H/avCVX4NCEixPdpkzgPzQNjucH Thh6P/ucuWCsIQEAxYKbIG3Dwe3UoqadVVx86SPv7Z2ZsI4VquKezL6YlAXHWARg CWznFgkrBgEEAdpHDwEBB0AHnvSC3LMsNwacQrBuzKHowBlTdn+Wer/91If2jZOr 8QAA/0aJZiXCM6DW2kANHP8wz7EOkVjysNEKbccBqm6uvrFtEQHCwMIEGBYKATQF gmAJbOcJENboZaO4j4iBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZyp3NBKHv6nOZIfoRo5LRhe5q3015ddgbiq1B8l9vPjYApsCAh4BvqAE GRYKAG8FgmAJbOcJELb7T8OZV7w+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZxGvsmFv2O4fwRmELdlARLdMFfJulMZvCoGaeQUQjTL2FiEE 404Nf0SmvoQK24DBtvtPw5lXvD4AAFfvAPsFncL6RXnKdblUcknTXnKc0XsV9ML+ 7pzEJ+J7+EMA6QD+PZ2JCt3uWvLk4qCBhC/sP2ZkIheG+129tO5JRuh68wIWIQS+ bFch7cuoF0xZ2ZbW6GWjuI+IgQAAt+AA/29I+VZdgcWnBVzZ4stKe12Chhpgi7Hm 79kBTxuiG427AQC+RoY+xNg8UsJiQb7++Q+CBbpc5a2Z+fDALFBDx2jtAcddBGAJ bOcSCisGAQQBl1UBBQEBB0AoibBTluKwUE4CoCNU36stiEtJYQUlUrsPrGZIY49+ TQMBCAkAAP9mk5LXE3ngm3foH0S2kpcAPS973EwF3gPNoC9nMKc/IA83wsADBBgW CgB1BYJgCWznCRDW6GWjuI+IgUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmff92K4GJEgpgd8FTGhwOZYaWt/Nieg0cmzEVMBMkJTCgKbDAIe ARYhBL5sVyHty6gXTFnZltboZaO4j4iBAAAN9AEApwxysAIcZ5/r3QN6KAuFp2dL YK5W1aEKdb0uDDR1PKwBAK/e331mdeeLzFgIu/BvkKTLZFD00rx0GOe8lS6gz1UE =D/eh -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/d-9-priv.pgp000064400000000000000000000036031046102023000177610ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CB09 61C1 6A26 29E2 855B 6143 7C7A 8A82 541A F05F Comment: xVgEYAls5xYJKwYBBAHaRw8BAQdAdo0INyR+7kgSNrO4GuZiA4mQGb/Vu3MknSoU kTapUjoAAQC8ryDQb3b9hY/lQx5WxVnKB0FU5h1CmFKI5xPiy1TTWhBRwsALBB8W CgB9BYJgCWznAwsJBwkQfHqKglQa8F9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnUEflzWXmNX92GEVzuNjATnTXi5YF5K9IFbmvVy57jHwD FQoIApsBAh4BFiEEywlhwWomKeKFW2FDfHqKglQa8F8AAH6NAQCXZbufLcqU4oPk Bv7b51vUNGiV3lymj6UfRNYfM0WDLgEA9TvUA20nt37bTsnbN+36VJ8+X/VgJ5FT 3t+/r1tH5QnNETxkLTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ fHqKglQa8F9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 0q8iFXjbqnUAb2F09jOuyKdwXJm1zrFXyYDK5XLrv0oDFQoIApkBApsBAh4BFiEE ywlhwWomKeKFW2FDfHqKglQa8F8AAB5PAP9+deCb6I00UK3rC6V1qHkEsuaQG2Zp y4FJeMc2X995ygD/aeYBY+eHSUiNnYsfDEqbmnWF7obXOq9k28uOsVVYUwnHWARg CWznFgkrBgEEAdpHDwEBB0ALhxX4EMxivicpaPjuBBuf1YmoakBVvUA2R2RzqRE+ 1wABAKk8MFAedGPbNLhOFEt4FmXn4mBZUTEJkm+/7SqKjZSkDfXCwMIEGBYKATQF gmAJbOcJEHx6ioJUGvBfRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ1zhXr/PZgBKhFXKsnV6wV73e8SzpfldmcKcy51mp0b1ApsCAh4BvqAE GRYKAG8FgmAJbOcJEKH0U6kUY29IRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ89hQYY7OhkEZUTef3C5wjl1GubfdNHH0HMpBRLAxiqJFiEE A+K6anO9kadfm7P4ofRTqRRjb0gAAP6FAP93bnsFdPyDRL1yUmrKX2NOAV9hxho2 wAZd2jZI6fWzeQEA6kaECjELn6qjNaE4T2bqMZG+WPgQTXi3YGtaaHqbrAIWIQTL CWHBaiYp4oVbYUN8eoqCVBrwXwAAa2EBAORjwX7F7b8HnJyJlfgj2PpOxbRFND0G 968dW2M+Zq4GAP45Yn1SsoHx7eZjuSQiCcYqXbaWMWCjE3KZxShMF/zHDsddBGAJ bOcSCisGAQQBl1UBBQEBB0CKM+6NczoPzoFgGiXi+l9KvqkunRe4gJniyziYfBQ3 aQMBCAkAAP93bkwHz1xIx1KzlB9j321j936hqJgCs2JZJ4W1KhFJeA9ewsADBBgW CgB1BYJgCWznCRB8eoqCVBrwX0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfEVTopIdxQh6QuBKb8CRIOhGVW4oHhWnQOl3GopO6cfAKbDAIe ARYhBMsJYcFqJinihVthQ3x6ioJUGvBfAACHpAD/XX6Od3f6sYsRkTCN8EZZxv2z y9QLquz319bgd6VvUqUA/iK6H6yyKioJI4c7eVRylRYaqij4pQ2JxgN+AU7gvxEE =egqA -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/e-0-priv.pgp000064400000000000000000000036031046102023000177510ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D1E9 F85C EF62 7169 9FBD E5AB 26EF E0E0 35AC 522E Comment: xVgEYAls+xYJKwYBBAHaRw8BAQdAnMP7GJI+lDKOGAj4xfjiN6jEwBSAiimg5ehg YsEwoMMAAQDMcXuR6ch6cBMB+Hb5vzk8boeF7+tQjTYk6rrTS8+ZxhIPwsALBB8W CgB9BYJgCWz7AwsJBwkQJu/g4DWsUi5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnTMGi6O5PpMAjG7hy1XFOC86ua18Q9OoA4GQdU1lZOx0D FQoIApsBAh4BFiEE0en4XO9icWmfveWrJu/g4DWsUi4AAA7IAP9StKgoGDEWTyba j1xPWWwpeF2v5+DmuBQzobmb9bZX6AEAj7hzncFW51RILAr0V/VcSJsxJUJ40L7T pGT3/IUL1QTNETxlLTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWz7AwsJBwkQ Ju/g4DWsUi5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn iXrCsedVxpbS7YHKAZLmCcdit1FTE4ttQiuj9q8X22cDFQoIApkBApsBAh4BFiEE 0en4XO9icWmfveWrJu/g4DWsUi4AAHgCAQCUNFetM43qseTFnEZuqc8GQegE8wnV jDLTu+aRZ0zbDwEAzcORNS4hliyW2iZPuC/4dTbPchVIpeo1orTInIr/aArHWARg CWz7FgkrBgEEAdpHDwEBB0BspRGvPDrLRN33k5vOHLpo5/uQgLeQ5rduyzm8Rjes MAABAO6J4QvnKgH94BkuhnkZjLLoQmA45Yc9InXL/h9tjjljD3HCwMIEGBYKATQF gmAJbPsJECbv4OA1rFIuRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ14V1cDLJgq85CSiufZVXDOa4aO7AB4GPm8vepnC7t1VApsCAh4BvqAE GRYKAG8FgmAJbPsJEA2z4SR5rsa6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ0mb9m+gd5GWEtPekxpMi4XWwzzPx9+XahVG0g2PNL5eFiEE 4P+O4D4Y76zeLbzgDbPhJHmuxroAAILLAQCsX96xo+YDlSgIMsa3FaRPAhBDCVbf lPNUh10GGGTAXwD/VrnGZq416x6rloMY1FFBrmOOI9Fg8y7kValHB+RHOgwWIQTR 6fhc72JxaZ+95asm7+DgNaxSLgAAGCUA/jDL3WAoEqJmKTJabsWbU6uy9DX6Togi zAzixi4G3N2XAP4mxve/v3PF/IGBz0EFUX9GbrIx/50n5gi3sROGC/P0CMddBGAJ bPsSCisGAQQBl1UBBQEBB0AyClga8PpBGH8YdfkVxKNIdNwiJJI69tX8G2CpuVTu ZwMBCAkAAP9tFcCifS/xTtZBQCNn1NWr+AzpZAifs40H7yaBtxdPoBCVwsADBBgW CgB1BYJgCWz7CRAm7+DgNaxSLkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmevbFr7VJlWAKGVdxERDQCz5XQs6rapNGrZWl/ansNVqwKbDAIe ARYhBNHp+FzvYnFpn73lqybv4OA1rFIuAAB5XQEAz3KRQ9ZiPDKUyv7nAvZcqAHb Pco6JzbHz7ujpw0T/U0A/39HZU4XtWRj7l4+d5bsrq7WCIZJPLoQ0SkVx6n+U6AO =rOQM -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/f-0-priv.pgp000064400000000000000000000036031046102023000177520ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: C0FF AEDE F092 8B18 1265 775A 222B 480E B43E 0AFF Comment: xVgEYAltBBYJKwYBBAHaRw8BAQdA0RpRv7pgb5MeIB8oxwJa/6CU4YtJNPY/XsCZ qvvRgGEAAP9hjbeZsqViCy/ugxcBb8NusnDBX0lg5boul4MR9r5F1xEMwsALBB8W CgB9BYJgCW0EAwsJBwkQIitIDrQ+Cv9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn0yxXpb0W6QrzFygR4fhx0JE3hSHfFtNMkOoTI1XolBMD FQoIApsBAh4BFiEEwP+u3vCSixgSZXdaIitIDrQ+Cv8AADiuAQC4b4Ntu7YzK4cn cnlMXHxk4VRzkorizASFKEXA4km1KgEAuK8TGBmXJD85pIq4j7X8XfSgiezYXmET 8ORFiAKwiwvNETxmLTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCW0EAwsJBwkQ IitIDrQ+Cv9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn en9zZtlggPIcaDRHFoW3HuwYdZ6YK2P3n/73F7ZqXkMDFQoIApkBApsBAh4BFiEE wP+u3vCSixgSZXdaIitIDrQ+Cv8AAPxkAQD2hjXRytrQKCWDNvx7UBkA8+NK3Xut I+YB548Mca/zrAEAuGew2RW9+OoO6078+fiDoHmBmzWiRoBvtgEJtBFetgHHWARg CW0EFgkrBgEEAdpHDwEBB0CSOrJYZ1JDKgyxrd0MvqKZI2Y7g+nPS6ol761D7+Im GAABAP8T8iAu8P2ze8lrVqnvC0Rb5Q0VkjzvoGjsPPzAfeTQEhvCwMIEGBYKATQF gmAJbQQJECIrSA60Pgr/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZw8p712K24CloU6wBSYM686zFRxEJCRmk+VZOLUtPonUApsCAh4BvqAE GRYKAG8FgmAJbQQJECxQLCdhpbciRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZwurzTWhxJ3QY68MRVrgUPzxvxWzXkJehFTrBbF08Nn+FiEE xTkDEmD0Msx0PvSoLFAsJ2GltyIAANj6AQC4Kj4JRk2X8sIjadhwJfRSRocOUQ8h o42rRJawt0pFDgEAlZDcUH7p8vbt3D1nhlUtL0ESh+YiG4xura+L1hh6Eg0WIQTA /67e8JKLGBJld1oiK0gOtD4K/wAAlZgBANwpq4Db+sYeWthMWPER5xBcP7W/qCkp VV1LZZbsCOpxAQDPWlB4ru8g41URX7eeVONE/ccf+yCTtDufIkge7WVVCsddBGAJ bQQSCisGAQQBl1UBBQEBB0Byu+GeTlVvinKUzYfWLmYT+19RX7STje835DoDrUCV PAMBCAkAAP96fvevQLWtqe0w/vCa6XHn+D6U9ivm3/00ZWymmqKcCBUGwsADBBgW CgB1BYJgCW0ECRAiK0gOtD4K/0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdXzl87Vypc6pJLSUmlt64gYCLrWRkX48QvYOih35dRjwKbDAIe ARYhBMD/rt7wkosYEmV3WiIrSA60Pgr/AAA7SwD9EyeqN398h4rYNeuBDz5UeoJN genxBkscz1czg/ND5GEA/39TYNwbxUxHonDOzctPWTvWnUbgyCVVC5iglBQE6bMP =r6jy -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/gensigs.sh000064400000000000000000000026301046102023000176740ustar 00000000000000#! /bin/bash set -e #set -x certify() { sq certify --amount 120 --depth 100 \ cliques/$1-priv.pgp \ cliques/$2-priv.pgp \ "<$2@example.org>" } gen_cross_product() { a=$1 for i in $(seq 0 9) do for j in $(seq 0 9) do if test $i != $j then certify $a-$i $a-$j fi done done } { cat cliques/root-priv.pgp certify root a-0 gen_cross_product "a" certify a-1 b-0 gen_cross_product "b" certify b-1 c-0 gen_cross_product "c" certify c-1 d-0 gen_cross_product "d" certify d-1 e-0 certify e-0 f-0 certify f-0 target } | sq keyring merge > cliques.pgp # Add a local optima from root to a-0. { cat cliques.pgp sq certify --amount 30 --depth 200 cliques/root-priv.pgp cliques/a-1-priv.pgp ''; sq certify --amount 30 --depth 255 cliques/root-priv.pgp cliques/b-0-priv.pgp ''; } | sq keyring merge > cliques-local-optima.pgp # Add two local optima. { cat cliques.pgp sq certify --amount 30 --depth 200 cliques/root-priv.pgp cliques/a-1-priv.pgp ''; sq certify --amount 30 --depth 255 cliques/root-priv.pgp cliques/b-0-priv.pgp ''; sq certify --amount 30 --depth 255 cliques/b-1-priv.pgp cliques/c-1-priv.pgp ''; } | sq keyring merge > cliques-local-optima-2.pgp sequoia-wot-0.11.0/tests/data/cliques/root-priv.pgp000064400000000000000000000036111046102023000203520ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D2B0 C383 5C01 B0C1 20BC 540D A4AA 8F88 0BA5 12B5 Comment: xVgEYAlsehYJKwYBBAHaRw8BAQdAPWfVJOEzkbxTwMOae4XNng9hhCi3Ekpk2faA 68m7sUQAAP9d2m92jJqWw7vUp7qmL+iJ1v3akWZXoGNUAS5uLRWy0xKGwsALBB8W CgB9BYJgCWx6AwsJBwkQpKqPiAulErVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnXWTZuGHDtjoWDNjm2XCeUs4RLk/9yC5o2xhQwWjLCAcD FQoIApsBAh4BFiEE0rDDg1wBsMEgvFQNpKqPiAulErUAAKrHAQCthm7xYCAOtOqz C3HIbRTrXnYz82k7r/fjSeZf3N5qtQD/ZEpZr74PzUnpPtgAHC9w5uGm3Iadi56h 1SPMsCBYBgPNEjxyb290QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAlsegMLCQcJ EKSqj4gLpRK1RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z29pbe0ZHqkaRlt4JXSSOAKHuAa6DW7OGKG0Me6TyPCTAxUKCAKZAQKbAQIeARYh BNKww4NcAbDBILxUDaSqj4gLpRK1AADmOgD+PhkwMm+UjpJ6bQZ9v2tRjI2JXILe LDOF/ZDz2i/6uqQBAOJU9hhDDB2IwZJ5E1UfXLxR4NJee7B1vzsQWEuFXY8Fx1gE YAlsehYJKwYBBAHaRw8BAQdAK30YiUnaTP/qjEtwiDlT2eQBA5cF4/cC8g8Qu8E8 qAEAAQCsrW6BuHtkXVbjA7Xn1pCBG2ZWkkmqaW+A4ceuOoG9QhDAwsDCBBgWCgE0 BYJgCWx6CRCkqo+IC6UStUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmdBKQ/404r2leJdIpF5wJBGAd+ZqWD5M7Pu4+uu/29pzQKbAgIeAb6g BBkWCgBvBYJgCWx6CRDj7Nxgx4wK0EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmcnfE2y+2EUvzVkMUrv1Aodcr77p2NRl70cBLywgwJEyxYh BCxjYeocCmhs5Sn1j+Ps3GDHjArQAAB8IQD/SeweFpSbG4Zr8TmqeN9oxtbtsD7X qezUUp5h9vmzKtIA/1evmuRQwERmQBqLOBZcQBS72XJMrJK/Lfqgud3JfDgFFiEE 0rDDg1wBsMEgvFQNpKqPiAulErUAAI3cAP9MLJEo939eBCdKa6jmPId0Wf4kf2Zy fWe7Ye7664xMmQEA1BKbkoN23ovGmWBqlK/2GRr6HAK6PeFlqm9rZGaszQPHXQRg CWx6EgorBgEEAZdVAQUBAQdA0WjFvTZUXMw8AkBXHM+3fhduE4EqmyvPsz++iK9l xnsDAQgJAAD/f5FgjejHdf75AKwCXfXVgVi2GJZ4634SMAAy2Tb6gjAROcLAAwQY FgoAdQWCYAlsegkQpKqPiAulErVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jno7pUJEW5dLJ7/91tjubVsSiRtwaxAJQ5PzJDAEZlf9UCmwwC HgEWIQTSsMODXAGwwSC8VA2kqo+IC6UStQAAkt8A/3T5kUrH+HjSvRrqy1s1W8Pf RUOZNifSYU/Ki/GOsrktAP0fHdd6zGpz9zHobw+pOoUD8rwtzQ/DuuHOsQxrYAd6 Ag== =O07s -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques/target-priv.pgp000064400000000000000000000036131046102023000206570ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CE22 ECD2 82F2 19AA 9959 8BA3 B58A 7DA6 1CA9 7F55 Comment: xVgEYAltEBYJKwYBBAHaRw8BAQdAouddqg7CnEGePNJ+r7iihUUXzDT+uKFOOkhF Ju0mTOcAAP43BZykp12pVFDKEROPXqjJRQ9cl482Lhp+kqaDk6Wdmw8UwsALBB8W CgB9BYJgCW0QAwsJBwkQtYp9phypf1VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn0euT6nEFQzUq6mM+h0zbApdqZ+FkXl1uXh1HhWT0FpAD FQoIApsBAh4BFiEEziLs0oLyGaqZWYujtYp9phypf1UAAAnaAQD1mKxfeJjFEAFR BtCbeEBVMGIgjIAJUoH3SXNhCCbN3QD9FW/cihgvRS+AH7fSme36x2NJuBM7Qv0D ywdXha3k2QfNFDx0YXJnZXRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCW0QAwsJ BwkQtYp9phypf1VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JngIwwuPLAWVpQsKrENRgnMTH0aw5wlJgNG5OgSSxyDeMDFQoIApkBApsBAh4B FiEEziLs0oLyGaqZWYujtYp9phypf1UAAIEzAQDqFCE+ypcpEOAbG8CaylQE0B6i a8iVDnNeQL8mnqGYfgEA0FHkyyJ4HQPu9mOp5MMJhrCSoMXhcK1PZXflMpTs6gTH WARgCW0QFgkrBgEEAdpHDwEBB0D2PMum9NshlLnCs2OjnP5AbokzUrXH+DKuCTng g80JpgABANTf8vDw6OyWitLffV0e2TkoU+n5iGq1hqvFweLuT/9IFVbCwMIEGBYK ATQFgmAJbRAJELWKfaYcqX9VRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZyS3LlX1ZYPsLdA/VrUVqGQOM1/9sXQ+zjYX3qoKBZcvApsCAh4B vqAEGRYKAG8FgmAJbRAJEBxmjdXoCcrKRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ0fT1Ln9nEWnJE8YqZvx+uxjIgEI86tsXN9h9dvhzou+ FiEEKXpdJwBBEPDL+V1RHGaN1egJysoAAFsZAP4l4gGZDiyfS7IsOfVbWirotxI7 yg+M/9lYd4jdbDxKKwD+OY9sR0BBtZV2Ko4ZmmmSAKt/OMubqRYq6mjpDnI0qwgW IQTOIuzSgvIZqplZi6O1in2mHKl/VQAAxrQBAPBL3dTPaE8n5x30UFZdj7txRG5N k9/Qo3kQ0r+trTrjAP4p0gpqBw+6QtHQcboQ4jH/8cQB4bEOZHX76gqaVdI6CMdd BGAJbRASCisGAQQBl1UBBQEBB0D0BJudZnxQlhWR31x8zM8RkW9t5QQvMQwRDYGO 1y+LawMBCAkAAP9vmDPnxlcBfzY+FiFBDu8SWo/YKg7Vzu9FeyPQF22JmA6bwsAD BBgWCgB1BYJgCW0QCRC1in2mHKl/VUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmd7dEI8WFl7O2oGhc7+lIEB0onOeNjmMkIgiom0dHuZsgKb DAIeARYhBM4i7NKC8hmqmVmLo7WKfaYcqX9VAACvNAD/Z36sR7kxfs8xxOg8dO5s OCWWDyA1COY1ZWc/4IYhsvwBAKbXep3c364Y3VaCJwNsisOF5rH42Qu7kf55tBXL LN4F =Az2C -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques-local-optima-2.pgp000064400000000000000000005200151046102023000211310ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYAls1RYJKwYBBAHaRw8BAQdAq7NgCdVrzAMOoinS4+8ULEO4qeiCBF2ZN3/r thnC1HHCwAsEHxYKAH0FgmAJbNUDCwkHCRALrNONLm0rQ0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmerh5Gn9fNEucYjkVyvlt3cKj2RkvBm 9S/aJZYFpSzmZAMVCggCmwECHgEWIQQPv5pIpavlygCU7kkLrNONLm0rQwAAUp8B AJnALFCSQdYQW59H2I7NT3s44fuloIojpSuYZTR7Va9VAQCICWx/giNCMEw0eaVn JI2fGsgM880celBKuKByVIv3BM0RPGMtM0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmAJbNUDCwkHCRALrNONLm0rQ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfm0KRqTw7f64G0T5ph5BV5gxSd/ekQHrhN5jCY0wFBKgMVCggC mQECmwECHgEWIQQPv5pIpavlygCU7kkLrNONLm0rQwAAR4UA/RArdwfQA6m7s+bE lIScRRuKjzA5idvV7gVqEH18ABTQAP9bOUmZHmw/5mheDd6c8AdGsQMrcPQcrzpT 7Us3p586BsLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJENRe4CJtXfceRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+3MSpS3/3iR8TF+4R0c fTMKpMm6nKk29UfAFoN0RIL0FiEEtCr9MLsb3S6567241F7gIm1d9x4AAGIaAQDS enFnRm+tW0Mexxzk41iV7BdHT0P9djOmFLHl13sgAAD+MmyBb5ReJ4Ek8nMtSFSd bvK78KT2IpqpK9C2ceZ7GgbCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDcw6J0 EK4qPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdfb9XM cpSKChQUMXUBXMLQBxMtTIHDIUU2tAZ0oo76hxYhBAxg1DTVE8RlvAdCqtzDonQQ rio+AADt3AD9ErMvdjweduwLx6CwbrnlmrFXeiAdBJ7aKUt3VD8DGrcBAKpNZtJD TYU4SMVzqgn1LLDiULBTPJ0J2aEFZArQ2UsOwsAHBBAWCgB5BYJgKGTtBYMJZ5o7 A4VkeAkQ7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnMJuSAZ1vTJgO4HDDHKVEo2jo2SHkpCZtqXQyn6SXpCgWIQRscAQ+GQNb 1agFAETvEDA2AyW9EwAAmm8A/jAJxkaZx32soQVTeQG72NwL9Ovmbfc+sD0vGUi8 fTBgAQC9WBagUiSvXeMsEmqqi4a6GajOdgU9ab7+evT6fz6GCMLABwQQFgoAeQWC YChk7QWDCWeaOwOFZHgJEDrDe94xvmWhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ50zJrJO4VfpL/EV365L/j9Zdp6kXxO2Apl9MyN/nVK9 FiEEVow3YiNvvHaFS9TmOsN73jG+ZaEAAL59AP43GbZbKFQK3CyCcYQVoyDY4h88 oCHii6b5OpF7DwJN3gD/QDlFqZ5dGMgZhGtGXARtle1/mQj4ri9qKo504ehdnwnC wAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRCErdsHoQV+nUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcZ/BpkzsohBxQMQVxpWQhYeCTd9Ees gQ2OrX0Mv9cRZxYhBCi3SqfFF3IcOayCh4St2wehBX6dAADW0gD/bENO1EcbCb9d 2giXiFGnlgBejUsoHbuulugiBLZde7IA/3K697UXPIaSm8Gmn4ipEtYxXGsS1cXh FQc94RGbZaINwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ8cXMJ7PZl/FHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn/z+paxBYXykt2a1D /qJlhfgOmt7hcq0tJatbxFZbRVYWIQRO1qUxv2JR58NsRTnxxcwns9mX8QAAxOoB AJHQP85V8RC3C5U1+NkMRYMwb3Fmn9FZ/b0OPbgdeEmTAQDxU3lsNrKadStv+gwi 0pwu12UNQ53m4RSwRUfY51dhBMLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEM3M GshGTI/lRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7kE pv4dPkCo0sAkIabZgxWld68k12/HtMcteZkvkgWzFiEEUnfBT503oPTWFd2czcwa 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 X7jIFnFTVXYq+gD/a8hvy8vpKyehpXs5pyPtZEKg4xa2uyu3E9vba269kQbCwAcE EBYKAHkFgmAoZO8FgwlnmjsDhWR4CRB8eoqCVBrwX0cUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmdI8oN413BNw3u3XcTcWcNbjMK37xk+R086 zE+3HN39mxYhBMsJYcFqJinihVthQ3x6ioJUGvBfAABJtgEAhwImY1IPf9xGibFj ivq42ZbTjXon11fJpOjrqmVsmUwA/jTd+zB//oqCHOr39NoiRZaEKj9X1JciGwoo 7R9xYfoEwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQpU1dY7C/xntHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnczhZYZ+BwinGoJ0TC4sN w3rks80G97MH7V4KM4UlpeYWIQSjW9OupyNi9cOmEJClTV1jsL/GewAAJzkBAIu1 wXy01I2H3hXk6nG+dKk99TYKypZs2UKrQNe2h7GOAQDNWS4O5a+moaXBWjveGEPd 7OoOvEnbBwXUfvYBVV1CC8LABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEFijgjF/ VNfFRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9ZN+c9I 8SZ7zG9SMnzyzBB1/XGN9sl/G2BHxOAydiWRFiEEz3Aed7ef697fiLRVWKOCMX9U 18UAAOIPAQCvQXQe/hw0IjS5v7DErHb4l5mLLxMbbNaxl1ikmudBbgD/YesMlXE0 9ftUW+DQ8a3WrmtQzFY++SBe156oXMIlrw3CwAcEEBYKAHkFgmAoZO8FgwlnmjsD hWR4CRDW6GWjuI+IgUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmfmHJGTk4Gxp5hU4chMEa5qxL/P6BVFyUP0eD7VJMUWeRYhBL5sVyHty6gX TFnZltboZaO4j4iBAADPcAEAxOchFK7XHNHrWedwZe2D5ztKO+mNeQSPXfZVzh+P VRgBAKyENtfkFnm/DPC+0RCiGFeNZMxsqT2KsVB9tVZZ9BcJwsAHBBAWCgB5BYJg KGTuBYMJZ5o7A4VkeAkQ7kdzDl0dc5BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnM2aiNMb8UYAvdqr5kwaPEigQgpknhfPXtGe9xEEZGSUW IQQW4QegaIbGweGkR8fuR3MOXR1zkAAAo9YA+gP7pXa4s9l4HVimQvUrC7u1elbn UE4V+nBP9TygxED8AQCLoi1HJqAakiMewQQ14tFzzbbYU894xqM22CeVsguvB8LA BwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEBZpglYeFAwDRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+ULMoiyzuaIcLVCz60+bTlRhSG+baF/ 8J+4cv/QGZLyFiEEwkzAkQLSLjjoOTxVFmmCVh4UDAMAAI8TAP9DGenkRpJSwSB+ 1Bf8NOnjLg8ve7CM7za64iqiQxrbaAD/XU4tAkFqNoJnUMMvlyqLVXnrmeGZWcW7 Y+vB2mgKlgrCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDzUJkAfv3YPkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmclzCNsK629ekuGiuIV G3fX6cVmivAuJfwRGMP9XaKPmhYhBKNx4aCK7hlVS9j2/vNQmQB+/dg+AACt7gD/ TYuve4yIIa4ISWyqZ3CfoADm71Th1nzUxiPq4/6X378BAPazV/EQloBtZqkY7l6Z LsXmBgLYecZOZGi+fRo0rooIwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ6tcv 95FAeLJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnqfDV jksGwFCg7rhB6vUdYPGvqfa791mgYhs9oIoIZaAWIQR6gNtTMLfZANW9H4Lq1y/3 kUB4sgAAOYIA/3GwCZZEsv7hzLlCC1gtCR05Q8M81L/mOGd/aTUQHWHmAQDo8b+Y JrHqCLEZI52AkPQNR6lrpP7y3o7HegWS3FKEC84zBGAJbOcWCSsGAQQB2kcPAQEH QChlMYuyY3jEoN1T8puVLvU0dOvXq3Gs6bO1Rp07KLOiwsDCBBgWCgE0BYJgCWzn CRD9nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdE3okYT9GatTw4FnDmIjbZUak8zX7/R+E0DjoudPPNzQKbAgIeAb6gBBkWCgBv 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 554PXgbCwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRD6Yec8b13LRkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcEpIN14lIOmBE8G9u+3Hu9 4zHOdD19FpSTbKPrcq6D+xYhBFNq1WK5IXuYOWYgVvph5zxvXctGAABCHgEA8XOr QhOSRx1ghJzbva4GoOg8n8N9ymHDCJ8cHRoGdREA/2L4m7en5FuEcOQ2p1N4y4I1 JfhXcIqmNJopQ1+AUmgLwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQqW2ZHaR8 Cj1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn8aPT1mVa s3sf2Wj6RW1DGjpc4O27tAXWCogYKXXkEPsWIQTmG2MdVma+3JwlTnmpbZkdpHwK PQAAB6MA/3Yb0UphE0Y8xBcDlqwT3K0/gbgkjErOsii1nH1rouS8AQC2r7Lyr4v7 tILfku1ag3Y31zfm4oNy7rAFsowcHopXBcLABwQQFgoAeQWCYChk6AWDCWeaOwOF ZHgJEN36d52RxpiURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZwGWk55J/bspMHUTsIfvQb9Of4HNjVegFcAg164+O/DDFiEEeXTATo1bVA0j zU5i3fp3nZHGmJQAANY9AQDDP4KPwOSOEe599Nz4CWY2NlHebNjCLGmc78B3WJ6k uQD/eqaYEQPrip/RlA1aMbLij80kEspYNgwTNQrYDcYIPwbCwAcEEBYKAHkFgmAo ZOgFgwlnmjsDhWR4CRCb1VyeEz6MvkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmedUnHFoaytaW6+hpHhPQz5sL1adko/LUDPsWr8NM34uRYh BENSVXurc/+VtjLuXZvVXJ4TPoy+AACucAEA7ZEKuQ/Z95MkKYJDq5PVweKmm6dN BYQy3fAd0URII4ABAKp0z7YLHeB+7dTVxe6SWlYXyjdLFvFDk9oHQ0mGjMAPwsAH BBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQG/6bo/Sr1A5HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnrSlQIptJU3dNX54lzE0FXCmNl5R1PUwf ZZP6WHyb69YWIQQ2MILp7rIuUK0wPYsb/puj9KvUDgAAI90BAPxpYSV787OCuhsB e9YimcoUtNmdj8VwIjR7B2mOgxcJAP0ReXvUaqxJjcV7Byos8NPJQYlMnzu10rIA okApCWtuDM4zBGAJbLwWCSsGAQQB2kcPAQEHQCO7bpeKZiF3kOWv+raX7N8aOoGq v6KhxppMMoafEZscwsDCBBgWCgE0BYJgCWy8CRAlwsDug9apAEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme69iGRhj2xRkWZsWRgfpMNm7kb tySrFIPSa197UMEKYgKbAgIeAb6gBBkWCgBvBYJgCWy8CRAqAAleRYrh/EcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmezzWeZvWxX+TFg7of4 /q8S8gTOreclvtNlCsLcGsPNEhYhBOIoENOCY4pMGGZFuyoACV5FiuH8AADHvQEA +Nprv2MSB2d+0d0C7Ze6INzoGS1DCDQcvq247EpNjzoBAJ8kdNOOrnmA8x3+wrUK XllMfjOqYUfNYgJ8b6jRmfANFiEEuSfQbZITfrNPx9WnJcLA7oPWqQAAACiEAP9H ZillVo5TLGvGFvCCg3lcSH4YdQnuswIPCBAciVHlTQD+OrE20iZgRdRKfx9BTEvo pdafZa+vGkwSSHZly1riEALOOARgCWy8EgorBgEEAZdVAQUBAQdAKgdTWgvX4fdF PXiXFKkEp0gz+VjbwtqTGFGSTLr0iBUDAQgJwsADBBgWCgB1BYJgCWy8CRAlwsDu g9apAEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfgDiSZ jz4YHrcFMgexjxwQ3B8CxTgGt3tQFQu/Zm1pDAKbDAIeARYhBLkn0G2SE36zT8fV pyXCwO6D1qkAAAAN7wD/T9nxFD/njkMVWVQ9BeMlK6VhTEchlmPjGCDeXrxc/1UB ALUsblWXqHBlNvqdgsIvTPbJ+RBsaOPuU5MD9HsScVsNxjMEYAlsyBYJKwYBBAHa Rw8BAQdACwd+GV2hm5mdthx5xlYqGmdq1G1JqdgoB2sjcmQKhezCwAsEHxYKAH0F gmAJbMgDCwkHCRAboBlQa+Z/u0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcQapwdPAqx+2m0EOTZID9lSUD5M4CmxQZNLL1D5NRbtwMVCggC mwECHgEWIQRG0vXO2b09Y6Ed3+4boBlQa+Z/uwAAxXcBAP48vx2DiM7OJM7RPCKB tcIdhmmB+GG6K5trm1LqK/ukAQCMtc3dxsVLUbWkXcFbtUdXEMN0GYwDP5NXwTYN 10b/Cc0RPGItMUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbMgDCwkHCRAboBlQ a+Z/u0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdgOWee 9gv5Qu7XBT7K8TYqvrbPEFmLk/O35UGlXgeumwMVCggCmQECmwECHgEWIQRG0vXO 2b09Y6Ed3+4boBlQa+Z/uwAASlEA/3nQ/n0qVdXoix122JfZ2e3EjjIKzWIn33os 7udfrnVRAP9Gvq9vD+GXGFzn/lyLViUA3JJKOxQfOsQlksJMxLFaCcLABwQQFgoA eQWCYChk7AWDCWeaOwOFZHgJEEaWpcYp6jH6RxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ5NI56SlPbHu5Lu9fpLmONPpXG3KZ6gKDs5vdfQt MkSYFiEEkrsaVgv/zORxewXcRpalxinqMfoAABD3AQCdq8zjx4Pp2WMm5Al89tCf +ju2FfAISYgEZEgZhrjOOQD/czZ77r/ezLFbnd7Wy6blxrQHiAYZBf2qwHFq7OC8 jw3CwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRB+XbQg5A6xHkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfIj8BzZM5cOyKHUiNORRzoB1HC 2D+8jra7Afi3yRLWHRYhBLsJ7O9Qo3Y7eGudjH5dtCDkDrEeAAC6bwD9GauDnlSl JORIQKtOVh0R+D+Ts/TrSqO2fW+9Q34ENNsBAMaAJ3xQbt4SytA/iL0uhwclnjd7 FzOzbJ5YWg3UWyAAwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQLH/cU18GqhRH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JniXJRN6z9+0Iz 5WWs53T0e9xHBQva8pkUz/PrV8aKVNQWIQT9JyeLBRP4/c+4Mu8sf9xTXwaqFAAA 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 LXBncC5vcmdg+RYDkpr3bG+h9tfpILGPeLsn+Oxaef/1Q4p7+dBy4RYhBM9wHne3 n+ve34i0VVijgjF/VNfFAAChogD9H8sw9dRdgOoP2T8vpGQR+tkgAaG7qI+JsNZV YmKRAnABAIMF2bpd8QR/r5hBR7lcezxtEjmLwpG3I8xpdK4brxMGwsAHBBAWCgB5 BYJgKGTvBYMJZ5o7A4VkeAkQ1uhlo7iPiIFHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jnjwuo1sGmbtCHIRzusVq2FaHn8daQVwA+sw+3GUD2 HaQWIQS+bFch7cuoF0xZ2ZbW6GWjuI+IgQAA6QkA/jyMKmCr9PZt/q34iMiV2sHX 303tvlvLax3B/8Zg+nBwAP9FikYrq7H9fI8IfianCpBlKxM7Wx5K5cBLDmxM+YUr DMLABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEKVNXWOwv8Z7RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+zx2Bmyc9cYovcHeftRsUf+lAJ1 ELGN9++PwZnM8SP9FiEEo1vTrqcjYvXDphCQpU1dY7C/xnsAABAIAP9eFfKQ6nTd 9q5IamM7hURtEvxZwe9ieyTmhf7u0vkG8AD/cBjqNKhTg2reqFszl8li85k6YnSC Fz0P1BYCXVBdrAnCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRB8eoqCVBrwX0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdqq7wOAIuxSNts kGLE8oNqafUgBpPYn8HAyeOp/ZnIYhYhBMsJYcFqJinihVthQ3x6ioJUGvBfAADU 4QD/d+gjk0rekCDqSGq7hzjeMby6XA7mHncugnYq5yFp+kEA/RPfXykphgjVmbK+ j4IYRImUHeDN2UuAdZJt+n6khdAEwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ 7kdzDl0dc5BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn vfuv1BAGuBEu5rGXV+RVsHQSpBOTpqqpCgWxCK4/Bg0WIQQW4QegaIbGweGkR8fu R3MOXR1zkAAA8kMA/RsM8rYUWGq14OXrJ/v2A6tOZTpSBM8KbQEa4vkl1EZsAQC8 oz0s7+TRe38uWKRj3++vNrZvIjBOSqn3cJ/qbaxfD8LABwQQFgoAeQWCYChk7gWD CWeaOwOFZHgJEPNQmQB+/dg+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZwJ2WGNOewVDySlQXPGiHU2jCiUPVqyecJfSbBBaDFkmFiEEo3Hh oIruGVVL2Pb+81CZAH792D4AAB69AP4j/rldGljb/YMeqqIbd5GRY/PTTxfvltT6 g89Tucln0QEA9l4JTxgWiaiJcXTt4SWLuO2RjCtYd1TwjRN9Qz0AZAfCwAcEEBYK AHkFgmAoZO4FgwlnmjsDhWR4CRAWaYJWHhQMA0cUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmesLcVXsLK1iwtW1updwy0XO9hEgmX5km/4mSCX MEjQchYhBMJMwJEC0i446Dk8VRZpglYeFAwDAABLxgEAiwkLdbkv6qDrw8osQ5J4 n1b3i90J8OeTJUPd607yRPsBAKDIbUYewqAMZqzIxKMEI4dGUmQKWqJy+HQUTgIg Yx0NwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ/Z2LAVdFAgtHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnwwXNmI7wYbqBeenPRXd/gxq7 UgUUngaCGNHr4bjbjC0WIQQTyLjcICCcsOFVZOH9nYsBV0UCCwAAtyABALSS10Ei 7+dkURnZDgk7dPpNJBq1sLNeqM9bats5QywgAP9JAmQRlMXVf8yOVlp6B1b/wWrR 7MCWn7N3T/BRtrhSBM4zBGAJbOcWCSsGAQQB2kcPAQEHQKQhn6H3RTQ/T4oJHhD9 3eXhEymSWLvzcYVfBxbChQ2DwsDCBBgWCgE0BYJgCWznCRDq1y/3kUB4skcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdWaHq9iXkQYUkm9WTF /JDs6wEbgecuNbP0z1sdiVQvMgKbAgIeAb6gBBkWCgBvBYJgCWznCRDjMOJ6pzvG 70cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd+trhp38GT RpMuDXITMeT7fu9paKAwKWFTj3G9sc//qBYhBG/v/WceF4PkJQDD0eMw4nqnO8bv AABA7QD6A+DhzvBvY548Y5I0pvkEGp7ka/d+9DRnzSW2fTErPj0A/3XR5lLu2lVr H7LiHFpwZu7PUGft2rQ0Cechj4XNIg8IFiEEeoDbUzC32QDVvR+C6tcv95FAeLIA ADjgAP94fJiDtkZ6MVJhXBC2X+MAzDcGZ9CwUAhEsJUw/xs2WQD+IEshqQclI7dV /83EZIN4IWm/zYtIvoSCOiR7nCWL7gLOOARgCWznEgorBgEEAZdVAQUBAQdA/uF9 XUSJpbahc36VZQrnKLTjxB5T/wQpZQOjQKg9jBUDAQgJwsADBBgWCgB1BYJgCWzn CRDq1y/3kUB4skcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfe1tW6oTI/u3WqfGzFznzR9ldyW1gnuwmqdwBKb/GsQwKbDAIeARYhBHqA21Mw t9kA1b0fgurXL/eRQHiyAAB4HgEA/mIePLscm40o3Z5l1pWBPUv4vpk6sXepjPr5 BpLu4PwA/0UD2gP/bFffO5M7goPGWOSsWbHkl9cyEJHTtHVRI/wBxjMEYAls5xYJ KwYBBAHaRw8BAQdAkIO/U5or8DtRKot2/I67o8g+QAsskVvl8RsFaVOcZm3CwAsE HxYKAH0FgmAJbOcDCwkHCRClTV1jsL/Ge0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcWtj5xpcG+IEwyy2XwgzXGuurkVzFzdopb/JQnVuMQ PgMVCggCmwECHgEWIQSjW9OupyNi9cOmEJClTV1jsL/GewAA9ZUA/0XfHbt1vaPE DiOwpFYyN/7E/Ycg6uTHDqqmJu14SIaOAQDYxI67dG4Qy9uJAzmZbp0rukY1UZZN czFM89Z1EHIiBM0RPGQtNkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbOcDCwkH CRClTV1jsL/Ge0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdM56AwNYDrEVPchm+9zo5Nlcx2ERL7i0aFzqrfj0832AMVCggCmQECmwECHgEW IQSjW9OupyNi9cOmEJClTV1jsL/GewAAUB0BAO41aKY9nyyLvytt+tTvOYql6r7J ijVdiBQ/R66dw7V1AP9ho91btSUMw2Xq21SNLMIR0k0IsWFu5KSCvHnsKRYnAcLA BwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEFijgjF/VNfFRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2HJbdr2eO63fScxhr+CU6PVaV0Yty22 YrmpuHqrMvB2FiEEz3Aed7ef697fiLRVWKOCMX9U18UAADInAPsEsvM/pSsSsUIX 1KbrgUhxIcoDmZAMkLEKG4/eBrDVwwD7BprZTVhtYI34iMKjIS5cBn1JpYjYl+L0 He72749CFw3CwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRAih3oSi2+rMUcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmee3YfSo8UPVZPg7pwB hq95uIY54JF15s6zn7vUA8Z6DxYhBPMCuD6QzWrD48WdOyKHehKLb6sxAAAvFAD8 CynA5Jil5qXc9bcMdVglyJ9/iIvyMno/O209h+LPLHQA/RG/H2yygBfKpnspkrF0 TwKQjlC4qV9aanqTLblTBBYJwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQfHqK glQa8F9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnZRSJ D1kEhOB7i13PgNM3Q6ykje8EVwr3X/ZUMThtcoIWIQTLCWHBaiYp4oVbYUN8eoqC VBrwXwAA0cIA/RclQt3MKv/upzXsNWzlq9suyszzHV2cP3VjcWhuH1K1AQDpuhUG mGa0Emvbk9w7YM0xZawHmN7VmaSnajJRoQWEAMLABwQQFgoAeQWCYChk7wWDCWea OwOFZHgJENboZaO4j4iBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ/sNOy42sqjUQmPJDXaeuMy7f8J+23NMpaUTp8ZM9z+WFiEEvmxXIe3L qBdMWdmW1uhlo7iPiIEAAHYYAP41nSha9Ih9gk6fR1+0bDgSg76QBHwFJ31tD2aB d7dWlAEAvP5mXsLcxNOBm4dw6r9JHd2KWYLa1DbIf2HXtR0XjQbCwAcEEBYKAHkF gmAoZO8FgwlnmjsDhWR4CRD9nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmfHSGoKncJzdyUBE3kpRyH8LeVubhRceib9GxayFfiu khYhBBPIuNwgIJyw4VVk4f2diwFXRQILAACepwD/UQwsuFkvlqJZ8jJxY08o1UD1 NROn0kIiurEf60FuNJUBAJ4tfLnQVWNl7esBCxIOEQJJAk96pNn6ttBZSozZYjMJ wsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ6tcv95FAeLJHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnM/ueelN/8SVUqYTB3adKkHWeSTlu 0xYIFR1g7ddC9ZQWIQR6gNtTMLfZANW9H4Lq1y/3kUB4sgAAv08A/RinikjeMYXR XozjeaL+ob5IE7fwVcLATi4WT5lo0a6JAQCkKzMi/7TC5GMU1xEimsyHHFRUHLl+ KtDuG09KfxW/BsLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEO5Hcw5dHXOQRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8+KgtgvN1LVI1+3 3DoZnMqL4IFvuYxD6RqL64HQ0VgAFiEEFuEHoGiGxsHhpEfH7kdzDl0dc5AAALhH AQCim1dLY+ArL1j2cBqz0IV+LypRTXyzKa2ZuR9kUkm20QD8Dygu+Es518lTI3RK RCCettM/RLnQTebBSB2dtsYbQg/CwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDz UJkAfv3YPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcK zr2dc+1ODawTf6ISAups5nUFdxNU9jYvmlSQj8UdLxYhBKNx4aCK7hlVS9j2/vNQ mQB+/dg+AAAzhwEAz7iaTQyAUmPBvfq2XHGlpYTTJ8CZ/1bZoJkwUBIGRewA/3ci j/oCRdAqlTCMPz7mD453XdF7Y+N4xXZkIGHVgYkCwsAHBBAWCgB5BYJgKGTuBYMJ Z5o7A4VkeAkQFmmCVh4UDANHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn0y4B8mV1WiH18FTeydISKCgSMNkhXKR4hd/HvYD4xSEWIQTCTMCR AtIuOOg5PFUWaYJWHhQMAwAAhgMBANZHB2cc/2RpoHU1FK1HzRu45ka+PiIBOKII ZRR5iQZeAP0SKpeRqFqFW9ZagZN8lQh76Xd2f9VPDXlGybU5BgKMAM4zBGAJbOcW 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 AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+m7omPAEm3Rt6BEz5GD Pcjguc6roEb1sBakjSo5fZOeFiEE02RDEKNHj2c03CQ2r+iF+TS/E3wAAOsSAP97 /RTiS7yae/8sMcuZwJFY/W2H2XZRrRhD8P3Q+jJfigD/bp7nI0zsKu/m4jv18kn/ snEAP36GJSU3VhNfxKGSXwDCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRAq9qPu XXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeFc5rM 4M+VgMcwFOrAMgOtNJIygsTq6qWZpSlcEMQ8HhYhBJCp3T53IcIhno103Cr2o+5d dfo+AAA5DAEA9H/CE4Svf8Y+/y/0PJUVXMn1HpAVeHto6sBn/4fhVO8A/jYd1r9K 131jOpSBjeNR4nSymOQWXlRgmVWnlyuPzT8OwsAHBBAWCgB5BYJgKGTrBYMJZ5o7 A4VkeAkQfl20IOQOsR5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnPGt8Iae7CtqzCWnRhxBhmZFygIWmPQvHOpZF2sMJFjUWIQS7CezvUKN2 O3hrnYx+XbQg5A6xHgAAEPMBAPZqkfs1bMWHbBoIILfI35poeZqYctSZvqa4xaZd Y5H0AQDa0B8tNaZYi/WFC/loUhcrtb3+S0VyqMK7HysAzCq5AsLABwQQFgoAeQWC YChk6gWDCWeaOwOFZHgJEBugGVBr5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ65rtMxzhcph0fldcc0cGQYcRhBpxvn/qrag00igo2SZ FiEERtL1ztm9PWOhHd/uG6AZUGvmf7sAAARLAP4kGWLoxaU10Adu5HIhyk+TB1eW fT3hzrx6rtafluQ1MgD+Nvy4PKrW1VAhwo85Q6vrfF8RJGCd9cVg2BwG6Q0TwgrC wAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRB4PxqPxyf8PUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdQwbml+IhUDE6fzUDnzGbK9hqmHwEf 4/p5rAYP2uUO/hYhBCfjX+tIbL9bFmACcHg/Go/HJ/w9AADOrwD+NbFJlMgvyU14 B+AnPdhu9c88WtIH6ZkqSvUou4Jaks4A+wTDERihTAQD1mldDe4eThiqX5Num/jr aKK/lrnCwhsIwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQlknvga7+UWJHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnjFlwV0me0dmWnxqs PPPkgCyal33bB533eocZnVZrVQkWIQQl2OqriUcFu2TUpqiWSe+Brv5RYgAAnLAA /0tqUivBuHctqjYZ/McZv5t/d4KQVKW3F7TzNwir03S1AP4zfDnzZEhJEvoxzSHw DFphqFZqepz81Wb7SginOBzJDs4zBGAJbMkWCSsGAQQB2kcPAQEHQLpeANFEx165 iRmk0l9KqZEXTMHvLKcH1U+jwl++LPs9wsDCBBgWCgE0BYJgCWzJCRAsf9xTXwaq FEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfdix2yLdIe q/NdwFl274iWiQzih8RS4PYVFvKesR3XFQKbAgIeAb6gBBkWCgBvBYJgCWzJCRD5 yqicJRT6rEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfp wqUTk8UGFdXXqklf6EUMFXrOSnjKxtY34VD65Gp+DxYhBHaDVQVpNuhR1XpFzPnK qJwlFPqsAAB+TgEA+YJia03S2J+/qFvBtUficjck1T1S+vkjBqSvmvLE0QwA/0CO coa7nTrL5eGicn6d+13uG77hUlYZ+3eXRBorUqUKFiEE/ScniwUT+P3PuDLvLH/c U18GqhQAAHvyAQCyFqLtzLRbHqUFIPx+IpwLYIY0qTa9l3fp0lXyG9ostQD9ExdA 35lhm8HQ3WW3QCs+ggZDxe3dEfJLjWdvTh+XMgfOOARgCWzJEgorBgEEAZdVAQUB AQdA25lOYzAYLhR+kG2AZuVsWU5F8TXtmybIFERrPuBwdV0DAQgJwsACBBgWCgB1 BYJgCWzJCRAsf9xTXwaqFEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmdmFq6xF8aLyhrwhcQ8rnmiGQ0mHhZNhLwRJ2dxULZh9QKbDAIeARYh BP0nJ4sFE/j9z7gy7yx/3FNfBqoUAAAVJAD3S23je1y5kdf/KAio1o07qlVx85dC eKLmmUDxwZHlAQEAvAC9wEuevxid7vVsgLJ9MlCiMEaCl4FjRN0HtX7uiwrGMwRg CWy8FgkrBgEEAdpHDwEBB0BxlaRf8RP3M/oiUT7kKlSgUQ2WhlsQWCfXjuDV+h+f tsLACwQfFgoAfQWCYAlsvAMLCQcJEJvVXJ4TPoy+RxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7pjhqf+TR9m7H/3Or4u0AVR46HYmPXMVWLO mq4xPwPiAxUKCAKbAQIeARYhBENSVXurc/+VtjLuXZvVXJ4TPoy+AACa4AD/VN0J 8XvtKesZpLvBf4sf2pVbrqvI5DGmKHNYnU5eeogA/1z9HVqe8JSI9BR4ZmN5z9tg YMv6pvXrSgRxhtx4G58AzRE8YS0zQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAls vAMLCQcJEJvVXJ4TPoy+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZzonipGXmeKD+yZGdyyjFxzVxMOrJdgOVSSFC6BcaHzQAxUKCAKZAQKb AQIeARYhBENSVXurc/+VtjLuXZvVXJ4TPoy+AAAU+QD/e5mSJx3wQKZ94alpIDs+ NIklpWmXD6Ge9BZYvN+hbekBAMaEmiDglLh2uP6LCOQq9IvLAcXlhohPb/CRh78z yHcAwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ+mHnPG9dy0ZHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnaQY5ANSU0+8r0BKiF39fvFJz wVmFCrWzmyFI672eiRYWIQRTatViuSF7mDlmIFb6Yec8b13LRgAA9EQA/jW/Qg9u nYwfkGapD2gcoHEhyAHoqo8rz2MwL3n93svgAP4q7pVXmYljlh6obvYrOAO1RNzG ia5KP1natlw1amMkAsLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJEP7cblxGqqsT RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/Seyq02BcUZ 1hERnG2E7uEE0Gi68YSvfVNTsdcN1N98FiEER5d3ayWY+X3J75TK/txuXEaqqxMA AEUWAP9Q91VLMjKeo0hdVc1BXYO+GFDS8Wfxiw+Dg2M8W9U8MgD+PKIe3EFSNXzg HA1wNDB0q6tUuB/wIb214vlqnmNtJg7CwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4 CRADklPvDrmRBEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmccaFAD06dnWQhfOSlSoaotwGZ87kaY8U2817QslrcuuRYhBDyTBEcQjm8aqSHZ wAOSU+8OuZEEAAALnQEA3Ar6wdUwptNwmOULSaRehsCxPvEBpXxEVQSUQBSBpsUB AKWfaumLFJEKr9fzxRzOoTdaEJfTMJ1RKU4esff7kNUJwsAHBBAWCgB5BYJgKGTp BYMJZ5o7A4VkeAkQ3JLWX69GUy1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnhlDD5/bM4luracGNxWDXG1Ts2ghSw3dMYSaUmgVPpOMWIQSX 5Aj3agiVRhBF11rcktZfr0ZTLQAAdHcBAPmiDWt4AdOkbTvx+/qcdxcTB9PB5Uui 9bF6jHMWug0KAQDm4t900vTPHKN0w0MFAur+e6ZO7/t7afJmL/u0bVthDsLABwQQ FgoAeQWCYChk6QWDCWeaOwOFZHgJENQ3mp6uJqI/RxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+ypBFDijUXR7ZhfXGdNPgZWiSGUD4YnOLKU EerwZYlRFiEEL5DFxTsQ39T33H2y1Deanq4moj8AAOZ2AQD8rBLd2vRoKHmGp/L8 9YQ0wBJbqIkYl2RWOb7/GSnGggD/QISZoj3cKHaQ7kkcImGIx9TiKOtnhlO/rhJ3 otreIgPCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRDd+nedkcaYlEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmejQTweQsPpPYx++LvxRg3Q 3UP2ibQ+O3JCyTRXaw9HoBYhBHl0wE6NW1QNI81OYt36d52RxpiUAACJegD+PJFZ RbkGxV0DVezm7VhxZcp0otVZrua40O3s0EGENLMA/10OT6jge1EjsNjNnlH1jADq evAbZS9nZakHf84bXGoPwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQJcLA7oPW qQBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnWpovoe73 QUHss09P6YUk03d+CVrJVGGa4QDdclDyJOgWIQS5J9BtkhN+s0/H1aclwsDug9ap AAAAwZIA/10qz+jE8JNDGftjLkqYRSnEtjd7EV5+AEH/RANXl+l2AQDXG2wPu+rv GoyK0CaA0dhtdYmP7CZpkceer1pfQcAfD8LABwQQFgoAeQWCYChk6AWDCWeaOwOF ZHgJEBv+m6P0q9QORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ0irtQIVOHCCTUx+nPb+mecPdvOQh42AfSn8IB6QQ+7WFiEENjCC6e6yLlCt MD2LG/6bo/Sr1A4AAK0uAQCS8vSoLNdGgj+t42tcRwsNlJ66hyWcnipj+tNMobQ6 vgEAvgaEZ6LnJVX4WnDt6aD2ZaFV+yCdX95RKYEMFMXE9QLCwAcEEBYKAHkFgmAo ZOgFgwlnmjsDhWR4CRCpbZkdpHwKPUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmcFUZ5d2N9XX4e7DYj5Cm60rbmgv1WWDeYnFFHOgwEhOhYh BOYbYx1WZr7cnCVOealtmR2kfAo9AABvwgEAq5eVZc9xUn9iZCoY7aJ/IDZijGJO sXk366mA3INpUhoA/3TmAEk7tLz/wMLAIoII4BJ1HS642r5CllZEilLMym8BzjME YAlsvBYJKwYBBAHaRw8BAQdAbeKcx5Qj1QuY39fwaFpSjlerfdYGfVacioJLBz3h hEXCwMIEGBYKATQFgmAJbLwJEJvVXJ4TPoy+RxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZxLgFIBFtsI1dxhMXNRvDaQWv46of42yp2EejGDN j7AyApsCAh4BvqAEGRYKAG8FgmAJbLwJEEhoap/KVCx7RxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7jYRIdbWHwe0GWbcMCpn++TgZvN8iWX dWs+7/Y3n7qbFiEE3XYCQ1hTI8txdAihSGhqn8pULHsAAAK+AQCQol5yC2YzxkzZ EABWp38qnFBu3u1MFeD0C4E5wLV99gEAzmzynajKMhPyifPY8TRxXonFsmLCXkxG 159gVLgNzwkWIQRDUlV7q3P/lbYy7l2b1VyeEz6MvgAAIJsA/0L1CveYb5Ud4hbQ KvKsuBJzsqdZubKb+M1HpH78K9TNAQCry5q3qt1APfJj4yQoxbjgLOqyPNoifIgq q5rqk3nTCM44BGAJbLwSCisGAQQBl1UBBQEBB0BMgtlYNlRteyOMuHawTWu0cy57 K+C7oyeDwKWX3D3UfQMBCAnCwAMEGBYKAHUFgmAJbLwJEJvVXJ4TPoy+RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ31ZpQ8+o0kq/+IqRcrx H9IhcNPAaN43z1latK1RDl0LApsMAh4BFiEEQ1JVe6tz/5W2Mu5dm9VcnhM+jL4A AFNmAP0a8Pu4eyf1/cxsTIHgVRiT5Z3CyrMswQ4Qg6CFGTRfpAEAkCtMMP9BD8lP IfQL+jHRsKsscgLfHBzjVs9nto79CAzGMwRgCWzIFgkrBgEEAdpHDwEBB0Cn7b6t pRZOjyEx/SK9fP53pXcpmdoqAbAslHZEgRRF6cLACwQfFgoAfQWCYAlsyAMLCQcJ EH5dtCDkDrEeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4B97cIny3zHN/s48SHo/MD8QhkKY1kEGvx2B7K8l0URAxUKCAKbAQIeARYhBLsJ 7O9Qo3Y7eGudjH5dtCDkDrEeAACqZAD/dk0WWBIvkK48jFPgiaKAvbKdxvOiDKet wie3hzQlITcBAM/UleXFQXWRVL9cCOruMaDOHbPMaOLPkmrYf0bESSMKzRE8Yi01 QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAlsyAMLCQcJEH5dtCDkDrEeRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9QAUFrEVqoRo8vEn5zb MuRXTkvw/xd+TuSm8Oja0n7QAxUKCAKZAQKbAQIeARYhBLsJ7O9Qo3Y7eGudjH5d tCDkDrEeAABBnwEA18HfqnnHpBEvDEbEr/F8WmYHtxnxY0HTY/NZgekpDFkBAO1T HORy8b6nDh/FNOSkUP69AyZXjWNrxR9G5KwiWQ4AwsAHBBAWCgB5BYJgKGTsBYMJ Z5o7A4VkeAkQeMV9nelcFvNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JndOxz2vZU1gQaZEF1eajzFNINb6vyJjkZdMdfGQU1PAgWIQS/wxpp 6pR064n8zC54xX2d6VwW8wAAs9QBANBtcAzhWi90OQDF9B/nOqbEM0Q8noHMkRrD A0P7QUz0AP9b+u6DkFKNOZCdLSMw3jzfRP4ExnRbhF16zjgqY+e4CMLABwQQFgoA eQWCYChk7AWDCWeaOwOFZHgJEEaWpcYp6jH6RxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ3ySxS06jkMQMma0iB9AoyOrUzH9KV0K3ElgUl3q Urv2FiEEkrsaVgv/zORxewXcRpalxinqMfoAAIecAQDjF0ghek8+wm8TjOI7I9Cn wwlWQAcfZB1gnWktuCGWOgD+L0yOO+aNdR1+XcN9r6m93p+3qy6fPSG8AQggM3DR pQLCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRAsf9xTXwaqFEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd97OCafHqtKuMbjsoXWA09Uv1l spB74M/a0eRcX3AGhRYhBP0nJ4sFE/j9z7gy7yx/3FNfBqoUAACHkwD/WDv90nfi P5M8uzr6034W7zp+zJkLr7QDb7lbJZNa+kAA/AvDKzEnWQUMO9SAa1f+AARR5H+g 2kworlMMPa/hbuIDwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQKvaj7l11+j5H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7l5MoX0BEHf3 k6JIuD2TrL4qAcNAgbKTuHfJaGl9T98WIQSQqd0+dyHCIZ6NdNwq9qPuXXX6PgAA REIBAKjqDQ99HA2nUyroJBoHmju06CpEdY5gZlbRODBkHz5iAQCgv10m+fFxS0kD P1KJnbUoEdIrKs86Dd1eJpcWYCAFDMLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJ EK/ohfk0vxN8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZyFJG1C5Lm5PGG8bL31FvqCXAwTvRpc8SfT4ILtRvzINFiEE02RDEKNHj2c03CQ2 r+iF+TS/E3wAAC7TAQD3ZcidJweedphG/7slMnUBlA3iypX+HRdtBzm+w8bs0wD9 EM56G1LwIUJNy++EUjz1/hErGKlSMVIpjA5LBj89KwvCwAcEEBYKAHkFgmAoZOoF gwlnmjsDhWR4CRAboBlQa+Z/u0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmet36+zYj1fMv8W6hUmPMzfBNzfHgGNzLuL1XlsMxnJJxYhBEbS 9c7ZvT1joR3f7hugGVBr5n+7AAByFAD+JKxC9trlopu+H6wTSon42cmLcYIcmELB zmaorfZXL4gBALGQ7cOfTfnKP9pzurKzC6BZfptuT2ZN2BlUz+0YoMQHwsAHBBAW CgB5BYJgKGTqBYMJZ5o7A4VkeAkQCFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnxuI8MTZHGXkTBVWSxdUk201rgyYkb8BKqikp rmw3CwAWIQSiwZ3XyZNfi0ebXQMIU/27kA4FsAAAMC4A/1djInASaFLP6p0zI/PF Xo20LRNUo0avc2laI1cgvZ15AP4hctzc4GeKna/S8RCUCUsXatVgYG/elrNmBFVk ky28DMLABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEJZJ74Gu/lFiRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ24W/byzQNnA6wFI2XctvNB0 RwWtu7QrJkxez1silgXZFiEEJdjqq4lHBbtk1Kaolknvga7+UWIAAJQKAQDlLjgy 7HHr6rgu01ZIHRQJCt7tOLpGSxmCV6CZuhq2PgEAsPU7QXo9G2BFEqxrjO/dykj3 O0lyivkZmrC9j9H+XgPCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRB4PxqPxyf8 PUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme8cqJ2bXuR bVvKBvKDTLi8KOI05D+YhBKe/XRqR8TgDhYhBCfjX+tIbL9bFmACcHg/Go/HJ/w9 AABgCwEA9NhHbuZc6UOF/9t48ruXY8GNz+/0+gu6qASRdIzyf50BAObjoXVO2Maj mwkNyAqU3uHR2GV6ZNrsezv8R4OyQj4OzjMEYAlsyBYJKwYBBAHaRw8BAQdALFV0 FOtPI5uNj/eRtMHjI408NgpOuI3FiwX6k2AccqLCwMIEGBYKATQFgmAJbMgJEH5d tCDkDrEeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6tj 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 w99FQ5k2J9JhT8qL8Y6yuS0A/R8d13rManP3MehvD6k6hQPyvC3ND8O64c6xDGtg B3oCxjMEYAls5xYJKwYBBAHaRw8BAQdAAu5BHXZ6iACag7ao2BL83b0GXUU3OiXA bThijHwy9QDCwAsEHxYKAH0FgmAJbOcDCwkHCRAWaYJWHhQMA0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfAhxHQzL+Eebb2OGwX9e44QE8E F3pWfp3fTwBEAdTR1QMVCggCmwECHgEWIQTCTMCRAtIuOOg5PFUWaYJWHhQMAwAA FMQBAMGeeVQRSBbuHt0QIDGu1T/iucpOLE4ZwdNdqtmZradTAP9r3VMqaOs1Ukfu 108HiFmOTkdhrDmD9Ww2DVK596D/BM0RPGQtMEBleGFtcGxlLm9yZz7CwA4EExYK AIAFgmAJbOcDCwkHCRAWaYJWHhQMA0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmceSixxBbZ1mLgzAXocQ5jqIcKTSwRPWxHSzXVydVemugMV CggCmQECmwECHgEWIQTCTMCRAtIuOOg5PFUWaYJWHhQMAwAAEDoA/R7hFpHx2kSR QGU86SegFpZyKXO2Owowa0RDOBWMYJzOAQDov45zRNU6Sfp8MaAnJa+q2H9k+P8y edB75eI9+y0BD8LABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEKVNXWOwv8Z7RxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+sCNmlGug08jOfl VtF+7Wsz/EB2TsQy8pUIK6f0DQzUFiEEo1vTrqcjYvXDphCQpU1dY7C/xnsAANZi APwNzSEL8+Mj/5KmBLxT1a8AoCyoKECOKursiUPUjUkibAEA56j231OBZU7pXaWS LnqUNDyDGvgi2cAulXvy/tMwFwPCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRBY o4Ixf1TXxUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdo MLyDZPxkBRia3o2EWmNcHTMSEzHSUw12KxWOdGdiyhYhBM9wHne3n+ve34i0VVij gjF/VNfFAADwGQD+KDetgfaKAPZksUVqS53l4AmINYKzsoYRyNrFhAWLox8BAJvf bWGP3b5P1yTzihkwWE6HxY6td2gI2iCXiF9IX3QJwsAHBBAWCgB5BYJgKGTvBYMJ Z5o7A4VkeAkQfHqKglQa8F9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnFGJR8rMqjNcpJsQuBLu3Nz8ADacTniPxILGts5kdaUIWIQTLCWHB aiYp4oVbYUN8eoqCVBrwXwAAD8MBAIBo0cnyY6ABhETO5SFjYyOkKQvRlFlbkdW4 E6Kn8swiAP9PXJsrzq4qCo29zmTW6G77VQFZBMkWkt0Ks/6mC8lzDsLABwQQFgoA eQWCYChk7wWDCWeaOwOFZHgJECKHehKLb6sxRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ1622GWvEq6clViNahgWdKmbMZnPeqtH5x75YDL/ XWq1FiEE8wK4PpDNasPjxZ07Iod6EotvqzEAALOWAQCIiPBoQ4tnI9clePzySFnW hLF5qgf3V2en2YTAQlyNhAD/XDs1Sf12PwGSbCPJH8fOpBdttaLsDMCerCF6Mrom ygfCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRDW6GWjuI+IgUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcj2je9M+vlL/E4tnK0GNvShBCm PC2Boj32iUFdsI6kphYhBL5sVyHty6gXTFnZltboZaO4j4iBAABtMwEA3Z9HgEPf lXFk203A0m7FN9QadDCDlv0KbBCQ5/btBqUA/2LmHy/OULms0uDaX1IpERNgkVDM u00IauhR1Gs2fLECwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQzcwayEZMj+VH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnzlNQI6vXLkTQ nRYo3cS+h/jwmZRsliJutJq2v3q6gu8WIQRSd8FPnTeg9NYV3ZzNzBrIRkyP5QAA HQQA/RZUw8hg8jcoQQlGxJBSxqXMudGbjO29OWMQiZIs1kvEAPsFOm4DRFyl/C10 mukDD/VzcughSleveMXK0TGR8+IwDMLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJ EOrXL/eRQHiyRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+s3i+0PEHXR95p0kRVqpsJs0plJ3FfCNEzzyuvSPoxaFiEEeoDbUzC32QDVvR+C 6tcv95FAeLIAAJ2qAP4wjtmr6FHaOvN0e5E6d1KMryHd3t7Eu3pHUzrXewly0gEA lF/pLughPoKldt36NVfy69xd840xgy2TExopfAzjFgLCwAcEEBYKAHkFgmAoZO4F gwlnmjsDhWR4CRD9nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeMU94jbZcSIz38vmN5OxFPh5rTyAQRVKhfXe7uMoYzLxYhBBPI uNwgIJyw4VVk4f2diwFXRQILAACdoAEAgZlm3DstXaaU8CcPg1IsTirV3c4FUHKL MchygrJ+OpQA/3QeWsLxQy1lN8+Q15Y4G0Z77Rq5G1OZxY1bCdpiXmUJwsAHBBAW CgB5BYJgKGTuBYMJZ5o7A4VkeAkQ81CZAH792D5HFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jn4Evoby+W7H2HI91pZZTmruqd2djPaLb20CES 0wmjjB4WIQSjceGgiu4ZVUvY9v7zUJkAfv3YPgAAHIIBALsiOByxNjrSc1oNDgMT eG0T5zzc1ps/6VwhC3pWezy+AP9rkpUjHj9tOndc5nVpTBI4tKYZ3dVQ+mNskKz6 1vtfAsLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEO5Hcw5dHXOQRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/MGFUUs1+enCGfYjXmz0Fru 0XGUqD+ami760qgR/4rlFiEEFuEHoGiGxsHhpEfH7kdzDl0dc5AAAJtcAQDos5Yb W1+xwViTQPJCG1oGNNaLrTgL0ixcN3WypFyIgAD7B7OYGA5tDJ0VqoCAlucwaqGF 8rWUtgiEE+RHRrO7pQPOMwRgCWznFgkrBgEEAdpHDwEBB0BV13wIaztDLWbOkmMn XfitIVZjxnJUecSs4zeF9oaYScLAwgQYFgoBNAWCYAls5wkQFmmCVh4UDANHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn/+CIa57ZW2dsnNPZ 0B3DcPcqOdPalyLaaOarKQI6WWQCmwICHgG+oAQZFgoAbwWCYAls5wkQJW9X1xCi aclHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnYcNdtvjL 5IduLdbg1NDOOW7lTquhdAlCzsZcQad245gWIQQoWq7nkLoKAyImFd4lb1fXEKJp yQAAxPEBAPW3JVYGpklQ/S/aL9PLX1o7khc2s8+2QK388oUQxYfBAQDrc1ZQYfxK NqKzTKRjJCJHpJ6yPfY4VUTK/ABaFRouBhYhBMJMwJEC0i446Dk8VRZpglYeFAwD AABF6AEA9djuJxqwBP2E3Yw9yEsTzE9CPlhhV4dPma9cLm6Nf8MA/3yYiidKHyjr XcMQtE1YHfSG9WXknMmxKLhgBBe6CjYIzjgEYAls5xIKKwYBBAGXVQEFAQEHQO3u hcM4TDCK5qX5ql855l9mF8KgpCIwdio1SCIxYKEmAwEICcLAAwQYFgoAdQWCYAls 5wkQFmmCVh4UDANHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn1CBsyKIS23Us7R3vLXxwPp00rDU8uyJVRMoy++eOkooCmwwCHgEWIQTCTMCR AtIuOOg5PFUWaYJWHhQMAwAAnywA/1FCexW74AwrNI+9wYTV1gQtAMvThW/Qn+MK 5CweUlKhAQCUvOPhbjGPAexW8FyVDhJcCe+3WH3D/jOBvh5SrrM+C8YzBGAJbNUW CSsGAQQB2kcPAQEHQF/LqlIfryaLG0W+yXnspZquKw2kjkB4YsIUBtZd76pJwsAL BB8WCgB9BYJgCWzVAwsJBwkQEKm7MCPL9VhHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnG+e0itjxLIwTqixgsyKzqvwxKpw8qQoIbw/yMLSE iR0DFQoIApsBAh4BFiEEvjfbxGr4BCid5oS9EKm7MCPL9VgAABIAAQDPYfDW6fGb C87V2RAktzIsPsczukbiIUIVMlY4Cs8/SgD/SIIOTgfCTI+k5RsE2kCLR1Qn70bI zRS8hgKbljobJwfNETxjLTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJ BwkQEKm7MCPL9VhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnluD+rneJjzOWpAZQjEMWBf9iaZxK6fA86hOjqHd7XyIDFQoIApkBApsBAh4B FiEEvjfbxGr4BCid5oS9EKm7MCPL9VgAACA4AQCzTMr5GBUSoE3tz7FGxhHPGrof FHkZeZ5ffhtu43EDswD9GMbCCXAQY2Wft4WS8qbMDiGOKtzrjxgpmejZPJEOCgrC wAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDUXuAibV33HkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcLNJdZW0vBLQttrSfxpTNfZwLb4MNU yAtDqgyhHKtN2hYhBLQq/TC7G90uueu9uNRe4CJtXfceAABM5AEA0/xvu9GADm9z oRrnNLL0s7S++kgDRzdrjPUDbGlXtkcBAJN2ZEMESvxcgdioxT8WtWwpJYrVQOtv e8a6Esy9otkKwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ7xAwNgMlvRNHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnABvw5Nilr+5VPlru zgL95q7F2+80Sgcu+rX39fvv2Q8WIQRscAQ+GQNb1agFAETvEDA2AyW9EwAAH3YA /iWgqzqfUZsUGOvVvDhKJblIFwi39/AycKbVqiWEvkbqAQCSlDPiWfjrP1YJt2h8 dik9nGJwd/U76DcMseccLrkNC8LABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEISt 2wehBX6dRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ87e yJEe9CiOMtUkNLtixbIzZOo8qcNud/X0hn+PlWiJFiEEKLdKp8UXchw5rIKHhK3b B6EFfp0AAPEIAP4xbJS1OI6UAb32BvGW0xjFvzmskqJ699kJ3Cyx0lDZpgD+Lj+R 4QtLQ+7IEMcgicdR7yTUM+1jgRu/D53h/outSwbCwAcEEBYKAHkFgmAoZO0Fgwln mjsDhWR4CRDxxcwns9mX8UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmd3Nd0IgGbvR1C50kbfTANkfLFNg5WgTAZCixQmwTx89RYhBE7WpTG/ YlHnw2xFOfHFzCez2ZfxAADmOwD/Zu97QzHF2EeyTTMoovUk/mrGONWU2rC51zZU /ShCmP0A/RlGdl1thM3gBZQ+t0eJQIIo63+8ZqJENyDx4Phip7AIwsAHBBAWCgB5 BYJgKGTtBYMJZ5o7A4VkeAkQOsN73jG+ZaFHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnX/QNc0Y9gJO1PDsKvzyt7zKtLiojVzMDkYOw0Hsp NiAWIQRWjDdiI2+8doVL1OY6w3veMb5loQAAkeoBANEW2Fr9KpA08bHu73Vu+Te0 OCE1q3Ym7/OOteill/gHAP9KoNDIp5urVsUIW1rMFZG8RfCJ4XOPwpyQUFbhbE1F DMLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJENzDonQQrio+RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3xUtVMS2gcrL7L5fcc1Ptkr/MmD LTuQ080eK9CB8gxXFiEEDGDUNNUTxGW8B0Kq3MOidBCuKj4AAIF8AQD0NH4Y+HPc RZ5bfknfvGH/I7YwfGODFb5xlvZxxob2HwD+I6XOccySSIFyy9FhP5m2XBGy61qe 4H5WqfMZS5tGgwXCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRALrNONLm0rQ0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcFZYmByUOzwCBg dKkQysTY+zxtwS0hOhRSn7mMvJiymBYhBA+/mkilq+XKAJTuSQus040ubStDAADg 9QD9EL0ine34FSADaG9SJKwalVqGVcCg8ICEVj4g0/IqZdwA/joSz3fG4nb45OGi +P6m5Wssmltv9ghAMge29Wz3BJoJwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQ f62xw/77/llHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Z4ddHfJ8iOeb2mJICkzXctxjPn8Mghxjn0sQoHqOPLYWIQSgzYdYLCF0PA4wY39/ rbHD/vv+WQAA0EYA/2xqtkkUEVmCaz2+LkEiRvtcl0MKpfXAhIoVvZPyYdLcAQCz o46QgxzGFv8fLSoBdEGnOy/qR0tykWfc7mF69CQiAcLABwQQFgoAeQWCYChk7AWD CWeaOwOFZHgJEM3MGshGTI/lRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZyYcluV26aIBxk9XRn8GSy2ewwFkz9JyAzc5RWZqqSeZFiEEUnfB T503oPTWFd2czcwayEZMj+UAAM7/AQDEZa04WRyN6ZKWlqzZ1kstkzKyyo5uW7EP Q9LfH6oBcwEA6CaipLRk3Epg4aXuQrgs5sKDyx+NaFmGjx3Q88BP7QHOMwRgCWzV FgkrBgEEAdpHDwEBB0DHwErecUoD52K/fUqoLbzuWJdE/Yb9tCBEd+q59D5IwcLA wgQYFgoBNAWCYAls1QkQEKm7MCPL9VhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JncVxSZxtzvA9d/I81NAkvoIioNiJY0+1u7d0ii3ywV4UC mwICHgG+oAQZFgoAbwWCYAls1QkQP7do+9UaFBhHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnHV1sXBkeDP5fdnRgtxB4bjqkufvUbj5M2bwM XZKK+54WIQQRrO0OTlfPwUGKiLA/t2j71RoUGAAAN+IBAIEGfHqmDZU18Jjyk6Tr VMunHlfqFhPEJ2TnN7JP/OB5AQCJrAxCiJvb4pov8SNNzyXG1PePERnfaHRBy884 uXy2DRYhBL4328Rq+AQoneaEvRCpuzAjy/VYAAD8WwD8C/ElWGO+e6Rl5WU6tcPr WMvvhn8INfaPv4qVB3l4+e4BAM7RpkhJBrvS1HFWRuajpOUKtZTGb3G1IXX76Uny GL8EzjgEYAls1RIKKwYBBAGXVQEFAQEHQLinQbAWlL2YIvOeFqvgJQD5imBcCpF6 T2loAHKak7tLAwEICcLAAwQYFgoAdQWCYAls1QkQEKm7MCPL9VhHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnD52+rtvoR8uUV2ju7C35mH2Y nH1tIuFJm+BsjLv/fncCmwwCHgEWIQS+N9vEavgEKJ3mhL0QqbswI8v1WAAA/G4B AKmJ7T85bBNjXq1CprhtkyMew+eiTmjpAEmh1KWMLSZKAQDqnYg1HcVGkHRFM2L2 0ZF+eoljr9gRcTB76wUy6uJmD8YzBGAJbRAWCSsGAQQB2kcPAQEHQKLnXaoOwpxB njzSfq+4ooVFF8w0/rihTjpIRSbtJkznwsALBB8WCgB9BYJgCW0QAwsJBwkQtYp9 phypf1VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn0euT 6nEFQzUq6mM+h0zbApdqZ+FkXl1uXh1HhWT0FpADFQoIApsBAh4BFiEEziLs0oLy GaqZWYujtYp9phypf1UAAAnaAQD1mKxfeJjFEAFRBtCbeEBVMGIgjIAJUoH3SXNh CCbN3QD9FW/cihgvRS+AH7fSme36x2NJuBM7Qv0DywdXha3k2QfNFDx0YXJnZXRA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCW0QAwsJBwkQtYp9phypf1VHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JngIwwuPLAWVpQsKrENRgn MTH0aw5wlJgNG5OgSSxyDeMDFQoIApkBApsBAh4BFiEEziLs0oLyGaqZWYujtYp9 phypf1UAAIEzAQDqFCE+ypcpEOAbG8CaylQE0B6ia8iVDnNeQL8mnqGYfgEA0FHk yyJ4HQPu9mOp5MMJhrCSoMXhcK1PZXflMpTs6gTCwAcEEBYKAHkFgmAoZPAFgwln mjsDhWR4CRAiK0gOtD4K/0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmeqwndAMhtIHES0it0+j4M4tliB4Cfo73SJ19h1eAQRuRYhBMD/rt7w kosYEmV3WiIrSA60Pgr/AADb+QEAkpg00dmnARcLLazSG5HrTX30dJuRHQ441E2T XyDQ+8IA/RbFf1jSMaRctqTsjRZYV5EKdJxjqiMRYoYqtXlIa2YIzjMEYAltEBYJ KwYBBAHaRw8BAQdA9jzLpvTbIZS5wrNjo5z+QG6JM1K1x/gyrgk54IPNCabCwMIE GBYKATQFgmAJbRAJELWKfaYcqX9VRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZyS3LlX1ZYPsLdA/VrUVqGQOM1/9sXQ+zjYX3qoKBZcvApsC Ah4BvqAEGRYKAG8FgmAJbRAJEBxmjdXoCcrKRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ0fT1Ln9nEWnJE8YqZvx+uxjIgEI86tsXN9h9dvh zou+FiEEKXpdJwBBEPDL+V1RHGaN1egJysoAAFsZAP4l4gGZDiyfS7IsOfVbWiro txI7yg+M/9lYd4jdbDxKKwD+OY9sR0BBtZV2Ko4ZmmmSAKt/OMubqRYq6mjpDnI0 qwgWIQTOIuzSgvIZqplZi6O1in2mHKl/VQAAxrQBAPBL3dTPaE8n5x30UFZdj7tx RG5Nk9/Qo3kQ0r+trTrjAP4p0gpqBw+6QtHQcboQ4jH/8cQB4bEOZHX76gqaVdI6 CM44BGAJbRASCisGAQQBl1UBBQEBB0D0BJudZnxQlhWR31x8zM8RkW9t5QQvMQwR DYGO1y+LawMBCAnCwAMEGBYKAHUFgmAJbRAJELWKfaYcqX9VRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3t0QjxYWXs7agaFzv6UgQHSic54 2OYyQiCKibR0e5myApsMAh4BFiEEziLs0oLyGaqZWYujtYp9phypf1UAAK80AP9n fqxHuTF+zzHE6Dx07mw4JZYPIDUI5jVlZz/ghiGy/AEAptd6ndzfrhjdVoInA2yK w4XmsfjZC7uR/nm0Fcss3gXGMwRgCWy8FgkrBgEEAdpHDwEBB0B4qZHfQfInnCTa dezJIlPzMQ29gHN5+BH8MoB+d9AAGsLACwQfFgoAfQWCYAlsvAMLCQcJEAOSU+8O uZEERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/Q7eerB MDLgk2+g5nwAejBdqRyXjOGJ1fPkPaE123iBAxUKCAKbAQIeARYhBDyTBEcQjm8a qSHZwAOSU+8OuZEEAAAvnQEA7nsdeq6C7fKnMafwcr8mlq8LEWQ9VOuV91yoJlov moQA/ijT9+pb1gVPMiHq+rBNjf1YHFm/Q88KJl5U1srjnmUMzRE8YS02QGV4YW1w bGUub3JnPsLADgQTFgoAgAWCYAlsvAMLCQcJEAOSU+8OuZEERxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6uqgm/q1CgEkCz2cAo0anFq/f+S qz1oP1B9QmKA+yU5AxUKCAKZAQKbAQIeARYhBDyTBEcQjm8aqSHZwAOSU+8OuZEE AABx7wD+LE+BV6/+eFoNJFZ8/BGau2XPC+3loNsfs1P0IMX5ZY0BAJGQZh2NSqcX OkQfypOUj827gkvLNghMLVVOJ1F4tr0GwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4Vk eAkQ/txuXEaqqxNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au 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 uwMLCQcJEBv+m6P0q9QORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ0lTT6gZJDzbeEI1mfkpYXEdav3ou6rP1Sj6oYCzfe/5AxUKCAKZAQKb AQIeARYhBDYwgunusi5QrTA9ixv+m6P0q9QOAAAFZAD/UxM4w12WVaGPS+qpcBjv x9eJF9slhLxKlf2nsBsdLZcBAPTyZs4j3bfMFXEFEe1bTB8gIrWaJ1T/F01Jo5Yb gn8GwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ+mHnPG9dy0ZHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JngdHIs35LPLXNdj9zLhkUs2Rg rfMgCAsxg293K6AW5wgWIQRTatViuSF7mDlmIFb6Yec8b13LRgAATmwA/385mCm5 AjB3Z78AtqooBOhwLMcLgbHAsVDU70MAj/PoAQDJS7dxIuj5uPE9yWf91rT7Sroj xCA6EJyRSYGYbh+9A8LABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJENQ3mp6uJqI/ RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZylYHfPaN8/G ztJ3ENlOHfeZswxNYzhKp/pSW90KnxyAFiEEL5DFxTsQ39T33H2y1Deanq4moj8A ACP1AQCxq7/B7oOvUYJhjygw30ts9MfM64OqThJYFisv1lOfmgD+Oc1731CqMi3A yZgNnrhB/wJTRitSn/ZgGzmCTeytRgbCwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4 CRADklPvDrmRBEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmc+6bn6PgbVa7KKpCq35pb8T0PspKXkMfi2B1EyfWh7hxYhBDyTBEcQjm8aqSHZ wAOSU+8OuZEEAABrpgEAyKXoy+4eFRKBG0/Cn8zn/DfwilXYmT2xFn2/a0uQPYkA /3+s6fq7Ml8oVRNt3oG0bTcaEugNQgSM1YRh96CGjkoEwsAHBBAWCgB5BYJgKGTp BYMJZ5o7A4VkeAkQ3JLWX69GUy1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn10U6FhNENGOyuy31MdAtZAI/kigQXgXfaUPUb/mKMoEWIQSX 5Aj3agiVRhBF11rcktZfr0ZTLQAAURcBANfMWaa3LhILaR3p9Fi+8Q0ONr29cL5e oTprx+x/JYxwAQChdD2trDF/hA6XyOWclYVduRSZXaMqRVmflKDzs+JWCsLABwQQ FgoAeQWCYChk6QWDCWeaOwOFZHgJEP7cblxGqqsTRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3j6f3Bkj6++sxUvQtAQ2HbpSZPPH+fzij52 rD+5yJmeFiEER5d3ayWY+X3J75TK/txuXEaqqxMAALiTAQD7Zvte3pOvFthdN3xd fAb4WLMvc22FOg1SniACDoeyTAEAn4RsR+4ENHViyZACVYHjhVIRumivUtn+311L TuZVmgbCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRCb1VyeEz6MvkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdL4w71fUeSVS1LtPCY5hX9 jtA97O5i0ucp/JLHAZbzUxYhBENSVXurc/+VtjLuXZvVXJ4TPoy+AAAjSwD9Hadq qhmCK0i40OuNZrh2LhxdoF9zbyptBsXAI/T02QoA/1Z2MI/IOFKYf/a9Za4TardY au+nma8clAJk6wWMljYPwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQpKqPiAul ErVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnefSBBCOg gbbDnyodMdUhIz7mQB1y84gKknbR62yvDmoWIQTSsMODXAGwwSC8VA2kqo+IC6US tQAAi5YBAIOWVBS55cl6R2MV9cCxtA3InVDkW2IBVjVbdcd/dFv3AP4x4zPlFqFE czEdeQu3EQmAQ+vpwq0CqzFKAI5E4xkjAMLABwQQFgoAeQWCYChk6AWDCWeaOwOF ZHgJEKltmR2kfAo9RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZxlJRHZ5WCk09zaDNI1Swbw1XGg/ASKe2DuIgkDjEh/zFiEE5htjHVZmvtyc JU55qW2ZHaR8Cj0AAMKBAQDB/xXWoas7M7z0WaZS+KX74Rgc/SakKZOV/dVWs5Ix fAD/XQPMgA8t9xXbfN8JlEt4P9pqsyLke/7If3YDwOHHRgnCwAcEEBYKAHkFgmAo ZOgFgwlnmjsDhWR4CRAlwsDug9apAEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmd1ffB3a03teWY3L2+LrTzRSxls8pR+6Dwgwaz53rukMBYh BLkn0G2SE36zT8fVpyXCwO6D1qkAAADWdgEAwrLyGsGyhTce2BZDdY3zJp0n4EQn Con9i9LF2z+hyTQBALZnNKHwxyNAzjXB7k3lpd1P64aRUQ+fNOtea0oK+fkOwsAH BBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQ3fp3nZHGmJRHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnwZ+LiiJUHgOvN3h1QMjoDEZ/4b2GlX1R TFCb1TCK+OYWIQR5dMBOjVtUDSPNTmLd+nedkcaYlAAA3VwBAMpg5y4EV/93b/3A oaVdGbaEGVf4ciLyt/8yRuODxy8WAP0elhSVvFIVHwg70jUOdq+5WBewS58Finnv erZjJ7NZB84zBGAJbLsWCSsGAQQB2kcPAQEHQCRJby++OASPZb8U69qYtUCgKTiK umWrZ3YjrUNa6kztwsDCBBgWCgE0BYJgCWy7CRAb/puj9KvUDkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcuHLMWEFQ970LuzIpf9onHus5H Grj6ZWUfV7gHwFl0dgKbAgIeAb6gBBkWCgBvBYJgCWy7CRBSmp9nLfo+r0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdtyDFj4FN5I8jSoDAK fNvIZw+pJJm7MTw8IMCxBkRiiRYhBGKF2IqHOhSuuJpchFKan2ct+j6vAACgwQEA zDUQS6+SBiywjwVZNkZJusTOWC/7G6aukrJc+JTfdqkBAM0ffg1+VR9wEcaonI1h dcEQcOU5hJNwZkoVN/yl/psCFiEENjCC6e6yLlCtMD2LG/6bo/Sr1A4AALRrAP9B YlxZwIaDVGHw2NWFg5m/gSiDxHH8He1X7bSevQNLcgEA1ybRNV+dkusq4pBw8g2k IBI9rhZQF4z4OJ6fouj4EwnOOARgCWy7EgorBgEEAZdVAQUBAQdAknUxqzseBCjF DwBh51XZ9D5VHZ8aexMxSghkJAyMlF8DAQgJwsADBBgWCgB1BYJgCWy7CRAb/puj 9KvUDkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcl3+Bp c3/uDjQyYy5lez7CZ49Lj2uNCtZ+3GMgqCjYxgKbDAIeARYhBDYwgunusi5QrTA9 ixv+m6P0q9QOAACchAEA46xj+sU4iOBzwIbe80TjGBOrcCj3n04WO7OoJgXt2D4A /jpDEuZ8vRGip7T6ESRCWsTlKpZa8z/usQoB3tcduG0LxjMEYAlsyBYJKwYBBAHa Rw8BAQdABVjfdQqmyC40BamLPinXyOey92rvEtXBjr/z74fREWDCwAsEHxYKAH0F gmAJbMgDCwkHCRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdbiFEiQ53wGAdYP7iF97rB39QoxrSp5HeUP24Y9exzDgMVCggC mwECHgEWIQSQqd0+dyHCIZ6NdNwq9qPuXXX6PgAA0hQBAMhv3PZNuEo3WPMEe2as 5lJCxcdaTykCMPM4itueETWLAP4wExvLW0ycP/It+pc7K4Hb0iuGvNwQc/iiAvN6 F8+pBs0RPGItNEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbMgDCwkHCRAq9qPu XXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf1fTiQ vmDbzcUDNTxTxSwWyzpJXQlRe3fv3SOl8QilYQMVCggCmQECmwECHgEWIQSQqd0+ dyHCIZ6NdNwq9qPuXXX6PgAAkDkBAIi039GPapW69gYX1Z49X9fMsZJpfnYXi+TK YWPS+b0TAQCNFUhNHARmHnAGP62zoskWFSjEbej4BnPj5mNrBM78AsLABwQQFgoA eQWCYChk7AWDCWeaOwOFZHgJEHjFfZ3pXBbzRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ8Wt81JYLnNSWQV2a+ZJS9wlqVNNunVS5AOZehUy 0JK9FiEEv8MaaeqUdOuJ/MwueMV9nelcFvMAANuIAP4lcxmKwTWOHA40dPv0enBl yDsemDwAjy8Rz2guTQOcsQD/SOVEwOfrljcrhW6P+3uVVGo2TmN+00bfvXvtV0xL vQrCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRBGlqXGKeox+kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme15WWPna9FBViLNQCz2Qid9XkU K10mrfbX6p/7+zD8BxYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AAAr0AEA1nRbrMbp LaLJtKOl88L3nm7iJDAsKzBC3IVIUm0HMowA/i0L0GmW8bge9UXgEA1DquFkMWTQ ylkALnEaWNvxlEECwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQLH/cU18GqhRH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnC26uTje0ZrYw 7+Zlidg6JqsulQKSwpliidJA6mpbib4WIQT9JyeLBRP4/c+4Mu8sf9xTXwaqFAAA HjcA/R9PFPKAUsFgNlVDYFPqz707TKhK+DfBmpGuZVnpLzipAQC05jQJO16yeeGv uS6gvJWrrMS8H3VsjKxsd/Lp2SXwBMLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJ EK/ohfk0vxN8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zy1cAIpoOz1Wn2BY8T0js6cWsQiJUpDhuh5R5N5d2eDrFiEE02RDEKNHj2c03CQ2 r+iF+TS/E3wAAItBAQC3WzB/cudTJ5kAtCt3cXCiRLvO8nkzGyron2UF5ZjWcQD+ JABJlfY7L8DMOKsExToqe4W1QW8WnVvUXeXG8flRFQDCwAcEEBYKAHkFgmAoZOsF gwlnmjsDhWR4CRB+XbQg5A6xHkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfmkk6K+FhiCoOXPo9BUNtEvZWKWstKD4M+IdAlwRMehxYhBLsJ 7O9Qo3Y7eGudjH5dtCDkDrEeAAD46gEAwdQXcLFK/nxgU5jFphp94fPOZLgENLcV wOlEa0EoQCQA/1P073GMPOJy0zVI4xjCVD/VQwGGAAJwI5vpSbPbxtMFwsAHBBAW CgB5BYJgKGTqBYMJZ5o7A4VkeAkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnasJLrqUAvEwWVGIdb8u7pH7HlXFTzQCLfqph YUz8WvcWIQQn41/rSGy/WxZgAnB4PxqPxyf8PQAA43gA/REgT+8lXW6j8VyYDRGF vvkHcT8lm/3jnfknFUlQwAsPAQDxcZudRfkctix4qFF1Xrw0cAVNG+1jmpK7Ygf4 sc5xBcLABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEAhT/buQDgWwRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0mSVTiVa1LEsLeRXludo1Jy m2hm39hlg7yWWwJca2CZFiEEosGd18mTX4tHm10DCFP9u5AOBbAAAG15AP0ZelFG hBE0a/v5Q8EegiQRuFa8Pf03gujgL13fTLXlRgEAgiuOdl29EyHRnPYRN+npsF8V nTwhghN/tGZK4AaxUwTCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRCWSe+Brv5R YkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmePe8ecNOXP 8VhKF7MZ3Szei6VzwW6uB0FRz+dRzRMIdhYhBCXY6quJRwW7ZNSmqJZJ74Gu/lFi AACnHQD/ZWQiUF3dnA7GldG84jcMQ5kxB6jf6NC7DKK5xlFMl1oBAIRS+sbh964r 5Zd8GZmhJ8iffVZahNI8Q7zuqCLMRzsAwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4Vk eAkQG6AZUGvmf7tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnweVv1nP0rN8SDeo4NcSdB4DPqYSIXGWZh9e8tx5dAOcWIQRG0vXO2b09Y6Ed 3+4boBlQa+Z/uwAAvQwBANnTvEvYneYpEsvpzCyZTlRgLkKbBGjj0kXnLPtbG63j AQDuL1iF5QIIA4Ih2lz1oYt8UH9RPcdvaYTPj29M/Hl0DM4zBGAJbMgWCSsGAQQB 2kcPAQEHQG6d5BjLaS2/vi0G/piQRZC0knXrhjVrU7Yx2GjiWNVqwsDCBBgWCgE0 BYJgCWzICRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmda+wX5AU26yQrJby9WWCOsj2aB9Og4yAZjxsjdc8AIyAKbAgIeAb6g BBkWCgBvBYJgCWzICRCZD73+aiwawUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfTChf3/L+Sk3AbZIzGA1Md/O1ULDJzomRSt46ZQDQkvBYh BND5l4KPlM9G3ospa5kPvf5qLBrBAACK8QD9E++Dm+ReI/xHNYTf5HmDcYstENJa burrAJFjRfBjtr8A/isQCV2g7RuIP5fuMgTmJ5Qvb59RtvZ6mMn/pWQZEIgGFiEE kKndPnchwiGejXTcKvaj7l11+j4AAMSMAP9aYWVFhc2qRbTx2iWVEIVeM8hcmKit cHlFXcTyO7VEQAEA/fl9Xru0acnYKjZ8/n3bjS8MlElfibFtYH0ocFMfXgnOOARg CWzIEgorBgEEAZdVAQUBAQdAOk3qr4rVxmiJij238LixgvADx0W58wF74TmYub53 XwoDAQgJwsADBBgWCgB1BYJgCWzICRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfHCJskTBsH5jaAcv1YtIHe15BetfU+zP2O NDJQtsTfjgKbDAIeARYhBJCp3T53IcIhno103Cr2o+5ddfo+AAD35AD+LceAz5+X 4TIAXxgZgTKOqMekOOndbcHRXr/qNvsabIgBAOurF8flSqxEHMmCtrqblnR8hSy0 7utdWgedRtGxifcNxjMEYAls1RYJKwYBBAHaRw8BAQdA7HlwOrAwXgWd9q2vIrq4 PHFiGBAj6vb1/KCtL9oLDW7CwAsEHxYKAH0FgmAJbNUDCwkHCRDNzBrIRkyP5UcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeyLcU9f0HBWmYs UaopCevoCyDjmBjhS0GqQ7pdStH38gMVCggCmwECHgEWIQRSd8FPnTeg9NYV3ZzN zBrIRkyP5QAAN78BAOABDmorEHnNvZFTOP+CVmqK3x5NAv/upayErndHp568AQCV rDk7MBrEx0HVBx5pXWYPJM1aKg7pdwXoB6hcJdrHDc0RPGMtMUBleGFtcGxlLm9y Zz7CwA4EExYKAIAFgmAJbNUDCwkHCRDNzBrIRkyP5UcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmdGi02iN4hObPYHRgTvB/12DVQ4QI5e/3Wr 7vNQkURBiQMVCggCmQECmwECHgEWIQRSd8FPnTeg9NYV3ZzNzBrIRkyP5QAA/q0A /j5SJhSRxtVpsO0zR83aFQkMcIZiQPwRIpK2n3hooF+pAP0eCul8AY4FkRxES6nF mpopIAf5E0VqtPKs0PGdxjH9BsLABwQQFgoAeQWCYChk8AWDCWeaOwOF/x4JEBug GVBr5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6ng d+PX5aEfPUD3jXmRt5nAfkL+fAp5gKE9rRflBmBCFiEERtL1ztm9PWOhHd/uG6AZ UGvmf7sAAGXQAQD8xo5dITHGcZ3FNyJP/VM77hI0Mn7oCZhxrnXQGxy0dgEA1p3q RUNJxaKVzpK5fzcNLEbG1IP0JrzWZYreq+AhKQnCwAcEEBYKAHkFgmAoZO4Fgwln mjsDhWR4CRDUXuAibV33HkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmeNBRMcd40ckn4tyMScOixaFWQrpidtFyNBofU+rxD3dhYhBLQq/TC7 G90uueu9uNRe4CJtXfceAABkPQEAwU/YBurtA6YLJzfVjsP2xFqrz/0Z/MfbflnF wBSfpowBAJrG8uAYEMKmH9oKb0KeBQ+GTV+dxYh0hUiWgx++RT4BwsAHBBAWCgB5 BYJgKGTtBYMJZ5o7A4VkeAkQ3MOidBCuKj5HFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnedTxd81AseYxTXsQDk4o1Co15LJsfoVuGmeT9SL6 plkWIQQMYNQ01RPEZbwHQqrcw6J0EK4qPgAAPbwA/0lHmOADs9827+9KHm0EwUPY nIvG6THRW9NClIuq5Gs3AQC61UAdXQRAcVaGnbjggI7PCLD1RISL+Dk3V089EFO7 AMLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEISt2wehBX6dRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ87iNyls83wCU41mOSc58aUWEEea 0hvXYqoDoSDVrF7nFiEEKLdKp8UXchw5rIKHhK3bB6EFfp0AAN0ZAP9sBCv24atp eEf7jBvJ5gIoyHwgPUnFh/GV5xeWfqrVqgEAwZKA7rRpwf7AElzkv3yZMeZfh6f7 KW4qFD7NytYmJQfCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRA6w3veMb5loUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmczWD+355UtSS9y ox9DJJEWDFSsDEy9/TwR0RHQGEDQexYhBFaMN2Ijb7x2hUvU5jrDe94xvmWhAABx ywD/dx20XS3RkviEN+K++qDTT7BEgfBVXrv3l52tEY7TqfABAKYpYKS+wJOn9SA0 HdpLxyipt1avhEuxL29nsyWBVXMOwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ 7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Qk34rmjQlOB5Y14OQzlc/Zh9DUMBQINHW6nDHbbNslMWIQRscAQ+GQNb1agFAETv EDA2AyW9EwAAX+MBAMX+kWsd+n6WdjD9dtcu8cuLJ3sUiQppL8JZFLak1IpwAQD6 Otk07mQWR2v3WDdk7JI/fCMO+HUXJIH/nO+SXFPnAcLABwQQFgoAeQWCYChk7QWD CWeaOwOFZHgJEPHFzCez2ZfxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ7AUrLULZssE0Z13YGrf3NdvNW79M4eMlLfQHYdPF3DwFiEETtal Mb9iUefDbEU58cXMJ7PZl/EAALQBAQDo4xo/X/oFz0hf03g6Qs+Uo6a2J3egj4UJ 49SJwN3E0wD/cVnqlfomlkCPpn2MLqx6yVwdNmcvD1caFTG5DPj37AfCwAcEEBYK AHkFgmAoZOwFgwlnmjsDhWR4CRB/rbHD/vv+WUcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmdgjJsRQ7gM6JAaVnRSd9hflzn7/26DLoAPok8Z q+ZklhYhBKDNh1gsIXQ8DjBjf3+tscP++/5ZAAC/QwD9H0vansUWuim0vy5igMiX 1yk1Ph7N07v3MSgATyOCC2gA/A5XOZP9QKWwE5lFGQffWQ8DqLsLMxY0fQqfIytV NgIHwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQC6zTjS5tK0NHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jngoiz97wGvkDhvQtK5N7ZRo83 JLYqvAnrmc0ob+/TMp4WIQQPv5pIpavlygCU7kkLrNONLm0rQwAAvDUA/jcPNXId J5xyuNQzqyQMDCjqKDXBF+N1YZr4Wz9iESo3AP4z77on3OYGwJq8bP6k3PI7968/ rJ75JJxnDaEJYcRLC8LABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEBCpuzAjy/VY RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0YqKXDAiVSk HGPPNmp5YLCRzYlUhg+2pPsN1RgblrSnFiEEvjfbxGr4BCid5oS9EKm7MCPL9VgA AB2lAQC+z3TMs7vgfkcH92RrQn9tgphkZgCCQUeFzX1aqMOYdwEAirZeP8Jvqbdk zT0vlHdQzuSF74/xEkJ/9j5rCNLvOw3OMwRgCWzVFgkrBgEEAdpHDwEBB0CDgOdt ErE43Qt4NcWx4iIYFIYotrRd09AjT7ImXCH4GcLAwgQYFgoBNAWCYAls1QkQzcwa yEZMj+VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn4oO/ bLipkGEYdys5wgmydV21XSEAFTzAwdwr/1qENgcCmwICHgG+oAQZFgoAbwWCYAls 1QkQTK8vHVBFBD5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnZsigNc4hOoq0s1EVTOHfBw+7nmuUuXl9aFUS4/v6q2kWIQQ+hiNeL53tRRll 7HhMry8dUEUEPgAAJXEA/3TgC7hzxh1jYeidQ/2JntZrAdqdbzp/Ev2gnEupoXke AQCNWp9oSpx3RVprUhpwhqncIWWQ3CqR2HLKtMmhcTAWDhYhBFJ3wU+dN6D01hXd nM3MGshGTI/lAAD0jwEAlgbAzqvkI2lJq8UM51EM2vF3DSTlGSJUFj/7Ve1TInMB AM8i5IGD3vxQcsNp+doxxHWwpu0dMagUIFWUepc/i2YPzjgEYAls1RIKKwYBBAGX VQEFAQEHQL8k3TlAU+7EemZvksBIqHnawR4eN22BsvhiQ8bH1K0yAwEICcLAAwQY FgoAdQWCYAls1QkQzcwayEZMj+VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnOjD1OOuMup+pVlfVq4Tr1zzKu88ixAzo3g8tbUe5ZfcCmwwC HgEWIQRSd8FPnTeg9NYV3ZzNzBrIRkyP5QAAXIEBAJajCoW/K0KAtRcwGgwASA4E esKAaiSPfWNPRxaGr8gfAP9HQVUQNB1Lyu/M9XA8gdNRviMH/qa8H4aLRByedorD DcYzBGAJbOcWCSsGAQQB2kcPAQEHQM1l4w7z32E/iofSAQtzs0HgIco//F62KmJz VahbbfinwsALBB8WCgB9BYJgCWznAwsJBwkQ1uhlo7iPiIFHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnCK5/VliwgUD6sw1tb2ruEDkbSPSh kX1SvaqIzLZUxaMDFQoIApsBAh4BFiEEvmxXIe3LqBdMWdmW1uhlo7iPiIEAANYB AP92TLqga9jS0XNOn2HZIXfhJ2J1904K79nluoKWP78LrgD9Gu4UdJ7ZDCqNb/Sy WbfNL8h6PU1Vnuym6VsUqKMCLA/NETxkLThAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJgCWznAwsJBwkQ1uhlo7iPiIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn49/yCgU/+PwBNgDjuYrtoadrQWtsIGv6otEj1LAXmRkDFQoI ApkBApsBAh4BFiEEvmxXIe3LqBdMWdmW1uhlo7iPiIEAAC3OAQCH5H/avCVX4NCE ixPdpkzgPzQNjucHThh6P/ucuWCsIQEAxYKbIG3Dwe3UoqadVVx86SPv7Z2ZsI4V quKezL6YlAXCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRB8eoqCVBrwX0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeFkQjjvX9+7+AofijK 367m7OLa9ORfK2+izkfxHlQUJRYhBMsJYcFqJinihVthQ3x6ioJUGvBfAABGdQD9 EyaqJ2R0/NGskLnIfIoyt16As8Jw4ar9UXq+OzgNDN4BAOH1yVsRcD6oADk733kh gfAp+qP+LMq6DFY9ufodX0IMwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQpU1d Y7C/xntHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn6VXE J5mF9v75X+Cmf62hS5C5u+wZw9haxhzscvM74UYWIQSjW9OupyNi9cOmEJClTV1j sL/GewAAxZgA/0/me39d11r6aDchvCrDoOrDYIM5IIEqy0pp/ld4246AAQDSz5U8 o+etETW+ltHVU3HD/fwPBfiEuvtLp8gdDZ7bAsLABwQQFgoAeQWCYChk7wWDCWea OwOFZHgJECKHehKLb6sxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZyDHI9KcNuZARDjqsA6r7Sc5+x6i/8ASH6BC7E9eonyhFiEE8wK4PpDN asPjxZ07Iod6EotvqzEAAJgCAP92DfzM1Dy50pnUn0r0JOjP89DIl87oE0EaysGN djxaogEA77yHLukxRtHS9OgxvY9gzUAPEp5dBCtSnF3eDbnfYgvCwAcEEBYKAHkF gmAoZO8FgwlnmjsDhWR4CRD9nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmdC9Ybv5PNcdVWJaHppE7hJ7fJF86UY+XJRRjWMZDBm 0RYhBBPIuNwgIJyw4VVk4f2diwFXRQILAACyrAEAhYy3dDmFY7VmwGDbgFQUsaGn 7UiUCjFv+wTn6KVy5GUA/2GeZbJaB10SLSQbkVZOrx4l5SJi47SWgVE5liCTuewO wsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQWKOCMX9U18VHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn0Z5SnKVujx8Q54f7WIYY0Ic5bwpO yT+CeeAmL1/6mHcWIQTPcB53t5/r3t+ItFVYo4Ixf1TXxQAAigwBAIZdiLAj9fy3 KvtLXHfDPXaAJVEXjB9+c54XkMh5GOCoAP9JQQexryxJVf2EyQmXuphLratUnqvE k22ss48/dWxoCMLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEBZpglYeFAwDRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxKxNT/YMoT1d++v tk1dBjEAK+P/pRquaHJXO3+MSIJvFiEEwkzAkQLSLjjoOTxVFmmCVh4UDAMAAL27 AP9YDQ2ahzHVIAT6vZRIz7qguKM+Xt/5bM6DT3Kr/SjJxwEAvN33+wtU3j6vQUHN eJcCY+sOyExYhjF9Yutfn0ATYATCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDz UJkAfv3YPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcp kThTjirSvZnL5eW8di1lGVobgHziCrg+Mf5b62IIARYhBKNx4aCK7hlVS9j2/vNQ mQB+/dg+AADttwEAgglmv7Ne7w69QzESbZ8QTuW9gA4R37pevK/xAoYKmoYBAO/E pfh/tOqNFz87M1Ut3ooPngOG+3S/TSqGp0eyspMEwsAHBBAWCgB5BYJgKGTuBYMJ Z5o7A4VkeAkQ7kdzDl0dc5BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn/9YP688oAdV4/gsmJmLn39c67olhoPLQOrAxJzeL7mkWIQQW4Qeg aIbGweGkR8fuR3MOXR1zkAAA2lABAJFnvcYZkH9EO3itwa4C1kcXGM+s7T1Fcrc2 FbPKg+NrAP9dS6VrMmOSySEcz1PRxGAkGxoY6B6lHSI/ulNl/dH/BMLABwQQFgoA eQWCYChk7gWDCWeaOwOFZHgJEOrXL/eRQHiyRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZzQEj9tBq2yrYnKMUIVgz1bOWkzi3Knwgao08nW1 o4MKFiEEeoDbUzC32QDVvR+C6tcv95FAeLIAAO9RAQCVj9BKT24RzQcpinWHbdye 55iVkQjuJTwcD1n9+hQ68AD/auuqsiEuTI13zLiXC+iMSZHZkg5w2JOvtC8I9Yv3 /QXOMwRgCWznFgkrBgEEAdpHDwEBB0AHnvSC3LMsNwacQrBuzKHowBlTdn+Wer/9 1If2jZOr8cLAwgQYFgoBNAWCYAls5wkQ1uhlo7iPiIFHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnKnc0Eoe/qc5kh+hGjktGF7mrfTXl12Bu KrUHyX28+NgCmwICHgG+oAQZFgoAbwWCYAls5wkQtvtPw5lXvD5HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEa+yYW/Y7h/BGYQt2UBEt0wV 8m6Uxm8KgZp5BRCNMvYWIQTjTg1/RKa+hArbgMG2+0/DmVe8PgAAV+8A+wWdwvpF ecp1uVRySdNecpzRexX0wv7unMQn4nv4QwDpAP49nYkK3e5a8uTioIGEL+w/ZmQi F4b7Xb207klG6HrzAhYhBL5sVyHty6gXTFnZltboZaO4j4iBAAC34AD/b0j5Vl2B xacFXNniy0p7XYKGGmCLsebv2QFPG6IbjbsBAL5Ghj7E2DxSwmJBvv75D4IFulzl rZn58MAsUEPHaO0BzjgEYAls5xIKKwYBBAGXVQEFAQEHQCiJsFOW4rBQTgKgI1Tf qy2IS0lhBSVSuw+sZkhjj35NAwEICcLAAwQYFgoAdQWCYAls5wkQ1uhlo7iPiIFH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn3/diuBiRIKYH fBUxocDmWGlrfzYnoNHJsxFTATJCUwoCmwwCHgEWIQS+bFch7cuoF0xZ2ZbW6GWj uI+IgQAADfQBAKcMcrACHGef690DeigLhadnS2CuVtWhCnW9Lgw0dTysAQCv3t99 ZnXni8xYCLvwb5Cky2RQ9NK8dBjnvJUuoM9VBMYzBGAJbMkWCSsGAQQB2kcPAQEH QAMnHPrfSjsqG1Glc3VV0gZNzqyOL9W+vzq2QPFicEqRwsALBB8WCgB9BYJgCWzJ AwsJBwkQRpalxinqMfpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnH25tlvrTopi4YwFD+dypzCt1LNnZtKbATV87yLt03tkDFQoIApsBAh4B FiEEkrsaVgv/zORxewXcRpalxinqMfoAABubAQCkEnTJBMRfUJed9zNwBKO+YiQY +wPczPf8OpZczjmgBgD/Q1BzY7p9Mwh/JSH6C6Kmls6Vbgw5k359phefeKPU8w7N ETxiLTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzJAwsJBwkQRpalxinqMfpH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnheM9PqD3R9Oi x5qknRwV4u3SxlrTaLaMK7Tyl2gINngDFQoIApkBApsBAh4BFiEEkrsaVgv/zORx ewXcRpalxinqMfoAAHj5AQC1VgAAkTsHFgjFIxCwiFJ7y9Qac5e50fm66K0mMSM/ vwEAr08tafiS1LwSt5P0eTDzUi4ZxovrlAihZw/ojRX6HwLCwAcEEBYKAHkFgmAo ZOwFgwlnmjsDhWR4CRB4xX2d6VwW80cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdTyDejvqLjSgJxR1FtatvUW4L9O+f0StGSgUB49oH46BYh BL/DGmnqlHTrifzMLnjFfZ3pXBbzAAByjwEAuwBagJF3lK834HMDLdg0HMJ3kaTp SLXFnvasrsM6uHYBAKnl9rHv6WLVwkkhGJL5db5lBk+uYDsbtm6e8g5r5QIOwsAH BBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQCFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnBJlwuHgAbEYnsgLDRLLb0zXs+AEpdvOV 2azRM3V+UXYWIQSiwZ3XyZNfi0ebXQMIU/27kA4FsAAAl7IA/0cPxJS+XxHcWJ1w sEJdq0zxXD9zo3zSvBGfLPt7ZxvHAPwOokIDfCw332abSpGetsgWHcFE0L5xamCZ T1n/RyXrCsLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEH5dtCDkDrEeRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9SdwWtWEjsFBDtmIFbX hZfin5Q5v9IJiYl4pRD7btJLFiEEuwns71Cjdjt4a52Mfl20IOQOsR4AAGEEAP9v Dl3sAdcjDeYMGMnkewHytpCZVWJ/Vl2gbFJMAR4uZQD+OQ4Xbxup5Y7998FH6oOT zYHslclxaJWITebu9qUPmwrCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRCv6IX5 NL8TfEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcpzwn/ wiJsrbrZtC2XTo+DMpoRF3WBwF/1NkqLZsOVMBYhBNNkQxCjR49nNNwkNq/ohfk0 vxN8AADd3AEA7vokCTRX6t8zpHhWvzbgjfPhCft5wxFG9tFwX7IMFhYA/0eX5Dxf WNao7rcTQ6sY5EKSoIDTa2/fV0VqflCDhOAFwsAHBBAWCgB5BYJgKGTrBYMJZ5o7 A4VkeAkQKvaj7l11+j5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnRZC31QeQwuCp2dnDFGj2Qw8Jmqdwrf4AV3nHUk1CTOEWIQSQqd0+dyHC IZ6NdNwq9qPuXXX6PgAA7QwBAO9kqfX9aHqo5HVJynnzpNRYJisq8ECj4iWN07ki zs06APkB8oYN1QngYSw79homYsY2w7w8eTNL+bOdykHogeW2CsLABwQQFgoAeQWC YChk6wWDCWeaOwOFZHgJECx/3FNfBqoURxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ5MdClJBqOnhGSbBfyFURX4JX/+7yDEuaoTM2ao/AOHT FiEE/ScniwUT+P3PuDLvLH/cU18GqhQAABdgAQD012CM3ZQzNQ9xchFZ/6Oao+OS YoB7U01eKtoN3PcdywEAqZ/BiKnWxGb9v+GW3J1GeJSKlo737pHrC6hWdsphwQ3C wAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRB4PxqPxyf8PUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcc/xk8398I9Tx9nXTObhH0wfDlp7+r x/Ym6cPKcyrjYxYhBCfjX+tIbL9bFmACcHg/Go/HJ/w9AACwbwD9FQDxK5unieso PAg3nYYaJCqt+lFo5OlQWtWB5q+RbhYBAJSlm5IdV1J5LG5SA4jbKqgwKIIZWTW4 I0E/QCZ93FcEwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQG6AZUGvmf7tHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7bmPL/zm5ZDExSxe wtzvr9DdQTu52VoIjpM+uu+7gcUWIQRG0vXO2b09Y6Ed3+4boBlQa+Z/uwAAruMA /1nIOp7mLqu4VFcUu6C1ED1bMJDnv5pRCHMk8jjCWNhvAP9PKxd0gu7CkJqeUI7s sm/ad891AkGnWJCIFBd9HyawA8LABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEJZJ 74Gu/lFiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+AO DQEkFGMfJtfXk3e7i8aV+gO8u+ywf3mAxhVS2BRqFiEEJdjqq4lHBbtk1Kaolknv ga7+UWIAAKvPAQDo639E0eeVtFzICT02nlPDSZIlflWL2xDv6gsvkCyJTwD+NX2G Tn6avaXuotxqnJjBNbUpil59jAWk93yihWuPsQbOMwRgCWzJFgkrBgEEAdpHDwEB B0DQpK4DJWWa+LT9ctCX3YfJ/lDTmExWRUEcdAD4UWZJOsLAwgQYFgoBNAWCYAls yQkQRpalxinqMfpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jnm/xOReYc7ZGZodedVMiU22SNR6W90Smn17pEmmmD/2sCmwICHgG+oAQZFgoA bwWCYAlsyQkQ9t5osNxNRppHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnyW8jeA5VCIqXiLdsuKXFoAL/As89tgR7ax7uwFfHkJ4WIQSAjPWj /PKAf5GJVgz23miw3E1GmgAAk1cBAPOnOdPXHOTD5JVYenpvzZ24OCL759YRcclD Xp1xqIkWAQD8zfb8odfQ4z9SxYsp37MILkN9TCZhQ4XtRvnUEIhlDxYhBJK7GlYL /8zkcXsF3EaWpcYp6jH6AABbOgD8CEQiKUz/Al2XMm1s8FebybOYN07MRR1X1T6J P9kwY9wBANYE5uQi7UqucVTJ4tTB1ezMddQOwSQRb5oWtez0TZYAzjgEYAlsyRIK KwYBBAGXVQEFAQEHQDvsyrTgwbnMkS3RdFtP7kldbOdj4bhNTt9FY6XhL45ZAwEI CcLAAwQYFgoAdQWCYAlsyQkQRpalxinqMfpHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnLCMcGb5VvZ//lefOvOWHpQmyjPND8USGMI9/GvC9 IIkCmwwCHgEWIQSSuxpWC//M5HF7BdxGlqXGKeox+gAAkkwBAKMvTxKEs+hLsUKd eS0vsyK0uMRtYUhQ98+I6JRpk9G1AP0YqHRWMRhniizMet6bh8enYnFHlCzZ2YfG miSSR9lAB8YzBGAJbQQWCSsGAQQB2kcPAQEHQNEaUb+6YG+THiAfKMcCWv+glOGL STT2P17Amar70YBhwsALBB8WCgB9BYJgCW0EAwsJBwkQIitIDrQ+Cv9HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn0yxXpb0W6QrzFygR4fhx 0JE3hSHfFtNMkOoTI1XolBMDFQoIApsBAh4BFiEEwP+u3vCSixgSZXdaIitIDrQ+ Cv8AADiuAQC4b4Ntu7YzK4cncnlMXHxk4VRzkorizASFKEXA4km1KgEAuK8TGBmX JD85pIq4j7X8XfSgiezYXmET8ORFiAKwiwvNETxmLTBAZXhhbXBsZS5vcmc+wsAO BBMWCgCABYJgCW0EAwsJBwkQIitIDrQ+Cv9HFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jnen9zZtlggPIcaDRHFoW3HuwYdZ6YK2P3n/73F7Zq XkMDFQoIApkBApsBAh4BFiEEwP+u3vCSixgSZXdaIitIDrQ+Cv8AAPxkAQD2hjXR ytrQKCWDNvx7UBkA8+NK3XutI+YB548Mca/zrAEAuGew2RW9+OoO6078+fiDoHmB mzWiRoBvtgEJtBFetgHCwAYEEBYKAHkFgmAoZPAFgwlnmjsDhWR4CRAm7+DgNaxS LkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfas5XkVGOz 2VzXmY8q4KOgK/0ZFPl+A0omwWoKWLhOnhYhBNHp+FzvYnFpn73lqybv4OA1rFIu AAC6bQD4imh7+AuQ1RhpmjPRVtey/8MrrI4dpCCx4PRSgfM3zQEAizBycutEI1oa WCNGK8NtW2lrkWX0GuiAEvNM4OR4VgrOMwRgCW0EFgkrBgEEAdpHDwEBB0CSOrJY Z1JDKgyxrd0MvqKZI2Y7g+nPS6ol761D7+ImGMLAwgQYFgoBNAWCYAltBAkQIitI DrQ+Cv9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnDynv XYrbgKWhTrAFJgzrzrMVHEQkJGaT5Vk4tS0+idQCmwICHgG+oAQZFgoAbwWCYAlt BAkQLFAsJ2GltyJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnC6vNNaHEndBjrwxFWuBQ/PG/FbNeQl6EVOsFsXTw2f4WIQTFOQMSYPQyzHQ+ 9KgsUCwnYaW3IgAA2PoBALgqPglGTZfywiNp2HAl9FJGhw5RDyGjjatElrC3SkUO AQCVkNxQfuny9u3cPWeGVS0vQRKH5iIbjG6tr4vWGHoSDRYhBMD/rt7wkosYEmV3 WiIrSA60Pgr/AACVmAEA3CmrgNv6xh5a2ExY8RHnEFw/tb+oKSlVXUtlluwI6nEB AM9aUHiu7yDjVRFft55U40T9xx/7IJO0O58iSB7tZVUKzjgEYAltBBIKKwYBBAGX VQEFAQEHQHK74Z5OVW+KcpTNh9YuZhP7X1FftJON7zfkOgOtQJU8AwEICcLAAwQY FgoAdQWCYAltBAkQIitIDrQ+Cv9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnV85fO1cqXOqSS0lJpbeuIGAi61kZF+PEL2Dood+XUY8CmwwC HgEWIQTA/67e8JKLGBJld1oiK0gOtD4K/wAAO0sA/RMnqjd/fIeK2DXrgQ8+VHqC TYHp8QZLHM9XM4PzQ+RhAP9/U2DcG8VMR6Jwzs3LT1k71p1G4MglVQuYoJQUBOmz D8YzBGAJbMgWCSsGAQQB2kcPAQEHQGVceqc+K5+5n/wcKizTElbv6Pca/PwGM8Nx ERF97j1HwsALBB8WCgB9BYJgCWzIAwsJBwkQeD8aj8cn/D1HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnkWn+7HqLE0siCDuhYDkkAC5gl6hV YyY+6c3zYnfSGfoDFQoIApsBAh4BFiEEJ+Nf60hsv1sWYAJweD8aj8cn/D0AAOl6 AQDWTP8S6+D5lf/Lnn6ct8wurEcxdCCqT+1464pG9kxC0wD+IvyNp2Uz6P88I08E xAA5f5cEo26En3Ocdwaq0RuRKwvNETxiLTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJgCWzIAwsJBwkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn+mKyPk92oQWxU9P8vxPFCaVEkXo0Pg8RV3W3gLlYiZADFQoI ApkBApsBAh4BFiEEJ+Nf60hsv1sWYAJweD8aj8cn/D0AAOMKAQC9YlTghZBi52IM mxpoer9q6CDxqkCm7EFHU33LGkDa4gEA9QRd7eiOpVC1mDe9wbL5xT2zpFHj+1Ci zKexCtfZCQ/CwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRBGlqXGKeox+kcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdwFtargqlOBhNnvsK7 QfPuH4H9ao2py9Yut9Ar6gVN0BYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AACogwEA 048zUDoyb9wqilIP+ohLFn76ysdiHFcBK2jON3KwQUYA/2Jp3cxU31M1Yrb97zCK JypWdeRnyJscPdWuzM6QpAsJwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQKvaj 7l11+j5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnBOUw P2II2dh9LBSC9BfleO+PaMr81Pt1IvfwuAsbs/IWIQSQqd0+dyHCIZ6NdNwq9qPu XXX6PgAAr2AA/RZ7ZBHoddAAH+1kY4Sao29XV7rs1XJ4Z4iYY8FlkALYAQDqnnwa XWZ6RzPey5QPfbBsY2A8V/yDGCLtqCCNkdcJBsLABwQQFgoAeQWCYChk6wWDCWea OwOFZHgJEHjFfZ3pXBbzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ9FNQNYYIhGelcbuf3hiAyHBx6Zz7SpYxzPXOwjY2wY5FiEEv8MaaeqU dOuJ/MwueMV9nelcFvMAAI2zAP40rBQ6hx4I1F60yoGX7giQYbRPXpmMEaNjOQVx FM9QgAEAriKF46vpOcG0AUyWBFyYGaA6Cddjct/SGLv1z3Fu9QHCwAcEEBYKAHkF gmAoZOsFgwlnmjsDhWR4CRAsf9xTXwaqFEcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcHRG4xsqcXF8o7ZUMQV5hkEetJVAXBhEYVofqccqyY pxYhBP0nJ4sFE/j9z7gy7yx/3FNfBqoUAAAQ7gD+PG/JM6x+yEqE9T1Y2mIrQ8cb VMeOzwat7DnFFdZEBeYBAN2Q7PpUn4CSIzIM9ukjvku8EOPZPZfqavRlo5sEengJ wsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQfl20IOQOsR5HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7ujKWgsPy1Z57o0PCCVSuA5XdGod K0ATRvz6/vfIo9cWIQS7CezvUKN2O3hrnYx+XbQg5A6xHgAAceEBANY1Nfl0f0jq KW8xfBxIQse6o6Vo/Yt9g4ReIkXsaM9kAP99jQfSfA6VBDNvwtC63UvMacgc5J5x SjwVxdyZ0sVvBMLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEK/ohfk0vxN8RxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2J8c3bvJRSTj1Om S++1tpXFgoZDhHyGf0oStLM3pLoBFiEE02RDEKNHj2c03CQ2r+iF+TS/E3wAAO2e AQDcEHQimXw7nSq6BoeYWZkyBCvxj2u3wboIUqGms3HoAgEAultK2NdGRHl8T/SS ogdYazztmb4qL+jHIChX5EzRKATCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRCW Se+Brv5RYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf6 4+3SlR4Ag6xpqqKcDzk5vCu6mmmp08R55Zx6zlohcRYhBCXY6quJRwW7ZNSmqJZJ 74Gu/lFiAAC6PQD/QjxOAziQgSs6niuPOwYNneluemallQ3eXqM3jeQMUs0A/0GN IV7hHofvNqoTSaTAiXvX7kN8HEmQZvhjT4l+lTQKwsAHBBAWCgB5BYJgKGTqBYMJ Z5o7A4VkeAkQCFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JndPlJj15d7zDckTLwsJ6aarqCPFjkJsTdrkjyBeyTfvkWIQSiwZ3X yZNfi0ebXQMIU/27kA4FsAAAOIMA/3CKPO9g3uF0wcZiRK/Teb5ppn+4Zy+3PiiK mtRHf4X7AQCJQWewhWvsoAiPLB1f7WTNodd7eIgRjdKl/Na6fMAGDsLABwQQFgoA eQWCYChk6gWDCWeaOwOFZHgJEBugGVBr5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZycIBRN9VvTpkqDDaBwGoJhwz6VTEdO7n69LLlvB o79ZFiEERtL1ztm9PWOhHd/uG6AZUGvmf7sAAJ5jAQCBpZK+Xe66J/OTmFG1PAwi UQF9WgotQIxbww+a6/p8NAD8DxnzuRpaZjdiwPJ4yG67Sf75xb6/N+TojM8U+ngd 9AHOMwRgCWzIFgkrBgEEAdpHDwEBB0AKNFzGBzORNWcjz0b1f8CKHqfcDBpr2n+Q MOdmVPUyJcLAwgQYFgoBNAWCYAlsyAkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEcP4YHCoq2QB+H8vxXRsVmumkhoi4xOi pz4pQLUFAskCmwICHgG+oAQZFgoAbwWCYAlsyAkQPRMwb1hku01HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnFe1ejxptFXnFISD0BgfQ+vMu 5hxRSvgB4w+Fs+4LfGoWIQSfuvMPjW3uC0tDh7g9EzBvWGS7TQAA6VcA/0/z38Fi n71F+oS9IOLWIriu6ZtEIGkyRmQMWMFcDTVZAQDg2nVIoiSDUZnPxRmlX1WDzWA5 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 6onBAP4u7ycufDhVYy+3+7ju58o/RkbVqPRxLIa3k8rn6XNtCcLABwQQFgoAeQWC YChk7gWDCWeaOwOFZHgJEP2diwFXRQILRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZwhfvpi2e62IIpAt7gGqvbk/8JiOgBZI6jOzLLnc1cLo FiEEE8i43CAgnLDhVWTh/Z2LAVdFAgsAAEGTAP9MXv2u/5TALNvUqhsAzoAMVtRt cOwncgsS3FYF4nNrZgD/UNefvwvXf334TdmMn58bTfimvpoEJUu87VoQfGjf3QTC wAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRAWaYJWHhQMA0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdLxvi7L0PAw954QaFAvgCfceP+D4ll pdkaCD3tnhPZGhYhBMJMwJEC0i446Dk8VRZpglYeFAwDAACExwD/Xi3A22xYbzVH aVt3kZO5HcbGbqsxKdslzLecLWIMu54A/23VYbjGqGwoTGdbUt/p2MLtZoBRghaZ AVZMSHnsr0QFwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ81CZAH792D5HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7Wupldw6A6VdcdsA dyQAbyeNZ6tU/TBgYg6PbCm71AcWIQSjceGgiu4ZVUvY9v7zUJkAfv3YPgAA708B AKsDptsaq9v9n3t6Qa+aE9SAG344t1V0DASeX3Y2jnzUAQCJ2z7IOrYqySA9TkaL 1nzsHGYAmxQiOi36tdBIzJmiDcLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEO5H cw5dHXOQRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5qw eRel/+63ibbaYsdmd5PBgtLSxmHph4jZsc48tUzpFiEEFuEHoGiGxsHhpEfH7kdz Dl0dc5AAAFmqAQDAMOX/PgzJ5HnUHVdEYZflzmnWtHMcqFvEcUUBbJlq8gEA9BGt 5t49pJ+6K0ixh3ybCP5Ou1mnHQH5y2KLNjzKMQ7OMwRgCWznFgkrBgEEAdpHDwEB B0CFcZHV3mwFznHkFkRIwZL/Bdd+dzV7a/et7AjQ7fVw0cLAwgQYFgoBNAWCYAls 5wkQWKOCMX9U18VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JntZOV/f+0+Q6p65oSxiJX9/sOaWDPU+tv3E8T4nM0WDECmwICHgG+oAQZFgoA bwWCYAls5wkQDJOhF21VslRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jngs0vLWTrKz/Hg7D0bjxjPeieETk7u2XsAH9maYTNuKwWIQQt0h/x 1ZdY4hm+J/gMk6EXbVWyVAAAPMsBAP0VhGNOy/Xam+HuBMMDQLH9VN6/7bAuhS90 u13jORz1APsF8AuhEu0cTNLX/cKD0s14Lbd0wmtlVm9sMIAO9sPwBhYhBM9wHne3 n+ve34i0VVijgjF/VNfFAAB8wwEAkVOm53SCJPHelMhfisoNLnjTn03rh8qU0T0Q v0pfAlMA/i4zOyGV6UFnTnz4MkOhO/x3hY034gpwEZ7ZESCiJHwBzjgEYAls5xIK KwYBBAGXVQEFAQEHQAZTNYmBRmY60anvm0/EcJaDBNc6QeiGYCegrNv+c6w9AwEI CcLAAwQYFgoAdQWCYAls5wkQWKOCMX9U18VHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnZhp9iyUaOuzHjCdZ6gRjiql9eY3LrtyOue/xUhpM 14ICmwwCHgEWIQTPcB53t5/r3t+ItFVYo4Ixf1TXxQAAddMBANR52AqbzLqyhGLQ Pq39aMaXDLoipHziPWdEngew7EHyAP9PcRXuUBWyrjuvfPCMDu8VgfcxgVSpAuHO 3FDtz5UGA8YzBGAJbMgWCSsGAQQB2kcPAQEHQLLtWBJZQPR3t7OVGnHIbQxxArag t5mXL9McR8xN5aEawsALBB8WCgB9BYJgCWzIAwsJBwkQlknvga7+UWJHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnIY3FL6Tc4c8VXWnMtnpw XT+OCyco2kng93yLVDinRlYDFQoIApsBAh4BFiEEJdjqq4lHBbtk1Kaolknvga7+ UWIAAMF2AQCGyrx+WR84espQPBDUcM/OPJxXtccM0EuWphCxO97loQD+Kn9FhWVd lL5+aSn2hjrbEVVG2wa5+Ves+JONK/He9Q7NETxiLTBAZXhhbXBsZS5vcmc+wsAO BBMWCgCABYJgCWzIAwsJBwkQlknvga7+UWJHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnmW0PfuMQQMhqvaOeu4+QJsiF3FzCSfkT/8oALqjE Lf8DFQoIApkBApsBAh4BFiEEJdjqq4lHBbtk1Kaolknvga7+UWIAAECeAQCx+TBj oJewbM0nHkcsP0BOGRBsgwslZLTcE3zTsUU/tgD/TIbw2IT9JfGlYkM7vHe6EirU 6vR9Fe2b58UE6mRNAwTCwAcEEBYKAHkFgmAoZPAFgwlnmjsDhf8eCRCkqo+IC6US tUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf+95RtcONM +5OP1dedxx3cFmZqWPiQFCNYo2EehBly5xYhBNKww4NcAbDBILxUDaSqj4gLpRK1 AACcmAD5AXzoL3Qr3n5UiYZQS1CLdUGkdR2Q7OA1WKQ5Fxic158BALC1RulW2SQo dgXgP0loox1g7rSMEQTMqq0gc9cjJygPwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4Vk eAkQRpalxinqMfpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn8fm7Wun5bGwCfy3NMK1U8+c767iiykhwREKOnl0uUcQWIQSSuxpWC//M5HF7 BdxGlqXGKeox+gAAWAMBAINO9IvAQkB6y5CwJLM1bRxWCGm2tsccpf/p6gotCGGH AQD8wpfAfzgMo0iL0iBH/L4fsWC2bZXPEOqs82ESU+xRAMLABwQQFgoAeQWCYChk 6wWDCWeaOwOFZHgJECx/3FNfBqoURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZxcfX0qiqBKaXD+BmDXxSPe0IhtcSssCNjzOusBQH0XQFiEE /ScniwUT+P3PuDLvLH/cU18GqhQAALSKAP4s87u8/y77vri0pbzRCulQfYgAFx26 L88d2D4Lusi2dgD/QKnmzTbFrtdTRokRvhDsivhRBHxBl9dpWVTvs65CUgrCwAcE EBYKAHkFgmAoZOsFgwlnmjsDhWR4CRB+XbQg5A6xHkcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfL22iih4SHo+VdEFlGMset4qcDXSOwJzmb qjnTP1O60hYhBLsJ7O9Qo3Y7eGudjH5dtCDkDrEeAAATUgD+MN5TR/+No0okz9mI g8DJB7dORyG/FoirVN7SuZlDsooA/jIfz3BXVEePI8NsiuwIQffnR7eReWXVflnX vw1qj14FwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQr+iF+TS/E3xHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnnKDTTc+vu4UKI17sR+ir chkdw716QwTuyJh9/TW7CREWIQTTZEMQo0ePZzTcJDav6IX5NL8TfAAAG04A/j/q 2Rsbyo1bjxZf0hxcO/UPKUWWHBhh1s/58+mvoBzoAQCCMJJC3ZfcRDWkJy+eaUmm 1OnpZr//1oejj1N0s6m5C8LABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEHjFfZ3p XBbzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9S190w3 akz4DulH2WrUSZ4YVQx6l9KrI8I9BMekv4afFiEEv8MaaeqUdOuJ/MwueMV9nelc FvMAACGWAQCOpwctERilYtVhbYPqPbH0fuVERhYes45b87I8N0DL0gD/R6wGIdGL eT3R3pePTLUtPeRuyYfopSXYzfu6f/FPBw7CwAcEEBYKAHkFgmAoZOsFgwlnmjsD hWR4CRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcme/BTQ4hUh4LseUoDnvZ5DTcbiv9zLRcDUJABkOuJW5dBYhBJCp3T53IcIh no103Cr2o+5ddfo+AAC+uAEApRKpDF2KorbTRs81/iOPFJM5PoLa6DcPpDNARHFg BGIA/17CuyArWPYoMEq88f2KA+RH0hv0Qs/Y2L6/T3kob/YOwsAHBBAWCgB5BYJg KGTqBYMJZ5o7A4VkeAkQ3fp3nZHGmJRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn2r2rQWFtpfzB12x0nsGjGXCrsqy6Y5mN4i/MCPrors4W IQR5dMBOjVtUDSPNTmLd+nedkcaYlAAApAUA/jHxQr+A5bZZQmupCs5NK+FEoV1x ukzgNdMUFhGy+1ELAPoDNH5qKceGSyvQ8PqMX+YtAhmAb8r6V/bn4HnEOb+lD8LA BwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEAhT/buQDgWwRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0QnJbtHv6VV3xJU2vP0iY8m5MC7Ilwd 1c71OasbqLNKFiEEosGd18mTX4tHm10DCFP9u5AOBbAAAJroAP49kcX2yl7mGErg 97ztjkZ9WrTZ75W/mXn//dO8a/9eewD+PQOn1MZs/aoTPgeoNa9SClSEaAGtA3TX vxMFsTmfNQ7CwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRAboBlQa+Z/u0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmccyT7I5kzjPmesqlYR ykFgBHxmcRvDkyC8wfG1RskNbBYhBEbS9c7ZvT1joR3f7hugGVBr5n+7AADVIwD/ YlhmyIp/v7XV847gmWcnUPb7K7l2McfDBCUWYJ6yXFwA/Rd9V3lrl8NUMlHZtZYc Qjs7VNkgUUK4r47spM605wwOwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQeD8a j8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnfMme Vq60zYcsFqKPFlv4ybj5Llol0h1uYn4b6y4ByFYWIQQn41/rSGy/WxZgAnB4PxqP xyf8PQAACAcBAPsXEwdNSUFwv+QW9DEgqTTJsPZ52ypuJOM0d/eE0C3HAP9cCEUy myuUrmS/byUJsEGIlfIW34dU/lDvg9e7ijzACs4zBGAJbMgWCSsGAQQB2kcPAQEH QGb+iACsAlOY9h77sFvCTNAldb89oDBXzOPLN69ghvJQwsDCBBgWCgE0BYJgCWzI CRCWSe+Brv5RYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfyab7VMuH2JtsoJ+Bv1qyfsjutITHUvhMnYPfFjlPoowKbAgIeAb6gBBkWCgBv BYJgCWzICRAOhgHtFUzGLUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmeuuOSe1XcyXUrzLRcqAYfgOdUyKrtFWTlAeuVAObDkHhYhBEf6Hy0D x24BFGVLkg6GAe0VTMYtAACHEAD+Pufhnq2FZ5cLNlDp79MvGsyiFMa/tSdP7tC8 YivERyUA+gNJPoy+aGDIU7NtiM7pt/389A7v20tOdLqyVLPH8RIOFiEEJdjqq4lH Bbtk1Kaolknvga7+UWIAAOWrAP4lCQRFSBGlYlaREuwWOFfB89fdvpHH9b0nkcG2 680QRgEAlnUylmxuv4qZrfDHziC8OYUEs2mZ6tYDB+TmemPTVALOOARgCWzIEgor BgEEAZdVAQUBAQdAQ5mnnt2cxsKwUEzR0gUGI2JEMbLBJc1R9BXIBCIgNksDAQgJ wsADBBgWCgB1BYJgCWzICRCWSe+Brv5RYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmdY53PXPX1O3Uh3L4czXbPHI1A0vDITQYXXmpBiElAk mAKbDAIeARYhBCXY6quJRwW7ZNSmqJZJ74Gu/lFiAAC3iwEAycx5pA+4PX6jtsFa 4qCvtJT0gEepiqEDP+SWkmZTbP4A/2QssK1vntxvwek0wa0vHwDrjjG7OZgHnbs5 uNjdpJoOxjMEYAls1RYJKwYBBAHaRw8BAQdARvQURrjFy56wNzN6l0t5wLlgA+wa 11HoihFnxMeSnMnCwAsEHxYKAH0FgmAJbNUDCwkHCRA6w3veMb5loUcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmckQt/4PYyseT6PCd67eAPM wkEqu1//ezYSUF8zJpG5jwMVCggCmwECHgEWIQRWjDdiI2+8doVL1OY6w3veMb5l oQAADZ4BAKz23R8qDzx5IgUZfyrpPnG4mf6FKk5dBT+SiTIC7OmkAQCrUl3snqYD SgFtEZtqCDu09TFNQ9uwXBYOxnA5hM+nCM0RPGMtNkBleGFtcGxlLm9yZz7CwA4E ExYKAIAFgmAJbNUDCwkHCRA6w3veMb5loUcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcodoUb6uYxXlon3AZmoIr4j623KziegG6SgT51E+O+ igMVCggCmQECmwECHgEWIQRWjDdiI2+8doVL1OY6w3veMb5loQAA4OcBAJP78PFG vdHoE7BWWxC9y6TmkhGbe//QGv2Q0IOz6rwMAPsHKhx3d4T0kGofOD4Jinw8KcbH undaUVRNH+rM/qjJAMLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJENRe4CJtXfce RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/Ta6H7n7ldM diwrw0s9q9SrdYdcz9+7SnVEz2blhLDFFiEEtCr9MLsb3S6567241F7gIm1d9x4A AL7JAP9zAokD5tR14VUjtg8rL6OmNhS8A1yXaQ1ynMYqm1/feQD8DLDiIObj/Sd5 CByLA7Qarb+FaEaKz8iq2/ebowoLjAXCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4 CRDxxcwns9mX8UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmebJz9KJPJ3iHpw4MWJUGFRTfaonBuJ96zvUoZI4knuWRYhBE7WpTG/YlHnw2xF OfHFzCez2ZfxAABNwQD+IzVQ5WPR2Yc7IhYRENq6XIyXgXwuVUeBgb4tsq9D57YA /003A0g/q/ZtMQZvZWP29yCSBSsZNW8ygTFx9xTh9jcIwsAHBBAWCgB5BYJgKGTt BYMJZ5o7A4VkeAkQ7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnCEBuKIOslbZkFTC23AWxyeUWffW/5FtzSjR67ip1HO4WIQRs cAQ+GQNb1agFAETvEDA2AyW9EwAAfZ0A/3JvwBMOxP4T7vFlv167hLgivqzvYWok utP69TmzZHuqAQDTbcCnafHyPlDPqQunAmNG6g30ubPVNh/RV56/Y0+RCcLABwQQ FgoAeQWCYChk7QWDCWeaOwOFZHgJEISt2wehBX6dRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZwNTrLMjlsWzvVGvpweMC2VeIeuAyzNo6fGA oOicrlysFiEEKLdKp8UXchw5rIKHhK3bB6EFfp0AALuNAQDUEAUKDjlLQ7ZPVjzk XWrK5ikY9M/9RsF8CTuf/8HEkQD+PcvLRV92nx3SWKzUUDRWOBZOnz9v73JVvNwO 12u9ygnCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDcw6J0EK4qPkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeVnvcb/rjws+B/Y5ZAzVbu cOc1B+0x2HGBFdtZcmig7xYhBAxg1DTVE8RlvAdCqtzDonQQrio+AAAYMAEA6nFw B+6S1HFXzkXJnQJRzd5JPIC3bnwBqyeUsGKtdU0A/242fkYWXp93QqHNjMN3sPMZ 85XIx/PTF9DnSCRvNgkLwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQC6zTjS5t K0NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnCQpgpM2s Yd7s/02zIYmQ3LXM8ohfS4DP+YHwpXF0o+QWIQQPv5pIpavlygCU7kkLrNONLm0r QwAAG4EA/R7fzvHbc8O4TPTLPL5pQ0Yjlo0voo9TrIrzDB8eOC7OAQC/nklBI38B iJBHDIvHqp6w3XTkXAKqVWbcGwEyrZnoBcLABwQQFgoAeQWCYChk7AWDCWeaOwOF ZHgJEH+tscP++/5ZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ4mgMkpTvelShrbgyD9SfRktiIhW1rXsQCtdLxP3eYaHFiEEoM2HWCwhdDwO MGN/f62xw/77/lkAANG3AQCIJimO/KW8BsdyFMrpsRhL3x6gLtozDLgUuIfd+wtN QQD7Butqx5rLomBFVmbdQiZFLP7yT1CTqzpG3M2udxlwxAfCwAcEEBYKAHkFgmAo ZOwFgwlnmjsDhWR4CRAQqbswI8v1WEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmf9RY/5cyt6ettWE2LJF8W/CdO1HgtEidOujLt96A7+/RYh BL4328Rq+AQoneaEvRCpuzAjy/VYAADhYgEAitjdbQo4j9HV5mij5ccz8Ftpmgzc gv4HWdjMpQcVIVEBAKKX/MbCIpZrKiZijQfcjyB4DvugumRPyeh1IhiqU7YPwsAH BBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQzcwayEZMj+VHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnSjWX3kpYzGpYf/OSipT7P/9SdagJPYfF /IV4UsFWcusWIQRSd8FPnTeg9NYV3ZzNzBrIRkyP5QAAAVkBAM/8PAEqOIYFGv8n cEeG5bxCU/WMzdYNYb9xR41VX6o7AP4yksdTNapcnsxKNHcXzFr2AaQe52zzDoZb QE07JJ2TDM4zBGAJbNUWCSsGAQQB2kcPAQEHQPmj9jtswhfDoOmgWxQdd3WnM7oQ cFBiBmTKpKSbPZuIwsDCBBgWCgE0BYJgCWzVCRA6w3veMb5loUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcd9vkdYWmuN/5rzTen4RCcTrRS U9wk/AKgUC8njVpirQKbAgIeAb6gBBkWCgBvBYJgCWzVCRDO2CTI+9fx7EcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmebVt5dbqr/IrET9Vpj oAKTJT1ue3EudLwpXIk7n8APnBYhBAQSxLRoaqaiP+Rh2s7YJMj71/HsAADqYgEA jL52jzO+ailyYB0yRIW7WqSeZgj8zy+LX9YwtEZo5boBANF5/9ryhMLSoeHVbOl6 5j7dDxKRaXgefS829ZVLJ3IMFiEEVow3YiNvvHaFS9TmOsN73jG+ZaEAAC6sAPsF p0ZEBF3s+XZVf+S5mCJSR552WkYTKmB2JO50SHmE+QEAlp35lksMdKDJCzotgWnj iQZdXFD9WJQI8EJiYT+4jAnOOARgCWzVEgorBgEEAZdVAQUBAQdAzsb9DOKsaf8M F6NR4RDw07ZsBipulLyfrphmkcSh+AADAQgJwsADBBgWCgB1BYJgCWzVCRA6w3ve Mb5loUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmclBQcx O4BFTBPltZ6IBLb04EuvZsksJwRsH9TlN1oDigKbDAIeARYhBFaMN2Ijb7x2hUvU 5jrDe94xvmWhAADtHQD/XbTfwQUllD4huD5/K7iQOne6ohoNEIkFfhLGI9IxZIwA /jxk8azoDcKJYf8yI0xUrzEPdmPTDxK6j7g8etYBBCoKxjMEYAlsyRYJKwYBBAHa Rw8BAQdAVxnYANs2fQyvBYpvAcU1rCcuRtHipaBRWkX81NHq4ujCwAsEHxYKAH0F gmAJbMkDCwkHCRCv6IX5NL8TfEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcme8DOPkigi8hiynV8owZnaO5v22XvhuGyTxjUqYup1J4wMVCggC mwECHgEWIQTTZEMQo0ePZzTcJDav6IX5NL8TfAAAu0cA/j2KIyd/Hbbyfg7nLk8J 8f/OIZNk5AKK5I1IH8t9BSoCAQC/DW6NXHFn/HlXqf0tfod6FtMEgzb+YDq4MeZo Ji0kDs0RPGItN0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbMkDCwkHCRCv6IX5 NL8TfEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfK3pCp hhNo5qmsIchPEsdrme9wbMq+uNIJhtJWjWSDvgMVCggCmQECmwECHgEWIQTTZEMQ o0ePZzTcJDav6IX5NL8TfAAApQ4BANfQgoOr2UADjzJyfap+AvXx3ypd7xTqwXRZ uhjaramxAP9kTB+ROsBomRMhv+1I4nnxHjicyqB2WeOwtDhFR7RgAcLABwQQFgoA eQWCYChk7AWDCWeaOwOFZHgJEHjFfZ3pXBbzRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ5sLXQ9x8LHHAJnwn6w6ZSmmkyupu0BQfXabfa+y 4OkQFiEEv8MaaeqUdOuJ/MwueMV9nelcFvMAAJlWAP0ZoAMDMVUMBolgeagv1gIz pUvXiHUOt6qyQj92Q/MlogEAqoUWK3KyU6/L66oXLSHql9t/meYQMdiO0eCn3OQZ FwTCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRBGlqXGKeox+kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeFPEe6HWckw1q9jXTxNXKXx5Ak O3hS3BjHLq3Qi6U2JRYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AABFUwEA91MLd5i1 VI3h1VtHih3o+CMuxI2druSMwwHYTq/3h24A/2YrW54r3ms3gYROf0zYzBhdD8rj XB3dgY23/ciRRdQGwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQLH/cU18GqhRH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnZiuPJhUhsBoU LVO0mXNiPumFMgXYZjD1D8GPVyHkMI0WIQT9JyeLBRP4/c+4Mu8sf9xTXwaqFAAA itMBALiAK18rLPGhiv6P8L4ngeXsA73Zll9tbLUPyoujNo/dAQDk1lccH16y/VlS NlWQ6KmKyU7xN9UGMRR6Ud/A7rEhB8LABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJ ECr2o+5ddfo+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y 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 gmAoZO0FgwlnmjsDhWR4CRDxxcwns9mX8UcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcX5vEsmXJNC/o6A6KsqD3vcCm/hTQBP027qrJhCkBv iRYhBE7WpTG/YlHnw2xFOfHFzCez2ZfxAAD7IgD/X0cjCmf7nAGnNIGrMKMwp45Y h0hNbOpPqPlqvLRMZAsA/3kBy+UYryPMxJzrv5YBlw0wbyxz8OCErqtbPGAZw7oC wsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQhK3bB6EFfp1HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnS9rXm2ZUw0IHAQS1jBtg6paQH3OX rOV/gc3dOpaTquIWIQQot0qnxRdyHDmsgoeErdsHoQV+nQAAIEQBAJUdXTNb+qwj ViwDNAbc8Nc3W87RH1D1mVQ4L3b8CeA+AQDZSWTKzQwOsbbrHwhn/dMNJg5trZAe KzzyByB5LjFNAMLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEO8QMDYDJb0TRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8M8OhHb5dhs2Oih /LWEiQoJrJXsA8W5MdvrebiqEUYtFiEEbHAEPhkDW9WoBQBE7xAwNgMlvRMAAGC9 AQDOX9mctcop/5kWdK4cN09eGqvyGL5pasISIcClpylk2AEA3lui4aCEX08M4drc lelrgIg9fezXwXux7BCIEXjoPQ3CwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRA6 w3veMb5loUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcA CVUXe0cac7e+NCQ/AZpJBH8YlWVDBL4LHz1qFSsFTxYhBFaMN2Ijb7x2hUvU5jrD e94xvmWhAAD/8AEA2L/LeD3QZOsWIDiZNZGqbEajVR4pEOtRF7Wd5JemIUcBALto gwT/39Os3fJdTfyggbXOtPqxy4fW+zU/k9Sy4RQPwsAHBBAWCgB5BYJgKGTsBYMJ Z5o7A4VkeAkQEKm7MCPL9VhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnJFE/1sJMDaRre6QB4ytAY7QO+hAtttHKZJxvtdbOux0WIQS+N9vE avgEKJ3mhL0QqbswI8v1WAAAuwEA/14IaiAisAEdfEo/UWNlXXWQEbuVi2/7M8j2 tEyCP4zNAPwNpriVsnkLVXjX8kepl2eU3FnaqYWPMQ7JqAJtMuDnDMLABwQQFgoA eQWCYChk7AWDCWeaOwOFZHgJEM3MGshGTI/lRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ9c8esMO2ZjnmnIIX6J6x5g4AaiM1dWpcKaQOyyc 7cQoFiEEUnfBT503oPTWFd2czcwayEZMj+UAAJUMAQDCXRdMLM8Vi16IGkXlU70j Fp3vt+wnJwV787Yyc52imwD/eTvDR0sZYIM4eY5qFtItWSkq87+fgy9WIRMAUXHb AQvCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRB/rbHD/vv+WUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfuc2+TIHtTazL7fxglJrNMJruK WsTZJ8O2OXxRMJYjNhYhBKDNh1gsIXQ8DjBjf3+tscP++/5ZAAD5MgEA2CPhJR0n i9qdj7pVGSecLABVPPhWJ5n947vO8be2SGcA/RMkn2XcqBmJTlbzd/10+m39FSQh 2k5b2/13DJwhCqYBzjMEYAls1RYJKwYBBAHaRw8BAQdAAA4o8UpV+T9GjqvWamIn iuuR/mzVJK2yMPdERN93HarCwMIEGBYKATQFgmAJbNUJENzDonQQrio+RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7bCc7/8S4UXSv/nOoAA TNfbWr0iti6trq1hVYbNDbHLApsCAh4BvqAEGRYKAG8FgmAJbNUJELCIDht6NWk2 RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6kBYSh11+BV +xB1/q7sc88E9PwPcRFHFq0jT9wkPM+YFiEEiDV6oXvDt7ZuKZ/TsIgOG3o1aTYA AKeAAP9HlQfsAYeelgVJhHC1oXee93PyvZNNTC8+aro2pBXHPwD/emr/aShsIeXv weAwonjb7i2Ox3qxFFOogO3QuxbtbgQWIQQMYNQ01RPEZbwHQqrcw6J0EK4qPgAA T2sA/1l9HE3QE5JOo56Cjmb3P7xQB/j4uH8CxK7Q+xdxGy6dAQD0D/28NPFs4amc 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 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdhCOlT+0lXgo8HDSNfFzZbpCEBWHze GU76K0CEx/WEdxYhBOYbYx1WZr7cnCVOealtmR2kfAo9AAAVzwD7B36H4vtLWtnq 87asmLcs7PkKLn8DPmEXCnpmevi99cwBAJx5GrWo0HFF7Q+GjR9D/Ad02yxT9Mg0 KETskXrsi5cHwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQG/6bo/Sr1A5HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnmVGnz4+ImMFwvH7p TpZdk8Hwqt+9kqe5we9F3sOAoMEWIQQ2MILp7rIuUK0wPYsb/puj9KvUDgAAlxsA /2WRg0H4uTLY3vrmn/4uPNAv1UEoXiQppLgv8rilQLtPAQDedb4ysFl1bDKNDiTL OaU6LC2y75vwFBr0dvfYGYc1CMLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEN36 d52RxpiURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9Q+ k4MyeL8Lmp+2Xytuf1iwmpgdn8l0UTHuzVCCGFGMFiEEeXTATo1bVA0jzU5i3fp3 nZHGmJQAAHCKAP94Cp1QD7TSjR6VxG/K+LGwgtR2M9159WLHCBCK6JeNZgEAuK6S znO/ime0F8NxezgGnol7S2PTc3ZV/qh1m5XUpg7CwAcEEBYKAHkFgmAoZOgFgwln mjsDhWR4CRCb1VyeEz6MvkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmepCL5cvcZxLloAV6ltFsZuoilJzNFbkz0QD5N9V1+s8RYhBENSVXur c/+VtjLuXZvVXJ4TPoy+AAAiTgEA7KdYcCsPZYgotIfpuL6GouL+SHiBLJTJwOX3 0VxzpSEBAL0ogNv1U1YThN1GT7hY3i3p63DehfwnPa1UaCR5zcwCzjMEYAlsvBYJ KwYBBAHaRw8BAQdAKRTMFX2K6KbCfhrHjr1zf/oVeTJA1jX7EE5bZY9eRSTCwMIE GBYKATQFgmAJbLwJEPph5zxvXctGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZxTB1N2Zbt9ndJ+l+dNCDY+7n5IJAlbjc6aVhLM0RZE0ApsC Ah4BvqAEGRYKAG8FgmAJbLwJEFtqTXMT9GhKRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ6Lv+yNLZqYmGG6t4ILPmyaVd7/NO6kaUPEy/7LR VYpaFiEE73WIxUd9Ntm53Le9W2pNcxP0aEoAAIQdAP9zeKJ6MH4CAiay5d+9mZbs GRW25dy7fMiBoWedzhl0EQD8CpEO8ucqt0A/SmBvm1iFV91Us0OBjATIWqvjCP07 tA0WIQRTatViuSF7mDlmIFb6Yec8b13LRgAAX5QBAK/FM50qtX/vdW1tF4LI/icm 8r+JDfMKUG6lIP8aMyPsAP46LECUR/x/3WU32xrqgIqNxaex0JHE8BWS2pfQRLWn A844BGAJbLwSCisGAQQBl1UBBQEBB0B8Frz8klJg/KoG8waCMJh6PvbZOE22z20w TK7OPTBKCAMBCAnCwAMEGBYKAHUFgmAJbLwJEPph5zxvXctGRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwYRsziJAXFvlg/ryZKwVo5W4HJE JxbGrcGjDdfmECrBApsMAh4BFiEEU2rVYrkhe5g5ZiBW+mHnPG9dy0YAADmMAQCN xiCKRKDRZ5YmIBVZiX5NnoNT9leKqS+qalZR/tvBlQEAjEMTWXMGpp3yOZXKPiuW PmrS6ty5m9NleZxNirhyOgLGMwRgCWy8FgkrBgEEAdpHDwEBB0BsEB1sdKw+oAhg fOvTO7G10/KGQqbLHhX/oKn7rrbk0sLACwQfFgoAfQWCYAlsvAMLCQcJEP7cblxG qqsTRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7Zl0oKZ 5oMTq246g3Iv3xXEPstxGlxwgoWLXpEnXj2LAxUKCAKbAQIeARYhBEeXd2slmPl9 ye+Uyv7cblxGqqsTAACnwwD7BwRiisgoTQmfWgEuwtfV+D7Gv+mSDFWRXDClk6s1 nTEA/0RY3XMOMdCnquUkMPchRG0n2eRw5698sh5Fzx6Xj9ALzRE8YS05QGV4YW1w bGUub3JnPsLADgQTFgoAgAWCYAlsvAMLCQcJEP7cblxGqqsTRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5bS05lp/TdHBZFqp4jvsMQCZbl3 Mx61p+ygcppd4GbmAxUKCAKZAQKbAQIeARYhBEeXd2slmPl9ye+Uyv7cblxGqqsT AADXSQEA+MRyheFvBtkXE7bio37/h0gQ2IfnY1PxL/om5BxBD7oA+wdS0F1/woWN PRBtMxLCOfMW3//xAQ49+C3xwyGM3PgEwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4Vk eAkQJcLA7oPWqQBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnAWxTw8A0e8mnTc9vZFYzYPQWrSBpIVsnBqVMnrUfbVkWIQS5J9BtkhN+s0/H 1aclwsDug9apAAAATk8A/jD9XHHUpd2HARFysrxfhk7sXnNBs35o7bzcVPHfW3R/ AQDV4r8BPscT+dHn1ahvBQ5Y7hO4xyHOFK/Rn+zfRkY/C8LABwQQFgoAeQWCYChk 6QWDCWeaOwOFZHgJENQ3mp6uJqI/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ9uoFsW/+qAtmXCU3oL9hNGKiW3TT/aqOzOXpiacYYthFiEE L5DFxTsQ39T33H2y1Deanq4moj8AAOh3AQCCaZzZISiJ2cMFXopf14xC0ieTcuBE BseM0KuYezYe/QD+K9uvhSESvjCdG1Oi9mydqQ7pkjtzcIxFN2Cz3tz6iwDCwAcE EBYKAHkFgmAoZOkFgwlnmjsDhWR4CRD6Yec8b13LRkcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmd1P9gMg3fo33HTc1NVyh+/eBGShoUNUjx+ hlgnPugFOhYhBFNq1WK5IXuYOWYgVvph5zxvXctGAABBggEAjCHxoCd76LXKOCiq seGzo1UfaiLwuUc70CTM0105IMkA/3X8hfqhHa0oNZdW+ch2rJYUoyJ9x7jVWb9U yKeBaWQPwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ3JLWX69GUy1HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnTgdfsYUSomdBzJZMaMBI YmK+OaA2Pw2l+jQCNY7VaSoWIQSX5Aj3agiVRhBF11rcktZfr0ZTLQAAbS4BAL5D fXpMdvJa/1ZwHjkUiiL+DXYHsZCjsAQG1ZSIerPiAQDzt/PvY9fn+L0w9yMFsuvw oGGYAKD8bfZrUeAHi1M6BcLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJEAOSU+8O uZEERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyLfDABp DazqKGcaGGRzZmtItcgdwvGoQZx1bo5a3hpIFiEEPJMERxCObxqpIdnAA5JT7w65 kQQAABEhAQDHfMuut5PkNrE5XDxjst6TPH7Yp7Pe0s4qOFZ69cl0nAEAhf/e7Ldu Nup+B5ufMA+KBG/5rMsIkhXc9u74+XbHkwvCwAcEEBYKAHkFgmAoZOgFgwlnmjsD hWR4CRCb1VyeEz6MvkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmdG5hUokZtU4NmZlPnn6c1MkJIgWS+Wn+WJx4JCrg6mCBYhBENSVXurc/+V tjLuXZvVXJ4TPoy+AADtzQD+IU4XPbIZaiVqgd8RV2z0QII1YqCwTxdCS4MtWNo4 EOQBALcsiTNxPLXgSQZ3dHhY0Nf9pg/thzE0Gyh88YbUpHsMwsAHBBAWCgB5BYJg KGToBYMJZ5o7A4VkeAkQqW2ZHaR8Cj1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnaT5haoqhwkzjRyRRDfLbfmIBCZB1+YF69+sLrKLG+OcW IQTmG2MdVma+3JwlTnmpbZkdpHwKPQAAMBkA/iUZF7xA1A2Nb116tPoEJQqOA7S+ aIGJIT4Cc7reLThoAP9RLhCO4QZUawKrQDeXzdjF9zi94nqL4sZFfHgul0NNDcLA BwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEN36d52RxpiURxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0moi5UwAwvW67ATzElh1LwLJHxp0y2d 5PPpaDqgYCCSFiEEeXTATo1bVA0jzU5i3fp3nZHGmJQAAHjrAP9BR3Sl7hb5BQP0 lY9sRPO+NomrTjNB6XJZYe1pMXx90QEAyQhrAR1BetxDIQCZi1jo3gLwTVIzQTp5 7wfFDQP6dQHCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRAb/puj9KvUDkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfv+pIzWN757sqkBtMX nr+H2Zpc7zKc+Q0IVGMSCgzvRhYhBDYwgunusi5QrTA9ixv+m6P0q9QOAADwkgEA /mdC2Ly0aGYQJuStAynSvP289LEOgwFGWXvZHkcjSJEA/2nKNE4T1w5KWGab4jMg TNfkyyuQxzlpTaf7vSOGCkUAzjMEYAlsvBYJKwYBBAHaRw8BAQdAUyhZAgYEo/UW viJ3wXht1VdXijO7pDl5z2hpCnN3LI/CwMIEGBYKATQFgmAJbLwJEP7cblxGqqsT RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ41RCQ9h5mv0 VXhJl8/FcBhUxruGcwjKikOyG7msxn9iApsCAh4BvqAEGRYKAG8FgmAJbLwJEKNR 9XL3rbyeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ77w VpNsSDioS1oZNLLS5V/HSJi6fWM7+PrrEO6NmCr8FiEEOVtU/5wg57gyPtH7o1H1 cvetvJ4AAOx1AQCWjb8k+RY68308osnOtxHpy8+wQwp9TmLheHM/TMLTiAD/RtyV 79E2iets0nGP0BYaQmXadqssb9alLx5RS3cgTQwWIQRHl3drJZj5fcnvlMr+3G5c RqqrEwAA8SkA/jxhyAsDwiyWbBcP2fEbIte79IwKWJu2+109+Ns+y66sAP9PXziX BlK+AXhcYi2jtFAbY6xzJksVXWZLUHlq8smHBM44BGAJbLwSCisGAQQBl1UBBQEB B0D97iE5Rnj6Vahj0uH77E395OHTnJ9F6uQvsvBcEcdnSAMBCAnCwAMEGBYKAHUF gmAJbLwJEP7cblxGqqsTRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ1fdK0FoZ2+9ciRiyr15rn/IQJqaElJSxRTzT6tGdCAAApsMAh4BFiEE R5d3ayWY+X3J75TK/txuXEaqqxMAALvmAP9EguTboSB8JwoFot5YZDWyLZQ6sdJc 997GF/WwNs1dKgEAktPu5f7tgqlKAKydGSwSj5ZPAzduJ266MMNiV+M3hg/GMwRg CWznFgkrBgEEAdpHDwEBB0AFhTK7LS+hKkkyCfqzLY2icJuNSoCCHyppSameZZGm pcLACwQfFgoAfQWCYAls5wMLCQcJEO5Hcw5dHXOQRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0tDnCv+aQl1nlOkaeXBmG93FuUbbY34mtUX KJeS8fbkAxUKCAKbAQIeARYhBBbhB6BohsbB4aRHx+5Hcw5dHXOQAACptwD+OvXy 35H426XO8mIwpK6w+1v9dnmKPYcvTrm3vnFHvPsBAMN7gXTFbJ0SoRrOkqYqRhhr w0NUcw5B94lSIv9wiGMEzRE8ZC0yQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAls 5wMLCQcJEO5Hcw5dHXOQRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ9V2HaGrMS8Rqu2V4b+rlTXWyGPBtgAyKYRBc1EpYlaiAxUKCAKZAQKb AQIeARYhBBbhB6BohsbB4aRHx+5Hcw5dHXOQAAAecQEA8rjOR0i1S+86D83L0Q8g Fdt6GOwTs6FXTYhJ16g1nzkA/2wIfZe8oaxLGwESXBxVoamSRWQWOnYbe8TJpKGO FRcOwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQWKOCMX9U18VHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnYrrSauDQzb1b6OLY0ra8Ylqr fSLWVmWtaNS3g4jwPNsWIQTPcB53t5/r3t+ItFVYo4Ixf1TXxQAAi8kA/1a1jAYQ 4D2/7Aat+xQP2PDh0OrvGbWKStGeHiMvc+cYAQC72Tsje6VqFoYZA4bEW81L0h9o qCDpDnXvPdY58OGYA8LABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJECKHehKLb6sx RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9LcFsQ72uuT cdDL89gkbzUTpjmP4qj4jzGCGB+57qWWFiEE8wK4PpDNasPjxZ07Iod6EotvqzEA AJJqAQCdxuoRU1BdmdzYW13XcBlbqOuLUnIgXiuB5dqR6wy8BwD/aiGu1l3RPdCH Fkpy2atcU8+/sqEjtrUZ1uDUcN7ZPgzCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4 CRClTV1jsL/Ge0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfkZlPjp6Jp/nRcx37/s3Y9srxDzPkZboyd56dLwYE0FBYhBKNb066nI2L1w6YQ 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 AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0VYWCbPkhLnlYN5Afzs D3jj6vfqcW93OIsutC0y2mCYApsMAh4BFiEEFuEHoGiGxsHhpEfH7kdzDl0dc5AA AGjNAP0eq+LK25rasL4qzhIIHPf3MPUDtMULPx4O2den7Y9EKgD/fIW8eakfl+b5 KfA/v253SwAM4XFgIMTq+oAgbRJ3hw/GMwRgCWzVFgkrBgEEAdpHDwEBB0BGEi5Z aegdgDxHDonLdzReYi0Vo1/LXxm+KqQJerhDHMLACwQfFgoAfQWCYAls1QMLCQcJ EPHFzCez2ZfxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z0FFv0Dj53lCP149iNW3Rwk0k/BgjESf5+y5qDwVZFDhAxUKCAKbAQIeARYhBE7W pTG/YlHnw2xFOfHFzCez2ZfxAAAc2AD/Uw+D4/8l45zlcZZY7LBxZAsmtbP+1bD2 /IIAV5VfWAoA/3k4EYng7wanjGXBlww+BA7h0GCoyZOTwdN0zhehhkwBzRE8Yy00 QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAls1QMLCQcJEPHFzCez2ZfxRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyrq8kbKhKEl+uwS1CcO lL9n7+IKhLQJF1p5FYOfbjPsAxUKCAKZAQKbAQIeARYhBE7WpTG/YlHnw2xFOfHF zCez2ZfxAABDGQD/QBaiuhaSFyX/PE1X3vqJOzc04keUwl0CxyOblnJEL7kBAJ1T bUOXHoD8PegHnQDgs8aG9n5bQuGvXZryzufCnD0BwsAHBBAWCgB5BYJgKGTuBYMJ Z5o7A4VkeAkQ1F7gIm1d9x5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnuVKIKSnwnMBQbtXMHYCmB5LVZB50OOcdT/9JMoUat20WIQS0Kv0w uxvdLrnrvbjUXuAibV33HgAASqMBAKn/Xw8OuVVj6v5KaJF4xXSOdLGzNFCEFB4p Qx1Z/ksHAQDqIPML50Kb24vVpj2B0ab9hIovV2ztEHHc5gW43aWOB8LABwQQFgoA eQWCYChk7QWDCWeaOwOFZHgJEISt2wehBX6dRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ9sCt/aeIt3PjL4k9TEL4ZA3Bb0gxQ3I9GibTDvJ 4TO9FiEEKLdKp8UXchw5rIKHhK3bB6EFfp0AADG3AQCBh5t/vN0qoC8DyyC9XG0G 8EtiY96Xq9+PalD7IYhv0gD/WP6Pc/+LYG7lpXyUxWQx/tBdd/i6Cw/RGauZ6LEZ LgPCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRA6w3veMb5loUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfqD460NxgYNIqkyxrU1Q9MHFaE rhue/73e3x4+LFoBqhYhBFaMN2Ijb7x2hUvU5jrDe94xvmWhAABK0QEArOulFFKK wF8RuUPQ9yEjBgy+f3i2AoakFy/gzWTEXYEA/0pizuZTBCjEiKXTDcWLLSp7o80A k1oNWwtKXdHptekGwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ3MOidBCuKj5H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnsTH79k1SHf0K SNZdcqZD1TDh8/Q30lmQQ4hwu3Fba30WIQQMYNQ01RPEZbwHQqrcw6J0EK4qPgAA 2cABAOAfIXrSzXAi1V8oKBS+mDv1dMtgpj61gDG8R/vGXE4dAP97B7RwJC+sudnO +mbzSfA+pD3m1glaHT2NVIuv0oJWBMLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJ EO8QMDYDJb0TRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+qI7/OuM3/FF7IGksyfQjf491XtEEjcLevHsqiDzDY5FiEEbHAEPhkDW9WoBQBE 7xAwNgMlvRMAAOOrAQDjCWxZusaKiYcAO49Rpqd4YtbklHu/XWF3CUrwWODnngD+ IxjnwPT4bvS38oUybyUOcZcB+0OkpCc2BjNOVYFvEwbCwAcEEBYKAHkFgmAoZOwF gwlnmjsDhWR4CRAQqbswI8v1WEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmf4uo7X10BIrIkF045p5p8dG4Sjhu3OxYHpfgckNYEKbRYhBL43 28Rq+AQoneaEvRCpuzAjy/VYAACPLQD8CXNWAcmJbzwWdfAIiXEWKvtilUr+BJXc Ml/gic8TlGAA/AvUruA1S277QSeyDKV2xASzVgtq7rPbtVM+ohKbkGYAwsAHBBAW CgB5BYJgKGTsBYMJZ5o7A4VkeAkQf62xw/77/llHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnYSv4joGlrii7NXo8Y0IcjkPgvMQz1lgUDLPJ 7oXQRtoWIQSgzYdYLCF0PA4wY39/rbHD/vv+WQAAlt0BAIE13BO21Ji8+OmMD8wh +pXcig851nohB6TUAa2IYCs8AP48+5cQiT6kmO+WvUWySrNG/avB/PEyzo5cOjJ3 Vc0KDsLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEAus040ubStDRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4e4CKE7Zi2QxkXWbKcQBFRc jzxqY8a/kHHll6y//hZtFiEED7+aSKWr5coAlO5JC6zTjS5tK0MAABOaAQCMzfC4 N+8oos5taLNdtWHfUljOBmAFSc90msMoVpbgXwEAjCS90fNnNqCfQLcdNoZO53VY +DJoNIZqIDjcOZXy0ArCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRDNzBrIRkyP 5UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd/3/LXZrun 7gAxxbcnT4IcGUGLT57TLxlErtNtmzP1uRYhBFJ3wU+dN6D01hXdnM3MGshGTI/l AAAhhgEA0BV7NBpHowMsxkfR66QeT/+8chOnxHJfUydkJD6hInMBAI21M44H1G9O k9TJeWu05pFKXf8BdAYFyLmaXfRB6FAGzjMEYAls1RYJKwYBBAHaRw8BAQdABoWa DKO7fTmU1BPXC0MDddckhUgIlQqnCRY8bCoqYLzCwMIEGBYKATQFgmAJbNUJEPHF zCez2ZfxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ737 p455btW7f2Flk6mQ31llzoYe6Ic2d3vHhe3JF5V+ApsCAh4BvqAEGRYKAG8FgmAJ bNUJEJ6P2XvTv07jRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ2BdObTWyCKf0QjEtC7o3s/kaE+D2EYcKbyiyagUwbsgFiEEYD/sY2RI4KW5 0hdTno/Ze9O/TuMAAF0jAQCpwji5tHM7akian7Ovlzx9WuX/Nlp+QFZscU+5VAh+ egD+Nv/Ls7UoI0USj/2sx9tp9h1Iuglp5RE5yVn4pDHNAAsWIQRO1qUxv2JR58Ns RTnxxcwns9mX8QAA8BoBAO9LU3SjnGeA0CvZx6y/mxkS1dxNssrnr7nGs/O7LtTB AQCQ2oSyHPnDnKG4x7WDDsufHQCjfvEVR1vo0laHk2znBc44BGAJbNUSCisGAQQB l1UBBQEBB0AFpjQgJcFpeQnNmZssAtHvc8Yg98uKf8dI/KRauJc7WAMBCAnCwAME GBYKAHUFgmAJbNUJEPHFzCez2ZfxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZwq6aaymBw2QYyrL9TpB108QPt4qGN7lYTBir+u6I02/ApsM Ah4BFiEETtalMb9iUefDbEU58cXMJ7PZl/EAAFGpAP0R8zioPR99gxa5P0jWk8XK AvNZuFSlLG2Gmn+Hwn0SywEA8P/gQ39xXLJCJMUTr3z+8eNtk2P3dH24S5+MkDO+ NQHGMwRgCWz7FgkrBgEEAdpHDwEBB0Ccw/sYkj6UMo4YCPjF+OI3qMTAFICKKaDl 6GBiwTCgw8LACwQfFgoAfQWCYAls+wMLCQcJECbv4OA1rFIuRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0zBoujuT6TAIxu4ctVxTgvOrmtf EPTqAOBkHVNZWTsdAxUKCAKbAQIeARYhBNHp+FzvYnFpn73lqybv4OA1rFIuAAAO yAD/UrSoKBgxFk8m2o9cT1lsKXhdr+fg5rgUM6G5m/W2V+gBAI+4c53BVudUSCwK 9Ff1XEibMSVCeNC+06Rk9/yFC9UEzRE8ZS0wQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYAls+wMLCQcJECbv4OA1rFIuRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ4l6wrHnVcaW0u2BygGS5gnHYrdRUxOLbUIro/avF9tnAxUK CAKZAQKbAQIeARYhBNHp+FzvYnFpn73lqybv4OA1rFIuAAB4AgEAlDRXrTON6rHk xZxGbqnPBkHoBPMJ1Ywy07vmkWdM2w8BAM3DkTUuIZYsltomT7gv+HU2z3IVSKXq NaK0yJyK/2gKwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQ6tcv95FAeLJHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnsF/ytfoDSWaPrJXX QIHfw3a++DZzgU/41GGCZ/SMJDYWIQR6gNtTMLfZANW9H4Lq1y/3kUB4sgAAlL0A /1pxrPNSeB1HLLD28hy3zAyABGBnL03cPAJZ97Y/zEDKAQCf8yze4Js54tYl1lFx fa+P3WpLE5mICbFdHkYEcfz7Cc4zBGAJbPsWCSsGAQQB2kcPAQEHQGylEa88OstE 3feTm84cumjn+5CAt5Dmt27LObxGN6wwwsDCBBgWCgE0BYJgCWz7CRAm7+DgNaxS LkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdeFdXAyyYK vOQkorn2VVwzmuGjuwAeBj5vL3qZwu7dVQKbAgIeAb6gBBkWCgBvBYJgCWz7CRAN s+Ekea7GukcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJ m/ZvoHeRlhLT3pMaTIuF1sM8z8ffl2oVRtINjzS+XhYhBOD/juA+GO+s3i284A2z 4SR5rsa6AACCywEArF/esaPmA5UoCDLGtxWkTwIQQwlW35TzVIddBhhkwF8A/1a5 xmauNeseq5aDGNRRQa5jjiPRYPMu5FWpRwfkRzoMFiEE0en4XO9icWmfveWrJu/g 4DWsUi4AABglAP4wy91gKBKiZikyWm7Fm1OrsvQ1+k6IIswM4sYuBtzdlwD+Jsb3 v79zxfyBgc9BBVF/Rm6yMf+dJ+YIt7EThgvz9AjOOARgCWz7EgorBgEEAZdVAQUB AQdAMgpYGvD6QRh/GHX5FcSjSHTcIiSSOvbV/BtgqblU7mcDAQgJwsADBBgWCgB1 BYJgCWz7CRAm7+DgNaxSLkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmevbFr7VJlWAKGVdxERDQCz5XQs6rapNGrZWl/ansNVqwKbDAIeARYh BNHp+FzvYnFpn73lqybv4OA1rFIuAAB5XQEAz3KRQ9ZiPDKUyv7nAvZcqAHbPco6 JzbHz7ujpw0T/U0A/39HZU4XtWRj7l4+d5bsrq7WCIZJPLoQ0SkVx6n+U6AOxjME YAls1RYJKwYBBAHaRw8BAQdAyKX9J8CggvfTVfIP2x3m538LpZGX1gotemaRMeIe vzbCwAsEHxYKAH0FgmAJbNUDCwkHCRB/rbHD/vv+WUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmeRBu7TXfFdJPxAqkgH5BIONN5BOMTGEWSN 4GOm3SLrIQMVCggCmwECHgEWIQSgzYdYLCF0PA4wY39/rbHD/vv+WQAAYukA/R8L l4cKNanNIFKZ9erbIe2IqrBWg8hB9NCYK4BKPHhfAPwITvp/BYIdzz575CwgZsw9 OkwVf0YuVIL83agekpDiDc0RPGMtMEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJ bNUDCwkHCRB/rbHD/vv+WUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmebXvs7yo1JgCOmZmAg+RDXtD4vzqX+17jqqTDxo2BQ/QMVCggCmQEC mwECHgEWIQSgzYdYLCF0PA4wY39/rbHD/vv+WQAAtKYBANnZPWEVkUhslln6Gu/8 EWuCQqZLB9Sg+JW+RZsNDueoAP49PQubohC8GQw7Y76n8qASvRErgncAcjBgu1gT JcsbAcLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJENRe4CJtXfceRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/VoY81Jmv0jBbSQZu5n58a+ gOu5JrTHND3dDPBX+AjVFiEEtCr9MLsb3S6567241F7gIm1d9x4AAGP8AP0W59lq +sVvkTRdPCi+AykaRZZON7IONiLYzvTwCPEJDwEAomzZ/WxOE+GfbbOChRoXG/Kv HayDm+YBxc53jvlaqArCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRCErdsHoQV+ nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfih7ewtQz5 1YEP37TJ1P4DlBEzdmBz0j7J0sIk3++W5RYhBCi3SqfFF3IcOayCh4St2wehBX6d AACDaAD7BksaQWVBLr3fvtCklhfmbMtUWINW/s02tbq42212AHkBAO7BqmAfhqAu 9YeI/K2TbawqT/aZyxbEGO8F8shFEsUBwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4Vk eAkQ7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JndJ3NQTgR20tnDLO+MqA/5dJaJWDHl/aA6BFyRqggvroWIQRscAQ+GQNb1agF AETvEDA2AyW9EwAAjl4A/Ao344nOhDXUdpKFOZD2biAchAO4HSl8IavzUnCWGEXB AQC8EVEYxPZ/9cmDWt4KmcKbYD8MoMBH0avI6my/RO6ZAcLABwQQFgoAeQWCYChk 7QWDCWeaOwOFZHgJEPHFzCez2ZfxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ5ZFHYMTv34fKNmXE8czC3FwFaDDqzukKFQF7g3WgpPeFiEE TtalMb9iUefDbEU58cXMJ7PZl/EAABZCAP9ahh40iaf/2qzLg1R4cK6EJUWQqz+o kkZgElO4a9sS0QEA+mJfxVGk8I+pJ6xKRqqQMztEDTnaKSSWhly+PRGG7g3CwAcE EBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDcw6J0EK4qPkcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcme6T4ai7UtZchqUxRUWdO2blZontoBAx4SV JYWfj2SFohYhBAxg1DTVE8RlvAdCqtzDonQQrio+AACsLwEAkyfX4dKhp5BrvDuB P6NmXuyl2QKMd/gwTNGFQWCPmycBALAyaxz4C4iLkFGbiPnA04RJsMv1PBQvFPfS lOl5nCILwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQOsN73jG+ZaFHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnbrKGwC92cQBsqZWlW5pP HehpVeoIz8oF3j2/c6Zo73QWIQRWjDdiI2+8doVL1OY6w3veMb5loQAAIAkBANi/ iP+cZYvLZtKsmwek3W28QmQ8VdbGzZFHwNsfN8crAP0V0PKoXHS0ZIurXU+q3sDP HOedfx09a7EWHT3STZp1AcLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEBugGVBr 5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+CqQWik KtD92svIBbr6kT4LAKhto7pBy0Ppvka+06ncFiEERtL1ztm9PWOhHd/uG6AZUGvm f7sAAO4qAP9K1rMCAmcfckBfd4LxDZ+wHLvfVTeF10a/k8OFQHPRSgD+Mm/vGppp 01ZFF43cSJ8K2NCyGFvfXsui7TYQmnowUgPCwAcEEBYKAHkFgmAoZOwFgwlnmjsD hWR4CRDNzBrIRkyP5UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmdIFa8iTsqAESUcxq5IBAQCKI+83yTOrJ7ro7h37lm4txYhBFJ3wU+dN6D0 1hXdnM3MGshGTI/lAADJgwEA2ze8erGvCyLMP2M6nmWtBwmi/+peC3SxhORka4MJ 4B0A/2DZD6EWQcDYjuHryiPQFKaklB89JlVIvBko1x6I2fELwsAHBBAWCgB5BYJg KGTsBYMJZ5o7A4VkeAkQC6zTjS5tK0NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnYAL56PgtLaBHScHcE95ISv2Ps0esRP3evNi+xa7pLjAW IQQPv5pIpavlygCU7kkLrNONLm0rQwAAvT4BAPMRwZFuj7DjCp+KoHJaZDJhPVp5 w6sdexStMQtVRY/1AP4oe8MSCw5SvwEibDSUh8RDi+dahjfKGc26x3mwFIK6A8LA BwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEBCpuzAjy/VYRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/P4FrQf7CMbdBDNceqxJmAkAeVI9zSI 71dcv0sA6U2XFiEEvjfbxGr4BCid5oS9EKm7MCPL9VgAAH3HAQD+OqhtQBSmDjBX hncOwGAk3qlwoBqxhnBmabMmwxl2hQD+M4ZLTUr5NIiVZWoiEZLUYjc/plbiY6Xf NWZzlqELFw7OMwRgCWzVFgkrBgEEAdpHDwEBB0DIlL1k5vNeEeenalw9ANpesABO siDSDSagYodvE+kvr8LAwgQYFgoBNAWCYAls1QkQf62xw/77/llHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JntZrunKn9GKOZDXPtrA43H2hz /xd20mv3rF1Xugi2LdACmwICHgG+oAQZFgoAbwWCYAls1QkQxkGlf6TY7clHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn8K2Ki+/aJbYKgb5y V42b3LyfIjnRmeBzTZbJghucmmEWIQTd4bQyEkTxJDUbcynGQaV/pNjtyQAARXIB AOH+m9C6xAgkXwS31ISdr97Qg+r6For0+A1SmLcaFgvpAP9bCk7SYHaLnkOWwIJA PBnA5lXYlMkaRQDQzp8kKOdpBhYhBKDNh1gsIXQ8DjBjf3+tscP++/5ZAAC27AD/ QXFDBUQIXb9ck4aPCxjeXrwM1YqaOJhhMoha+32z3G4A/jkni4mFgQa3y1P7ZcwW UM1XwDvMX5WFtZMnIVyBuugPzjgEYAls1RIKKwYBBAGXVQEFAQEHQLtuhJ6tGL5Z sU/gTM60nI36954VM5NwjtkjKMLHS1MwAwEICcLAAwQYFgoAdQWCYAls1QkQf62x w/77/llHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnRBaw Ym1Vvw8GcRXuf7DWCkhSaSVCxfiCWpk7sIrCt5QCmwwCHgEWIQSgzYdYLCF0PA4w Y39/rbHD/vv+WQAARNUBAPncC5EyJBcbwnRacaMq2W9lDyjWhfwTrEf8NQL6Naa3 AP4rrXJB6fOjs4OxggXyJUlud1v5FuwWPB0dPqEaSi6FAsYzBGAJbNUWCSsGAQQB 2kcPAQEHQJezGaDSLZKzZFL+wWrDdxsfyLnacgNLE5GuAOkwwAU0wsALBB8WCgB9 BYJgCWzVAwsJBwkQ1F7gIm1d9x5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn4X8yy7BA6KTSd8HEKbwFaiwHN8HKg7zY27/VUlWLiDUDFQoI ApsBAh4BFiEEtCr9MLsb3S6567241F7gIm1d9x4AAFMWAQCCGFfUWP1DgpuORzRY fGkeC9GcYOoT6O/dp6ad/Za38gD/Q28IwujpOX75uoH8jrnj9lmR2zfDkdz7djM+ +HVQ+wTNETxjLTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ1F7g Im1d9x5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JngTbD 3+odpJSRGkI58S5LDyUb+MuUmQ7fgsT7nqTU3lgDFQoIApkBApsBAh4BFiEEtCr9 MLsb3S6567241F7gIm1d9x4AAKO9AP4iZ4Ga3Qybx6MAeI93ioJCa7Z8fat2YSAS 8hKl4uFPTwD/YjNNPljPkIPxoAHMrR4sTml48hS00TqAgI4jnh6aIwXCwAYEEBYK AHkFgmAoZO0FgwlnmjsDhWR4CRCErdsHoQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmdJUmcMJjd1rtjpZNhPQO38SI79qnG1NDaEc3K8 /kWnKBYhBCi3SqfFF3IcOayCh4St2wehBX6dAACS1wD4njAmC7umQ+Z9JL+FqZms ejsBEHNre9o6dKdKlyv2FAEAq8wjcAz53qFQZd8YJ/SIU7Tzd9XR3x2n/Y2f7+60 KArCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDxxcwns9mX8UcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeI/6F5qbTZ3/YrnH4/e0azqjKn GzHvo/Pro5sRCL3LUhYhBE7WpTG/YlHnw2xFOfHFzCez2ZfxAACLxwD+Nq2A3+9t XKG7PJkZ5h0hL8UXSUaiQJZZrNu1Fo/WlBEA/2ZSlIRt+WTKsGqxhgRMan9QFNWJ 4P/hqbLt7sQ8TiMIwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQC6zTjS5tK0NH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn6fY0U4QFWp7Q 7DswKLoqTjtIKOV26wiwJXUDMVIROAMWIQQPv5pIpavlygCU7kkLrNONLm0rQwAA PDAA/0z3ZKJ16eNRMMnacA5QnKuStyqWKh5iMFliETPXsmP7AP9+4AIHNpla398S B4JC/wwr1luPSFksxQn4PlPBZiFrDsLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJ EDrDe94xvmWhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z8QZWo5EHLtvp44apADRiFSN5+7nEw2YBlqWseybva/SFiEEVow3YiNvvHaFS9Tm OsN73jG+ZaEAALh7AQCGPKpGODvUeKh7HYEvGszdBPGYMKxwUIdTYSB3xfQ3NAD9 EP7su3sZDLHOYZeCK/PtAgXGmlmsNvjhu8wIokinugnCwAcEEBYKAHkFgmAoZO0F gwlnmjsDhWR4CRDcw6J0EK4qPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcTfazaamsFl2XVteuqPxCMA12y9gtUcfWSeOxyPRxyXhYhBAxg 1DTVE8RlvAdCqtzDonQQrio+AACV6AEAjr15Pc3T/XPzaG4Z0orR22OZHSpMKxvO UYKXmGWpPkkBAJuussSlSNOvqC1SZaPwrU+rlHwEySIlTh3BQleZATQHwsAHBBAW CgB5BYJgKGTtBYMJZ5o7A4VkeAkQ7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnwzpRrNh5UC7O63oWJ2axaWmw5P5DE4lR6/WX E0SzXjUWIQRscAQ+GQNb1agFAETvEDA2AyW9EwAAgbIBAN+DpY1fOzSv9l7tgKka /M5SKZFWfmOYBrwjXsUrJwQQAQDD6M4ad01n0Cy19V1QoSb4C2oYfZW6Az8mMzQj 3K9BCMLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEBCpuzAjy/VYRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwjadNyOxC5h1zNsGBdqhPUe tb++O6jJu/2EoAk/XnibFiEEvjfbxGr4BCid5oS9EKm7MCPL9VgAAMYIAP4jAJvn aY0tIaj8V0MYWdtkCx3otrGmzQ5dDNLHEWDJMQEAiBG/RDzehmSILvygMXjMONew Gx1Mcl69YNB1P8fZugHCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRDNzBrIRkyP 5UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeyZ7ZGkglW LcHU9o9dwG1amfuujoxzohZ0TbzwrKYCthYhBFJ3wU+dN6D01hXdnM3MGshGTI/l AACOvQD/XZdJOLegdY+z64SdMgXHnrByowPqbWKDfh3UQSvMIGMBAIkCnl/B1QPi AEJaYpGQCrATwbo/XbH+1X7QmWxyowgLwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4Vk eAkQf62xw/77/llHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn1nivs5hyUo3Wc1ECTQO1B+NSFrZNmt4yLPR+0lIy8WMWIQSgzYdYLCF0PA4w Y39/rbHD/vv+WQAAjv8BALkn/KgFdatMASlPyry9gacVJxDcGAqdXGtjAXeRUBL7 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 AMLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEH5dtCDkDrEeRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3vaQmBcMl8QC/ZoTQk1AHwlFarB gQhgc0+SrEnbL9VfFiEEuwns71Cjdjt4a52Mfl20IOQOsR4AAESNAQDIRG+K1E/V Ag8MaBJo0gdrekzNoVsbcS6eGLuXpSQdUAD/ZfUZYzcZfFFdJAEvjL9ml6cT/8A+ CT7dnZxJs2rHSQbCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRAsf9xTXwaqFEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcZeNhi/Dhgxox+ SjjD0450mYolPUbfytHjnk8RPQl7SBYhBP0nJ4sFE/j9z7gy7yx/3FNfBqoUAACg vgEA4YxMBawMBnzP5cX0q9LoUFwWL5qwQTRMSc53aCSpT5QBALwMdUfWNOFhU5Sg G9Tl/r2dXZxPWRftlXJ0Lu3rGZELwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQ CFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn zCr/qKlrZFDXu2n9LGJbi3g8aD0nHs0cj+9XcH2Hb50WIQSiwZ3XyZNfi0ebXQMI U/27kA4FsAAAqNcBAP3/MwNB/nkprGjjQz2HqTtT11jPctaPugfV0y0o1bkjAP4h hX+rl5jYAkIM+c/SFhd6j/8sWN2JQncQuXKp3FjzD8LABwQQFgoAeQWCYChk6gWD CWeaOwOFZHgJEHg/Go/HJ/w9RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ4PhW0JGh09KBrH2/tr+iR2nAwwGOqMef7RWwPyyyPMwFiEEJ+Nf 60hsv1sWYAJweD8aj8cn/D0AAAyfAP98ujhZlPMMNPCu5OJl3zF2AK3wmyXg2bRp nPzZW7V71gD+K4Cu3KaSeblXIthKrYIrGDdGrIGNkxNdF+Ju1ixIIwvCwAcEEBYK AHkFgmAoZOoFgwlnmjsDhWR4CRCWSe+Brv5RYkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmcT6CUjBMfbffNWK5iw/UlCbwm1JKEOvRFDC1Ya +8GdpRYhBCXY6quJRwW7ZNSmqJZJ74Gu/lFiAADUYgEAlGv7CRbe1wj8KM+7p5CK cQlNfmEovMyFMoujBAQ8zlEA/A0Bv7A9o5Gm0BvyybkIavyrN6qJjFddOB175b8p zNcOwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQG6AZUGvmf7tHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnqCDz489DHA6RhwGDRmnnfBjv schXKdXzo9d8Cg84blsWIQRG0vXO2b09Y6Ed3+4boBlQa+Z/uwAA+0EBAKjmzgXD Zye9MQDh1tI3qLssYdbZAllmog6RtCA9uFwnAQCOOYhv63uCNOkRxa2MPVvlTA54 REzDJZgvrM0iuzk9AM4zBGAJbMkWCSsGAQQB2kcPAQEHQNDP2kauP+dTYUbykt3E zqsh8PWIqNu0T0ac7PP+IsGYwsDBBBgWCgE0BYJgCWzJCRB4xX2d6VwW80cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfrABGuuGVgsotbmREd BwmxqQr1zx3zRgqnOIVW1DzxFgKbAgIeAb6gBBkWCgBvBYJgCWzJCRARi8qAdqxG OEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc564mA1V0q 5Dkeo5M2nwNeRIvpZ77E+K4NJAc2WkkT7RYhBDZ2+w+g6bChu3Wb5BGLyoB2rEY4 AAB9uQD8Cj7uoS/m4W867v2j8UI6ldOltrQJHwQdrrPaz7AuCzYA/isUaICXn1JU emtXZ2ZT4cFMhddZig+Xm9c5qYdtaKkBFiEEv8MaaeqUdOuJ/MwueMV9nelcFvMA ANHcAPjjy8mrqWqi3tniCgP1Jnm+8SjqFA54iFeYMF/R24i/AQCpZQ3e10LZOrYw X4QH+dvjFr4dc+DRuvKqFg+3QdcdBs44BGAJbMkSCisGAQQBl1UBBQEBB0D+eddk jQT11b5vRWhaS31ft+IsHxz42c0+UuRuLZs2egMBCAnCwAMEGBYKAHUFgmAJbMkJ EHjFfZ3pXBbzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6pQD/i/YVpG4jkpk7GyF74hY/bIjlN/pAbK1XhZYZqpApsMAh4BFiEEv8MaaeqU dOuJ/MwueMV9nelcFvMAACm5AQD+rBBuSJ2VCcfmYX14mLaMcAVE8aglxhnKek7Y kindygEAsO/PlZ1xH21BslzArjnBgOHMqoM8BCQ66EBDjOTfUQXGMwRgCWy8Fgkr BgEEAdpHDwEBB0Aycne60UB6RT+Ey49mS2U1hYcjtNtHX954zc+ZxaMzmMLACwQf FgoAfQWCYAlsvAMLCQcJEKltmR2kfAo9RxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ65m1iEb8UK48DWvqpOENRCzT6812T+jh6O3x+FaEBIP AxUKCAKbAQIeARYhBOYbYx1WZr7cnCVOealtmR2kfAo9AAALDQD9Fj8e/2tykC25 Bj/BFvbrLjbe1TzMAxkRrW0zgyFM5+0BAP2i9PNMqml6vMbNaialzuZUodOA4YdW mqFGVllPRhoFzRE8YS0yQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAlsvAMLCQcJ EKltmR2kfAo9RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4r/SYKZN0QJ1qt4e8rkpNNv/tEjHOmq/PGgGJKkNrIzAxUKCAKZAQKbAQIeARYh BOYbYx1WZr7cnCVOealtmR2kfAo9AABRIwEAgY0qJE58VNP3xUnl8h0gZ/q5gPNd /zAd37FlDEkIxv8A/RQiA122bDa0e8KorW5x3lNUGphOQwAToPwabqSjkIkJwsAH BBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQA5JT7w65kQRHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnPx/a9tgbRnYqSE6se87E8ZldVEgNEtK+ zPxq0yXMQ8UWIQQ8kwRHEI5vGqkh2cADklPvDrmRBAAA1cgA/jBlUaBaO/wKNCVu A4IsSqsII88qqUJ1zWyhn3unrh3/AQDX7/vPmNLZTZVi30diiYjg9A4giUz+dPRW PCWhEUzgBMLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJEPph5zxvXctGRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5Ycmo1s39lTdsMw5dZr FNzJl1LhyG0NxH7wyeUfXg/4FiEEU2rVYrkhe5g5ZiBW+mHnPG9dy0YAAKgnAP42 VXpTCn1HDnpsFB59M/dPvi09nNNyW63tV51S7mQ05QEAiZao4nQ6B9NgP48djTXa Mw1ArL4uFAngCnQNeD8nbwnCwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRDUN5qe riaiP0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcV+RBw znHN3VdCLhp+cFGTDXYRC8na+Y+49cEy8bvQ7BYhBC+QxcU7EN/U99x9stQ3mp6u JqI/AACDBAD/UsALa+yHe/rSKjUU/QmWmMu3MXjm6lrun7sJKnefezQA/3f5ZsaV +4Fgz/U11KS+6o5KF+9nJ3PC7at+K7aAASMGwsAHBBAWCgB5BYJgKGTpBYMJZ5o7 A4VkeAkQ/txuXEaqqxNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnAb7F4wPZ7Or6U3PLfUGY6krTu8MQOIdC6y20IsOFMLAWIQRHl3drJZj5 fcnvlMr+3G5cRqqrEwAAyEYA/3XIh/xqtM0Q6DKrwrCn3Po6PXk0JN7vYe/7r59A uyfOAP4x7YPQ302fE096atV1JMy6GpHVpWzhff6fy/GiMcCyDcLABwQQFgoAeQWC YChk6QWDCWeaOwOFZHgJENyS1l+vRlMtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ9OXoSmOjal3E5TUQoq2S4lwxnd2m/BAbNKtrST4d1gg FiEEl+QI92oIlUYQRdda3JLWX69GUy0AAAt/AQCYgd95LldeBu+NKsaGPL6iQTuR x+4jK0cJo3K5AF1eBQD7BFQLGbRSuyWtJRBuxlDkbpq/FPP1ngeKGCDzpzf/LAjC wAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRCb1VyeEz6MvkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfmIwSKGTvhP3JAf8b7Th6b05JFAJhT mY/M5x9UC8JzNxYhBENSVXurc/+VtjLuXZvVXJ4TPoy+AABd1AD/RV0qK3sXp0ZJ RumTjmW6FLIC06+RCfZvnrGz81yTfRgBAOvaaoBhgi0n2BM7dE4Gb5VqPRL92k58 PijPs/rxHoMNwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQJcLA7oPWqQBHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnPSYVQi7DH2evHvoW lc1wnqShsms1u37GQYyhY/FX0WoWIQS5J9BtkhN+s0/H1aclwsDug9apAAAA03wA /1m7c+5/uf2pP6BmBxT8sKl/WNJF2KApJ+IWaE/IRtDrAP4yMM0jcSk2naMf0jq5 4g2QYjjDghSrRAWPeXKZmOJzDMLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEBv+ m6P0q9QORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5+H LWBvD0RUhTLEX4EfuawAlUzw5TuQcnH+o1WhYRgVFiEENjCC6e6yLlCtMD2LG/6b o/Sr1A4AAJNuAQCNmxg8NvhchNgdOrgfkWXbAxjt9O1DJIRL6hdJZuZmVwEAnIOz 2y1rAHXxWuKBLDXM7Wd+cRHEM/sU8V+3L4yjRQvCwAcEEBYKAHkFgmAoZOgFgwln mjsDhWR4CRDd+nedkcaYlEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmdmWZdN9ER8OyT/1Yk1gFgI8p1lyB3P1uwuBIlNrnM/mhYhBHl0wE6N W1QNI81OYt36d52RxpiUAACS4AEAx1CKn5+7c8kid9cQ5pAQ1G9CjOzI3QvNwt36 S5t9We4BAP0ytlVlLC62eVIupxQ+bCGPMbaewwRLWeP9lPxM42gIzjMEYAlsvBYJ KwYBBAHaRw8BAQdA2wYlYraUhp7kH5GId1mKto5a0KlpzixsmxZHFPNfQ7XCwMIE GBYKATQFgmAJbLwJEKltmR2kfAo9RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ8sCsLm3cVUKKO0jjHDl7LhWbc4hfsgAEWvgIy2v7pUZApsC Ah4BvqAEGRYKAG8FgmAJbLwJENPZPbcOPw2PRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ308/YmmMlfgrk2t1NcUUFd91EdisnGu9/2qnT5G +o/fFiEEHFUCqhQdGurozztC09k9tw4/DY8AAPHJAP9gfnsgCmDJqGbZfDufzoGE inZ0Jd0GNSn2b+x0VuGRcwEAryw0nTzXKP86/bK3K8bNUZym6zaZYr+7LUpLpIgX VQIWIQTmG2MdVma+3JwlTnmpbZkdpHwKPQAAx5YBAPLRCzKckoRkL8iBWZV0eA3x i/mBJB99XSySdFr13995AQDEPsnRuYtruoITCu12t6jD9W78dsuRn0j3TUqgO/kH Dc44BGAJbLwSCisGAQQBl1UBBQEBB0BUBqrIvZPP7haFkH26y0JEYcbzPpr8bVZD /xoAT9FdFgMBCAnCwAMEGBYKAHUFgmAJbLwJEKltmR2kfAo9RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzfBKsrna73CM7V1ZNB5q2i/M8a/ MyQafSIaykz+TAeFApsMAh4BFiEE5htjHVZmvtycJU55qW2ZHaR8Cj0AAJs7AP95 wNdsy+MKAhhGqFnmfiDWMAr9SJrCX3wn7OagrK5LlwD/fItqm7BvBhuprFQJurnV DbLiJGRW9i0so+YObKQLsg/GMwRgCWznFgkrBgEEAdpHDwEBB0B2jQg3JH7uSBI2 s7ga5mIDiZAZv9W7cySdKhSRNqlSOsLACwQfFgoAfQWCYAls5wMLCQcJEHx6ioJU GvBfRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1BH5c1l 5jV/dhhFc7jYwE5014uWBeSvSBW5r1cue4x8AxUKCAKbAQIeARYhBMsJYcFqJini hVthQ3x6ioJUGvBfAAB+jQEAl2W7ny3KlOKD5Ab+2+db1DRold5cpo+lH0TWHzNF gy4BAPU71ANtJ7d+207J2zft+lSfPl/1YCeRU97fv69bR+UJzRE8ZC05QGV4YW1w bGUub3JnPsLADgQTFgoAgAWCYAls5wMLCQcJEHx6ioJUGvBfRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9KvIhV426p1AG9hdPYzrsincFyZ tc6xV8mAyuVy679KAxUKCAKZAQKbAQIeARYhBMsJYcFqJinihVthQ3x6ioJUGvBf AAAeTwD/fnXgm+iNNFCt6wuldah5BLLmkBtmacuBSXjHNl/fecoA/2nmAWPnh0lI jZ2LHwxKm5p1he6G1zqvZNvLjrFVWFMJwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4Vk eAkQ/Z2LAVdFAgtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnlKY/1X6IUb659s3k3QROKQJcQi2AFZGOslgMfd2t/NAWIQQTyLjcICCcsOFV ZOH9nYsBV0UCCwAAjXUA/RBVvCa55BxdYkGvd/ZdBfbHJmo7LyYpXXqp3lN7wcI7 AP4vYOrI0EhGV6idkxS3lg2t5ZSZPqqxSgboC9qvdKtYB8LABwQQFgoAeQWCYChk 7wWDCWeaOwOFZHgJECKHehKLb6sxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ8PHpAvNMLAylQLpFc/VoAFlsSI644i2uxMjmTtmzlyJFiEE 8wK4PpDNasPjxZ07Iod6EotvqzEAAKkcAP4vP1Eur4rp0xDuGxUAAe6I+uuPm24D +jsOPzazf76LQgEA5ulq/1qBRAkklqEBPRLX6Kb4xl0PuQLW3MQBD87LPwDCwAcE EBYKAHkFgmAoZO8FgwlnmjsDhWR4CRDW6GWjuI+IgUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfsmycfL9QxIvH+xvNCYuaBtBj5L+kAhz4V TQaCDpwQUhYhBL5sVyHty6gXTFnZltboZaO4j4iBAAARCgD/U/4oxkhi0jjGtfZR LZQai9kVbnvGTVHas+XaaIW6Jk8A/1jybtobEVHlG4xvNxCC3epkamJx8HmfVug3 LbtqnS4PwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQpU1dY7C/xntHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnC0KMSFuTm9LBilYnMPep FbYPZ75suPBz2hD1P6XsLQwWIQSjW9OupyNi9cOmEJClTV1jsL/GewAARPQA/1mw Yx7odOsbOcbFY1kmAtfyb0B+Z6yyxVa9ZWaD12GFAP4mQ8ZtXR8wKEf45cV+ASTq CN5J0+pmg9vSnVxAK46MBcLABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEFijgjF/ VNfFRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4TMu0pd DQccujdh8rQfw3qKnKUDSS36nJV5y9mQf0kcFiEEz3Aed7ef697fiLRVWKOCMX9U 18UAAHq6AQCOw5Qadh3qSkeYbCNEssgTR8XJK1xUNSmUOKrpkR5gDQD/SAeOAd9s lcU3ZNMj6iMFYSe4l2UZr517YVmx4TMwOgvCwAcEEBYKAHkFgmAoZO4FgwlnmjsD hWR4CRDuR3MOXR1zkEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmeFyvqt166QO2zfIiDnGfItQfYcKBrtraGZ73PqR1cgThYhBBbhB6BohsbB 4aRHx+5Hcw5dHXOQAACE7QEAn+Ka73oeNYqA5vtDB3WOGDDCeGCRXMxL6ZWyLOjr 5EkBALt7sErVA0dwkNRgO7/91hjxxtm1LnHZhNOJ0Z8twnIEwsAHBBAWCgB5BYJg KGTuBYMJZ5o7A4VkeAkQFmmCVh4UDANHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnPU3woXWJGKw1jOBSF/B6vpRGr1SqNsUo/rhzjnrjM4UW IQTCTMCRAtIuOOg5PFUWaYJWHhQMAwAA44MBAMsbZqbKlFEOG2+hmpjxQokIHiHV HYYflA3kM5eHU8oNAP0Q9VfzdILInBOxCboAVHIyKnNiLupou359iElmZKtlCMLA BwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEOrXL/eRQHiyRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZycEDujm9QcrIhjvpeoEwptx1GTWdhBv esp4IQsnu9SDFiEEeoDbUzC32QDVvR+C6tcv95FAeLIAAHk5AQDXJQEXdK2pjVu9 4EPy3Kr1yfjNnjNzCgB4VKLTuuVQNAEAx0fVlhKtrlMhME+FzD0bC4IRu9hFmsMg QS4iegQZygvCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDzUJkAfv3YPkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf3rAVMmLqZrNBEjLqb whsBV4PhVTV6CgNLUGKs0UZuORYhBKNx4aCK7hlVS9j2/vNQmQB+/dg+AAAMzAEA 4xp529A6MH/aH8a2Fjgff51x0Ggj3D28BeNXGC8a5LMBAPsMDnoaDKGIyJno76gO oYd+6ydpPWRTpY2BDzaD6vsKzjMEYAls5xYJKwYBBAHaRw8BAQdAC4cV+BDMYr4n KWj47gQbn9WJqGpAVb1ANkdkc6kRPtfCwMIEGBYKATQFgmAJbOcJEHx6ioJUGvBf RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1zhXr/PZgBK hFXKsnV6wV73e8SzpfldmcKcy51mp0b1ApsCAh4BvqAEGRYKAG8FgmAJbOcJEKH0 U6kUY29IRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ89h QYY7OhkEZUTef3C5wjl1GubfdNHH0HMpBRLAxiqJFiEEA+K6anO9kadfm7P4ofRT qRRjb0gAAP6FAP93bnsFdPyDRL1yUmrKX2NOAV9hxho2wAZd2jZI6fWzeQEA6kaE CjELn6qjNaE4T2bqMZG+WPgQTXi3YGtaaHqbrAIWIQTLCWHBaiYp4oVbYUN8eoqC VBrwXwAAa2EBAORjwX7F7b8HnJyJlfgj2PpOxbRFND0G968dW2M+Zq4GAP45Yn1S soHx7eZjuSQiCcYqXbaWMWCjE3KZxShMF/zHDs44BGAJbOcSCisGAQQBl1UBBQEB B0CKM+6NczoPzoFgGiXi+l9KvqkunRe4gJniyziYfBQ3aQMBCAnCwAMEGBYKAHUF gmAJbOcJEHx6ioJUGvBfRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ8RVOikh3FCHpC4EpvwJEg6EZVbigeFadA6Xcaik7px8ApsMAh4BFiEE ywlhwWomKeKFW2FDfHqKglQa8F8AAIekAP9dfo53d/qxixGRMI3wRlnG/bPL1Auq 7PfX1uB3pW9SpQD+IrofrLIqKgkjhzt5VHKVFhqqKPilDYnGA34BTuC/EQTGMwRg CWznFgkrBgEEAdpHDwEBB0BX+e4GZG4Oy2PT60iYnI+yETz3T6MBf+mf2CIV+0se 8MLACwQfFgoAfQWCYAls5wMLCQcJECKHehKLb6sxRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3DLNnROdz1LUQO1hLG7pKkLQWR4buPSIj6x TyeiKQjhAxUKCAKbAQIeARYhBPMCuD6QzWrD48WdOyKHehKLb6sxAAAZFwD8CAlj 1M0m4xJSUaooh9WNnJmJBCcnayyUNsgsmtJXh8QBAJbtcKvcX9HrfV+9x040nOWc N0367vN1tyFDe2JBGPQCzRE8ZC03QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAls 5wMLCQcJECKHehKLb6sxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ6OMYNAq5D5ADK1cOBrToRRhlUvttrbxNb5nuj4VLh0kAxUKCAKZAQKb AQIeARYhBPMCuD6QzWrD48WdOyKHehKLb6sxAACGiQD+NpassJKRepAhO4m/FyYF aOWqkKNXST/HCUUzy7xp1hMA/144KE92KyjoSmgbyY5MrrBm3/NJliOBh6IWj0rE 4xoJwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQfHqKglQa8F9HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnGsOVAlfLpxxERUoBTHY6dkmD 2tEjZ8ik2jT/HiZgaRAWIQTLCWHBaiYp4oVbYUN8eoqCVBrwXwAA0EgA/iaGe3+K QVv5FpZjYrnyHRMg3QUVFKqx43Ra5TaoQiw+AQD87uPtqB6fbuL5h9+IILCoXzMh bxjHtW0cLt3gRrB4AcLABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJENboZaO4j4iB RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0wqOXUMDndB EoAkY3JxuSi/S1nzYCfzltgtoFx0tW6uFiEEvmxXIe3LqBdMWdmW1uhlo7iPiIEA AJ1mAP424Ns/ohVafPa7h3ujmToV2T9agHFMpihsBJwmRw2ohAD/eRodk0CsLF2/ R8KG4BH3CH2PI8F2Vd+/pg5spNX0AgfCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4 CRD9nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdhDZm0rQ/6arBmfyap8Yum0kIr3tDhc82Ou1WBNhLPoBYhBBPIuNwgIJyw4VVk 4f2diwFXRQILAABB2QD/RBFlry9eUjzwa99UFqs/EgV+PqWDF3fT8YWrwxDhDXAA /1F0fn8ukAmksP1FDEv587yT64gE7T0xwyYETXHZL64JwsAHBBAWCgB5BYJgKGTv BYMJZ5o7A4VkeAkQWKOCMX9U18VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jny9xBgSzntqPAwKdoVgvgdelJqIiaLNtQUz0Nm24BXAoWIQTP cB53t5/r3t+ItFVYo4Ixf1TXxQAAnZwBAKzx5lh5/yoywEOX90OU3Jld3YqHIZcQ HQeJf1PjLTK3AP9Wr/kvvbupov+apQFRCXVWvmoKoZf6WIwiw2/W2RBJAsLABwQQ FgoAeQWCYChk7wWDCWeaOwOFZHgJEKVNXWOwv8Z7RxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/K5qlaMLZXpXT204T1az4f/SL/GDrjLDMJB oGjm0p2bFiEEo1vTrqcjYvXDphCQpU1dY7C/xnsAAI7UAQD9Ws+qDDiOX8qWm423 BkqEgJvKejPm+wJdEh4aCNsO9QD/XnlzO94z0QmOHJQ5VFyLeQd09DaFb7PfDEQV 9njonw/CwAYEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDuR3MOXR1zkEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme8tzCm6nPy+cnc1KBUuniK /LZvhrSUutZeXsF9KXGFKBYhBBbhB6BohsbB4aRHx+5Hcw5dHXOQAAD+nwD2OO97 kVKeBlxGtWpqaN3Ko90ht6uPruv7Lq7b4dZGvwEAjzOMJep7F+muQUoU2WWOB3qv mRb3XcOh/7KUsK2uDwbCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDzUJkAfv3Y PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmctWwPLTDWD ttrkTQITPYV7xsxbdqS8uU0VpX8fYS86JRYhBKNx4aCK7hlVS9j2/vNQmQB+/dg+ AACvigD+Kxjq8obPljQjSUDJGwWHSvexqPwbcisX70ebVMKgdHcBAPHaOSC5ucff 6zmWhaxv0o32aTmQvZaMOPxToppvGcACwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4Vk eAkQFmmCVh4UDANHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnDqqtFSbc1sYgelSQnjvB8wbnhPSuR63YsXi66vngOGYWIQTCTMCRAtIuOOg5 PFUWaYJWHhQMAwAAshAA/jJvcGu9k1ilFnw0rXQ4cYpItNg33VJ9DH+fhAqiKSGU AQDB1oCJ/wcfMRT2g07HVjhjnx3BhmCkw4OqrVBT/Dm8BsLABwQQFgoAeQWCYChk 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 bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9OFScEv01TCEspzZpmtJsDsOWV6 dEZIvRN+8OVRhbjbFiEEl+QI92oIlUYQRdda3JLWX69GUy0AABKbAP47spsRsUrI /LL8UTuXiRsMeKgFVGmoGUiMst8ZA64bxAD/dezdX401To6WgRuK5VSbLlg94EXj 5XKiERGiT3TYwg7CwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRD6Yec8b13LRkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfHlZ2YcPyZTL7s YhNEajAX6bQ2A5tGSPoCoyDOmiOxphYhBFNq1WK5IXuYOWYgVvph5zxvXctGAABv WwD/TrAVd/xH1+Y2hW/W+zd/9yQS64oDgLuvVBTTo7Oa4nEBAP1uBAjUcADQnB57 gBASII7SP5IA96OlKv3VD8oPeqACwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQ 3fp3nZHGmJRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn YAMBd2dyD/XBYYFbZRyKsjUtgZxcxfEw1CbCswLEn20WIQR5dMBOjVtUDSPNTmLd +nedkcaYlAAA720BAJlUYAyyHhZFOyg+MttO9t/4DoAQDSmUe8XQH6sjvC3MAP94 shfqHsC49pV1cJm9+mdlVhAzBjGYHKebG/qPw/ToBsLABwQQFgoAeQWCYChk6AWD CWeaOwOFZHgJECXCwO6D1qkARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ3nUfBp6mm4PT/QcKFFPUcIYRcY0dGwEk9JzhQc3lkUYFiEEuSfQ bZITfrNPx9WnJcLA7oPWqQAAAPL7AQC89/sdPiFOTPunptHfjGiWytDu8tLD5Kkq q1Ve5652yQD/Z8Us/3cvmPMzmnWJjsPitv2CPupRY8uOsOzTG1bH9gHCwAcEEBYK AHkFgmAoZOgFgwlnmjsDhWR4CRAb/puj9KvUDkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmcQFSqd5DvngitCGoIZr0FtjaOT5iT6Dyq6DXfE qv6MOhYhBDYwgunusi5QrTA9ixv+m6P0q9QOAAB8WgEAxeYSIjoansFrOOhMpHaO nq/SX7dMCDDd+NwXsatvSH4A/jB+59R+aMliqdHO1Gy3DSQk4grhb3vLmmy9rLTH AJANwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQqW2ZHaR8Cj1HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JneHhk0gxRnt1f5pRnhidZLmm1 r+A3MlXlgSN2y1YgiRYWIQTmG2MdVma+3JwlTnmpbZkdpHwKPQAAYQcBAMr7ZOm2 gRPnlIEU7CVKU4OCaph2unaAREs+Hbw9mGQSAQCQoxFkO7oz6dvAWaDOZPRXbqnW b1G0OPqyF2q/rQqIBMLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEJvVXJ4TPoy+ RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+UkMtfqxmaX RvlNcZJ9eZ3vtvtnz/f5bLx4+fyVxo5mFiEEQ1JVe6tz/5W2Mu5dm9VcnhM+jL4A ADKaAQDjnTNL8Qbax8F2cFdtWofKtXAtiZLCht+QkCOpn363GQD9EawV9sOBEngn C/2YBfv7vHocZHP0ffMhyWupsRpbKgTOMwRgCWy8FgkrBgEEAdpHDwEBB0DcXTM/ 9ZB08TMzG2RFpinZID7BZJ14AndGEm2wuIlLYsLAwgQYFgoBNAWCYAlsvAkQ1Dea nq4moj9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEept QOXxll+QaGePflXrGK9QnFg74v7weomJmo1GJmoCmwICHgG+oAQZFgoAbwWCYAls vAkQXMw69GAcWWpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnPAeBuTlIClboKcK0rrAt6Yz92kjlMdSWqlXd9foKqaYWIQSgiwW8v4nCMwa5 CU1czDr0YBxZagAAt2MBAPoZ1JTzOSUBEl9+z5znydko536eytOuHC3yIvmrCV38 AP9zI4sJ94JY1SlxkweotFbVkFIaBJ4dXhGAs4qMjkPbARYhBC+QxcU7EN/U99x9 stQ3mp6uJqI/AABTegEA8SvHoHkXppGrKr29TPiBL+d5MTiwn2fJz4r7qC7gzPQB AKEmwpeT0BxsyHp2rhTR7OqAFHnJFJ7FCpRbHxlDo8gAzjgEYAlsvBIKKwYBBAGX VQEFAQEHQND/hFwbMaRR1KyVZtyQuso1kDGvOS/SiqAOBeZplk8rAwEICcLAAwQY FgoAdQWCYAlsvAkQ1Deanq4moj9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnpbY7QtusSEVOBBojPhN7VD80/P+Vk2E09CKYJlQ+XEgCmwwC HgEWIQQvkMXFOxDf1PfcfbLUN5qeriaiPwAAO58BAPjT7ZBvs7QRa4Hf44ChC8BP H8n1SWmM4trET2T38QkHAQDgpiQXEw8J/cAVz6+D3K7D0nQCBC9wGe84YkpdWSw8 AsYzBGAJbNUWCSsGAQQB2kcPAQEHQDW8AXOIJwTJtaoiQuuLcggNFJ5slX9gGcn1 1JVSQivWwsALBB8WCgB9BYJgCWzVAwsJBwkQ7xAwNgMlvRNHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnYxkWFcItwj2hCtJWdJlbCAGV9WmU vo0/t1riNaGUnM8DFQoIApsBAh4BFiEEbHAEPhkDW9WoBQBE7xAwNgMlvRMAAJ8P AQCIcikqlHf1zckGK1VveVy2fQj6O1SAasBanyomwXYQgAD+M6xSwCAPZYaHZ4Gd zCGToS+MKdTmc43rlJZCrzZO9gLNETxjLTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJgCWzVAwsJBwkQ7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnKTLzmkSh3R0poiG3qqPqQh0ZCD/03aOHof3kLkFdYGwDFQoI ApkBApsBAh4BFiEEbHAEPhkDW9WoBQBE7xAwNgMlvRMAAKGWAP4tnkK9gNTKPEpD Od9a2/lJFcsW+jD6eowhv6raVzJDSAD8DD4BeD2/Pv9LUSJbpJhNhawLqofb78il oTJJxDvzlwDCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDUXuAibV33HkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdQIS4ZICl9ygLm4xWP UBJpmVz3MtTGuubx/dp7RDZgmhYhBLQq/TC7G90uueu9uNRe4CJtXfceAAAL3AEA i+yAm5JII5GxlZ3wTm3hzSrueuTlC3HujQeILSp/Aj8A/2aYD4aZNbZLx6P4bF+6 I88E2xedzFR7yvF9yseES5cJwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQhK3b B6EFfp1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnbkIQ YfNO1m3BkAU9PMbZSVcx4MJSFvkFHlWzkL92+e4WIQQot0qnxRdyHDmsgoeErdsH oQV+nQAAiQMA/iFKhQzmr1HAhAthPPnNO6Dsq3I1AFg2tB4RaiANh825AP4p32JI xpp1PJuS0HE9AYted57HFNFoK8fCjYI0BXQ8BcLABwQQFgoAeQWCYChk7QWDCWea OwOFZHgJENzDonQQrio+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ3QNTJqTV69I5iq6k2e4T88fkvkCWkSrVnW/1ODQBDtNFiEEDGDUNNUT xGW8B0Kq3MOidBCuKj4AAKJ/AP9FcN12UPS3tutfyo96dx0AKAjTRsC0y8jSecRd cQK40AEAwxCjWP0JE9HwfdhI3gFnIMELAU+6IvrGhEtbH4mrFwXCwAcEEBYKAHkF gmAoZO0FgwlnmjsDhWR4CRDxxcwns9mX8UcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmd9McpGIwPqWcF7oqivrx6c6ruwr+AdAOiMUzytPHhQ sRYhBE7WpTG/YlHnw2xFOfHFzCez2ZfxAAAsMwD/cwDp7JTGHc/WyaXNOSVokmt7 CeE/aGYsI2OeFxNv/WkBALXe1bUPgb1q6Zwh33KcoNf6lgMBdBuaC1/NkXc2KesC wsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQOsN73jG+ZaFHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jndl82C+Bm32f+Gyv/jkLoQf+RaWkc +QNGpfPMnJrmQjoWIQRWjDdiI2+8doVL1OY6w3veMb5loQAAvGABAJ23kRhbrQFP CaT14t03xazUAhfbRvrfwKeyq85UwmgXAP9AXo6NMvy4grUtCxpIzGpCXrrhWGZu tc0OmPi9AV2fDcLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEAus040ubStDRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1h7bKys2oN3S9qS xBqOaXQbiBAuZDS1fKHPv6bfJAZDFiEED7+aSKWr5coAlO5JC6zTjS5tK0MAAPSY AP0drnW0TTO4W8Qygw2Mst8uGNLQgB9TcRQothQiK0tTNwD+KXZpBnFHDTeMdrkP oyF7wBrU2q1od4ig5T5oE2WNMA/CwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRAQ qbswI8v1WEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmer VaUu9zG7qGd3HYqn9xAkCVd1VHIQqbbhNVzgob7QLRYhBL4328Rq+AQoneaEvRCp uzAjy/VYAAAf9gEAstmp/zXDfdVu1QOw0+sDdBFKQaZN/wpGSpV8LYHSb5wBALSK mu9imgDWbntPzhifBD7P6hBMjgS1TL58XAVzJW4JwsAHBBAWCgB5BYJgKGTsBYMJ Z5o7A4VkeAkQf62xw/77/llHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnP5b2y9CB1rN9KSaya1UpzFZilBqZu8LtpcCYV1VTb9MWIQSgzYdY LCF0PA4wY39/rbHD/vv+WQAAS7IBALOkwMvslovX5BbUSJ21SLZhXaXjaZoFvl5P o5zAsSDqAP908XrMf67QEpxIx0DL3H0NCXdCTyb3nYH/zgaZqAPLB8LABwQQFgoA eQWCYChk7AWDCWeaOwOFZHgJEM3MGshGTI/lRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ44zykkr+yYp3dI4S9hlTl8JPtFysBSDGIL5DvpB FnbwFiEEUnfBT503oPTWFd2czcwayEZMj+UAAH3mAQD8ZVz9xp0FLsgHjfmp4AjX oC8li7nCXUnkWlZNYzNcOwD/eb24yyk0luN5Sw82H0SxZooYcS0M5tzb5bXCy8BJ +wvOMwRgCWzVFgkrBgEEAdpHDwEBB0B6s4oTRtGMz9xBeFbVVm/Jcz2DQav0uPiL 0MB2soU12sLAwgQYFgoBNAWCYAls1QkQ7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnQWfcneB1SNQDJLC2x5Ak4DudWNSi6x7A tWlsG/Q013ACmwICHgG+oAQZFgoAbwWCYAls1QkQ4X+t+FtE7ctHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnzS2h+BSyAiMtnatvKNz7j7w0 qGjBVKFkgHb3Fax0l7cWIQQJnDFJhBOqzA9v/97hf634W0TtywAA304A/jRo7ci2 nDO6n6z659usomRkG2EBWz101a1R2PA5+sxiAQDlF9RX7afO5FVoPUSOpus8DorQ ExmvHvhtxjTEkDegBxYhBGxwBD4ZA1vVqAUARO8QMDYDJb0TAAD7UQD9EsgFOA+g dArz9y0t5+bRbQP4VqzhbacLAJr/4UP9wowA/28GfTC1Tne/mcJ98VUNzTJ/Iqxp YZYZd9pN8XH4WUIEzjgEYAls1RIKKwYBBAGXVQEFAQEHQAQQSxEteHf0w0VAA9hN T0zCtqqGcPVFR+y+zRUm8OFyAwEICcLAAwQYFgoAdQWCYAls1QkQ7xAwNgMlvRNH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnd6fRs6FBZveI KOPcmQex0/HwYJc3W9YS3LVD0Rd7+BACmwwCHgEWIQRscAQ+GQNb1agFAETvEDA2 AyW9EwAAVSEA/0Bgm764DV3fxASvaEN6nP3TI/HfjAsBKbyUotssb4h/AP9WvO+o ZK9Cih0pzgqfNuKyheKBnj7+cikzyyBIFoZ1CsYzBGAJbLwWCSsGAQQB2kcPAQEH QI4whz6NVVpRq2nJx6cYgDbuukMlVWtty5lJFcDRxh9MwsALBB8WCgB9BYJgCWy8 AwsJBwkQ3JLWX69GUy1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnK85dIj9qanwMxzFPgsUUZnrct3aE358bWNJHtxk0sEYDFQoIApsBAh4B FiEEl+QI92oIlUYQRdda3JLWX69GUy0AAPxHAQDV/Heltmg8oisqu144BGXE1iN6 Jubw7VU0EqtsdyBH7wD/XKzNfXvoS2fhOSor3SgNv8Kmyb2/dBOxVU4K3DZvmgbN ETxhLTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ3JLWX69GUy1H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnFrOSeR7ejo8C HQwVzNtFY7nklDO5KAi6XbRC+iks9ncDFQoIApkBApsBAh4BFiEEl+QI92oIlUYQ Rdda3JLWX69GUy0AAJJ5AQDfheKpiec1MIf382ILB5x1OZVJj/Fj1ae2cgSBbi4f ngD/fXg39XPEunMvwAQmRg8xSJLD7xXfCdhn+teIccK5XgvCwAcEEBYKAHkFgmAo ZOoFgwlnmjsDhWR4CRD+3G5cRqqrE0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdepvtg00FSJ/pZQ+bZq4vXjJwwrpHxf4JbO/ozniGmohYh BEeXd2slmPl9ye+Uyv7cblxGqqsTAACHmgD/VbjmVyICGUFA356AyH2ls6tiFxu1 YfP3u/gjbQdhlLcA/ivwqcBh/pkYF5zvtgMxvExE9JGjUMhYHchihtbHmKkAwsAH BBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ1Deanq4moj9HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn24gefTmxAUCDKwP3hC4lzM27CRO3HbdI SZbQWHfNk/IWIQQvkMXFOxDf1PfcfbLUN5qeriaiPwAAHucA/2g28ChfrkkOs1JM nPS+IU2TfiQEbLZhTPKB8o7sAD3RAP9Sa0sE7N2m7eVpKLjsUpAZG7vLZdXR8h2q gCzK6Om0DcLABgQQFgoAeQWCYChk6QWDCWeaOwOFZHgJEAOSU+8OuZEERxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzLHsOcXqSP0Q5iKSsQj 4vhtuXo/t3BMMrt9n3q4nuU8FiEEPJMERxCObxqpIdnAA5JT7w65kQQAALU4AQCa ZmDITCiRbAFtblxP1NXF1IM0ABFOjFP+fKnlbAA1IQD4t2HwhXnwVpJL3dZl/yF1 9/mliXoCC/r7Mi/P+dGnDsLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJECXCwO6D 1qkARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8KG8biv MnPI8wFj3KP++4g+qZTvQwL3QzWqwmspM/FIFiEEuSfQbZITfrNPx9WnJcLA7oPW qQAAAGd1AQCi7gwHenj+/cF9nrhiIaDTCpb6eS0i4nhCbXq82Z6+GwEAmbODldSG FKRxNq3RmRfZKcY5ohz6Nlftso5rnGVyrgPCwAcEEBYKAHkFgmAoZOkFgwlnmjsD hWR4CRD6Yec8b13LRkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmfO8jDboImjlfd9BxvU4hdedtq1QLHF5ZwST9Lh/Ssk2hYhBFNq1WK5IXuY OWYgVvph5zxvXctGAAAVGAEApXbLimnFbRdI/LzqL7kAMlsKPgJM7hrw+9FCeidc 75kBALqcUqKNLYJ1m6oQiB299tGZrv0F7C8Tbo8l0ltb/RkAwsAHBBAWCgB5BYJg KGToBYMJZ5o7A4VkeAkQqW2ZHaR8Cj1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnjmR3u4CftgyWMVPNw2En56GY+/tzy4y4qY9JV9fP00YW IQTmG2MdVma+3JwlTnmpbZkdpHwKPQAAswoA/0CkpcJrLXY736clKiyh2Zw0kCsW tCaE16w1ew/ZK1TZAQD4+SNE52pw+SUz4+kB9BNjU+3Ez7V2yVJQvcsJH+aVBMLA BwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEN36d52RxpiURxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzXmHPwdG78WUqTiUbFi80600g06Ev17 Tqs/6zAm0pV/FiEEeXTATo1bVA0jzU5i3fp3nZHGmJQAAIAJAP9OaU2H0p3/CpgC jDZXVAGaXw5crIaPkx5g/jUmlVMYmgEA3xJGOMZi2c7Ekevi+/3MwVzRtcypfcPc Pmqf+biONAbCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRCb1VyeEz6MvkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdvEwa6eGxHTBE67uZV dsRc1Ri27MMchZhXVrytFoFo/xYhBENSVXurc/+VtjLuXZvVXJ4TPoy+AAC+7gEA vUqFcyCT6L55/u9B0zUPjZm+B6SDah/SOvICx8+Xb9UA/2eAPfeGLLv9l/Rzvvob ErN9q1Xs7i/pNISVs95/ua4LwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQG/6b o/Sr1A5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnBWDH /wX5WAEk86uoO6GKrRHhlmoMHDueQuLnHnx1kHEWIQQ2MILp7rIuUK0wPYsb/puj 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 +5JXHF6Z+EoKAP9CnJxCNfLw6BNJmW1HcFtU/cZGpbEFjg75HW2zEjxTAMLABwQQ FgoAeQWCYChk7wWDCWeaOwOFZHgJEHx6ioJUGvBfRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9q+HLtbGBqnUzwLq3Dj//d0DGgIcFO1kGdB Sdsj+VAJFiEEywlhwWomKeKFW2FDfHqKglQa8F8AAOvAAQDgruLUXlLTtZzqc0h4 rfqi7KwEsIFBkvuQUiIhFYr7/wEA0ap0J/YNF8o1v+/otvYfl1Wt4JMUH1kchQIi hX41ZAHCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRClTV1jsL/Ge0cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfMv1kEPJT12kQimjJwiXcc FDU7IVf4lOpSubhpdUvw1hYhBKNb066nI2L1w6YQkKVNXWOwv8Z7AAC21AEA4PVH yK0sxvMQyo/DE2KEKs0hjLgpFJ1IUMHdwfsaHeoBAPGZaXMB9h+RMmhucyIfbzdK RIZsvX0G0hLjRXJP7TQLwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ/Z2LAVdF AgtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnj/ne+Pot DQvPPwUSxPqhdWjQyr62WCojQ/I2eHnGDgEWIQQTyLjcICCcsOFVZOH9nYsBV0UC CwAAM+QA/idTdEP7wrIBcNOl4VUsJqtWz8mMMdwCRJb1LCbAWlP6AQCu5n0ba9gi FCZEwYDLX/sENoy03NcTSRYKJTTfn0QGAsLABwQQFgoAeQWCYChk7gWDCWeaOwOF ZHgJEOrXL/eRQHiyRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ7uuWD2NBV6a88No9QKKcKFqGOPw8/Ep569kykkMES1xFiEEeoDbUzC32QDV vR+C6tcv95FAeLIAAKiEAQDKyd5DLFYmeiAvolZdLHcRmFJRMAfIDxvgnqP8CowT 9QEA42ZRk6I3xkyLb0jmi1Vtom2FexgQBq5w1hTfq5MfEgjCwAcEEBYKAHkFgmAo ZO4FgwlnmjsDhWR4CRAWaYJWHhQMA0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdH2tDoY7iXlNyVjl6h/tI/9bkAXD0n+UlxDoC5iTXRyRYh BMJMwJEC0i446Dk8VRZpglYeFAwDAABWoAEA6hr3RROTWWkXfi2XxwGfHFALv76d en2tawietMzWYWcBAKBZAK99kKsrdFeHwTb4ctyLAeXpa3f5wGZV367R7J4IwsAH BBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ7kdzDl0dc5BHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JncQjumIGsCNcJaCzeBs2jGz5GBOSP0f02 llffVInzCXkWIQQW4QegaIbGweGkR8fuR3MOXR1zkAAALykBAPXAcmDNiyRpX5Pg uMnVVFYOQUynvKubN98dBekuYikyAQCy9U1himVAXGckNdpsPmloDKMa881tHQhb khVf6YrTB84zBGAJbOcWCSsGAQQB2kcPAQEHQKqHxTxTFLhVu64BFIfxDQDYvl3G WGzwiZCapqFywS5lwsDCBBgWCgE0BYJgCWznCRDzUJkAfv3YPkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmctvF7e0YH5IeNsLtmdX+j1+1G8 soY2DHPdAXgdnlovFgKbAgIeAb6gBBkWCgBvBYJgCWznCRD2x5SnGb68dEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcEFi3CIythNQh5ASfr Fe6v5UeAL4y0/tA8bnhB38ZpNRYhBIK6hPYePFLeNjBES/bHlKcZvrx0AACP5wEA vD4Ekiy3Uk/sIcrSpyec/CkKWSYZ6YgXaudoQUkzthoA/A/4djNMrkq/t4sKHEHx yuAEfGtY3sivQcGoynZa9UUHFiEEo3HhoIruGVVL2Pb+81CZAH792D4AAAHWAQDN dwKerwAaNXwjr/0hRnlcaEnN8ntOBIOkjvT8WucsUwEAuGzCdUA+R8AHFGKOooJ0 u4lDZ9k+mveutKuFzdr35g/OOARgCWznEgorBgEEAZdVAQUBAQdA9Dw4wdzTpYH+ R++8Fl7pCm6ghtt3a+kVGBLInHNztgQDAQgJwsADBBgWCgB1BYJgCWznCRDzUJkA fv3YPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdfZxk8 Wk/hWB6MaaV8VsFxRTPpDZgnlnZ3AMtUr1rBtQKbDAIeARYhBKNx4aCK7hlVS9j2 /vNQmQB+/dg+AABG0gD+KCeUOpRhvMHbGqvRjE1TXHCsyueoHe6Wjo5svCe3F4cA /0jdhcq3juVCybY5/RyKBYEJK5I6OLthFCmDmrZ0PgMPxjMEYAls1RYJKwYBBAHa Rw8BAQdACalkl8XPlfB29BffkLCZY0c2WlNIBxV3O8m5sh3K+f/CwAsEHxYKAH0F gmAJbNUDCwkHCRCErdsHoQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmewF/NuXfK3jQ+XXvXEixMFtMYfgMhfg5PzLKNFNd1iNwMVCggC mwECHgEWIQQot0qnxRdyHDmsgoeErdsHoQV+nQAA83oBAJqIMJTmybQniQtCNot9 s+3GZq4raz1NJkZ2ke2CkcmYAQCG17WS1v6zNMFOXVWwbjGJ7KPjENrQx3CGQ9Dk L5P9A80RPGMtN0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbNUDCwkHCRCErdsH oQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeWeR4R 966uxhhjGnjURyPuAeiBo3VhBpLp2pPCtFLWBQMVCggCmQECmwECHgEWIQQot0qn xRdyHDmsgoeErdsHoQV+nQAAsocA+wT3aIvEChiN3NZKFULfz/q5b8JteptSckG3 6kSLQToBAQDnsnH59O9DWb2nsM3tB+7MxXLFO2mvm4Q7A4SpS4CNA8LABwQQFgoA eQWCYChk7gWDCWeaOwOFZHgJENRe4CJtXfceRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZx3U6/aYAz32l8fo0UpIc/0TKuXLLED4qbxGPm7E 5EHzFiEEtCr9MLsb3S6567241F7gIm1d9x4AAOMzAQDL6twr+hiCJfoGUA6gIsPV Flz9HwJS7YXEnzas9EzZKgD9GTT6K7ucoB4Pk4c+CNmgbD/GRBvVWIXp8kFte/df lgrCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDcw6J0EK4qPkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf1vDhhfC9DTQsQS56bDND2jakN 8dluULeotO129bQGTxYhBAxg1DTVE8RlvAdCqtzDonQQrio+AACYfwD+MRdUkJ+Z P6M18tZST7D0lI+b4ita2frgSJBh8KYYlcgA+wcr5YYxuRpypapU8MkIUNZN2FaK 9b0xSTvgLoQEYWUCwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQOsN73jG+ZaFH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnOe1MdRGaw9kF tJJp1TsY8pU9T6oWYY5s0HizK1bDxW8WIQRWjDdiI2+8doVL1OY6w3veMb5loQAA zNUA/0mDajtd6SoRCG6L1388JvscYTS/uXNQ17SSpeo8C/kBAP9ZcUIQhePC7zy9 6vd8wRJx373a3tSiz7wj1M9WCkj3BsLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJ EAus040ubStDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z8k5jRhjC4AeDueD3rFHbtaxh0yiOOfmiWXDpWE+px5jFiEED7+aSKWr5coAlO5J C6zTjS5tK0MAAGcLAQCxenfyuIQ50yY2YDEx8yDwH/uwIcOwgjNjWqnO4y3pKAEA /vKmdweIM5d9lxJwtMpSHmSS3KdzuEbzGGiBHeWLfAHCwAcEEBYKAHkFgmAoZO0F gwlnmjsDhWR4CRDvEDA2AyW9E0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc12q3PVz5C2tnyT0wDuRZd0IER7fZct1+UQHQ+HxalgxYhBGxw BD4ZA1vVqAUARO8QMDYDJb0TAAAHUgEA36iAhSWKAMFZI/CHN/UCZjyMWMlNwft8 dIRO6JblLVMBALkFAi8n2V10smZBw7Xvcp/ueTAktMuiklEgMQdSC+YCwsAHBBAW CgB5BYJgKGTtBYMJZ5o7A4VkeAkQ8cXMJ7PZl/FHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnzEraOSJn3rWAjZ7hJ/aq4vmz0sBS8yf32Pzu 39urQH8WIQRO1qUxv2JR58NsRTnxxcwns9mX8QAAuv8BAOtPhPD+NPoL88myuMC8 TXwdFpWBkzep5R8a2QVBg1hFAQDP+HXe29NvUzK/B8D0ZpFk9rdV2RRpVtoCD/Gu vz4QA8LABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEM3MGshGTI/lRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9zOaG/T4wJUXP8KlqKufadK TtT5t1HaewPJWAnF9nwxFiEEUnfBT503oPTWFd2czcwayEZMj+UAABgDAP4l34f5 dkvhHfbCqs77Ma9YavV1emfxB8GU00vABnINwAEAwsJVsDTfBZKDfwnan7kY7n2J Jgt7/LFKXfuYpIaLyAzCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRB/rbHD/vv+ WUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf3lzZPJyh7 F7VBnM71+pBr+GIw34ljLGHDTMTMUhuk8xYhBKDNh1gsIXQ8DjBjf3+tscP++/5Z AAB+cQD/TCZVnNw1z1ObZoBOahq71j+9jeHTTiSGDBhvpL0iRgUA/1VvWtApPsKt 9yKjYRDqSNAgXzN1fe5p1D5uxVYUdPwOwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4Vk eAkQEKm7MCPL9VhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnQj1Pn6us/jETzlUdbr+pDauEOrI+MpzXPO+rlV72668WIQS+N9vEavgEKJ3m hL0QqbswI8v1WAAATo0BAKti+/9Qt10x/sLMyYQhmNnDTBzGJeQbOlxlSCemMJWv AP9Nb8jl9HvcEr12BZzjHNEgc+yurTLospKptsHQoDMaAs4zBGAJbNUWCSsGAQQB 2kcPAQEHQHJerObjQ1bijpPpYwnjWHQv3kspt6KPB/2D0VxDrKaswsDCBBgWCgE0 BYJgCWzVCRCErdsHoQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmewBXOBGbxv0kLIMIkisvDhbA4IZ4y3DAhEYAaPleLQPgKbAgIeAb6g BBkWCgBvBYJgCWzVCRAMLhw8jgduMkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfvoBGK2ndhkwFFLASoozuzRBxGr2KxLJekk/5dICSXtxYh BDpkQtd6zLS9ndEZ/QwuHDyOB24yAAAcxwD/fiR5dHPihTBXQ4I/uZtzp3v8Asap jHHYmROK3wGTMGEA/3PWCq3mo4AqIvDXBtsfzErwFq4B/o7Z54yoLqEpjG4CFiEE KLdKp8UXchw5rIKHhK3bB6EFfp0AAB0cAP9LujpAic+V0olhAwzZNSPfXsfdQiXq A5lpijmezX6U2wD/drP/MlU4rpTAkCT424abtHN2LkBtC1mEj5lOP+up5QTOOARg CWzVEgorBgEEAZdVAQUBAQdAm+Z5878rfgOuaRN8/POBEhJXM4bt1SoBpmSUgR01 Fl0DAQgJwsADBBgWCgB1BYJgCWzVCRCErdsHoQV+nUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmedpDZFNYIBJaLr0s7rmORzHiYM2NbHC2FF tmpYoa9qCQKbDAIeARYhBCi3SqfFF3IcOayCh4St2wehBX6dAABAagEAnLntLHf6 tIEQjzxGCpT6m8kRc6LxRKVL4Hg1NSs5cm4BANaCjeORlg8EAg4pcQBnFYdxM31d ae41Tve+A0SYWbQExjMEYAlsyBYJKwYBBAHaRw8BAQdAzMTuGrHo7cxVOUZMPmxs Lk88kXDstiDn9ljML9H2kcLCwAsEHxYKAH0FgmAJbMgDCwkHCRAIU/27kA4FsEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeQUnPFWmtpAqaU KwQQI3AkfmoRJWF+wu4yvW3QBDwGwQMVCggCmwECHgEWIQSiwZ3XyZNfi0ebXQMI U/27kA4FsAAAzx4A/1Oslv82eI8G7SWL5NBkKtb3Sn4LSU+JI55wPB3ecUWAAQDk qBtkUz3FnzcOeVlML86eBPEwqFgv8Z03ZBMfr/4UDM0RPGItM0BleGFtcGxlLm9y Zz7CwA4EExYKAIAFgmAJbMgDCwkHCRAIU/27kA4FsEcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmc5/pvHh1oXWsxgAIhRoWv9wBOEvu+ricsU iL2m005zhQMVCggCmQECmwECHgEWIQSiwZ3XyZNfi0ebXQMIU/27kA4FsAAA4z0A /2IWYF+Y8H7guPEScEUrHr1LhSvRr7MCyRNVZMhYoHxUAP0SMxQT7Deyl6yJxJXF lwVbqhL+SY+YzuG/xoVEI9YNAsLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEEaW pcYp6jH6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ++f B6FK78oGK8FgdbvBWjmPbcVPtgcPaWWHMXsfCSBEFiEEkrsaVgv/zORxewXcRpal xinqMfoAAOE1AQDvLWDTEH6dJqvgqw7d0n1yiqay75Qc4i2enKGE0tmg/AD+PIVp OBA0JFr3NbikYhPDOMK4vYIihXNlkUuOpJ2PGQXCwAcEEBYKAHkFgmAoZOsFgwln mjsDhWR4CRB4xX2d6VwW80cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmeIzI7aWNTtKhVVXDmGR6X5omeKznyQp4gIKXCFj4ilkhYhBL/DGmnq lHTrifzMLnjFfZ3pXBbzAACgygD/Uk5bKYRrPGFSNFstEvkcYF3+kpY2Mi2hyrw3 wm+oRQEBAP+spFlotox3z20yYtWJIZ/8loaJJ4M7N07RiHaDI44IwsAHBBAWCgB5 BYJgKGTrBYMJZ5o7A4VkeAkQfl20IOQOsR5HFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnQTmMU8SMwrdajnhg4M500Le+SQKR9lnLt0lXdYfD hqQWIQS7CezvUKN2O3hrnYx+XbQg5A6xHgAABP0A/11i9U/hJ0Ip2fPPrA2ujZuH tsANB57D9LvkuxmxPEowAP4md7wvviOPCN0ASUJ+K+x4+UxQRjCfsQU2lHDslgsG B8LABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJECr2o+5ddfo+RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6MNW2lXFGnVzTWWT5Phxe8X7ZmB YOI2f51GKynXR9GHFiEEkKndPnchwiGejXTcKvaj7l11+j4AAK65AP9yru+fy0hN EWU7bqJIOlrgiTqS7YtCAs9mDk4SiFLQcQEA39ZmDv6y0xClqblE9m9b6AKaJQHM TSlaEELP+7Ht5QjCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRAsf9xTXwaqFEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcVSPj+sXtAYRbP u9bfTv+lzpOjq/eGI3yQ+OjY1WaSchYhBP0nJ4sFE/j9z7gy7yx/3FNfBqoUAAAr 8QEA6x9VPusAT2BXxHopWkHC8bOoCNlz7PBEuj8SeI9DmlABANDHaGUKjYiZDczN NoV8sX5k66kBr+OS+cI8rYG8XzwCwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQ r+iF+TS/E3xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 3JQyFnW51CkebiwvoWTWDkSQb+HMQe6I0mVjfz5JLVEWIQTTZEMQo0ePZzTcJDav 6IX5NL8TfAAAeOsBAPL1XlPtm8qac23hwVYdptu6WJMf/IfQOTOEf2CCRth/AQCk bwgQRbehRgwembfYlo1gncRFqR5h/hM8s7nCAJDXCcLABwQQFgoAeQWCYChk6gWD CWeaOwOFZHgJEHg/Go/HJ/w9RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZwg/zhuj3LcDsJhAC2SCgAQEU3vRDiTy9YAp7hUIUShpFiEEJ+Nf 60hsv1sWYAJweD8aj8cn/D0AAPM+AP4s5PID303SfUMfn+WQWU3w+II8Sf5VEmY6 enD78lBUEwD8DXyT6nsaXcn8O4YucqahO+n7KrklEKf+oVsvgqdQoAfCwAcEEBYK AHkFgmAoZOoFgwlnmjsDhWR4CRCWSe+Brv5RYkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmcVe2rXLzB5raNmfDVY72HeMV390xMhufCwcQjo wo1bHBYhBCXY6quJRwW7ZNSmqJZJ74Gu/lFiAAB3NQD+NU1AxOwfQuaR44IBdzxk ivcwP1ah+/9JmY3bRjc+DMsBAO4/w6kmBeD6M/Fp9mAzu3Xt3QUHOt5vM2i9LMba TQIGwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQG6AZUGvmf7tHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnM9uf3+Wg/gLIyADRy8jkR9hW Q5nk468JS5jXUcOPqPIWIQRG0vXO2b09Y6Ed3+4boBlQa+Z/uwAAupkBAJKOgGJa dw3H7o4w2HPmoIqOt+oFbM2I1do1mqPsNtwQAP9D+W5zVt1ZqlNj7EFs/1LUmfEE o/4f0FhQ4a+9rknaD84zBGAJbMgWCSsGAQQB2kcPAQEHQJEYhr/kieXIsEvdAhsn 8/vUqgLc6gXVCJac7Dvm25RVwsDCBBgWCgE0BYJgCWzICRAIU/27kA4FsEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd9M2IkdA+5hQ4HsHOt e5VCV+Mh3WK3ui1p5ax8QKYoIQKbAgIeAb6gBBkWCgBvBYJgCWzICRCELiqmmoiO ikcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfzpkcd0S4r TDv6PmBMb0IohcpEifdaxwikExW8MNsQUBYhBHTY/zJmiCFue34v1IQuKqaaiI6K AABo6AD9E8kIpAM0cPd/T970G+tLemItx5ZsLQ31dw9ZdhgFIRABAJcJNW4oHAFN vW7vn3ZVrLjYMZ/QnrG36+/6pR2NZU4PFiEEosGd18mTX4tHm10DCFP9u5AOBbAA APREAP4kCE4O/pU37WG7Pa630KQID9MxysowkA7dUoITElNi/gD/ekA+Uuh17Hbw bswKhylB572maIcbcD91MU5WYzVFBQTOOARgCWzIEgorBgEEAZdVAQUBAQdALymm 22Wj2lEOcLczbisi5JvKZKo+4yx2zNVpC7qewRsDAQgJwsADBBgWCgB1BYJgCWzI CRAIU/27kA4FsEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcNAnnakwr9aPhklhE6SFU1V3BZGqxSPkSf+IU2hVHvzQKbDAIeARYhBKLBndfJ k1+LR5tdAwhT/buQDgWwAABwRgD/aL9hvj3sU6geymSG6jxp8/6YH7pqU4DGlExh Ml0ZIwUA/joyYWub2LBi3tZbRXgWzrGaToSV3vwLEu2yeRRD2XkAxjMEYAlsvBYJ KwYBBAHaRw8BAQdA5n5FjGpEz8f/llQUP08TjywBMryZPvFvQ3SBC5xX+0rCwAsE HxYKAH0FgmAJbLwDCwkHCRDd+nedkcaYlEcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmdk9hx3uZ48PZXd4yEhombZuTtIlCPVNjm+5i5Ke+Qg FwMVCggCmwECHgEWIQR5dMBOjVtUDSPNTmLd+nedkcaYlAAAsp0A/jDTSUVBgT3G uhfuGROkcEfwqhlpTOUcRI4N54qr1JnlAP411VWqPqbicmvkhamrHiOFav7LtdHH xfcWflN1vjBaDs0RPGEtMUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbLwDCwkH CRDd+nedkcaYlEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcwGVdZr9rGoPmh5VPOr8VyhGJMrfTzKATFXEH248AsRAMVCggCmQECmwECHgEW IQR5dMBOjVtUDSPNTmLd+nedkcaYlAAAfqwBAOFBzmeSRbNjsMzYPSfhxy4uxOju gM8/SICFY5k7b8WgAPwKdewZN3LUPRD1Ja9H/6Q7Gw0SDG5YQeCtM3AxcSAHC8LA BwQQFgoAeQWCYChk8AWDCWeaOwOFyB4JEKSqj4gLpRK1RxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzmjQVm9XVw+xYi+Ml9uIBWDW1oVMXjF U+WOwCOXie92FiEE0rDDg1wBsMEgvFQNpKqPiAulErUAABoIAQCCox+Pw8a4bv2/ HNPa0lYN0S9nHOCXDwV40kRtwO6ySgEA2EMYllZjZtvdX6KPsVzAxAqb+F09JrUu jr47q1KmUwXCwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRADklPvDrmRBEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmejQ9CNkXLjOvrkcGti 4rwcrK+odMHQh4hFHZC6G5Hr0RYhBDyTBEcQjm8aqSHZwAOSU+8OuZEEAAAopgD9 G+IsdZGxjOdKp4nafdwSpAqWPL0lhmzVT/XIu44ANAIBAOPE64wr98CMtukTynP0 tMJOs57vhPx+POT6ZpkJNggLwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ+mHn PG9dy0ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnj936 h5f5YWkk266Sk/B/XfQ0/g+BJxomIA5Riw4DqDMWIQRTatViuSF7mDlmIFb6Yec8 b13LRgAAul0A/0ttemudFKaLQylDB0oGYtwE/F2P/ltRY8dOU2LYTT1CAQCnjzov YJq1z+eHbD6+VNEGqx5YdvEUZawB5PoNGEKYBsLABwQQFgoAeQWCYChk6QWDCWea OwOFZHgJENQ3mp6uJqI/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ1RFpP8hY895QtC+8759JmNNw5GcL5e36Pnr1R3KbkEXFiEEL5DFxTsQ 39T33H2y1Deanq4moj8AADzXAQCNajNDI3HX6lvpEMZ8zI1UgjOdnlmdKCG/2mQB CY20QwD/c3jkiGglw49Ek4YRDlo3Bai2LLBEjEX8GfRtkDwnzg/CwAcEEBYKAHkF gmAoZOkFgwlnmjsDhWR4CRDcktZfr0ZTLUcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmd78K4s59h/Sf6txsT2bKKn/JnZgSqbODbwDcWdSno3 3BYhBJfkCPdqCJVGEEXXWtyS1l+vRlMtAAD0iAEAx1OuGSc8h1YTkrB8I/8BYyLM z22ZeZ8PNZrk4ZOjaEEBAPgRZd25tL8voE4zMrQ/j3RyZAySzgt6DQuOHI75SZcM wsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ/txuXEaqqxNHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnchbPpjSjh9f/aEfg5EMBkjyF6D9/ 5eNaFytRMyBr0pgWIQRHl3drJZj5fcnvlMr+3G5cRqqrEwAAKEsBANrueu8Dwk0u yyc12+lU7BM6DKWh4O/BVgek10GN8118AQDwndE1UR4h9mCVHFiu9I7EHdm6ZNb8 UGUASO7UF+VmD8LABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEKltmR2kfAo9RxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8utoHTxZBesQYD1 mPAUrQQbpnGOSpYK90uX4+8awm7QFiEE5htjHVZmvtycJU55qW2ZHaR8Cj0AAEe0 AP9ixdGuCTUj1YujB6UIetfzBHRpAk2kKIwmRsl/jhZfKQEAjXVIQ6z6dkF1zwjq gS4wPX/LVST/akcUIFNeMYJQfAPCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRAb /puj9KvUDkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeA kH4FczX9SWsZlwnVa5LrYK6xjNMrE31HMOlvsNymwxYhBDYwgunusi5QrTA9ixv+ m6P0q9QOAABwqQEAq/mYOEQHmXT7zTsj4dVx6Oho1rMfobrglcDYHWEnokgBALHZ 76Yzd9Dwmh6YCVUFFAgBLP8KqD+FrcvxrF2PYQQLwsAHBBAWCgB5BYJgKGToBYMJ Z5o7A4VkeAkQm9VcnhM+jL5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnOAZn/SGb28fncsKnYBj3EhvTZ056fPwJOuRpIr+SOL0WIQRDUlV7 q3P/lbYy7l2b1VyeEz6MvgAAINQBANQfs6FQ0XwpIakyhdwoQGtJwngocD86fd7c G04W8H2zAQCFsLiwMO0XoYoEmNQPqTFxyovKumSezZTUHXei8oogAMLABwQQFgoA eQWCYChk6AWDCWeaOwOFZHgJECXCwO6D1qkARxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZxfuzY8VEDlqShW8YfvMzpJQcdBEJgPK7kSpIsih iKRuFiEEuSfQbZITfrNPx9WnJcLA7oPWqQAAAIELAQD5bJ88IBXytJGqo1KfyH8r 9jgsUiX69I89KbagU3tZUQD9Ggti4NtKGzEG4QymHSIryHHRmvm3FdmxW79TpeMj lgXOMwRgCWy8FgkrBgEEAdpHDwEBB0A2cUkk+kqy/2J/YtnwlxPKpnhBmRZNKKx6 CRQMxuMml8LAwgQYFgoBNAWCYAlsvAkQ3fp3nZHGmJRHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnRttxFeLaWABhWyD9EDZqs8H1hwYP/SW7 4F4d+od53CsCmwICHgG+oAQZFgoAbwWCYAlsvAkQOtCmYzASa4BHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn46bDdVIcbhQ+sPKNAsl68EWD aZIa1oOXdJlJwGrRGvoWIQQvmcnYUIE8QWoaFaU60KZjMBJrgAAAXFUA/3P5Tf0O rOmXmSDxHh1dKrHU8JXG0F3TPH/4wL4rtTRxAQC4sR06wVH1CIKQLPtC0+CAgerG 6+4W9i6kxd5RkST9ChYhBHl0wE6NW1QNI81OYt36d52RxpiUAAD+HAEAw+8moZNM cnmOYQBKly4dOWJqxM49ZmTdV8EUR9Jp+JUBAM6ck/ra1u6BHT201i6DxAeBO3yh Esv2Ao9fkcM6WZ4PzjgEYAlsvBIKKwYBBAGXVQEFAQEHQCwCLpagLIN7t8WKiAXG k8W/jUeDypcivWWY/iFXrv1AAwEICcLAAwQYFgoAdQWCYAlsvAkQ3fp3nZHGmJRH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnO6mMD3fM3MZ/ klUxnlwhsQCz3PNggmxNnAd4AbdcFvwCmwwCHgEWIQR5dMBOjVtUDSPNTmLd+ned kcaYlAAAEvwBAMKMQJ0sHMvABtxXJdjoTEgRRFKjCwTX7DeXJBtl8jHwAP4rhfHk qEqkHgZOOvnS385XKlGJbIjJ6QIdQbRkDWN4DQ== =xVi3 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques-local-optima.pgp000064400000000000000000005173711046102023000210050ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYAlsuxYJKwYBBAHaRw8BAQdArngHaNiiCEo9M8rGuWg5FC8Uiv+7lMAvmMAR JnF0b0nCwAsEHxYKAH0FgmAJbLsDCwkHCRAb/puj9KvUDkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd2y/szTPwysJMFjnJoQfMlokp9w+bP KIkb5prqirEtoAMVCggCmwECHgEWIQQ2MILp7rIuUK0wPYsb/puj9KvUDgAAu+EB AJgW59RdC4Ehxz1r7Rm/vwsKsoL8Em3XG/l7AeUh69PnAP9k0JGSybQhKK77f59t C/Q0hL/+svVPXi03ySxttTAYAM0RPGEtMEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmAJbLsDCwkHCRAb/puj9KvUDkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdJU0+oGSQ823hCNZn5KWFxHWr96Luqz9Uo+qGAs33v+QMVCggC mQECmwECHgEWIQQ2MILp7rIuUK0wPYsb/puj9KvUDgAABWQA/1MTOMNdllWhj0vq qXAY78fXiRfbJYS8SpX9p7AbHS2XAQD08mbOI923zBVxBRHtW0wfICK1midU/xdN SaOWG4J/BsLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJEPph5zxvXctGRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4HRyLN+Szy1zXY/cy4Z FLNkYK3zIAgLMYNvdyugFucIFiEEU2rVYrkhe5g5ZiBW+mHnPG9dy0YAAE5sAP9/ OZgpuQIwd2e/ALaqKATocCzHC4GxwLFQ1O9DAI/z6AEAyUu3cSLo+bjxPcln/da0 +0q6I8QgOhCckUmBmG4fvQPCwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRDUN5qe riaiP0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcpWB3z 2jfPxs7SdxDZTh33mbMMTWM4Sqf6UlvdCp8cgBYhBC+QxcU7EN/U99x9stQ3mp6u JqI/AAAj9QEAsau/we6Dr1GCYY8oMN9LbPTHzOuDqk4SWBYrL9ZTn5oA/jnNe99Q qjItwMmYDZ64Qf8CU0YrUp/2YBs5gk3srUYGwsAHBBAWCgB5BYJgKGTpBYMJZ5o7 A4VkeAkQA5JT7w65kQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnPum5+j4G1WuyiqQqt+aW/E9D7KSl5DH4tgdRMn1oe4cWIQQ8kwRHEI5v Gqkh2cADklPvDrmRBAAAa6YBAMil6MvuHhUSgRtPwp/M5/w38IpV2Jk9sRZ9v2tL kD2JAP9/rOn6uzJfKFUTbd6BtG03GhLoDUIEjNWEYfegho5KBMLABwQQFgoAeQWC YChk6QWDCWeaOwOFZHgJENyS1l+vRlMtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ9dFOhYTRDRjsrst9THQLWQCP5IoEF4F32lD1G/5ijKB FiEEl+QI92oIlUYQRdda3JLWX69GUy0AAFEXAQDXzFmmty4SC2kd6fRYvvENDja9 vXC+XqE6a8fsfyWMcAEAoXQ9rawxf4QOl8jlnJWFXbkUmV2jKkVZn5Sg87PiVgrC wAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRD+3G5cRqqrE0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd4+n9wZI+vvrMVL0LQENh26UmTzx/n 84o+dqw/uciZnhYhBEeXd2slmPl9ye+Uyv7cblxGqqsTAAC4kwEA+2b7Xt6TrxbY XTd8XXwG+FizL3NthToNUp4gAg6HskwBAJ+EbEfuBDR1YsmQAlWB44VSEbpor1LZ /t9dS07mVZoGwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQm9VcnhM+jL5HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnS+MO9X1HklUtS7Tw mOYV/Y7QPezuYtLnKfySxwGW81MWIQRDUlV7q3P/lbYy7l2b1VyeEz6MvgAAI0sA /R2naqoZgitIuNDrjWa4di4cXaBfc28qbQbFwCP09NkKAP9WdjCPyDhSmH/2vWWu E2q3WGrvp5mvHJQCZOsFjJY2D8LABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEKSq j4gLpRK1RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3n0 gQQjoIG2w58qHTHVISM+5kAdcvOICpJ20etsrw5qFiEE0rDDg1wBsMEgvFQNpKqP iAulErUAAIuWAQCDllQUueXJekdjFfXAsbQNyJ1Q5FtiAVY1W3XHf3Rb9wD+MeMz 5RahRHMxHXkLtxEJgEPr6cKtAqsxSgCOROMZIwDCwAcEEBYKAHkFgmAoZOgFgwln mjsDhWR4CRCpbZkdpHwKPUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmcZSUR2eVgpNPc2gzSNUsG8NVxoPwEintg7iIJA4xIf8xYhBOYbYx1W Zr7cnCVOealtmR2kfAo9AADCgQEAwf8V1qGrOzO89FmmUvil++EYHP0mpCmTlf3V VrOSMXwA/10DzIAPLfcV23zfCZRLeD/aarMi5Hv+yH92A8Dhx0YJwsAHBBAWCgB5 BYJgKGToBYMJZ5o7A4VkeAkQJcLA7oPWqQBHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JndX3wd2tN7XlmNy9vi6080UsZbPKUfug8IMGs+d67 pDAWIQS5J9BtkhN+s0/H1aclwsDug9apAAAA1nYBAMKy8hrBsoU3HtgWQ3WN8yad J+BEJwqJ/YvSxds/ock0AQC2ZzSh8McjQM41we5N5aXdT+uGkVEPnzTrXmtKCvn5 DsLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEN36d52RxpiURxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8Gfi4oiVB4Drzd4dUDI6AxGf+G9 hpV9UUxQm9UwivjmFiEEeXTATo1bVA0jzU5i3fp3nZHGmJQAAN1cAQDKYOcuBFf/ d2/9wKGlXRm2hBlX+HIi8rf/Mkbjg8cvFgD9HpYUlbxSFR8IO9I1DnavuVgXsEuf BYp573q2YyezWQfOMwRgCWy7FgkrBgEEAdpHDwEBB0AkSW8vvjgEj2W/FOvamLVA oCk4irplq2d2I61DWupM7cLAwgQYFgoBNAWCYAlsuwkQG/6bo/Sr1A5HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnLhyzFhBUPe9C7syKX/aJ x7rORxq4+mVlH1e4B8BZdHYCmwICHgG+oAQZFgoAbwWCYAlsuwkQUpqfZy36Pq9H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnbcgxY+BTeSPI 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 c2VxdW9pYS1wZ3Aub3Jn05ehKY6NqXcTlNRCirZLiXDGd3ab8EBs0q2tJPh3WCAW IQSX5Aj3agiVRhBF11rcktZfr0ZTLQAAC38BAJiB33kuV14G740qxoY8vqJBO5HH 7iMrRwmjcrkAXV4FAPsEVAsZtFK7Ja0lEG7GUORumr8U8/WeB4oYIPOnN/8sCMLA BwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEJvVXJ4TPoy+RxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+YjBIoZO+E/ckB/xvtOHpvTkkUAmFOZ j8znH1QLwnM3FiEEQ1JVe6tz/5W2Mu5dm9VcnhM+jL4AAF3UAP9FXSorexenRklG 6ZOOZboUsgLTr5EJ9m+esbPzXJN9GAEA69pqgGGCLSfYEzt0TgZvlWo9Ev3aTnw+ KM+z+vEegw3CwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRAlwsDug9apAEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc9JhVCLsMfZ68e+haV zXCepKGyazW7fsZBjKFj8VfRahYhBLkn0G2SE36zT8fVpyXCwO6D1qkAAADTfAD/ Wbtz7n+5/ak/oGYHFPywqX9Y0kXYoCkn4hZoT8hG0OsA/jIwzSNxKTadox/SOrni DZBiOMOCFKtEBY95cpmY4nMMwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQG/6b o/Sr1A5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnn4ct YG8PRFSFMsRfgR+5rACVTPDlO5Bycf6jVaFhGBUWIQQ2MILp7rIuUK0wPYsb/puj 9KvUDgAAk24BAI2bGDw2+FyE2B06uB+RZdsDGO307UMkhEvqF0lm5mZXAQCcg7Pb LWsAdfFa4oEsNcztZ35xEcQz+xTxX7cvjKNFC8LABwQQFgoAeQWCYChk6AWDCWea OwOFZHgJEN36d52RxpiURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ2ZZl030RHw7JP/ViTWAWAjynWXIHc/W7C4EiU2ucz+aFiEEeXTATo1b VA0jzU5i3fp3nZHGmJQAAJLgAQDHUIqfn7tzySJ31xDmkBDUb0KM7MjdC83C3fpL m31Z7gEA/TK2VWUsLrZ5Ui6nFD5sIY8xtp7DBEtZ4/2U/EzjaAjOMwRgCWy8Fgkr BgEEAdpHDwEBB0DbBiVitpSGnuQfkYh3WYq2jlrQqWnOLGybFkcU819DtcLAwgQY FgoBNAWCYAlsvAkQqW2ZHaR8Cj1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnywKwubdxVQoo7SOMcOXsuFZtziF+yAARa+AjLa/ulRkCmwIC HgG+oAQZFgoAbwWCYAlsvAkQ09k9tw4/DY9HFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnfTz9iaYyV+CuTa3U1xRQV33UR2Kyca73/aqdPkb6 j98WIQQcVQKqFB0a6ujPO0LT2T23Dj8NjwAA8ckA/2B+eyAKYMmoZtl8O5/OgYSK dnQl3QY1KfZv7HRW4ZFzAQCvLDSdPNco/zr9srcrxs1RnKbrNpliv7stSkukiBdV AhYhBOYbYx1WZr7cnCVOealtmR2kfAo9AADHlgEA8tELMpyShGQvyIFZlXR4DfGL +YEkH31dLJJ0WvXf33kBAMQ+ydG5i2u6ghMK7Xa3qMP1bvx2y5GfSPdNSqA7+QcN zjgEYAlsvBIKKwYBBAGXVQEFAQEHQFQGqsi9k8/uFoWQfbrLQkRhxvM+mvxtVkP/ GgBP0V0WAwEICcLAAwQYFgoAdQWCYAlsvAkQqW2ZHaR8Cj1HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnN8EqyudrvcIztXVk0HmraL8zxr8z JBp9IhrKTP5MB4UCmwwCHgEWIQTmG2MdVma+3JwlTnmpbZkdpHwKPQAAmzsA/3nA 12zL4woCGEaoWeZ+INYwCv1ImsJffCfs5qCsrkuXAP98i2qbsG8GG6msVAm6udUN suIkZFb2LSyj5g5spAuyD8YzBGAJbOcWCSsGAQQB2kcPAQEHQALuQR12eogAmoO2 qNgS/N29Bl1FNzolwG04Yox8MvUAwsALBB8WCgB9BYJgCWznAwsJBwkQFmmCVh4U DANHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnwIcR0My/ hHm29jhsF/XuOEBPBBd6Vn6d308ARAHU0dUDFQoIApsBAh4BFiEEwkzAkQLSLjjo OTxVFmmCVh4UDAMAABTEAQDBnnlUEUgW7h7dECAxrtU/4rnKTixOGcHTXarZma2n UwD/a91TKmjrNVJH7tdPB4hZjk5HYaw5g/VsNg1Sufeg/wTNETxkLTBAZXhhbXBs ZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQFmmCVh4UDANHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnHkoscQW2dZi4MwF6HEOY6iHCk0sE T1sR0s11cnVXproDFQoIApkBApsBAh4BFiEEwkzAkQLSLjjoOTxVFmmCVh4UDAMA ABA6AP0e4RaR8dpEkUBlPOknoBaWcilztjsKMGtEQzgVjGCczgEA6L+Oc0TVOkn6 fDGgJyWvqth/ZPj/MnnQe+XiPfstAQ/CwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4 CRClTV1jsL/Ge0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfrAjZpRroNPIzn5VbRfu1rM/xAdk7EMvKVCCun9A0M1BYhBKNb066nI2L1w6YQ kKVNXWOwv8Z7AADWYgD8Dc0hC/PjI/+SpgS8U9WvAKAsqChAjirq7IlD1I1JImwB AOeo9t9TgWVO6V2lki56lDQ8gxr4ItnALpV78v7TMBcDwsAHBBAWCgB5BYJgKGTv BYMJZ5o7A4VkeAkQWKOCMX9U18VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnaDC8g2T8ZAUYmt6NhFpjXB0zEhMx0lMNdisVjnRnYsoWIQTP cB53t5/r3t+ItFVYo4Ixf1TXxQAA8BkA/ig3rYH2igD2ZLFFakud5eAJiDWCs7KG EcjaxYQFi6MfAQCb321hj92+T9ck84oZMFhOh8WOrXdoCNogl4hfSF90CcLABwQQ FgoAeQWCYChk7wWDCWeaOwOFZHgJEHx6ioJUGvBfRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZxRiUfKzKozXKSbELgS7tzc/AA2nE54j8SCx rbOZHWlCFiEEywlhwWomKeKFW2FDfHqKglQa8F8AAA/DAQCAaNHJ8mOgAYREzuUh Y2MjpCkL0ZRZW5HVuBOip/LMIgD/T1ybK86uKgqNvc5k1uhu+1UBWQTJFpLdCrP+ pgvJcw7CwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRAih3oSi2+rMUcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdetthlrxKunJVYjWoYFnSp mzGZz3qrR+ce+WAy/11qtRYhBPMCuD6QzWrD48WdOyKHehKLb6sxAACzlgEAiIjw aEOLZyPXJXj88khZ1oSxeaoH91dnp9mEwEJcjYQA/1w7NUn9dj8BkmwjyR/HzqQX bbWi7AzAnqwhejK6JsoHwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQ1uhlo7iP iIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnI9o3vTPr 5S/xOLZytBjb0oQQpjwtgaI99olBXbCOpKYWIQS+bFch7cuoF0xZ2ZbW6GWjuI+I gQAAbTMBAN2fR4BD35VxZNtNwNJuxTfUGnQwg5b9CmwQkOf27QalAP9i5h8vzlC5 rNLg2l9SKRETYJFQzLtNCGroUdRrNnyxAsLABwQQFgoAeQWCYChk7gWDCWeaOwOF ZHgJEM3MGshGTI/lRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ85TUCOr1y5E0J0WKN3Evof48JmUbJYibrSatr96uoLvFiEEUnfBT503oPTW Fd2czcwayEZMj+UAAB0EAP0WVMPIYPI3KEEJRsSQUsalzLnRm4ztvTljEImSLNZL xAD7BTpuA0RcpfwtdJrpAw/1c3LoIUpXr3jFytExkfPiMAzCwAcEEBYKAHkFgmAo ZO4FgwlnmjsDhWR4CRDq1y/3kUB4skcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfrN4vtDxB10feadJEVaqbCbNKZSdxXwjRM88rr0j6MWhYh BHqA21Mwt9kA1b0fgurXL/eRQHiyAACdqgD+MI7Zq+hR2jrzdHuROndSjK8h3d7e xLt6R1M613sJctIBAJRf6S7oIT6CpXbd+jVX8uvcXfONMYMtkxMaKXwM4xYCwsAH BBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ/Z2LAVdFAgtHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnjFPeI22XEiM9/L5jeTsRT4ea08gEEVSo X13u7jKGMy8WIQQTyLjcICCcsOFVZOH9nYsBV0UCCwAAnaABAIGZZtw7LV2mlPAn D4NSLE4q1d3OBVByizHIcoKyfjqUAP90HlrC8UMtZTfPkNeWOBtGe+0auRtTmcWN WwnaYl5lCcLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEPNQmQB+/dg+RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+BL6G8vlux9hyPdaWWU 5q7qndnYz2i29tAhEtMJo4weFiEEo3HhoIruGVVL2Pb+81CZAH792D4AAByCAQC7 IjgcsTY60nNaDQ4DE3htE+c83NabP+lcIQt6Vns8vgD/a5KVIx4/bTp3XOZ1aUwS OLSmGd3VUPpjbJCs+tb7XwLCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDuR3MO XR1zkEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfzBhVF LNfnpwhn2I15s9Ba7tFxlKg/mpou+tKoEf+K5RYhBBbhB6BohsbB4aRHx+5Hcw5d HXOQAACbXAEA6LOWG1tfscFYk0DyQhtaBjTWi604C9IsXDd1sqRciIAA+wezmBgO bQydFaqAgJbnMGqhhfK1lLYIhBPkR0azu6UDzjMEYAls5xYJKwYBBAHaRw8BAQdA Vdd8CGs7Qy1mzpJjJ134rSFWY8ZyVHnErOM3hfaGmEnCwMIEGBYKATQFgmAJbOcJ EBZpglYeFAwDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z//giGue2VtnbJzT2dAdw3D3KjnT2pci2mjmqykCOllkApsCAh4BvqAEGRYKAG8F gmAJbOcJECVvV9cQomnJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ2HDXbb4y+SHbi3W4NTQzjlu5U6roXQJQs7GXEGnduOYFiEEKFqu55C6 CgMiJhXeJW9X1xCiackAAMTxAQD1tyVWBqZJUP0v2i/Ty19aO5IXNrPPtkCt/PKF EMWHwQEA63NWUGH8Sjais0ykYyQiR6Sesj32OFVEyvwAWhUaLgYWIQTCTMCRAtIu OOg5PFUWaYJWHhQMAwAARegBAPXY7icasAT9hN2MPchLE8xPQj5YYVeHT5mvXC5u jX/DAP98mIonSh8o613DELRNWB30hvVl5JzJsSi4YAQXugo2CM44BGAJbOcSCisG AQQBl1UBBQEBB0Dt7oXDOEwwiual+apfOeZfZhfCoKQiMHYqNUgiMWChJgMBCAnC wAMEGBYKAHUFgmAJbOcJEBZpglYeFAwDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ9QgbMiiEtt1LO0d7y18cD6dNKw1PLsiVUTKMvvnjpKK ApsMAh4BFiEEwkzAkQLSLjjoOTxVFmmCVh4UDAMAAJ8sAP9RQnsVu+AMKzSPvcGE 1dYELQDL04Vv0J/jCuQsHlJSoQEAlLzj4W4xjwHsVvBclQ4SXAnvt1h9w/4zgb4e Uq6zPgvGMwRgCWy8FgkrBgEEAdpHDwEBB0DmfkWMakTPx/+WVBQ/TxOPLAEyvJk+ 8W9DdIELnFf7SsLACwQfFgoAfQWCYAlsvAMLCQcJEN36d52RxpiURxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2T2HHe5njw9ld3jISGiZtm5 O0iUI9U2Ob7mLkp75CAXAxUKCAKbAQIeARYhBHl0wE6NW1QNI81OYt36d52RxpiU AACynQD+MNNJRUGBPca6F+4ZE6RwR/CqGWlM5RxEjg3niqvUmeUA/jXVVao+puJy a+SFqaseI4Vq/su10cfF9xZ+U3W+MFoOzRE8YS0xQGV4YW1wbGUub3JnPsLADgQT FgoAgAWCYAlsvAMLCQcJEN36d52RxpiURxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZzAZV1mv2sag+aHlU86vxXKEYkyt9PMoBMVcQfbjwCxE AxUKCAKZAQKbAQIeARYhBHl0wE6NW1QNI81OYt36d52RxpiUAAB+rAEA4UHOZ5JF s2OwzNg9J+HHLi7E6O6Azz9IgIVjmTtvxaAA/Ap17Bk3ctQ9EPUlr0f/pDsbDRIM blhB4K0zcDFxIAcLwsAHBBAWCgB5BYJgKGTwBYMJZ5o7A4XIHgkQpKqPiAulErVH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnK5O8bJ3ch92P h4Rl/aze0Bfaj/jFyc3uvf+b7N5oODQWIQTSsMODXAGwwSC8VA2kqo+IC6UStQAA YBsBALvB5BKI9YbfEmS6HWiOd3r/IADy3pcXi/OZobxu3KebAP9Q47VJhHcRj02G YFfx5VbmxTNuOUppRV4AVrv81xdEBsLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJ EAOSU+8OuZEERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6ND0I2RcuM6+uRwa2LivBysr6h0wdCHiEUdkLobkevRFiEEPJMERxCObxqpIdnA A5JT7w65kQQAACimAP0b4ix1kbGM50qnidp93BKkCpY8vSWGbNVP9ci7jgA0AgEA 48TrjCv3wIy26RPKc/S0wk6znu+E/H485PpmmQk2CAvCwAcEEBYKAHkFgmAoZOkF gwlnmjsDhWR4CRD6Yec8b13LRkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeP3fqHl/lhaSTbrpKT8H9d9DT+D4EnGiYgDlGLDgOoMxYhBFNq 1WK5IXuYOWYgVvph5zxvXctGAAC6XQD/S216a50UpotDKUMHSgZi3AT8XY/+W1Fj x05TYthNPUIBAKePOi9gmrXP54dsPr5U0QarHlh28RRlrAHk+g0YQpgGwsAHBBAW CgB5BYJgKGTpBYMJZ5o7A4VkeAkQ1Deanq4moj9HFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnVEWk/yFjz3lC0L7zvn0mY03DkZwvl7fo+evV HcpuQRcWIQQvkMXFOxDf1PfcfbLUN5qeriaiPwAAPNcBAI1qM0MjcdfqW+kQxnzM jVSCM52eWZ0oIb/aZAEJjbRDAP9zeOSIaCXDj0SThhEOWjcFqLYssESMRfwZ9G2Q PCfOD8LABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJENyS1l+vRlMtRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3vwrizn2H9J/q3GxPZsoqf8 mdmBKps4NvANxZ1KejfcFiEEl+QI92oIlUYQRdda3JLWX69GUy0AAPSIAQDHU64Z JzyHVhOSsHwj/wFjIszPbZl5nw81muThk6NoQQEA+BFl3bm0vy+gTjMytD+PdHJk DJLOC3oNC44cjvlJlwzCwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRD+3G5cRqqr E0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdyFs+mNKOH 1/9oR+DkQwGSPIXoP3/l41oXK1EzIGvSmBYhBEeXd2slmPl9ye+Uyv7cblxGqqsT AAAoSwEA2u567wPCTS7LJzXb6VTsEzoMpaHg78FWB6TXQY3zXXwBAPCd0TVRHiH2 YJUcWK70jsQd2bpk1vxQZQBI7tQX5WYPwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4Vk eAkQqW2ZHaR8Cj1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jny62gdPFkF6xBgPWY8BStBBumcY5Klgr3S5fj7xrCbtAWIQTmG2MdVma+3Jwl TnmpbZkdpHwKPQAAR7QA/2LF0a4JNSPVi6MHpQh61/MEdGkCTaQojCZGyX+OFl8p AQCNdUhDrPp2QXXPCOqBLjA9f8tVJP9qRxQgU14xglB8A8LABwQQFgoAeQWCYChk 6AWDCWeaOwOFZHgJEBv+m6P0q9QORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ4CQfgVzNf1JaxmXCdVrkutgrrGM0ysTfUcw6W+w3KbDFiEE NjCC6e6yLlCtMD2LG/6bo/Sr1A4AAHCpAQCr+Zg4RAeZdPvNOyPh1XHo6GjWsx+h uuCVwNgdYSeiSAEAsdnvpjN30PCaHpgJVQUUCAEs/wqoP4Wty/GsXY9hBAvCwAcE EBYKAHkFgmAoZOgFgwlnmjsDhWR4CRCb1VyeEz6MvkcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmc4Bmf9IZvbx+dywqdgGPcSG9NnTnp8/Ak6 5Gkiv5I4vRYhBENSVXurc/+VtjLuXZvVXJ4TPoy+AAAg1AEA1B+zoVDRfCkhqTKF 3ChAa0nCeChwPzp93twbThbwfbMBAIWwuLAw7RehigSY1A+pMXHKi8q6ZJ7NlNQd d6LyiiAAwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQJcLA7oPWqQBHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnF+7NjxUQOWpKFbxh+8zO klBx0EQmA8ruRKkiyKGIpG4WIQS5J9BtkhN+s0/H1aclwsDug9apAAAAgQsBAPls nzwgFfK0kaqjUp/Ifyv2OCxSJfr0jz0ptqBTe1lRAP0aC2Lg20obMQbhDKYdIivI cdGa+bcV2bFbv1Ol4yOWBc4zBGAJbLwWCSsGAQQB2kcPAQEHQDZxSST6SrL/Yn9i 2fCXE8qmeEGZFk0orHoJFAzG4yaXwsDCBBgWCgE0BYJgCWy8CRDd+nedkcaYlEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdG23EV4tpYAGFb IP0QNmqzwfWHBg/9JbvgXh36h3ncKwKbAgIeAb6gBBkWCgBvBYJgCWy8CRA60KZj MBJrgEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfjpsN1 UhxuFD6w8o0CyXrwRYNpkhrWg5d0mUnAatEa+hYhBC+ZydhQgTxBahoVpTrQpmMw EmuAAABcVQD/c/lN/Q6s6ZeZIPEeHV0qsdTwlcbQXdM8f/jAviu1NHEBALixHTrB UfUIgpAs+0LT4ICB6sbr7hb2LqTF3lGRJP0KFiEEeXTATo1bVA0jzU5i3fp3nZHG mJQAAP4cAQDD7yahk0xyeY5hAEqXLh05YmrEzj1mZN1XwRRH0mn4lQEAzpyT+trW 7oEdPbTWLoPEB4E7fKESy/YCj1+RwzpZng/OOARgCWy8EgorBgEEAZdVAQUBAQdA LAIulqAsg3u3xYqIBcaTxb+NR4PKlyK9ZZj+IVeu/UADAQgJwsADBBgWCgB1BYJg CWy8CRDd+nedkcaYlEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmc7qYwPd8zcxn+SVTGeXCGxALPc82CCbE2cB3gBt1wW/AKbDAIeARYhBHl0 wE6NW1QNI81OYt36d52RxpiUAAAS/AEAwoxAnSwcy8AG3Fcl2OhMSBFEUqMLBNfs N5ckG2XyMfAA/iuF8eSoSqQeBk46+dLfzlcqUYlsiMnpAh1BtGQNY3gNxjMEYAls 5xYJKwYBBAHaRw8BAQdAdo0INyR+7kgSNrO4GuZiA4mQGb/Vu3MknSoUkTapUjrC wAsEHxYKAH0FgmAJbOcDCwkHCRB8eoqCVBrwX0cUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmdQR+XNZeY1f3YYRXO42MBOdNeLlgXkr0gVua9X LnuMfAMVCggCmwECHgEWIQTLCWHBaiYp4oVbYUN8eoqCVBrwXwAAfo0BAJdlu58t ypTig+QG/tvnW9Q0aJXeXKaPpR9E1h8zRYMuAQD1O9QDbSe3fttOyds37fpUnz5f 9WAnkVPe37+vW0flCc0RPGQtOUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbOcD CwkHCRB8eoqCVBrwX0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmfSryIVeNuqdQBvYXT2M67Ip3BcmbXOsVfJgMrlcuu/SgMVCggCmQECmwEC HgEWIQTLCWHBaiYp4oVbYUN8eoqCVBrwXwAAHk8A/3514JvojTRQresLpXWoeQSy 5pAbZmnLgUl4xzZf33nKAP9p5gFj54dJSI2dix8MSpuadYXuhtc6r2Tby46xVVhT CcLABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEP2diwFXRQILRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5SmP9V+iFG+ufbN5N0ETikCXEIt gBWRjrJYDH3drfzQFiEEE8i43CAgnLDhVWTh/Z2LAVdFAgsAAI11AP0QVbwmueQc XWJBr3f2XQX2xyZqOy8mKV16qd5Te8HCOwD+L2DqyNBIRleonZMUt5YNreWUmT6q sUoG6Avar3SrWAfCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRAih3oSi2+rMUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfDx6QLzTCwMpUC 6RXP1aABZbEiOuOItrsTI5k7Zs5ciRYhBPMCuD6QzWrD48WdOyKHehKLb6sxAACp HAD+Lz9RLq+K6dMQ7hsVAAHuiPrrj5tuA/o7Dj82s3++i0IBAObpav9agUQJJJah AT0S1+im+MZdD7kC1tzEAQ/Oyz8AwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQ 1uhlo7iPiIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 7JsnHy/UMSLx/sbzQmLmgbQY+S/pAIc+FU0Ggg6cEFIWIQS+bFch7cuoF0xZ2ZbW 6GWjuI+IgQAAEQoA/1P+KMZIYtI4xrX2US2UGovZFW57xk1R2rPl2miFuiZPAP9Y 8m7aGxFR5RuMbzcQgt3qZGpicfB5n1boNy27ap0uD8LABwQQFgoAeQWCYChk7wWD CWeaOwOFZHgJEKVNXWOwv8Z7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZwtCjEhbk5vSwYpWJzD3qRW2D2e+bLjwc9oQ9T+l7C0MFiEEo1vT rqcjYvXDphCQpU1dY7C/xnsAAET0AP9ZsGMe6HTrGznGxWNZJgLX8m9AfmesssVW vWVmg9dhhQD+JkPGbV0fMChH+OXFfgEk6gjeSdPqZoPb0p1cQCuOjAXCwAcEEBYK AHkFgmAoZO8FgwlnmjsDhWR4CRBYo4Ixf1TXxUcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmeEzLtKXQ0HHLo3YfK0H8N6ipylA0kt+pyVecvZ kH9JHBYhBM9wHne3n+ve34i0VVijgjF/VNfFAAB6ugEAjsOUGnYd6kpHmGwjRLLI E0fFyStcVDUplDiq6ZEeYA0A/0gHjgHfbJXFN2TTI+ojBWEnuJdlGa+de2FZseEz MDoLwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ7kdzDl0dc5BHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnhcr6rdeukDts3yIg5xnyLUH2 HCga7a2hme9z6kdXIE4WIQQW4QegaIbGweGkR8fuR3MOXR1zkAAAhO0BAJ/imu96 HjWKgOb7Qwd1jhgwwnhgkVzMS+mVsizo6+RJAQC7e7BK1QNHcJDUYDu//dYY8cbZ tS5x2YTTidGfLcJyBMLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEBZpglYeFAwD RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZz1N8KF1iRis NYzgUhfwer6URq9UqjbFKP64c4564zOFFiEEwkzAkQLSLjjoOTxVFmmCVh4UDAMA AOODAQDLG2amypRRDhtvoZqY8UKJCB4h1R2GH5QN5DOXh1PKDQD9EPVX83SCyJwT sQm6AFRyMipzYi7qaLt+fYhJZmSrZQjCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4 CRDq1y/3kUB4skcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v 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 hxYhBAxg1DTVE8RlvAdCqtzDonQQrio+AADt3AD9ErMvdjweduwLx6CwbrnlmrFX eiAdBJ7aKUt3VD8DGrcBAKpNZtJDTYU4SMVzqgn1LLDiULBTPJ0J2aEFZArQ2UsO wsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ7xAwNgMlvRNHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnMJuSAZ1vTJgO4HDDHKVEo2jo2SHk pCZtqXQyn6SXpCgWIQRscAQ+GQNb1agFAETvEDA2AyW9EwAAmm8A/jAJxkaZx32s oQVTeQG72NwL9Ovmbfc+sD0vGUi8fTBgAQC9WBagUiSvXeMsEmqqi4a6GajOdgU9 ab7+evT6fz6GCMLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEDrDe94xvmWhRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ50zJrJO4VfpL/EV 365L/j9Zdp6kXxO2Apl9MyN/nVK9FiEEVow3YiNvvHaFS9TmOsN73jG+ZaEAAL59 AP43GbZbKFQK3CyCcYQVoyDY4h88oCHii6b5OpF7DwJN3gD/QDlFqZ5dGMgZhGtG XARtle1/mQj4ri9qKo504ehdnwnCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRCE rdsHoQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcZ /BpkzsohBxQMQVxpWQhYeCTd9EesgQ2OrX0Mv9cRZxYhBCi3SqfFF3IcOayCh4St 2wehBX6dAADW0gD/bENO1EcbCb9d2giXiFGnlgBejUsoHbuulugiBLZde7IA/3K6 97UXPIaSm8Gmn4ipEtYxXGsS1cXhFQc94RGbZaINwsAHBBAWCgB5BYJgKGTtBYMJ Z5o7A4VkeAkQ8cXMJ7PZl/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn/z+paxBYXykt2a1D/qJlhfgOmt7hcq0tJatbxFZbRVYWIQRO1qUx v2JR58NsRTnxxcwns9mX8QAAxOoBAJHQP85V8RC3C5U1+NkMRYMwb3Fmn9FZ/b0O PbgdeEmTAQDxU3lsNrKadStv+gwi0pwu12UNQ53m4RSwRUfY51dhBMLABwQQFgoA eQWCYChk7AWDCWeaOwOFZHgJEM3MGshGTI/lRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ7kEpv4dPkCo0sAkIabZgxWld68k12/HtMcteZkv kgWzFiEEUnfBT503oPTWFd2czcwayEZMj+UAAIM9AP4kQw1Uw6HZ99Ghb6+Ixk0d 7qoagX2VXCZUPiy+FLFt/AD8DdACkkxn6aRBMvlctnaY0rjGVa+G05GfuJqzH2XJ hQfCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRAQqbswI8v1WEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmebYxO8LfhPMDbaWSL0Lj8NwIT9 wbx5uPfAqW6W9HxUXxYhBL4328Rq+AQoneaEvRCpuzAjy/VYAADdXAD/aIqzHuod BuVSYq+9+LDeOgKzeGxWqgc7XlyUhwtYWAQA/1ZE2UEL14rb4Lddn6NX68aS/8VA ZkcpTylmX2IImGALwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQf62xw/77/llH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JndhtQYXHXJFRg 7ih+msAk41IYze7euNyIt3med9cyi7UWIQSgzYdYLCF0PA4wY39/rbHD/vv+WQAA /EoBAL0OAy0WNOFvIRbtNTWfVtocgwHeCdCC9ehAYD32PZziAQCsrXskf44CBoNv aLytjONEruA6tnTrA5TZs+eRVumuDM4zBGAJbNUWCSsGAQQB2kcPAQEHQE78qqJC FqtCSkwsRXtfcfptuBfxH9ZintGxJ4dPNg4EwsDCBBgWCgE0BYJgCWzVCRALrNON Lm0rQ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfVWRIv uq75ZENej/s0wKgmhEKir5BnOnxT9JnLI35ceQKbAgIeAb6gBBkWCgBvBYJgCWzV CRCj4s70CwVSDkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeMaC3OiE7dfCAo+M7y8968SJFWU4T+8DV98vaih+rRyhYhBIZBr+OTjyuypAHz rKPizvQLBVIOAAD1/gEAvOZ4zPJK/bfHuZtc4htXCEm8uoO/rB4OljXArTsJmaQA /2SB/DpsPYeWIUbcPXrNPUx0/+fr5HIafuuYTux6XkQDFiEED7+aSKWr5coAlO5J C6zTjS5tK0MAAKKKAP9cQQLe1mdmuNDCbrWJ6/AavSdlzY27g+NAKej/q66v5AD+ LLdg0qtlccbpadppYBZsbm1iXpAQTnvswcDwZIVL+ArOOARgCWzVEgorBgEEAZdV AQUBAQdA9mdrCXcOY2OAEwWZYXEQhgF0BZrLEP6xKbKdDVDVZn8DAQgJwsADBBgW CgB1BYJgCWzVCRALrNONLm0rQ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdEqsfKQbD25yL2e3FRGlnMwTUiIU0peqPIF03gqbd/6QKbDAIe ARYhBA+/mkilq+XKAJTuSQus040ubStDAABz3QD9HSgiT4pupRgm8p8pwO/ymXDC s9b467NHuJ+HjCHV4IcBAPbPRzRvJPyomaxq/PgRBxgu5hZFhMPjU4uOUFFyzAYI xjMEYAltEBYJKwYBBAHaRw8BAQdAouddqg7CnEGePNJ+r7iihUUXzDT+uKFOOkhF Ju0mTOfCwAsEHxYKAH0FgmAJbRADCwkHCRC1in2mHKl/VUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfR65PqcQVDNSrqYz6HTNsCl2pn4WRe XW5eHUeFZPQWkAMVCggCmwECHgEWIQTOIuzSgvIZqplZi6O1in2mHKl/VQAACdoB APWYrF94mMUQAVEG0Jt4QFUwYiCMgAlSgfdJc2EIJs3dAP0Vb9yKGC9FL4Aft9KZ 7frHY0m4EztC/QPLB1eFreTZB80UPHRhcmdldEBleGFtcGxlLm9yZz7CwA4EExYK AIAFgmAJbRADCwkHCRC1in2mHKl/VUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmeAjDC48sBZWlCwqsQ1GCcxMfRrDnCUmA0bk6BJLHIN4wMV CggCmQECmwECHgEWIQTOIuzSgvIZqplZi6O1in2mHKl/VQAAgTMBAOoUIT7KlykQ 4BsbwJrKVATQHqJryJUOc15AvyaeoZh+AQDQUeTLIngdA+72Y6nkwwmGsJKgxeFw rU9ld+UylOzqBMLABwQQFgoAeQWCYChk8AWDCWeaOwOFZHgJECIrSA60Pgr/RxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6rCd0AyG0gcRLSK 3T6Pgzi2WIHgJ+jvdInX2HV4BBG5FiEEwP+u3vCSixgSZXdaIitIDrQ+Cv8AANv5 AQCSmDTR2acBFwstrNIbketNffR0m5EdDjjUTZNfIND7wgD9FsV/WNIxpFy2pOyN FlhXkQp0nGOqIxFihiq1eUhrZgjOMwRgCW0QFgkrBgEEAdpHDwEBB0D2PMum9Nsh lLnCs2OjnP5AbokzUrXH+DKuCTngg80JpsLAwgQYFgoBNAWCYAltEAkQtYp9phyp f1VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnJLcuVfVl g+wt0D9WtRWoZA4zX/2xdD7ONhfeqgoFly8CmwICHgG+oAQZFgoAbwWCYAltEAkQ HGaN1egJyspHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn R9PUuf2cRackTxipm/H67GMiAQjzq2xc32H12+HOi74WIQQpel0nAEEQ8Mv5XVEc Zo3V6AnKygAAWxkA/iXiAZkOLJ9Lsiw59VtaKui3EjvKD4z/2Vh3iN1sPEorAP45 j2xHQEG1lXYqjhmaaZIAq384y5upFirqaOkOcjSrCBYhBM4i7NKC8hmqmVmLo7WK faYcqX9VAADGtAEA8Evd1M9oTyfnHfRQVl2Pu3FEbk2T39CjeRDSv62tOuMA/inS CmoHD7pC0dBxuhDiMf/xxAHhsQ5kdfvqCppV0joIzjgEYAltEBIKKwYBBAGXVQEF AQEHQPQEm51mfFCWFZHfXHzMzxGRb23lBC8xDBENgY7XL4trAwEICcLAAwQYFgoA dQWCYAltEAkQtYp9phypf1VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jne3RCPFhZeztqBoXO/pSBAdKJznjY5jJCIIqJtHR7mbICmwwCHgEW IQTOIuzSgvIZqplZi6O1in2mHKl/VQAArzQA/2d+rEe5MX7PMcToPHTubDgllg8g NQjmNWVnP+CGIbL8AQCm13qd3N+uGN1WgicDbIrDheax+NkLu5H+ebQVyyzeBcYz BGAJbMgWCSsGAQQB2kcPAQEHQGVceqc+K5+5n/wcKizTElbv6Pca/PwGM8NxERF9 7j1HwsALBB8WCgB9BYJgCWzIAwsJBwkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnkWn+7HqLE0siCDuhYDkkAC5gl6hVYyY+ 6c3zYnfSGfoDFQoIApsBAh4BFiEEJ+Nf60hsv1sWYAJweD8aj8cn/D0AAOl6AQDW TP8S6+D5lf/Lnn6ct8wurEcxdCCqT+1464pG9kxC0wD+IvyNp2Uz6P88I08ExAA5 f5cEo26En3Ocdwaq0RuRKwvNETxiLTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJg CWzIAwsJBwkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn+mKyPk92oQWxU9P8vxPFCaVEkXo0Pg8RV3W3gLlYiZADFQoIApkB ApsBAh4BFiEEJ+Nf60hsv1sWYAJweD8aj8cn/D0AAOMKAQC9YlTghZBi52IMmxpo er9q6CDxqkCm7EFHU33LGkDa4gEA9QRd7eiOpVC1mDe9wbL5xT2zpFHj+1CizKex CtfZCQ/CwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRBGlqXGKeox+kcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdwFtargqlOBhNnvsK7QfPu H4H9ao2py9Yut9Ar6gVN0BYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AACogwEA048z UDoyb9wqilIP+ohLFn76ysdiHFcBK2jON3KwQUYA/2Jp3cxU31M1Yrb97zCKJypW deRnyJscPdWuzM6QpAsJwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQKvaj7l11 +j5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnBOUwP2II 2dh9LBSC9BfleO+PaMr81Pt1IvfwuAsbs/IWIQSQqd0+dyHCIZ6NdNwq9qPuXXX6 PgAAr2AA/RZ7ZBHoddAAH+1kY4Sao29XV7rs1XJ4Z4iYY8FlkALYAQDqnnwaXWZ6 RzPey5QPfbBsY2A8V/yDGCLtqCCNkdcJBsLABwQQFgoAeQWCYChk6wWDCWeaOwOF ZHgJEHjFfZ3pXBbzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw 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 TA7ft6mdrPnrZMoNqvFfAwEICcLAAwQYFgoAdQWCYAlsyAkQeD8aj8cn/D1HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnKzRuK1kYYGVQaaHc 8i3OCH1Dc1nSENAGcBp3gTAS6rICmwwCHgEWIQQn41/rSGy/WxZgAnB4PxqPxyf8 PQAAGRwA/AjE+KED0RTGoNrfRtNcpitB+ZL7QK9X4kH4O2fnFe6zAP0T+pCi077f aRZbobu/v0ruau1aIhIIwH8GJRko/stfD8YzBGAJbMgWCSsGAQQB2kcPAQEHQMzE 7hqx6O3MVTlGTD5sbC5PPJFw7LYg5/ZYzC/R9pHCwsALBB8WCgB9BYJgCWzIAwsJ BwkQCFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnkFJzxVpraQKmlCsEECNwJH5qESVhfsLuMr1t0AQ8BsEDFQoIApsBAh4BFiEE osGd18mTX4tHm10DCFP9u5AOBbAAAM8eAP9TrJb/NniPBu0li+TQZCrW90p+C0lP iSOecDwd3nFFgAEA5KgbZFM9xZ83DnlZTC/OngTxMKhYL/GdN2QTH6/+FAzNETxi LTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJBwkQCFP9u5AOBbBHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnOf6bx4daF1rMYACI UaFr/cAThL7vq4nLFIi9ptNOc4UDFQoIApkBApsBAh4BFiEEosGd18mTX4tHm10D CFP9u5AOBbAAAOM9AP9iFmBfmPB+4LjxEnBFKx69S4Ur0a+zAskTVWTIWKB8VAD9 EjMUE+w3spesicSVxZcFW6oS/kmPmM7hv8aFRCPWDQLCwAcEEBYKAHkFgmAoZOwF gwlnmjsDhWR4CRBGlqXGKeox+kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfvnwehSu/KBivBYHW7wVo5j23FT7YHD2llhzF7HwkgRBYhBJK7 GlYL/8zkcXsF3EaWpcYp6jH6AADhNQEA7y1g0xB+nSar4KsO3dJ9coqmsu+UHOIt npyhhNLZoPwA/jyFaTgQNCRa9zW4pGITwzjCuL2CIoVzZZFLjqSdjxkFwsAHBBAW CgB5BYJgKGTrBYMJZ5o7A4VkeAkQeMV9nelcFvNHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JniMyO2ljU7SoVVVw5hkel+aJnis58kKeICClw hY+IpZIWIQS/wxpp6pR064n8zC54xX2d6VwW8wAAoMoA/1JOWymEazxhUjRbLRL5 HGBd/pKWNjItocq8N8JvqEUBAQD/rKRZaLaMd89tMmLViSGf/JaGiSeDOzdO0Yh2 gyOOCMLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEH5dtCDkDrEeRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0E5jFPEjMK3Wo54YODOdNC3 vkkCkfZZy7dJV3WHw4akFiEEuwns71Cjdjt4a52Mfl20IOQOsR4AAAT9AP9dYvVP 4SdCKdnzz6wNro2bh7bADQeew/S75LsZsTxKMAD+Jne8L74jjwjdAElCfivsePlM UEYwn7EFNpRw7JYLBgfCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRAq9qPuXXX6 PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmejDVtpVxRp 1c01lk+T4cXvF+2ZgWDiNn+dRisp10fRhxYhBJCp3T53IcIhno103Cr2o+5ddfo+ AACuuQD/cq7vn8tITRFlO26iSDpa4Ik6ku2LQgLPZg5OEohS0HEBAN/WZg7+stMQ pam5RPZvW+gCmiUBzE0pWhBCz/ux7eUIwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4Vk eAkQLH/cU18GqhRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnFUj4/rF7QGEWz7vW307/pc6To6v3hiN8kPjo2NVmknIWIQT9JyeLBRP4/c+4 Mu8sf9xTXwaqFAAAK/EBAOsfVT7rAE9gV8R6KVpBwvGzqAjZc+zwRLo/EniPQ5pQ AQDQx2hlCo2ImQ3MzTaFfLF+ZOupAa/jkvnCPK2BvF88AsLABwQQFgoAeQWCYChk 6wWDCWeaOwOFZHgJEK/ohfk0vxN8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ9yUMhZ1udQpHm4sL6Fk1g5EkG/hzEHuiNJlY38+SS1RFiEE 02RDEKNHj2c03CQ2r+iF+TS/E3wAAHjrAQDy9V5T7ZvKmnNt4cFWHabbuliTH/yH 0DkzhH9ggkbYfwEApG8IEEW3oUYMHpm32JaNYJ3ERakeYf4TPLO5wgCQ1wnCwAcE EBYKAHkFgmAoZOoFgwlnmjsDhWR4CRB4PxqPxyf8PUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmcIP84bo9y3A7CYQAtkgoAEBFN70Q4k8vWA Ke4VCFEoaRYhBCfjX+tIbL9bFmACcHg/Go/HJ/w9AADzPgD+LOTyA99N0n1DH5/l kFlN8PiCPEn+VRJmOnpw+/JQVBMA/A18k+p7Gl3J/DuGLnKmoTvp+yq5JRCn/qFb L4KnUKAHwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQlknvga7+UWJHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnFXtq1y8wea2jZnw1WO9h 3jFd/dMTIbnwsHEI6MKNWxwWIQQl2OqriUcFu2TUpqiWSe+Brv5RYgAAdzUA/jVN QMTsH0LmkeOCAXc8ZIr3MD9Wofv/SZmN20Y3PgzLAQDuP8OpJgXg+jPxafZgM7t1 7d0FBzrebzNovSzG2k0CBsLABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEBugGVBr 5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzPbn9/l oP4CyMgA0cvI5EfYVkOZ5OOvCUuY11HDj6jyFiEERtL1ztm9PWOhHd/uG6AZUGvm f7sAALqZAQCSjoBiWncNx+6OMNhz5qCKjrfqBWzNiNXaNZqj7DbcEAD/Q/luc1bd WapTY+xBbP9S1JnxBKP+H9BYUOGvva5J2g/OMwRgCWzIFgkrBgEEAdpHDwEBB0CR GIa/5InlyLBL3QIbJ/P71KoC3OoF1QiWnOw75tuUVcLAwgQYFgoBNAWCYAlsyAkQ CFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn fTNiJHQPuYUOB7BzrXuVQlfjId1it7otaeWsfECmKCECmwICHgG+oAQZFgoAbwWC YAlsyAkQhC4qppqIjopHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn86ZHHdEuK0w7+j5gTG9CKIXKRIn3WscIpBMVvDDbEFAWIQR02P8yZogh bnt+L9SELiqmmoiOigAAaOgA/RPJCKQDNHD3f0/e9BvrS3piLceWbC0N9XcPWXYY BSEQAQCXCTVuKBwBTb1u7592Vay42DGf0J6xt+vv+qUdjWVODxYhBKLBndfJk1+L R5tdAwhT/buQDgWwAAD0RAD+JAhODv6VN+1huz2ut9CkCA/TMcrKMJAO3VKCExJT Yv4A/3pAPlLodex28G7MCocpQee9pmiHG3A/dTFOVmM1RQUEzjgEYAlsyBIKKwYB BAGXVQEFAQEHQC8ppttlo9pRDnC3M24rIuSbymSqPuMsdszVaQu6nsEbAwEICcLA AwQYFgoAdQWCYAlsyAkQCFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnDQJ52pMK/Wj4ZJYROkhVNVdwWRqsUj5En/iFNoVR780C mwwCHgEWIQSiwZ3XyZNfi0ebXQMIU/27kA4FsAAAcEYA/2i/Yb497FOoHspkhuo8 afP+mB+6alOAxpRMYTJdGSMFAP46MmFrm9iwYt7WW0V4Fs6xmk6Eld78CxLtsnkU Q9l5AMYzBGAJbMgWCSsGAQQB2kcPAQEHQAsHfhldoZuZnbYcecZWKhpnatRtSanY KAdrI3JkCoXswsALBB8WCgB9BYJgCWzIAwsJBwkQG6AZUGvmf7tHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEGqcHTwKsftptBDk2SA/ZUlA +TOApsUGTSy9Q+TUW7cDFQoIApsBAh4BFiEERtL1ztm9PWOhHd/uG6AZUGvmf7sA AMV3AQD+PL8dg4jOziTO0TwigbXCHYZpgfhhuiuba5tS6iv7pAEAjLXN3cbFS1G1 pF3BW7VHVxDDdBmMAz+TV8E2DddG/wnNETxiLTFAZXhhbXBsZS5vcmc+wsAOBBMW CgCABYJgCWzIAwsJBwkQG6AZUGvmf7tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnYDlnnvYL+ULu1wU+yvE2Kr62zxBZi5Pzt+VBpV4HrpsD FQoIApkBApsBAh4BFiEERtL1ztm9PWOhHd/uG6AZUGvmf7sAAEpRAP950P59KlXV 6IsddtiX2dntxI4yCs1iJ996LO7nX651UQD/Rr6vbw/hlxhc5/5ci1YlANySSjsU HzrEJZLCTMSxWgnCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRBGlqXGKeox+kcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeTSOekpT2x7uS7 vX6S5jjT6VxtymeoCg7Ob3X0LTJEmBYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AAAQ 9wEAnavM48eD6dljJuQJfPbQn/o7thXwCEmIBGRIGYa4zjkA/3M2e+6/3syxW53e 1sum5ca0B4gGGQX9qsBxauzgvI8NwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQ fl20IOQOsR5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn yI/Ac2TOXDsih1IjTkUc6AdRwtg/vI62uwH4t8kS1h0WIQS7CezvUKN2O3hrnYx+ XbQg5A6xHgAAum8A/Rmrg55UpSTkSECrTlYdEfg/k7P060qjtn1vvUN+BDTbAQDG gCd8UG7eEsrQP4i9LocHJZ43exczs2yeWFoN1FsgAMLABwQQFgoAeQWCYChk6wWD CWeaOwOFZHgJECx/3FNfBqoURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ4lyUTes/ftCM+VlrOd09HvcRwUL2vKZFM/z61fGilTUFiEE/Scn iwUT+P3PuDLvLH/cU18GqhQAAIGdAP4is47AxRlq0j5F8w3aHxTxR6875HACXsQu q3sCkqrnkwEAgM3Odn2Cvb/4YuySxQ6tBFnc/RPQZ1wm1XmsZqq9xAHCwAcEEBYK AHkFgmAoZOsFgwlnmjsDhWR4CRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmcTxlHJe5xrh467yxvcetpuMbuRe6GSeIEB8Xtu MTEimhYhBJCp3T53IcIhno103Cr2o+5ddfo+AAAH4QD/VKG00pw5ZVjs9AXzbPB0 ofyjeZaNjVrpNq5nkuA7oDcBAPOUpr3VrjBgjxw5q+DxETPZu69QJxIztB9NyH6g Ek0KwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQeMV9nelcFvNHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JndZ0YnwKXP09zXbG8vQAB8px7 k6PL/EfWZxzjkD4RouAWIQS/wxpp6pR064n8zC54xX2d6VwW8wAAD0IA/1bvQTph SlC/Yfxm4uvLPiRZ1VEMvXpNQRbyNvMnvOcHAQDX+TVBHU1/JHdJp2dCj6hUo/jb 6LlvbBDymiWGZQUdDcLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEK/ohfk0vxN8 RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyoawmxAES3V zVLHzzG4AQPdyppEtRVVnOz2cfDcah0nFiEE02RDEKNHj2c03CQ2r+iF+TS/E3wA ANQ5AQD+xYct4XMdEsdDVHoxotom1D1vmUkVK2BW/kDhPhHz+QD/SxnaHS+Xcp7X FH3fl+qqWVTp8TK9DOwZClCh4JL9gQPCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4 CRAIU/27kA4FsEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfoEQs1WmI51y7PQUFGdhiza9CJNHlGJselep9m4MuhfhYhBKLBndfJk1+LR5td AwhT/buQDgWwAADmeQD+PPzf60Lx+tUfy29gSUS41JR1eVRWIuQO23/okd1mKf4A /251IY/AZ7nGB+ssaCxDwaJfFBSSiNSC2KmY+4Q1YUAIwsAHBBAWCgB5BYJgKGTq BYMJZ5o7A4VkeAkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnR2i5elfNCBkoATHXwb1Bg3AWxobd4hCZOECcjB90gzoWIQQn 41/rSGy/WxZgAnB4PxqPxyf8PQAAB64BALKS1F5AcquDF7fSUz2btI4s53CDMgjG imR0X6SF4IHbAQDovjytQ9HT4GMS7Ka59kes3ZIXMKGVntWuDtayAY5uBMLABwQQ FgoAeQWCYChk6gWDCWeaOwOFZHgJEJZJ74Gu/lFiRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZxFVkel+EClZxFSrGuxA0JyxS+3WEPpkepTA V0+JUupXFiEEJdjqq4lHBbtk1Kaolknvga7+UWIAAJnjAQC1012RxxgImIt4DyCl VFST22UXhGYJvvJ0eFFgPE3HWAD9FtWfG56MlA8xnb2vyn9S4npdbmIRQF3v1JzJ /cM2Zg7OMwRgCWzIFgkrBgEEAdpHDwEBB0C/TlXawgfn6aa7ufJVR+Q/gWRXVrKk r4rUYHwc7rh8+MLAwgQYFgoBNAWCYAlsyAkQG6AZUGvmf7tHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnMrkOfnRWZBk2VXIICDkaLWQD9W+S 4rp04lLuEg6GJM0CmwICHgG+oAQZFgoAbwWCYAlsyAkQB4k6Pk0j5JhHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn9lBVT+X5yoL9UbAgDoCk TWBaqgikCQxJF/b+LvMtKj4WIQQ9QapOjfe+y0MsfBgHiTo+TSPkmAAA054A/iMV tqBGqBuGJt8w6o9JAqKwL1mLYZho/fzvLBr5q4PfAP0REp1kKCyONUEMnHE23QDt 5htyQOIBtcUE5ponibq5ARYhBEbS9c7ZvT1joR3f7hugGVBr5n+7AACZ6gEAs5bC LraUoPVON2QS6SGIkXdWvlu5doa/mghZh2yw0pkBALjwFznXDqKw49L+QHI9DrDP 91mFnn63B5eL9as6EkIDzjgEYAlsyBIKKwYBBAGXVQEFAQEHQPxEPo+I1aXCJj1g xvKBW4m8a3mbz8tFongK4Ih2VcYxAwEICcLAAwQYFgoAdQWCYAlsyAkQG6AZUGvm f7tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnrL/g6Rku cLsdVEcV6aYQKdbdZYrwVrxDLJZeE0YnKOsCmwwCHgEWIQRG0vXO2b09Y6Ed3+4b oBlQa+Z/uwAAadUBAOi1xTehsIJ4qZHUwJpXuqYYWsjBXskGTrPvvXYvK3HxAQCV aUfDr6nvB4sipu5SfIo5MOyVhZh5rYijkbpVnHCUAcYzBGAJbOcWCSsGAQQB2kcP AQEHQNddFOM7uBCo0wMz1i0g4l6E/+T6Awl/imYSJboD6iEtwsALBB8WCgB9BYJg CWznAwsJBwkQWKOCMX9U18VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JntreUuBSbdNohIBa0SBfunl+ynDBtzVWZNBEKWx3dzokDFQoIApsB Ah4BFiEEz3Aed7ef697fiLRVWKOCMX9U18UAAMj4AQDHg7Va0yOC0M/HtsyU3Kz+ S75ravDRsrg63dD6dcopDAEAsqnmUvg5yZcbJ2qzOv7szq5Lf/McjSa3mwKeuw48 5wvNETxkLTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQWKOCMX9U 18VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnCEiEiyfl j2EyFvs5zo9Zpykj+2fynJ6KV7CdUbkxxV0DFQoIApkBApsBAh4BFiEEz3Aed7ef 697fiLRVWKOCMX9U18UAAKvSAQDHAPuETg6tEwCIN1YXZzRPIdSUrmo1VsUsH9i7 BCUM/wEA3IK0NiA0YwRRaO8/1Y96YnDfeSuFA3cq6NaMWfmUGgXCwAcEEBYKAHkF gmAoZO8FgwlnmjsDhWR4CRClTV1jsL/Ge0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmfPMbPnAt3bEMMnqcIXoXOHX5yqZCDSbGTiDlOedrha LhYhBKNb066nI2L1w6YQkKVNXWOwv8Z7AAC2qAD+Lk51MiyyNqd9ao7dhkZ4QWNi djK927yeXfUOjNSXzDsA/R1NgnWPzeMgU3A7Aw3TkVcBNQTASD+lmU8qxszpdIAI wsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQfHqKglQa8F9HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnz+9iE/A4iWbP+zMQ9uxKAhokY6/L /ht9MM7ybvmd7+wWIQTLCWHBaiYp4oVbYUN8eoqCVBrwXwAAe8IA/jUsHSDrk62N UjkdQWhkm88MkXTPtdjIudEvNugPAZkWAQC6vYsbRDspdN1bw71edGs4uiPlQWK4 bMEKb6jNgywwDcLABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJENboZaO4j4iBRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2V4b5FtW8awb6Vu Y3HzKzWVZRcuX0nPIUsC2eKs4FZ4FiEEvmxXIe3LqBdMWdmW1uhlo7iPiIEAAD3E AQDTSuoiZJOBvpxy8vBRcAR8fIIZjlQJgTViLkC2nYta1wD/U0SraS1l3YC1MlJL P6Wfmsb7cez2PQEjhYPtrH1vXwbCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRAi h3oSi2+rMUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme6 ab4z/8Y2N/iywCMocAMeg9kWqvwGeXpAC0FRFl+BUBYhBPMCuD6QzWrD48WdOyKH ehKLb6sxAACLbAEA2Zl4fwpRFTG9HuMZdPDuOblHb878cWC1OewUL/JNZWoA/RPg TZx32SpxmlNw2+H1RFhOYs4mcTY9zyvJkAoClTMNwsAHBBAWCgB5BYJgKGTuBYMJ Z5o7A4VkeAkQ6tcv95FAeLJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnlGNgYZtE9nzl5TPI3+QhJC8tk7bZzQI2X2ypUBKL5U8WIQR6gNtT MLfZANW9H4Lq1y/3kUB4sgAAUpAA/0FeYggC/G+duSMtWsxGJIFnvIdfsU2TF7tG 27Wz6onBAP4u7ycufDhVYy+3+7ju58o/RkbVqPRxLIa3k8rn6XNtCcLABwQQFgoA eQWCYChk7gWDCWeaOwOFZHgJEP2diwFXRQILRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZwhfvpi2e62IIpAt7gGqvbk/8JiOgBZI6jOzLLnc 1cLoFiEEE8i43CAgnLDhVWTh/Z2LAVdFAgsAAEGTAP9MXv2u/5TALNvUqhsAzoAM VtRtcOwncgsS3FYF4nNrZgD/UNefvwvXf334TdmMn58bTfimvpoEJUu87VoQfGjf 3QTCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRAWaYJWHhQMA0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdLxvi7L0PAw954QaFAvgCfceP+ D4llpdkaCD3tnhPZGhYhBMJMwJEC0i446Dk8VRZpglYeFAwDAACExwD/Xi3A22xY bzVHaVt3kZO5HcbGbqsxKdslzLecLWIMu54A/23VYbjGqGwoTGdbUt/p2MLtZoBR ghaZAVZMSHnsr0QFwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ81CZAH792D5H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7Wupldw6A6Vd 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 3t+ItFVYo4Ixf1TXxQAAoaIA/R/LMPXUXYDqD9k/L6RkEfrZIAGhu6iPibDWVWJi kQJwAQCDBdm6XfEEf6+YQUe5XHs8bRI5i8KRtyPMaXSuG68TBsLABwQQFgoAeQWC YChk7wWDCWeaOwOFZHgJENboZaO4j4iBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ48LqNbBpm7QhyEc7rFathWh5/HWkFcAPrMPtxlA9h2k FiEEvmxXIe3LqBdMWdmW1uhlo7iPiIEAAOkJAP48jCpgq/T2bf6t+IjIldrB199N 7b5by2sdwf/GYPpwcAD/RYpGK6ux/XyPCH4mpwqQZSsTO1seSuXASw5sTPmFKwzC wAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRClTV1jsL/Ge0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfs8dgZsnPXGKL3B3n7UbFH/pQCdRCx jffvj8GZzPEj/RYhBKNb066nI2L1w6YQkKVNXWOwv8Z7AAAQCAD/XhXykOp03fau SGpjO4VEbRL8WcHvYnsk5oX+7tL5BvAA/3AY6jSoU4Nq3qhbM5fJYvOZOmJ0ghc9 D9QWAl1QXawJwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQfHqKglQa8F9HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnaqu8DgCLsUjbbJBi xPKDamn1IAaT2J/BwMnjqf2ZyGIWIQTLCWHBaiYp4oVbYUN8eoqCVBrwXwAA1OEA /3foI5NK3pAg6khqu4c43jG8ulwO5h53LoJ2KuchafpBAP0T318pKYYI1Zmyvo+C GESJlB3gzdlLgHWSbfp+pIXQBMLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEO5H cw5dHXOQRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ737 r9QQBrgRLuaxl1fkVbB0EqQTk6aqqQoFsQiuPwYNFiEEFuEHoGiGxsHhpEfH7kdz Dl0dc5AAAPJDAP0bDPK2FFhqteDl6yf79gOrTmU6UgTPCm0BGuL5JdRGbAEAvKM9 LO/k0Xt/LlikY9/vrza2byIwTkqp93Cf6m2sXw/CwAcEEBYKAHkFgmAoZO4Fgwln mjsDhWR4CRDzUJkAfv3YPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmcCdlhjTnsFQ8kpUFzxoh1NowolD1asnnCX0mwQWgxZJhYhBKNx4aCK 7hlVS9j2/vNQmQB+/dg+AAAevQD+I/65XRpY2/2DHqqiG3eRkWPz008X75bU+oPP U7nJZ9EBAPZeCU8YFomoiXF07eEli7jtkYwrWHdU8I0TfUM9AGQHwsAHBBAWCgB5 BYJgKGTuBYMJZ5o7A4VkeAkQFmmCVh4UDANHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnrC3FV7CytYsLVtbqXcMtFzvYRIJl+ZJv+JkglzBI 0HIWIQTCTMCRAtIuOOg5PFUWaYJWHhQMAwAAS8YBAIsJC3W5L+qg68PKLEOSeJ9W 94vdCfDnkyVD3etO8kT7AQCgyG1GHsKgDGasyMSjBCOHRlJkClqicvh0FE4CIGMd DcLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEP2diwFXRQILRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8MFzZiO8GG6gXnpz0V3f4Mau1IF FJ4GghjR6+G424wtFiEEE8i43CAgnLDhVWTh/Z2LAVdFAgsAALcgAQC0ktdBIu/n ZFEZ2Q4JO3T6TSQatbCzXqjPW2rbOUMsIAD/SQJkEZTF1X/MjlZaegdW/8Fq0ezA lp+zd0/wUba4UgTOMwRgCWznFgkrBgEEAdpHDwEBB0CkIZ+h90U0P0+KCR4Q/d3l 4RMpkli783GFXwcWwoUNg8LAwgQYFgoBNAWCYAls5wkQ6tcv95FAeLJHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnVmh6vYl5EGFJJvVkxfyQ 7OsBG4HnLjWz9M9bHYlULzICmwICHgG+oAQZFgoAbwWCYAls5wkQ4zDieqc7xu9H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnfra4ad/Bk0aT Lg1yEzHk+37vaWigMClhU49xvbHP/6gWIQRv7/1nHheD5CUAw9HjMOJ6pzvG7wAA QO0A+gPg4c7wb2OePGOSNKb5BBqe5Gv3fvQ0Z80ltn0xKz49AP910eZS7tpVax+y 4hxacGbuz1Bn7dq0NAnnIY+FzSIPCBYhBHqA21Mwt9kA1b0fgurXL/eRQHiyAAA4 4AD/eHyYg7ZGejFSYVwQtl/jAMw3BmfQsFAIRLCVMP8bNlkA/iBLIakHJSO3Vf/N xGSDeCFpv82LSL6Egjoke5wli+4CzjgEYAls5xIKKwYBBAGXVQEFAQEHQP7hfV1E iaW2oXN+lWUK5yi048QeU/8EKWUDo0CoPYwVAwEICcLAAwQYFgoAdQWCYAls5wkQ 6tcv95FAeLJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 3tbVuqEyP7t1qnxsxc580fZXcltYJ7sJqncASm/xrEMCmwwCHgEWIQR6gNtTMLfZ ANW9H4Lq1y/3kUB4sgAAeB4BAP5iHjy7HJuNKN2eZdaVgT1L+L6ZOrF3qYz6+QaS 7uD8AP9FA9oD/2xX3zuTO4KDxljkrFmx5JfXMhCR07R1USP8AcYzBGAJbNUWCSsG AQQB2kcPAQEHQD0TsB2WTJRvQyzsmf3fGW59urYeq7apeuO6/78qcX1swsALBB8W CgB9BYJgCWzVAwsJBwkQ3MOidBCuKj5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnt8M8cKLewFSWq85K9zkGuGL9yUgaJauTpvsXEbkRBd4D FQoIApsBAh4BFiEEDGDUNNUTxGW8B0Kq3MOidBCuKj4AANCuAP4iZnAzKGKv7Rgh fizwGHl8EgLzcXUJEIazO0ZtEuvGhQEA+gQ3W1zMG+rWL1DloBdPfqyHwHB9FVSx 8BSUpw/Y7wzNETxjLThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ 3MOidBCuKj5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn cxggiS2JbUjxqkx6LH5GAV2icjhlJWTBaNiugyAYIj8DFQoIApkBApsBAh4BFiEE DGDUNNUTxGW8B0Kq3MOidBCuKj4AAKhMAP9MUlhPFpF5jEFE5dkkC3NNUv/0B77z o0wlRho8cpIhdQEAuh2U6uPQ0AuHjMIddy6CcAQzVDqNWW1xQgfyGgosOwPCwAcE EBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDUXuAibV33HkcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmf1UnL8o/jKxJsahZHq20d2iRmAmsxYb5oA R5L8OGOZKhYhBLQq/TC7G90uueu9uNRe4CJtXfceAAC7kgEAhDozPUzSqPf2Mn31 QyLxcBlDhU75W5LkWSZDG1aTWL4BAMHvoeZxQe07ZS6BYhLeyfB5o/nGp5qczInd RsUs6BwIwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQC6zTjS5tK0NHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnUh7QK3N3WwMPwFCcpUxK +4qhX3NP5lE6trz2i3KzIQMWIQQPv5pIpavlygCU7kkLrNONLm0rQwAAGWwA/0aa p9o5pRdJRBvAD2s05sOw7RMLGgFuEyC53AKIVVxiAP9hrikhlv9nN1LlRKKoijPe eh1eIAveoOBe1WfIQFw0A8LABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEPHFzCez 2ZfxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxfm8SyZ ck0L+joDoqyoPe9wKb+FNAE/TbuqsmEKQG+JFiEETtalMb9iUefDbEU58cXMJ7PZ l/EAAPsiAP9fRyMKZ/ucAac0gaswozCnjliHSE1s6k+o+Wq8tExkCwD/eQHL5Riv I8zEnOu/lgGXDTBvLHPw4ISuq1s8YBnDugLCwAcEEBYKAHkFgmAoZO0FgwlnmjsD hWR4CRCErdsHoQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmdL2tebZlTDQgcBBLWMG2DqlpAfc5es5X+Bzd06lpOq4hYhBCi3SqfFF3Ic OayCh4St2wehBX6dAAAgRAEAlR1dM1v6rCNWLAM0Btzw1zdbztEfUPWZVDgvdvwJ 4D4BANlJZMrNDA6xtusfCGf90w0mDm2tkB4rPPIHIHkuMU0AwsAHBBAWCgB5BYJg KGTtBYMJZ5o7A4VkeAkQ7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnwzw6Edvl2GzY6KH8tYSJCgmslewDxbkx2+t5uKoRRi0W IQRscAQ+GQNb1agFAETvEDA2AyW9EwAAYL0BAM5f2Zy1yin/mRZ0rhw3T14aq/IY vmlqwhIhwKWnKWTYAQDeW6LhoIRfTwzh2tyV6WuAiD197NfBe7HsEIgReOg9DcLA BwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEDrDe94xvmWhRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwAJVRd7Rxpzt740JD8BmkkEfxiVZUME vgsfPWoVKwVPFiEEVow3YiNvvHaFS9TmOsN73jG+ZaEAAP/wAQDYv8t4PdBk6xYg OJk1kapsRqNVHikQ61EXtZ3kl6YhRwEAu2iDBP/f06zd8l1N/KCBtc60+rHLh9b7 NT+T1LLhFA/CwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRAQqbswI8v1WEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmckUT/WwkwNpGt7pAHj K0BjtA76EC220cpknG+11s67HRYhBL4328Rq+AQoneaEvRCpuzAjy/VYAAC7AQD/ XghqICKwAR18Sj9RY2VddZARu5WLb/szyPa0TII/jM0A/A2muJWyeQtVeNfyR6mX Z5TcWdqphY8xDsmoAm0y4OcMwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQzcwa yEZMj+VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1zx6 ww7ZmOeacghfonrHmDgBqIzV1alwppA7LJztxCgWIQRSd8FPnTeg9NYV3ZzNzBrI RkyP5QAAlQwBAMJdF0wszxWLXogaReVTvSMWne+37CcnBXvztjJznaKbAP95O8NH Sxlggzh5jmoW0i1ZKSrzv5+DL1YhEwBRcdsBC8LABwQQFgoAeQWCYChk7AWDCWea OwOFZHgJEH+tscP++/5ZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ+5zb5Mge1NrMvt/GCUms0wmu4paxNknw7Y5fFEwliM2FiEEoM2HWCwh dDwOMGN/f62xw/77/lkAAPkyAQDYI+ElHSeL2p2PulUZJ5wsAFU8+FYnmf3ju87x t7ZIZwD9EySfZdyoGYlOVvN3/XT6bf0VJCHaTlvb/XcMnCEKpgHOMwRgCWzVFgkr BgEEAdpHDwEBB0AADijxSlX5P0aOq9ZqYieK65H+bNUkrbIw90RE33cdqsLAwgQY FgoBNAWCYAls1QkQ3MOidBCuKj5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JntsJzv/xLhRdK/+c6gABM19tavSK2Lq2urWFVhs0NscsCmwIC HgG+oAQZFgoAbwWCYAls1QkQsIgOG3o1aTZHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnqQFhKHXX4FX7EHX+ruxzzwT0/A9xEUcWrSNP3CQ8 z5gWIQSINXqhe8O3tm4pn9OwiA4bejVpNgAAp4AA/0eVB+wBh56WBUmEcLWhd573 c/K9k01MLz5qujakFcc/AP96av9pKGwh5e/B4DCieNvuLY7HerEUU6iA7dC7Fu1u BBYhBAxg1DTVE8RlvAdCqtzDonQQrio+AABPawD/WX0cTdATkk6jnoKOZvc/vFAH +Pi4fwLErtD7F3EbLp0BAPQP/bw08WzhqZw5tzn4mVd5nSUzIl0LPo4x3y2CcGIO zjgEYAls1RIKKwYBBAGXVQEFAQEHQDaavrn+2MfEXhIkXOiOUhHSETCRqLnWkQY2 KGJ1eJxhAwEICcLAAwQYFgoAdQWCYAls1QkQ3MOidBCuKj5HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnrOclTmSNEomVcXTP4b7rcb6/0xpC 3sMSkgQbj81uPwQCmwwCHgEWIQQMYNQ01RPEZbwHQqrcw6J0EK4qPgAArx8A+gN0 bNXM1taIV5YzQmSDAlIq19++aFPEX+zDaiKAUsO5AP9DilfMXJriCqZw/KekizyQ GFb2RujClSbbZ7VDvZPTBMYzBGAJbLwWCSsGAQQB2kcPAQEHQNIRZuC2rGnFgtpY LwwSv4mlAsIAkConDTIt0vEW/HuZwsALBB8WCgB9BYJgCWy8AwsJBwkQ+mHnPG9d y0ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnMJdB+bs7 Kfo9zV9hCjtjIL46/e+kP545etqfRoYIdzEDFQoIApsBAh4BFiEEU2rVYrkhe5g5 ZiBW+mHnPG9dy0YAAJPEAP4zB6OyvdHwfEOT3o5N128S65LzThUvG0akRi9k5e1e vwEArH/mdNfFHSODGBQaRK+0FwQF3rgzaOtiznVjW6DNtQDNETxhLThAZXhhbXBs ZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ+mHnPG9dy0ZHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn+SpCB59vGoSu+ye02r0Wa/CJMqo6 5PWhLlZctwX/atIDFQoIApkBApsBAh4BFiEEU2rVYrkhe5g5ZiBW+mHnPG9dy0YA ACkwAP91GVFqh9KdQ+cWF878vGdGAGL0X3+sD3DFIru0ahJuDgEArcumvKl+KeN9 l41iskKamuPrVVtNgolQKeMvmH4icAnCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4 CRD+3G5cRqqrE0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcpJ2bkM7BIPCXf/zsEbOAsZA6WQp6hbH7EDjaDL8BPLBYhBEeXd2slmPl9ye+U yv7cblxGqqsTAABrWAD/U5S4BHRN9NtgFV/aldFwMLfT2tXG7qmY93xzYcrILHsA /RkrGSLxKtphRdbHr7/Z9A43dVl6WEOYPFotqgAt2c8BwsAHBBAWCgB5BYJgKGTp BYMJZ5o7A4VkeAkQ1Deanq4moj9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnxcZg712FAE5AjCJ3DhpcfgJVoMiSsUPqQ0VrJlGo64IWIQQv kMXFOxDf1PfcfbLUN5qeriaiPwAA6a8A/RhaccmQTOqByklU/JbdY9mkNZ5XuXxQ mJ6bR96p+socAQCQu2PSuB7qBY3ZDLC0dTfCsr6v1/JgvTStlN2jRRVfDMLABwQQ FgoAeQWCYChk6QWDCWeaOwOFZHgJENyS1l+vRlMtRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8KVaB1mIIWpSYe0hiBjjDkzcb4pWfW0uI8q 9BZ/iEBJFiEEl+QI92oIlUYQRdda3JLWX69GUy0AABvvAP4lKNOCrCGiJHaI3S9O zlIQ2DqTNyjW9QOJhEi5nmgQ9wEAgBMZ6NFQsANDXHu+CefxMfUokrzuA1OkqRaO 7jsspAjCwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRAlwsDug9apAEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcqkbuPErusH4vGIHA5+jLw xRxbDDTcVb0VLY115gyQORYhBLkn0G2SE36zT8fVpyXCwO6D1qkAAADF4wD/RaLr 0JFrfE7UOTlFWChv440/AJdcK6HWqRGayQru5qgBAPlVE+D77nTYEJD5GDziXQcF 1xg27khPfv+nOhikfAcJwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQA5JT7w65 kQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnAdMBaJFX 2Md0/o3ZOvIHmKoHfP2qnT+AfJHzR9FhS9oWIQQ8kwRHEI5vGqkh2cADklPvDrmR BAAAASMBAOVbkuXlktTT1pMYUAsjh9JY2468mhVBr9wMrCLVSC96AP4+uJTguk52 Sw7B5IV+isQxvgHcSb9ijKoeIYc6QUdgAcLABwQQFgoAeQWCYChk6AWDCWeaOwOF ZHgJEKltmR2kfAo9RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ2EI6VP7SVeCjwcNI18XNlukIQFYfN4ZTvorQITH9YR3FiEE5htjHVZmvtyc JU55qW2ZHaR8Cj0AABXPAPsHfofi+0ta2erztqyYtyzs+QoufwM+YRcKemZ6+L31 zAEAnHkatajQcUXtD4aNH0P8B3TbLFP0yDQoROyReuyLlwfCwAcEEBYKAHkFgmAo ZOgFgwlnmjsDhWR4CRAb/puj9KvUDkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmeZUafPj4iYwXC8fulOll2TwfCq372Sp7nB70Xew4CgwRYh BDYwgunusi5QrTA9ixv+m6P0q9QOAACXGwD/ZZGDQfi5Mtje+uaf/i480C/VQShe JCmkuC/yuKVAu08BAN51vjKwWXVsMo0OJMs5pTosLbLvm/AUGvR299gZhzUIwsAH BBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQ3fp3nZHGmJRHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1D6TgzJ4vwuan7ZfK25/WLCamB2fyXRR Me7NUIIYUYwWIQR5dMBOjVtUDSPNTmLd+nedkcaYlAAAcIoA/3gKnVAPtNKNHpXE b8r4sbCC1HYz3Xn1YscIEIrol41mAQC4rpLOc7+KZ7QXw3F7OAaeiXtLY9NzdlX+ qHWbldSmDsLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEJvVXJ4TPoy+RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6kIvly9xnEuWgBXqW0W xm6iKUnM0VuTPRAPk31XX6zxFiEEQ1JVe6tz/5W2Mu5dm9VcnhM+jL4AACJOAQDs p1hwKw9liCi0h+m4voai4v5IeIEslMnA5ffRXHOlIQEAvSiA2/VTVhOE3UZPuFje LenrcN6F/Cc9rVRoJHnNzALOMwRgCWy8FgkrBgEEAdpHDwEBB0ApFMwVfYropsJ+ GseOvXN/+hV5MkDWNfsQTltlj15FJMLAwgQYFgoBNAWCYAlsvAkQ+mHnPG9dy0ZH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnFMHU3Zlu32d0 n6X500INj7ufkgkCVuNzppWEszRFkTQCmwICHgG+oAQZFgoAbwWCYAlsvAkQW2pN cxP0aEpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnou/7 I0tmpiYYbq3ggs+bJpV3v807qRpQ8TL/stFViloWIQTvdYjFR3022bnct71bak1z E/RoSgAAhB0A/3N4onowfgICJrLl372ZluwZFbbl3Lt8yIGhZ53OGXQRAPwKkQ7y 5yq3QD9KYG+bWIVX3VSzQ4GMBMhaq+MI/Tu0DRYhBFNq1WK5IXuYOWYgVvph5zxv XctGAABflAEAr8UznSq1f+91bW0Xgsj+Jybyv4kN8wpQbqUg/xozI+wA/josQJRH /H/dZTfbGuqAio3Fp7HQkcTwFZLal9BEtacDzjgEYAlsvBIKKwYBBAGXVQEFAQEH QHwWvPySUmD8qgbzBoIwmHo+9tk4TbbPbTBMrs49MEoIAwEICcLAAwQYFgoAdQWC YAlsvAkQ+mHnPG9dy0ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnBhGzOIkBcW+WD+vJkrBWjlbgckQnFsatwaMN1+YQKsECmwwCHgEWIQRT atViuSF7mDlmIFb6Yec8b13LRgAAOYwBAI3GIIpEoNFnliYgFVmJfk2eg1P2V4qp L6pqVlH+28GVAQCMQxNZcwamnfI5lco+K5Y+atLq3Lmb02V5nE2KuHI6AsYzBGAJ bMkWCSsGAQQB2kcPAQEHQJ8fsFR6ZpX60L8w4AZ2sQebYyVDaWN/OQptjkrE4L94 wsALBB8WCgB9BYJgCWzJAwsJBwkQLH/cU18GqhRHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnqRdxKrgTNTDMTTPjQ0mtv4qIinPvwadDb5Zo VSZlmYYDFQoIApsBAh4BFiEE/ScniwUT+P3PuDLvLH/cU18GqhQAAE5PAP9Gu3Q/ 1IX9LD6YurZjiNXqkWQllqKmJyv8tY0IbwGEZgEAqjy1udoWy2S0yoLXMHz2qy/e eWcQlQEM4gDS0GlBSAvNETxiLTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzJ AwsJBwkQLH/cU18GqhRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn3jkS1pAmQBBOnfR3aWsSETVWxV9rm2RbiTSr8kzhRNADFQoIApkBApsB Ah4BFiEE/ScniwUT+P3PuDLvLH/cU18GqhQAAJdNAP40gosvrdb17bstbIW+gzAu 4VPVwkG4wNXPzYzbbnmnIgD/VxjjVGEBgYPZ0dJWQl9OySH+I5XCjaTfUcl+ZUCV 5g/CwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRB4xX2d6VwW80cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdNusYWi5eRwZrVXq9zUuBrmLs0 jYj2UutLuLjNmIVjsRYhBL/DGmnqlHTrifzMLnjFfZ3pXBbzAAA8OQD9FiL0O3G7 v7Rt3+FGSMXYC+Nbm+KMw65D+IlpvutT9n8A/iyXbvuuvVQgw9cR9YY7Z9wdL3C6 BIdjx3zQqi1FZyUJwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQRpalxinqMfpH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnOnc0m6MnFgdV UkXtsv1EZoigbfIfPwFe4fPlM77ZyJ0WIQSSuxpWC//M5HF7BdxGlqXGKeox+gAA NJwBAIsGMR9lKT67hRvcZaX3wqx8yHHULeAx4wNuQ2RzXoLvAP9mIZp1ZTdFq8fL 6TNzaCbvI+Sxj8crK9Gg6kp+wyyYB8LABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJ EAhT/buQDgWwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZwUKfZe1IdIMmLMPrrgiKyxLM00QtdnHOXlDEwDhXWC/FiEEosGd18mTX4tHm10D CFP9u5AOBbAAABHIAP46uykFd+GLeHDVpNFsYKxn/bTQWVjmzi8jraznEoRFZAD+ PBBLNNWDsRnjY+gxhgytsKy9VTF0/dmBfs3W4srTPwvCwAcEEBYKAHkFgmAoZOsF gwlnmjsDhWR4CRCv6IX5NL8TfEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfpu6JjwBJt0begRM+Rgz3I4LnOq6BG9bAWpI0qOX2TnhYhBNNk QxCjR49nNNwkNq/ohfk0vxN8AADrEgD/e/0U4ku8mnv/LDHLmcCRWP1th9l2Ua0Y Q/D90PoyX4oA/26e5yNM7Crv5uI79fJJ/7JxAD9+hiUlN1YTX8Shkl8AwsAHBBAW CgB5BYJgKGTrBYMJZ5o7A4VkeAkQKvaj7l11+j5HFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnhXOazODPlYDHMBTqwDIDrTSSMoLE6uqlmaUp XBDEPB4WIQSQqd0+dyHCIZ6NdNwq9qPuXXX6PgAAOQwBAPR/whOEr3/GPv8v9DyV FVzJ9R6QFXh7aOrAZ/+H4VTvAP42Hda/Std9YzqUgY3jUeJ0spjkFl5UYJlVp5cr j80/DsLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEH5dtCDkDrEeRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzxrfCGnuwraswlp0YcQYZmR coCFpj0LxzqWRdrDCRY1FiEEuwns71Cjdjt4a52Mfl20IOQOsR4AABDzAQD2apH7 NWzFh2waCCC3yN+aaHmamHLUmb6muMWmXWOR9AEA2tAfLTWmWIv1hQv5aFIXK7W9 /ktFcqjCux8rAMwquQLCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRAboBlQa+Z/ u0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeua7TMc4XK YdH5XXHNHBkGHEYQacb5/6q2oNNIoKNkmRYhBEbS9c7ZvT1joR3f7hugGVBr5n+7 AAAESwD+JBli6MWlNdAHbuRyIcpPkwdXln094c68eq7Wn5bkNTIA/jb8uDyq1tVQ IcKPOUOr63xfESRgnfXFYNgcBukNE8IKwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4Vk eAkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnUMG5pfiIVAxOn81A58xmyvYaph8BH+P6eawGD9rlDv4WIQQn41/rSGy/WxZg AnB4PxqPxyf8PQAAzq8A/jWxSZTIL8lNeAfgJz3YbvXPPFrSB+mZKkr1KLuCWpLO APsEwxEYoUwEA9ZpXQ3uHk4Yql+Tbpv462iiv5a5wsIbCMLABwQQFgoAeQWCYChk 6gWDCWeaOwOFZHgJEJZJ74Gu/lFiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ4xZcFdJntHZlp8arDzz5IAsmpd92wed93qHGZ1Wa1UJFiEE Jdjqq4lHBbtk1Kaolknvga7+UWIAAJywAP9LalIrwbh3Lao2GfzHGb+bf3eCkFSl txe08zcIq9N0tQD+M3w582RISRL6Mc0h8AxaYahWanqc/NVm+0oIpzgcyQ7OMwRg CWzJFgkrBgEEAdpHDwEBB0C6XgDRRMdeuYkZpNJfSqmRF0zB7yynB9VPo8Jfviz7 PcLAwgQYFgoBNAWCYAlsyQkQLH/cU18GqhRHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jn3Ysdsi3SHqvzXcBZdu+IlokM4ofEUuD2FRbynrEd 1xUCmwICHgG+oAQZFgoAbwWCYAlsyQkQ+cqonCUU+qxHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn6cKlE5PFBhXV16pJX+hFDBV6zkp4ysbW N+FQ+uRqfg8WIQR2g1UFaTboUdV6Rcz5yqicJRT6rAAAfk4BAPmCYmtN0tifv6hb wbVH4nI3JNU9Uvr5Iwakr5ryxNEMAP9AjnKGu506y+XhonJ+nftd7hu+4VJWGft3 l0QaK1KlChYhBP0nJ4sFE/j9z7gy7yx/3FNfBqoUAAB78gEAshai7cy0Wx6lBSD8 fiKcC2CGNKk2vZd36dJV8hvaLLUA/RMXQN+ZYZvB0N1lt0ArPoIGQ8Xt3RHyS41n b04flzIHzjgEYAlsyRIKKwYBBAGXVQEFAQEHQNuZTmMwGC4UfpBtgGblbFlORfE1 7ZsmyBREaz7gcHVdAwEICcLAAgQYFgoAdQWCYAlsyQkQLH/cU18GqhRHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnZhausRfGi8oa8IXEPK55 ohkNJh4WTYS8ESdncVC2YfUCmwwCHgEWIQT9JyeLBRP4/c+4Mu8sf9xTXwaqFAAA FSQA90tt43tcuZHX/ygIqNaNO6pVcfOXQnii5plA8cGR5QEBALwAvcBLnr8Yne71 bICyfTJQojBGgpeBY0TdB7V+7osKxjMEYAlsvBYJKwYBBAHaRw8BAQdAbBAdbHSs PqAIYHzr0zuxtdPyhkKmyx4V/6Cp+6625NLCwAsEHxYKAH0FgmAJbLwDCwkHCRD+ 3G5cRqqrE0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme2 ZdKCmeaDE6tuOoNyL98VxD7LcRpccIKFi16RJ149iwMVCggCmwECHgEWIQRHl3dr JZj5fcnvlMr+3G5cRqqrEwAAp8MA+wcEYorIKE0Jn1oBLsLX1fg+xr/pkgxVkVww pZOrNZ0xAP9EWN1zDjHQp6rlJDD3IURtJ9nkcOevfLIeRc8el4/QC80RPGEtOUBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbLwDCwkHCRD+3G5cRqqrE0cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeW0tOZaf03RwWRaqeI77DE AmW5dzMetafsoHKaXeBm5gMVCggCmQECmwECHgEWIQRHl3drJZj5fcnvlMr+3G5c RqqrEwAA10kBAPjEcoXhbwbZFxO24qN+/4dIENiH52NT8S/6JuQcQQ+6APsHUtBd f8KFjT0QbTMSwjnzFt//8QEOPfgt8cMhjNz4BMLABwQQFgoAeQWCYChk6QWDCWea OwOFZHgJECXCwO6D1qkARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZwFsU8PANHvJp03Pb2RWM2D0Fq0gaSFbJwalTJ61H21ZFiEEuSfQbZIT frNPx9WnJcLA7oPWqQAAAE5PAP4w/Vxx1KXdhwERcrK8X4ZO7F5zQbN+aO283FTx 31t0fwEA1eK/AT7HE/nR59WobwUOWO4TuMchzhSv0Z/s30ZGPwvCwAcEEBYKAHkF gmAoZOkFgwlnmjsDhWR4CRDUN5qeriaiP0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmfbqBbFv/qgLZlwlN6C/YTRiolt00/2qjszl6YmnGGL YRYhBC+QxcU7EN/U99x9stQ3mp6uJqI/AADodwEAgmmc2SEoidnDBV6KX9eMQtIn k3LgRAbHjNCrmHs2Hv0A/ivbr4UhEr4wnRtTovZsnakO6ZI7c3CMRTdgs97c+osA wsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ+mHnPG9dy0ZHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JndT/YDIN36N9x03NTVcofv3gRkoaF DVI8foZYJz7oBToWIQRTatViuSF7mDlmIFb6Yec8b13LRgAAQYIBAIwh8aAne+i1 yjgoqrHhs6NVH2oi8LlHO9AkzNNdOSDJAP91/IX6oR2tKDWXVvnIdqyWFKMifce4 1Vm/VMingWlkD8LABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJENyS1l+vRlMtRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ04HX7GFEqJnQcyW TGjASGJivjmgNj8Npfo0AjWO1WkqFiEEl+QI92oIlUYQRdda3JLWX69GUy0AAG0u AQC+Q316THbyWv9WcB45FIoi/g12B7GQo7AEBtWUiHqz4gEA87fz72PX5/i9MPcj BbLr8KBhmACg/G32a1HgB4tTOgXCwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRAD klPvDrmRBEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmci 3wwAaQ2s6ihnGhhkc2ZrSLXIHcLxqEGcdW6OWt4aSBYhBDyTBEcQjm8aqSHZwAOS U+8OuZEEAAARIQEAx3zLrreT5DaxOVw8Y7Lekzx+2Kez3tLOKjhWevXJdJwBAIX/ 3uy3bjbqfgebnzAPigRv+azLCJIV3Pbu+Pl2x5MLwsAHBBAWCgB5BYJgKGToBYMJ Z5o7A4VkeAkQm9VcnhM+jL5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnRuYVKJGbVODZmZT55+nNTJCSIFkvlp/liceCQq4OpggWIQRDUlV7 q3P/lbYy7l2b1VyeEz6MvgAA7c0A/iFOFz2yGWolaoHfEVds9ECCNWKgsE8XQkuD LVjaOBDkAQC3LIkzcTy14EkGd3R4WNDX/aYP7YcxNBsofPGG1KR7DMLABwQQFgoA eQWCYChk6AWDCWeaOwOFZHgJEKltmR2kfAo9RxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ2k+YWqKocJM40ckUQ3y235iAQmQdfmBevfrC6yi xvjnFiEE5htjHVZmvtycJU55qW2ZHaR8Cj0AADAZAP4lGRe8QNQNjW9derT6BCUK jgO0vmiBiSE+AnO63i04aAD/US4QjuEGVGsCq0A3l83Yxfc4veJ6i+LGRXx4LpdD TQ3CwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRDd+nedkcaYlEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJqIuVMAML1uuwE8xJYdS8CyR8 adMtneTz6Wg6oGAgkhYhBHl0wE6NW1QNI81OYt36d52RxpiUAAB46wD/QUd0pe4W +QUD9JWPbETzvjaJq04zQelyWWHtaTF8fdEBAMkIawEdQXrcQyEAmYtY6N4C8E1S M0E6ee8HxQ0D+nUBwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQG/6bo/Sr1A5H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7/qSM1je+e7K pAbTF56/h9maXO8ynPkNCFRjEgoM70YWIQQ2MILp7rIuUK0wPYsb/puj9KvUDgAA 8JIBAP5nQti8tGhmECbkrQMp0rz9vPSxDoMBRll72R5HI0iRAP9pyjROE9cOSlhm m+IzIEzX5MsrkMc5aU2n+70jhgpFAM4zBGAJbLwWCSsGAQQB2kcPAQEHQFMoWQIG BKP1Fr4id8F4bdVXV4ozu6Q5ec9oaQpzdyyPwsDCBBgWCgE0BYJgCWy8CRD+3G5c RqqrE0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeNUQkP YeZr9FV4SZfPxXAYVMa7hnMIyopDshu5rMZ/YgKbAgIeAb6gBBkWCgBvBYJgCWy8 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 wAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDcw6J0EK4qPkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme6T4ai7UtZchqUxRUWdO2blZontoBA x4SVJYWfj2SFohYhBAxg1DTVE8RlvAdCqtzDonQQrio+AACsLwEAkyfX4dKhp5Br vDuBP6NmXuyl2QKMd/gwTNGFQWCPmycBALAyaxz4C4iLkFGbiPnA04RJsMv1PBQv FPfSlOl5nCILwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQOsN73jG+ZaFHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnbrKGwC92cQBsqZWl W5pPHehpVeoIz8oF3j2/c6Zo73QWIQRWjDdiI2+8doVL1OY6w3veMb5loQAAIAkB ANi/iP+cZYvLZtKsmwek3W28QmQ8VdbGzZFHwNsfN8crAP0V0PKoXHS0ZIurXU+q 3sDPHOedfx09a7EWHT3STZp1AcLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEBug GVBr5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+Cq QWikKtD92svIBbr6kT4LAKhto7pBy0Ppvka+06ncFiEERtL1ztm9PWOhHd/uG6AZ UGvmf7sAAO4qAP9K1rMCAmcfckBfd4LxDZ+wHLvfVTeF10a/k8OFQHPRSgD+Mm/v Gppp01ZFF43cSJ8K2NCyGFvfXsui7TYQmnowUgPCwAcEEBYKAHkFgmAoZOwFgwln mjsDhWR4CRDNzBrIRkyP5UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmdIFa8iTsqAESUcxq5IBAQCKI+83yTOrJ7ro7h37lm4txYhBFJ3wU+d N6D01hXdnM3MGshGTI/lAADJgwEA2ze8erGvCyLMP2M6nmWtBwmi/+peC3SxhORk a4MJ4B0A/2DZD6EWQcDYjuHryiPQFKaklB89JlVIvBko1x6I2fELwsAHBBAWCgB5 BYJgKGTsBYMJZ5o7A4VkeAkQC6zTjS5tK0NHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnYAL56PgtLaBHScHcE95ISv2Ps0esRP3evNi+xa7p LjAWIQQPv5pIpavlygCU7kkLrNONLm0rQwAAvT4BAPMRwZFuj7DjCp+KoHJaZDJh PVp5w6sdexStMQtVRY/1AP4oe8MSCw5SvwEibDSUh8RDi+dahjfKGc26x3mwFIK6 A8LABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEBCpuzAjy/VYRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/P4FrQf7CMbdBDNceqxJmAkAeVI 9zSI71dcv0sA6U2XFiEEvjfbxGr4BCid5oS9EKm7MCPL9VgAAH3HAQD+OqhtQBSm DjBXhncOwGAk3qlwoBqxhnBmabMmwxl2hQD+M4ZLTUr5NIiVZWoiEZLUYjc/plbi Y6XfNWZzlqELFw7OMwRgCWzVFgkrBgEEAdpHDwEBB0DIlL1k5vNeEeenalw9ANpe sABOsiDSDSagYodvE+kvr8LAwgQYFgoBNAWCYAls1QkQf62xw/77/llHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JntZrunKn9GKOZDXPtrA43 H2hz/xd20mv3rF1Xugi2LdACmwICHgG+oAQZFgoAbwWCYAls1QkQxkGlf6TY7clH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn8K2Ki+/aJbYK gb5yV42b3LyfIjnRmeBzTZbJghucmmEWIQTd4bQyEkTxJDUbcynGQaV/pNjtyQAA RXIBAOH+m9C6xAgkXwS31ISdr97Qg+r6For0+A1SmLcaFgvpAP9bCk7SYHaLnkOW wIJAPBnA5lXYlMkaRQDQzp8kKOdpBhYhBKDNh1gsIXQ8DjBjf3+tscP++/5ZAAC2 7AD/QXFDBUQIXb9ck4aPCxjeXrwM1YqaOJhhMoha+32z3G4A/jkni4mFgQa3y1P7 ZcwWUM1XwDvMX5WFtZMnIVyBuugPzjgEYAls1RIKKwYBBAGXVQEFAQEHQLtuhJ6t GL5ZsU/gTM60nI36954VM5NwjtkjKMLHS1MwAwEICcLAAwQYFgoAdQWCYAls1QkQ f62xw/77/llHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn RBawYm1Vvw8GcRXuf7DWCkhSaSVCxfiCWpk7sIrCt5QCmwwCHgEWIQSgzYdYLCF0 PA4wY39/rbHD/vv+WQAARNUBAPncC5EyJBcbwnRacaMq2W9lDyjWhfwTrEf8NQL6 Naa3AP4rrXJB6fOjs4OxggXyJUlud1v5FuwWPB0dPqEaSi6FAsYzBGAJbMgWCSsG AQQB2kcPAQEHQLLtWBJZQPR3t7OVGnHIbQxxAragt5mXL9McR8xN5aEawsALBB8W CgB9BYJgCWzIAwsJBwkQlknvga7+UWJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnIY3FL6Tc4c8VXWnMtnpwXT+OCyco2kng93yLVDinRlYD FQoIApsBAh4BFiEEJdjqq4lHBbtk1Kaolknvga7+UWIAAMF2AQCGyrx+WR84espQ PBDUcM/OPJxXtccM0EuWphCxO97loQD+Kn9FhWVdlL5+aSn2hjrbEVVG2wa5+Ves +JONK/He9Q7NETxiLTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJBwkQ lknvga7+UWJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn mW0PfuMQQMhqvaOeu4+QJsiF3FzCSfkT/8oALqjELf8DFQoIApkBApsBAh4BFiEE Jdjqq4lHBbtk1Kaolknvga7+UWIAAECeAQCx+TBjoJewbM0nHkcsP0BOGRBsgwsl ZLTcE3zTsUU/tgD/TIbw2IT9JfGlYkM7vHe6EirU6vR9Fe2b58UE6mRNAwTCwAYE EBYKAHkFgmAoZPAFgwlnmjsDhf8eCRCkqo+IC6UStUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmcgqISI2302QP6ZVTgMzEtPpUDQC9TbH+FZ 7Y4ATIUZchYhBNKww4NcAbDBILxUDaSqj4gLpRK1AADX7AEAqGfP9ywy/YgO3Lua bRFZ2sh+1eTwSwW4KYyUGXtp0c8A9R53n4+AGjhccB8bWvVGtBsSIxbqVJHTh5Xu kiHrOwvCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRBGlqXGKeox+kcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfx+bta6flsbAJ/Lc0wrVTz 5zvruKLKSHBEQo6eXS5RxBYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AABYAwEAg070 i8BCQHrLkLAkszVtHFYIaba2xxyl/+nqCi0IYYcBAPzCl8B/OAyjSIvSIEf8vh+x YLZtlc8Q6qzzYRJT7FEAwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQLH/cU18G qhRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnFx9fSqKo EppcP4GYNfFI97QiG1xKywI2PM66wFAfRdAWIQT9JyeLBRP4/c+4Mu8sf9xTXwaq FAAAtIoA/izzu7z/Lvu+uLSlvNEK6VB9iAAXHbovzx3YPgu6yLZ2AP9AqebNNsWu 11NGiRG+EOyK+FEEfEGX12lZVO+zrkJSCsLABwQQFgoAeQWCYChk6wWDCWeaOwOF ZHgJEH5dtCDkDrEeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ8vbaKKHhIej5V0QWUYyx63ipwNdI7AnOZuqOdM/U7rSFiEEuwns71Cjdjt4 a52Mfl20IOQOsR4AABNSAP4w3lNH/42jSiTP2YiDwMkHt05HIb8WiKtU3tK5mUOy igD+Mh/PcFdUR48jw2yK7AhB9+dHt5F5ZdV+Wde/DWqPXgXCwAcEEBYKAHkFgmAo ZOsFgwlnmjsDhWR4CRCv6IX5NL8TfEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmecoNNNz6+7hQojXuxH6KtyGR3DvXpDBO7ImH39NbsJERYh BNNkQxCjR49nNNwkNq/ohfk0vxN8AAAbTgD+P+rZGxvKjVuPFl/SHFw79Q8pRZYc GGHWz/nz6a+gHOgBAIIwkkLdl9xENaQnL55pSabU6elmv//Wh6OPU3SzqbkLwsAH BBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQeMV9nelcFvNHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1LX3TDdqTPgO6UfZatRJnhhVDHqX0qsj wj0Ex6S/hp8WIQS/wxpp6pR064n8zC54xX2d6VwW8wAAIZYBAI6nBy0RGKVi1WFt g+o9sfR+5URGFh6zjlvzsjw3QMvSAP9HrAYh0Yt5PdHel49MtS095G7Jh+ilJdjN +7p/8U8HDsLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJECr2o+5ddfo+RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ78FNDiFSHgux5SgOe9n kNNxuK/3MtFwNQkAGQ64lbl0FiEEkKndPnchwiGejXTcKvaj7l11+j4AAL64AQCl EqkMXYqittNGzzX+I48Ukzk+gtroNw+kM0BEcWAEYgD/XsK7ICtY9igwSrzx/YoD 5EfSG/RCz9jYvr9PeShv9g7CwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRDd+ned kcaYlEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfavatB YW2l/MHXbHSewaMZcKuyrLpjmY3iL8wI+uiuzhYhBHl0wE6NW1QNI81OYt36d52R xpiUAACkBQD+MfFCv4DltllCa6kKzk0r4UShXXG6TOA10xQWEbL7UQsA+gM0fmop x4ZLK9Dw+oxf5i0CGYBvyvpX9ufgecQ5v6UPwsAHBBAWCgB5BYJgKGTqBYMJZ5o7 A4VkeAkQCFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnRCclu0e/pVXfElTa8/SJjybkwLsiXB3VzvU5qxuos0oWIQSiwZ3XyZNf i0ebXQMIU/27kA4FsAAAmugA/j2RxfbKXuYYSuD3vO2ORn1atNnvlb+Zef/907xr /157AP49A6fUxmz9qhM+B6g1r1IKVIRoAa0DdNe/EwWxOZ81DsLABwQQFgoAeQWC YChk6gWDCWeaOwOFZHgJEBugGVBr5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZxzJPsjmTOM+Z6yqVhHKQWAEfGZxG8OTILzB8bVGyQ1s FiEERtL1ztm9PWOhHd/uG6AZUGvmf7sAANUjAP9iWGbIin+/tdXzjuCZZydQ9vsr uXYxx8MEJRZgnrJcXAD9F31XeWuXw1QyUdm1lhxCOztU2SBRQrivjuykzrTnDA7C wAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRB4PxqPxyf8PUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd8yZ5WrrTNhywWoo8WW/jJuPkuWiXS HW5ifhvrLgHIVhYhBCfjX+tIbL9bFmACcHg/Go/HJ/w9AAAIBwEA+xcTB01JQXC/ 5Bb0MSCpNMmw9nnbKm4k4zR394TQLccA/1wIRTKbK5SuZL9vJQmwQYiV8hbfh1T+ UO+D17uKPMAKzjMEYAlsyBYJKwYBBAHaRw8BAQdAZv6IAKwCU5j2HvuwW8JM0CV1 vz2gMFfM48s3r2CG8lDCwMIEGBYKATQFgmAJbMgJEJZJ74Gu/lFiRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/JpvtUy4fYm2ygn4G/WrJ+y O60hMdS+Eydg98WOU+ijApsCAh4BvqAEGRYKAG8FgmAJbMgJEA6GAe0VTMYtRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6645J7VdzJdSvMt FyoBh+A51TIqu0VZOUB65UA5sOQeFiEER/ofLQPHbgEUZUuSDoYB7RVMxi0AAIcQ AP4+5+GerYVnlws2UOnv0y8azKIUxr+1J0/u0LxiK8RHJQD6A0k+jL5oYMhTs22I zum3/fz0Du/bS050urJUs8fxEg4WIQQl2OqriUcFu2TUpqiWSe+Brv5RYgAA5asA /iUJBEVIEaViVpES7BY4V8Hz192+kcf1vSeRwbbrzRBGAQCWdTKWbG6/ipmt8MfO ILw5hQSzaZnq1gMH5OZ6Y9NUAs44BGAJbMgSCisGAQQBl1UBBQEBB0BDmaee3ZzG wrBQTNHSBQYjYkQxssElzVH0FcgEIiA2SwMBCAnCwAMEGBYKAHUFgmAJbMgJEJZJ 74Gu/lFiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1jn c9c9fU7dSHcvhzNds8cjUDS8MhNBhdeakGISUCSYApsMAh4BFiEEJdjqq4lHBbtk 1Kaolknvga7+UWIAALeLAQDJzHmkD7g9fqO2wVrioK+0lPSAR6mKoQM/5JaSZlNs /gD/ZCywrW+e3G/B6TTBrS8fAOuOMbs5mAeduzm42N2kmg7GMwRgCWy8FgkrBgEE AdpHDwEBB0COMIc+jVVaUatpycenGIA27rpDJVVrbcuZSRXA0cYfTMLACwQfFgoA fQWCYAlsvAMLCQcJENyS1l+vRlMtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZyvOXSI/amp8DMcxT4LFFGZ63Ld2hN+fG1jSR7cZNLBGAxUK CAKbAQIeARYhBJfkCPdqCJVGEEXXWtyS1l+vRlMtAAD8RwEA1fx3pbZoPKIrKrte OARlxNYjeibm8O1VNBKrbHcgR+8A/1yszX176Etn4TkqK90oDb/Cpsm9v3QTsVVO Ctw2b5oGzRE8YS03QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAlsvAMLCQcJENyS 1l+vRlMtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxaz knke3o6PAh0MFczbRWO55JQzuSgIul20QvopLPZ3AxUKCAKZAQKbAQIeARYhBJfk CPdqCJVGEEXXWtyS1l+vRlMtAACSeQEA34XiqYnnNTCH9/NiCwecdTmVSY/xY9Wn tnIEgW4uH54A/314N/VzxLpzL8AEJkYPMUiSw+8V3wnYZ/rXiHHCuV4LwsAHBBAW CgB5BYJgKGTqBYMJZ5o7A4VkeAkQ/txuXEaqqxNHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnXqb7YNNBUif6WUPm2auL14ycMK6R8X+CWzv6 M54hpqIWIQRHl3drJZj5fcnvlMr+3G5cRqqrEwAAh5oA/1W45lciAhlBQN+egMh9 pbOrYhcbtWHz97v4I20HYZS3AP4r8KnAYf6ZGBec77YDMbxMRPSRo1DIWB3IYobW x5ipAMLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJENQ3mp6uJqI/RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9uIHn05sQFAgysD94QuJczN uwkTtx23SEmW0Fh3zZPyFiEEL5DFxTsQ39T33H2y1Deanq4moj8AAB7nAP9oNvAo X65JDrNSTJz0viFNk34kBGy2YUzygfKO7AA90QD/UmtLBOzdpu3laSi47FKQGRu7 y2XV0fIdqoAsyujptA3CwAYEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRADklPvDrmR BEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcyx7DnF6kj 9EOYikrEI+L4bbl6P7dwTDK7fZ96uJ7lPBYhBDyTBEcQjm8aqSHZwAOSU+8OuZEE AAC1OAEAmmZgyEwokWwBbW5cT9TVxdSDNAARToxT/nyp5WwANSEA+Ldh8IV58FaS S93WZf8hdff5pYl6Agv6+zIvz/nRpw7CwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4 CRAlwsDug9apAEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfChvG4rzJzyPMBY9yj/vuIPqmU70MC90M1qsJrKTPxSBYhBLkn0G2SE36zT8fV pyXCwO6D1qkAAABndQEAou4MB3p4/v3BfZ64YiGg0wqW+nktIuJ4Qm16vNmevhsB AJmzg5XUhhSkcTat0ZkX2SnGOaIc+jZX7bKOa5xlcq4DwsAHBBAWCgB5BYJgKGTp BYMJZ5o7A4VkeAkQ+mHnPG9dy0ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnzvIw26CJo5X3fQcb1OIXXnbatUCxxeWcEk/S4f0rJNoWIQRT atViuSF7mDlmIFb6Yec8b13LRgAAFRgBAKV2y4ppxW0XSPy86i+5ADJbCj4CTO4a 8PvRQnonXO+ZAQC6nFKijS2CdZuqEIgdvfbRma79BewvE26PJdJbW/0ZAMLABwQQ FgoAeQWCYChk6AWDCWeaOwOFZHgJEKltmR2kfAo9RxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ45kd7uAn7YMljFTzcNhJ+ehmPv7c8uMuKmP SVfXz9NGFiEE5htjHVZmvtycJU55qW2ZHaR8Cj0AALMKAP9ApKXCay12O9+nJSos odmcNJArFrQmhNesNXsP2StU2QEA+PkjROdqcPklM+PpAfQTY1PtxM+1dslSUL3L CR/mlQTCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRDd+nedkcaYlEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc15hz8HRu/FlKk4lGxYvNO tNINOhL9e06rP+swJtKVfxYhBHl0wE6NW1QNI81OYt36d52RxpiUAACACQD/TmlN h9Kd/wqYAow2V1QBml8OXKyGj5MeYP41JpVTGJoBAN8SRjjGYtnOxJHr4vv9zMFc 0bXMqX3D3D5qn/m4jjQGwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQm9VcnhM+ jL5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnbxMGunhs R0wROu7mVXbEXNUYtuzDHIWYV1a8rRaBaP8WIQRDUlV7q3P/lbYy7l2b1VyeEz6M vgAAvu4BAL1KhXMgk+i+ef7vQdM1D42Zvgekg2of0jryAsfPl2/VAP9ngD33hiy7 /Zf0c776GxKzfatV7O4v6TSElbPef7muC8LABwQQFgoAeQWCYChk6AWDCWeaOwOF ZHgJEBv+m6P0q9QORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZwVgx/8F+VgBJPOrqDuhiq0R4ZZqDBw7nkLi5x58dZBxFiEENjCC6e6yLlCt MD2LG/6bo/Sr1A4AADvwAQDPQEWU01cLlsNKldGhrxaYqsJpiY77m8/UxuFuKioS 2AD/UmmGtbMpn0/kKgMBgWBJAiqrGmrU/Mh1+5uM4/99lADOMwRgCWy8FgkrBgEE AdpHDwEBB0DKemSgeRGySJTXUhav8eZFR5PYecR4MRgCpSHaeYHpF8LAwgQYFgoB NAWCYAlsvAkQ3JLWX69GUy1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnrYnmOtZtE9Xeh54rF8c7wl4osGTevSscXnqYdQHD1S4CmwICHgG+ oAQZFgoAbwWCYAlsvAkQ6PmNeRS4+CpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnaD3Imu0Q/ykaXuEVlbD9BoRQWNtSUrPgvjnVRq5FzIMW IQQu2Uobzsak2YjJL/Lo+Y15FLj4KgAAWq8BANbrg2h9LaTN22hEor6FmAjvQq// jdyh3o+KXpdR/trlAQDQBcSvae4rVB4Mfu/oLYWwTrj0o7s46cFh3WNk0q9zABYh BJfkCPdqCJVGEEXXWtyS1l+vRlMtAAAuTAEAgZMxpzMQw0PT+M9GCf1RqE0qTZNT cdeyi+O9JOTPEVsA/2AIJ3hylZYOvYaYb4ylJaai+lK2Sm/ccKweyjJTy+QMzjgE YAlsvBIKKwYBBAGXVQEFAQEHQJ2Zzn3rheb9ShhqjiI5fiOo+M4Yfn4Eg5Wr2q4/ q01dAwEICcLAAwQYFgoAdQWCYAlsvAkQ3JLWX69GUy1HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn0Ia9smYofvg6FPCekatlrWEyc7yX/38B vvR2sH9lTQMCmwwCHgEWIQSX5Aj3agiVRhBF11rcktZfr0ZTLQAA7Q4BAMKuUW8R c9JS1P5nF3t7ZC5wnQBE28Rk9pxK+hKnKbGvAP0Sl8YQvhECr+tksCdBSC+joMCa fNvxmhSGdd9NBozLBMYzBGAJbLwWCSsGAQQB2kcPAQEHQALU3bYqtSSNfzDIAzPY 4OcYbHTVnP/VO8sFJaSSunAawsALBB8WCgB9BYJgCWy8AwsJBwkQ1Deanq4moj9H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnzM/15yIeYlc4 JPku/lHRdpp2tb30bwh1HhJJ6+Lh5XQDFQoIApsBAh4BFiEEL5DFxTsQ39T33H2y 1Deanq4moj8AAAQFAPwN8I5rrjffdayh+INtzloEnArqvEMooUJ21gElABhlBQD6 A7Yt/ySwBnhUwSN9oXD9dZXLfbslzbAavtTBRwbjyQPNETxhLTVAZXhhbXBsZS5v cmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ1Deanq4moj9HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnadrlAWM+adkSQaSy3Jfgf2xq5K8QnUzK pc3I/q5OMtcDFQoIApkBApsBAh4BFiEEL5DFxTsQ39T33H2y1Deanq4moj8AAL7o AQD4X9BovJrfUhB9iHblI6ESpoz6/MyUBPKVIgIHQWNlGwD/TrbGoIoUkNQUUMGZ sCn4ymllMnJBUV+tjz37dePFfAfCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRD+ 3G5cRqqrE0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf0 uqJCqUNQmrjpToN7WyhvMIUx4fwdpsnrRyfBr5siXhYhBEeXd2slmPl9ye+Uyv7c blxGqqsTAAAOdQD/bTigcCT1VB1V/083em90vyIN/1Ek17MxCp+igwjL6JIBAK5R bAnpDVRHByFj19KG9cfLwD9x84xHl+bdpo1URXkJwsAHBBAWCgB5BYJgKGTpBYMJ Z5o7A4VkeAkQA5JT7w65kQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnB9E4ViU/eAekUlc82NU0SFRbi9KBTUYsacDDXlcL+KgWIQQ8kwRH EI5vGqkh2cADklPvDrmRBAAABdsA/RL5orYwhI+666kOKuj9gJat87ILbYKek02G Hpv8Jt6xAPwP7f6ohdIIZpDwql9bmdGu2LeV7Hqpu4Rkcc0vA8QoC8LABwQQFgoA eQWCYChk6QWDCWeaOwOFZHgJENyS1l+vRlMtRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ9OFScEv01TCEspzZpmtJsDsOWV6dEZIvRN+8OVR hbjbFiEEl+QI92oIlUYQRdda3JLWX69GUy0AABKbAP47spsRsUrI/LL8UTuXiRsM eKgFVGmoGUiMst8ZA64bxAD/dezdX401To6WgRuK5VSbLlg94EXj5XKiERGiT3TY wg7CwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRD6Yec8b13LRkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfHlZ2YcPyZTL7sYhNEajAX6bQ2 A5tGSPoCoyDOmiOxphYhBFNq1WK5IXuYOWYgVvph5zxvXctGAABvWwD/TrAVd/xH 1+Y2hW/W+zd/9yQS64oDgLuvVBTTo7Oa4nEBAP1uBAjUcADQnB57gBASII7SP5IA 96OlKv3VD8oPeqACwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQ3fp3nZHGmJRH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnYAMBd2dyD/XB YYFbZRyKsjUtgZxcxfEw1CbCswLEn20WIQR5dMBOjVtUDSPNTmLd+nedkcaYlAAA 720BAJlUYAyyHhZFOyg+MttO9t/4DoAQDSmUe8XQH6sjvC3MAP94shfqHsC49pV1 cJm9+mdlVhAzBjGYHKebG/qPw/ToBsLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJ ECXCwO6D1qkARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3nUfBp6mm4PT/QcKFFPUcIYRcY0dGwEk9JzhQc3lkUYFiEEuSfQbZITfrNPx9Wn JcLA7oPWqQAAAPL7AQC89/sdPiFOTPunptHfjGiWytDu8tLD5Kkqq1Ve5652yQD/ Z8Us/3cvmPMzmnWJjsPitv2CPupRY8uOsOzTG1bH9gHCwAcEEBYKAHkFgmAoZOgF gwlnmjsDhWR4CRAb/puj9KvUDkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcQFSqd5DvngitCGoIZr0FtjaOT5iT6Dyq6DXfEqv6MOhYhBDYw gunusi5QrTA9ixv+m6P0q9QOAAB8WgEAxeYSIjoansFrOOhMpHaOnq/SX7dMCDDd +NwXsatvSH4A/jB+59R+aMliqdHO1Gy3DSQk4grhb3vLmmy9rLTHAJANwsAHBBAW CgB5BYJgKGToBYMJZ5o7A4VkeAkQqW2ZHaR8Cj1HFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JneHhk0gxRnt1f5pRnhidZLmm1r+A3MlXlgSN2 y1YgiRYWIQTmG2MdVma+3JwlTnmpbZkdpHwKPQAAYQcBAMr7ZOm2gRPnlIEU7CVK U4OCaph2unaAREs+Hbw9mGQSAQCQoxFkO7oz6dvAWaDOZPRXbqnWb1G0OPqyF2q/ rQqIBMLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEJvVXJ4TPoy+RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+UkMtfqxmaXRvlNcZJ9eZ3v tvtnz/f5bLx4+fyVxo5mFiEEQ1JVe6tz/5W2Mu5dm9VcnhM+jL4AADKaAQDjnTNL 8Qbax8F2cFdtWofKtXAtiZLCht+QkCOpn363GQD9EawV9sOBEngnC/2YBfv7vHoc ZHP0ffMhyWupsRpbKgTOMwRgCWy8FgkrBgEEAdpHDwEBB0DcXTM/9ZB08TMzG2RF pinZID7BZJ14AndGEm2wuIlLYsLAwgQYFgoBNAWCYAlsvAkQ1Deanq4moj9HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEeptQOXxll+QaGeP flXrGK9QnFg74v7weomJmo1GJmoCmwICHgG+oAQZFgoAbwWCYAlsvAkQXMw69GAc WWpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnPAeBuTlI ClboKcK0rrAt6Yz92kjlMdSWqlXd9foKqaYWIQSgiwW8v4nCMwa5CU1czDr0YBxZ agAAt2MBAPoZ1JTzOSUBEl9+z5znydko536eytOuHC3yIvmrCV38AP9zI4sJ94JY 1SlxkweotFbVkFIaBJ4dXhGAs4qMjkPbARYhBC+QxcU7EN/U99x9stQ3mp6uJqI/ AABTegEA8SvHoHkXppGrKr29TPiBL+d5MTiwn2fJz4r7qC7gzPQBAKEmwpeT0Bxs yHp2rhTR7OqAFHnJFJ7FCpRbHxlDo8gAzjgEYAlsvBIKKwYBBAGXVQEFAQEHQND/ hFwbMaRR1KyVZtyQuso1kDGvOS/SiqAOBeZplk8rAwEICcLAAwQYFgoAdQWCYAls vAkQ1Deanq4moj9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnpbY7QtusSEVOBBojPhN7VD80/P+Vk2E09CKYJlQ+XEgCmwwCHgEWIQQvkMXF OxDf1PfcfbLUN5qeriaiPwAAO58BAPjT7ZBvs7QRa4Hf44ChC8BPH8n1SWmM4trE T2T38QkHAQDgpiQXEw8J/cAVz6+D3K7D0nQCBC9wGe84YkpdWSw8AsYzBGAJbNUW CSsGAQQB2kcPAQEHQJezGaDSLZKzZFL+wWrDdxsfyLnacgNLE5GuAOkwwAU0wsAL BB8WCgB9BYJgCWzVAwsJBwkQ1F7gIm1d9x5HFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jn4X8yy7BA6KTSd8HEKbwFaiwHN8HKg7zY27/VUlWL iDUDFQoIApsBAh4BFiEEtCr9MLsb3S6567241F7gIm1d9x4AAFMWAQCCGFfUWP1D gpuORzRYfGkeC9GcYOoT6O/dp6ad/Za38gD/Q28IwujpOX75uoH8jrnj9lmR2zfD kdz7djM++HVQ+wTNETxjLTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJ BwkQ1F7gIm1d9x5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JngTbD3+odpJSRGkI58S5LDyUb+MuUmQ7fgsT7nqTU3lgDFQoIApkBApsBAh4B FiEEtCr9MLsb3S6567241F7gIm1d9x4AAKO9AP4iZ4Ga3Qybx6MAeI93ioJCa7Z8 fat2YSAS8hKl4uFPTwD/YjNNPljPkIPxoAHMrR4sTml48hS00TqAgI4jnh6aIwXC wAYEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRCErdsHoQV+nUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJUmcMJjd1rtjpZNhPQO38SI79qnG1 NDaEc3K8/kWnKBYhBCi3SqfFF3IcOayCh4St2wehBX6dAACS1wD4njAmC7umQ+Z9 JL+FqZmsejsBEHNre9o6dKdKlyv2FAEAq8wjcAz53qFQZd8YJ/SIU7Tzd9XR3x2n /Y2f7+60KArCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDxxcwns9mX8UcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeI/6F5qbTZ3/YrnH4/ e0azqjKnGzHvo/Pro5sRCL3LUhYhBE7WpTG/YlHnw2xFOfHFzCez2ZfxAACLxwD+ Nq2A3+9tXKG7PJkZ5h0hL8UXSUaiQJZZrNu1Fo/WlBEA/2ZSlIRt+WTKsGqxhgRM an9QFNWJ4P/hqbLt7sQ8TiMIwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQC6zT jS5tK0NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn6fY0 U4QFWp7Q7DswKLoqTjtIKOV26wiwJXUDMVIROAMWIQQPv5pIpavlygCU7kkLrNON Lm0rQwAAPDAA/0z3ZKJ16eNRMMnacA5QnKuStyqWKh5iMFliETPXsmP7AP9+4AIH Npla398SB4JC/wwr1luPSFksxQn4PlPBZiFrDsLABwQQFgoAeQWCYChk7QWDCWea OwOFZHgJEDrDe94xvmWhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ8QZWo5EHLtvp44apADRiFSN5+7nEw2YBlqWseybva/SFiEEVow3YiNv vHaFS9TmOsN73jG+ZaEAALh7AQCGPKpGODvUeKh7HYEvGszdBPGYMKxwUIdTYSB3 xfQ3NAD9EP7su3sZDLHOYZeCK/PtAgXGmlmsNvjhu8wIokinugnCwAcEEBYKAHkF gmAoZO0FgwlnmjsDhWR4CRDcw6J0EK4qPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcTfazaamsFl2XVteuqPxCMA12y9gtUcfWSeOxyPRxy XhYhBAxg1DTVE8RlvAdCqtzDonQQrio+AACV6AEAjr15Pc3T/XPzaG4Z0orR22OZ HSpMKxvOUYKXmGWpPkkBAJuussSlSNOvqC1SZaPwrU+rlHwEySIlTh3BQleZATQH wsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ7xAwNgMlvRNHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnwzpRrNh5UC7O63oWJ2axaWmw5P5D E4lR6/WXE0SzXjUWIQRscAQ+GQNb1agFAETvEDA2AyW9EwAAgbIBAN+DpY1fOzSv 9l7tgKka/M5SKZFWfmOYBrwjXsUrJwQQAQDD6M4ad01n0Cy19V1QoSb4C2oYfZW6 Az8mMzQj3K9BCMLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEBCpuzAjy/VYRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwjadNyOxC5h1zNs GBdqhPUetb++O6jJu/2EoAk/XnibFiEEvjfbxGr4BCid5oS9EKm7MCPL9VgAAMYI AP4jAJvnaY0tIaj8V0MYWdtkCx3otrGmzQ5dDNLHEWDJMQEAiBG/RDzehmSILvyg MXjMONewGx1Mcl69YNB1P8fZugHCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRDN zBrIRkyP5UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmey Z7ZGkglWLcHU9o9dwG1amfuujoxzohZ0TbzwrKYCthYhBFJ3wU+dN6D01hXdnM3M GshGTI/lAACOvQD/XZdJOLegdY+z64SdMgXHnrByowPqbWKDfh3UQSvMIGMBAIkC nl/B1QPiAEJaYpGQCrATwbo/XbH+1X7QmWxyowgLwsAHBBAWCgB5BYJgKGTsBYMJ Z5o7A4VkeAkQf62xw/77/llHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn1nivs5hyUo3Wc1ECTQO1B+NSFrZNmt4yLPR+0lIy8WMWIQSgzYdY LCF0PA4wY39/rbHD/vv+WQAAjv8BALkn/KgFdatMASlPyry9gacVJxDcGAqdXGtj AXeRUBL7AP0XF28hiEfD0m9E6ebpxck24rXvOBSZF7Id3VSXu7x+Ac4zBGAJbNUW CSsGAQQB2kcPAQEHQL0pw5BsGLMPPWuvgolz7BqDK9JaFvNvQinCawwnOw3bwsDC BBgWCgE0BYJgCWzVCRDUXuAibV33HkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmf1Oi/V9Hp6DxjxBr/Q+AGrzRSKYUxkUdWFqt7Mq1L2SwKb AgIeAb6gBBkWCgBvBYJgCWzVCRD8Ybz3afkhGUcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmflLSAPDRfTNugIkCoP6WH7/LMgD/a61kPbP4Xz /rAKkBYhBFgxsDHIeE5poBL5SvxhvPdp+SEZAACtkAEAqhoKvZHonh6mSOeuOnFk H3I8jxIHp9PwpsrBEJNChAEA/0VoeZTKv6vaV1YcGfIX2oGJffwYcg/EWOVbOcNN yo0KFiEEtCr9MLsb3S6567241F7gIm1d9x4AAEu3AP9Cxx6Rz/hZjk4MeUMaTRFm boKFvFPp5w68a3RT4EG8MAD8CEzTUrVuydkbuR7iYZubUt4snPwO2nbRjyt8VEn6 /gbOOARgCWzVEgorBgEEAZdVAQUBAQdAq8BH/Qd7Px2GiKKD3bUoUg51ybFGEbQU TtE59hkhm0wDAQgJwsADBBgWCgB1BYJgCWzVCRDUXuAibV33HkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmccTBwaPFffb3F/q3KE33XlRj1Z lOW53XithckzCupsoAKbDAIeARYhBLQq/TC7G90uueu9uNRe4CJtXfceAAB9lQD/ aJd49HjjtsmRkfG5lqAzmC8v6XZ6oz/YWWkyd4CkAkYBALROqL1VYPWZIoLq76wV URIOhBQ20SvlSw915j4sVlINxjMEYAls1RYJKwYBBAHaRw8BAQdACalkl8XPlfB2 9BffkLCZY0c2WlNIBxV3O8m5sh3K+f/CwAsEHxYKAH0FgmAJbNUDCwkHCRCErdsH oQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmewF/Nu XfK3jQ+XXvXEixMFtMYfgMhfg5PzLKNFNd1iNwMVCggCmwECHgEWIQQot0qnxRdy HDmsgoeErdsHoQV+nQAA83oBAJqIMJTmybQniQtCNot9s+3GZq4raz1NJkZ2ke2C kcmYAQCG17WS1v6zNMFOXVWwbjGJ7KPjENrQx3CGQ9DkL5P9A80RPGMtN0BleGFt cGxlLm9yZz7CwA4EExYKAIAFgmAJbNUDCwkHCRCErdsHoQV+nUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeWeR4R966uxhhjGnjURyPuAeiB o3VhBpLp2pPCtFLWBQMVCggCmQECmwECHgEWIQQot0qnxRdyHDmsgoeErdsHoQV+ nQAAsocA+wT3aIvEChiN3NZKFULfz/q5b8JteptSckG36kSLQToBAQDnsnH59O9D Wb2nsM3tB+7MxXLFO2mvm4Q7A4SpS4CNA8LABwQQFgoAeQWCYChk7gWDCWeaOwOF ZHgJENRe4CJtXfceRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZx3U6/aYAz32l8fo0UpIc/0TKuXLLED4qbxGPm7E5EHzFiEEtCr9MLsb3S65 67241F7gIm1d9x4AAOMzAQDL6twr+hiCJfoGUA6gIsPVFlz9HwJS7YXEnzas9EzZ KgD9GTT6K7ucoB4Pk4c+CNmgbD/GRBvVWIXp8kFte/dflgrCwAcEEBYKAHkFgmAo ZO0FgwlnmjsDhWR4CRDcw6J0EK4qPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmf1vDhhfC9DTQsQS56bDND2jakN8dluULeotO129bQGTxYh BAxg1DTVE8RlvAdCqtzDonQQrio+AACYfwD+MRdUkJ+ZP6M18tZST7D0lI+b4ita 2frgSJBh8KYYlcgA+wcr5YYxuRpypapU8MkIUNZN2FaK9b0xSTvgLoQEYWUCwsAH BBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQOsN73jG+ZaFHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnOe1MdRGaw9kFtJJp1TsY8pU9T6oWYY5s 0HizK1bDxW8WIQRWjDdiI2+8doVL1OY6w3veMb5loQAAzNUA/0mDajtd6SoRCG6L 1388JvscYTS/uXNQ17SSpeo8C/kBAP9ZcUIQhePC7zy96vd8wRJx373a3tSiz7wj 1M9WCkj3BsLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEAus040ubStDRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8k5jRhjC4AeDueD3rFH btaxh0yiOOfmiWXDpWE+px5jFiEED7+aSKWr5coAlO5JC6zTjS5tK0MAAGcLAQCx enfyuIQ50yY2YDEx8yDwH/uwIcOwgjNjWqnO4y3pKAEA/vKmdweIM5d9lxJwtMpS HmSS3KdzuEbzGGiBHeWLfAHCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDvEDA2 AyW9E0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc12q3P Vz5C2tnyT0wDuRZd0IER7fZct1+UQHQ+HxalgxYhBGxwBD4ZA1vVqAUARO8QMDYD Jb0TAAAHUgEA36iAhSWKAMFZI/CHN/UCZjyMWMlNwft8dIRO6JblLVMBALkFAi8n 2V10smZBw7Xvcp/ueTAktMuiklEgMQdSC+YCwsAHBBAWCgB5BYJgKGTtBYMJZ5o7 A4VkeAkQ8cXMJ7PZl/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnzEraOSJn3rWAjZ7hJ/aq4vmz0sBS8yf32Pzu39urQH8WIQRO1qUxv2JR 58NsRTnxxcwns9mX8QAAuv8BAOtPhPD+NPoL88myuMC8TXwdFpWBkzep5R8a2QVB g1hFAQDP+HXe29NvUzK/B8D0ZpFk9rdV2RRpVtoCD/Guvz4QA8LABwQQFgoAeQWC YChk7AWDCWeaOwOFZHgJEM3MGshGTI/lRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ9zOaG/T4wJUXP8KlqKufadKTtT5t1HaewPJWAnF9nwx FiEEUnfBT503oPTWFd2czcwayEZMj+UAABgDAP4l34f5dkvhHfbCqs77Ma9YavV1 emfxB8GU00vABnINwAEAwsJVsDTfBZKDfwnan7kY7n2JJgt7/LFKXfuYpIaLyAzC wAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRB/rbHD/vv+WUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf3lzZPJyh7F7VBnM71+pBr+GIw34lj LGHDTMTMUhuk8xYhBKDNh1gsIXQ8DjBjf3+tscP++/5ZAAB+cQD/TCZVnNw1z1Ob ZoBOahq71j+9jeHTTiSGDBhvpL0iRgUA/1VvWtApPsKt9yKjYRDqSNAgXzN1fe5p 1D5uxVYUdPwOwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQEKm7MCPL9VhHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnQj1Pn6us/jETzlUd br+pDauEOrI+MpzXPO+rlV72668WIQS+N9vEavgEKJ3mhL0QqbswI8v1WAAATo0B AKti+/9Qt10x/sLMyYQhmNnDTBzGJeQbOlxlSCemMJWvAP9Nb8jl9HvcEr12BZzj HNEgc+yurTLospKptsHQoDMaAs4zBGAJbNUWCSsGAQQB2kcPAQEHQHJerObjQ1bi jpPpYwnjWHQv3kspt6KPB/2D0VxDrKaswsDCBBgWCgE0BYJgCWzVCRCErdsHoQV+ nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmewBXOBGbxv 0kLIMIkisvDhbA4IZ4y3DAhEYAaPleLQPgKbAgIeAb6gBBkWCgBvBYJgCWzVCRAM Lhw8jgduMkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfv oBGK2ndhkwFFLASoozuzRBxGr2KxLJekk/5dICSXtxYhBDpkQtd6zLS9ndEZ/Qwu HDyOB24yAAAcxwD/fiR5dHPihTBXQ4I/uZtzp3v8AsapjHHYmROK3wGTMGEA/3PW Cq3mo4AqIvDXBtsfzErwFq4B/o7Z54yoLqEpjG4CFiEEKLdKp8UXchw5rIKHhK3b B6EFfp0AAB0cAP9LujpAic+V0olhAwzZNSPfXsfdQiXqA5lpijmezX6U2wD/drP/ MlU4rpTAkCT424abtHN2LkBtC1mEj5lOP+up5QTOOARgCWzVEgorBgEEAZdVAQUB AQdAm+Z5878rfgOuaRN8/POBEhJXM4bt1SoBpmSUgR01Fl0DAQgJwsADBBgWCgB1 BYJgCWzVCRCErdsHoQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmedpDZFNYIBJaLr0s7rmORzHiYM2NbHC2FFtmpYoa9qCQKbDAIeARYh BCi3SqfFF3IcOayCh4St2wehBX6dAABAagEAnLntLHf6tIEQjzxGCpT6m8kRc6Lx RKVL4Hg1NSs5cm4BANaCjeORlg8EAg4pcQBnFYdxM31dae41Tve+A0SYWbQExjME YAls5xYJKwYBBAHaRw8BAQdABYUyuy0voSpJMgn6sy2NonCbjUqAgh8qaUmpnmWR pqXCwAsEHxYKAH0FgmAJbOcDCwkHCRDuR3MOXR1zkEcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmdLQ5wr/mkJdZ5TpGnlwZhvdxblG22N+JrV FyiXkvH25AMVCggCmwECHgEWIQQW4QegaIbGweGkR8fuR3MOXR1zkAAAqbcA/jr1 8t+R+NulzvJiMKSusPtb/XZ5ij2HL065t75xR7z7AQDDe4F0xWydEqEazpKmKkYY a8NDVHMOQfeJUiL/cIhjBM0RPGQtMkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJ bOcDCwkHCRDuR3MOXR1zkEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfVdh2hqzEvEartleG/q5U11shjwbYAMimEQXNRKWJWogMVCggCmQEC mwECHgEWIQQW4QegaIbGweGkR8fuR3MOXR1zkAAAHnEBAPK4zkdItUvvOg/Ny9EP IBXbehjsE7OhV02ISdeoNZ85AP9sCH2XvKGsSxsBElwcVaGpkkVkFjp2G3vEyaSh jhUXDsLABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEFijgjF/VNfFRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2K60mrg0M29W+ji2NK2vGJa q30i1lZlrWjUt4OI8DzbFiEEz3Aed7ef697fiLRVWKOCMX9U18UAAIvJAP9WtYwG EOA9v+wGrfsUD9jw4dDq7xm1ikrRnh4jL3PnGAEAu9k7I3ulahaGGQOGxFvNS9If aKgg6Q517z3WOfDhmAPCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRAih3oSi2+r MUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfS3BbEO9rr k3HQy/PYJG81E6Y5j+Ko+I8xghgfue6llhYhBPMCuD6QzWrD48WdOyKHehKLb6sx AACSagEAncbqEVNQXZnc2Ftd13AZW6jri1JyIF4rgeXakesMvAcA/2ohrtZd0T3Q hxZKctmrXFPPv7KhI7a1Gdbg1HDe2T4MwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4Vk eAkQpU1dY7C/xntHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn5GZT46eiaf50XMd+/7N2PbK8Q8z5GW6MneenS8GBNBQWIQSjW9OupyNi9cOm EJClTV1jsL/GewAAcjIBANBbjKe3127DxRSZpEpt3JBnI/xIqXgNewVIQlQACRYp AQCXGEQXNfIGnY34G3qydLWYbmFHcIrEaDkYwNFwr/F/AMLABwQQFgoAeQWCYChk 7wWDCWeaOwOFZHgJENboZaO4j4iBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ9PuYFFIS2eQRBnePLU3UYrC9dnb70j74fuvF60oDYjBFiEE vmxXIe3LqBdMWdmW1uhlo7iPiIEAANLqAQDrp1DUCUA5FoQRuyH6BIh5fcXhO1TK hLdjqUpj3DRQAQD+Pv+g8xDZ55P5bkuQwKcx6SDE3noUhACdtIuL/NdVyQvCwAcE EBYKAHkFgmAoZO8FgwlnmjsDhWR4CRB8eoqCVBrwX0cUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmcF+NoT2H4CIRrc9bQo+TnRjMfit3JjdQc+ EwIfB2pXWRYhBMsJYcFqJinihVthQ3x6ioJUGvBfAAACTQEA9DG/N+HuO8hUwOKy SHukH2bdR6w8NKHnTYqojy5NAmIA/1LlETsmTVz+lr93esdxYsMzGaH99FiFWjAV MeS2AGQJwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ81CZAH792D5HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnsn/Nw9Avpr17vzYgSUfc JTThTVFpTMiVQQKbh35VJVEWIQSjceGgiu4ZVUvY9v7zUJkAfv3YPgAA0UoA/0Tg 2XIKezZjskbA1OBv/wvYDc/6N3VEXLFpv9wj9mSZAP0RzvtC1lttdqihGgC4jdyi JCTTzzCk3IkctpLFvRglCsLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEOrXL/eR QHiyRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/1FIo+5 WOp9Livz6lnm/72zuOAuLVixLf7ulkJak4QyFiEEeoDbUzC32QDVvR+C6tcv95FA eLIAAH9ZAP9dOq5wol3NCEUCCBXs/9/pPnbc6oXonvqdIs6hvkiJAAD6AkHSXZcF 0gOfah296WgiUz9d+Yr2gnqzlJsXKDrfVAnCwAcEEBYKAHkFgmAoZO4FgwlnmjsD hWR4CRAWaYJWHhQMA0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmfpkOTkzQLl9VV1WzDSGH48CkiqixtD39+Ged5EkND+eBYhBMJMwJEC0i44 6Dk8VRZpglYeFAwDAACRpQEAxZHb2xjLjJ7p7eGq/T+gUhBdbH0SoWahXYHgyPk4 9tMA/RffJqk3ZXQ4aWHTkjxsNPjvWuQa1QKoa2b8WC6Jk7kIwsAHBBAWCgB5BYJg KGTuBYMJZ5o7A4VkeAkQ/Z2LAVdFAgtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn9dfYhtbMyuJMoJEPCmig136r8T12SaEiyht2eab2sGkW IQQTyLjcICCcsOFVZOH9nYsBV0UCCwAA/S0BAMtZGs4EKzQ3WUjR5TqoDBvjBG3H J2GKISU8K4oDOFIvAP4hgkYQD+5UZgr1FzV/jQJJeMf9XPzxX1ZZh2G4oKmgAc4z BGAJbOcWCSsGAQQB2kcPAQEHQOrITLvRW0W5A+WE2ITbnduIiUsQNthp10ws1Uyj KWUVwsDCBBgWCgE0BYJgCWznCRDuR3MOXR1zkEcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmdaDTVCTPGm3rrkkVeB38u+6QehEoHm0Vb6r7KD uAwKrQKbAgIeAb6gBBkWCgBvBYJgCWznCRCRsJgZM7DhUkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfsUxku7HVktjorFEQRx6n/gU+/nhL9 Mw+lm+CP01vcrRYhBAJW3hHLpPZPVy0dm5GwmBkzsOFSAABxEgEAlPZVCHaw5Tye kVJhi2zIXjlis1NRscvUf3XGLD99RBUBAM4eKQQCpuqLD5jm6bk9YkqGtTd+k/XT sNPdUN8/SO4IFiEEFuEHoGiGxsHhpEfH7kdzDl0dc5AAAJVGAQCCmdQdlD6pI7aI udP8LN1PqLznVTJioh0NbacRG7JmeAEA2Csns41X4PlO66/19AUsqPZRJjIKlbrA RmXCWgQ9Sw3OOARgCWznEgorBgEEAZdVAQUBAQdA4XhNqEGOXOHEFZO/6fCvX48q 0hdzziusx00+OnVqDygDAQgJwsADBBgWCgB1BYJgCWznCRDuR3MOXR1zkEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdFWFgmz5IS55WDeQH8 7A944+r36nFvdziLLrQtMtpgmAKbDAIeARYhBBbhB6BohsbB4aRHx+5Hcw5dHXOQ AABozQD9Hqviytua2rC+Ks4SCBz39zD1A7TFCz8eDtnXp+2PRCoA/3yFvHmpH5fm +SnwP79ud0sADOFxYCDE6vqAIG0Sd4cPxjMEYAls5xYJKwYBBAHaRw8BAQdAs79L vNns2Y2vdZ0FnRaTfnHEAqFoRXTJ1/GJ/Bgcqj/CwAsEHxYKAH0FgmAJbOcDCwkH CRD9nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcpdNNdXn++mIxeHlowpe3iZHI4pUuUvvZoWkFmX3RMXgMVCggCmwECHgEWIQQT yLjcICCcsOFVZOH9nYsBV0UCCwAAmmoBAPAFjdlEtuIANmocjcApvw8kSiIcsyDr puJr0tL4BRIqAQDRBdnkg49dheLTQacElx+gpoRQSFdJYzNLK2honUhuDc0RPGQt NEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbOcDCwkHCRD9nYsBV0UCC0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfkyRcaEFgxEnmzAFhb vQb8Vy0aXfciSkAlfLQWUPpOHgMVCggCmQECmwECHgEWIQQTyLjcICCcsOFVZOH9 nYsBV0UCCwAAY3MA/2MEcaYBl8NMQTQL9K7rtYa02+JmNmxiRIRe60buX3/cAP9O WUEQYdUvAFYpUg8vGYNClPr7CfySRaeD2jRziFbYDcLABwQQFgoAeQWCYChk7wWD CWeaOwOFZHgJECKHehKLb6sxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ825hHSWQIWqsNxYfSdhHfpv53SZBIfjhg6qzuQnIgoJFiEE8wK4 PpDNasPjxZ07Iod6EotvqzEAAFDsAP9EsBQS5EQ3P7vl2YGzvmeMykkgXW2fX7jI FnFTVXYq+gD/a8hvy8vpKyehpXs5pyPtZEKg4xa2uyu3E9vba269kQbCwAcEEBYK AHkFgmAoZO8FgwlnmjsDhWR4CRB8eoqCVBrwX0cUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmdI8oN413BNw3u3XcTcWcNbjMK37xk+R086zE+3 HN39mxYhBMsJYcFqJinihVthQ3x6ioJUGvBfAABJtgEAhwImY1IPf9xGibFjivq4 2ZbTjXon11fJpOjrqmVsmUwA/jTd+zB//oqCHOr39NoiRZaEKj9X1JciGwoo7R9x YfoEwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQpU1dY7C/xntHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnczhZYZ+BwinGoJ0TC4sNw3rk s80G97MH7V4KM4UlpeYWIQSjW9OupyNi9cOmEJClTV1jsL/GewAAJzkBAIu1wXy0 1I2H3hXk6nG+dKk99TYKypZs2UKrQNe2h7GOAQDNWS4O5a+moaXBWjveGEPd7OoO vEnbBwXUfvYBVV1CC8LABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEFijgjF/VNfF RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9ZN+c9I8SZ7 zG9SMnzyzBB1/XGN9sl/G2BHxOAydiWRFiEEz3Aed7ef697fiLRVWKOCMX9U18UA AOIPAQCvQXQe/hw0IjS5v7DErHb4l5mLLxMbbNaxl1ikmudBbgD/YesMlXE09ftU W+DQ8a3WrmtQzFY++SBe156oXMIlrw3CwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4 CRDW6GWjuI+IgUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfmHJGTk4Gxp5hU4chMEa5qxL/P6BVFyUP0eD7VJMUWeRYhBL5sVyHty6gXTFnZ ltboZaO4j4iBAADPcAEAxOchFK7XHNHrWedwZe2D5ztKO+mNeQSPXfZVzh+PVRgB AKyENtfkFnm/DPC+0RCiGFeNZMxsqT2KsVB9tVZZ9BcJwsAHBBAWCgB5BYJgKGTu BYMJZ5o7A4VkeAkQ7kdzDl0dc5BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnM2aiNMb8UYAvdqr5kwaPEigQgpknhfPXtGe9xEEZGSUWIQQW 4QegaIbGweGkR8fuR3MOXR1zkAAAo9YA+gP7pXa4s9l4HVimQvUrC7u1elbnUE4V +nBP9TygxED8AQCLoi1HJqAakiMewQQ14tFzzbbYU894xqM22CeVsguvB8LABwQQ FgoAeQWCYChk7gWDCWeaOwOFZHgJEBZpglYeFAwDRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+ULMoiyzuaIcLVCz60+bTlRhSG+baF/8J+4 cv/QGZLyFiEEwkzAkQLSLjjoOTxVFmmCVh4UDAMAAI8TAP9DGenkRpJSwSB+1Bf8 NOnjLg8ve7CM7za64iqiQxrbaAD/XU4tAkFqNoJnUMMvlyqLVXnrmeGZWcW7Y+vB 2mgKlgrCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDzUJkAfv3YPkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmclzCNsK629ekuGiuIVG3fX 6cVmivAuJfwRGMP9XaKPmhYhBKNx4aCK7hlVS9j2/vNQmQB+/dg+AACt7gD/TYuv e4yIIa4ISWyqZ3CfoADm71Th1nzUxiPq4/6X378BAPazV/EQloBtZqkY7l6ZLsXm BgLYecZOZGi+fRo0rooIwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ6tcv95FA eLJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnqfDVjksG wFCg7rhB6vUdYPGvqfa791mgYhs9oIoIZaAWIQR6gNtTMLfZANW9H4Lq1y/3kUB4 sgAAOYIA/3GwCZZEsv7hzLlCC1gtCR05Q8M81L/mOGd/aTUQHWHmAQDo8b+YJrHq CLEZI52AkPQNR6lrpP7y3o7HegWS3FKEC84zBGAJbOcWCSsGAQQB2kcPAQEHQChl MYuyY3jEoN1T8puVLvU0dOvXq3Gs6bO1Rp07KLOiwsDCBBgWCgE0BYJgCWznCRD9 nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdE 3okYT9GatTw4FnDmIjbZUak8zX7/R+E0DjoudPPNzQKbAgIeAb6gBBkWCgBvBYJg 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 sAjCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRA6w3veMb5loUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdf9A1zRj2Ak7U8Owq/PK3vMq0u KiNXMwORg7DQeyk2IBYhBFaMN2Ijb7x2hUvU5jrDe94xvmWhAACR6gEA0RbYWv0q kDTxse7vdW75N7Q4ITWrdibv84616KWX+AcA/0qg0Minm6tWxQhbWswVkbxF8Inh c4/CnJBQVuFsTUUMwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ3MOidBCuKj5H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnfFS1UxLaBysv svl9xzU+2Sv8yYMtO5DTzR4r0IHyDFcWIQQMYNQ01RPEZbwHQqrcw6J0EK4qPgAA gXwBAPQ0fhj4c9xFnlt+Sd+8Yf8jtjB8Y4MVvnGW9nHGhvYfAP4jpc5xzJJIgXLL 0WE/mbZcEbLrWp7gflap8xlLm0aDBcLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJ EAus040ubStDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZwVliYHJQ7PAIGB0qRDKxNj7PG3BLSE6FFKfuYy8mLKYFiEED7+aSKWr5coAlO5J C6zTjS5tK0MAAOD1AP0QvSKd7fgVIANob1IkrBqVWoZVwKDwgIRWPiDT8ipl3AD+ OhLPd8bidvjk4aL4/qblayyaW2/2CEAyB7b1bPcEmgnCwAcEEBYKAHkFgmAoZOwF gwlnmjsDhWR4CRB/rbHD/vv+WUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdnh10d8nyI55vaYkgKTNdy3GM+fwyCHGOfSxCgeo48thYhBKDN h1gsIXQ8DjBjf3+tscP++/5ZAADQRgD/bGq2SRQRWYJrPb4uQSJG+1yXQwql9cCE ihW9k/Jh0twBALOjjpCDHMYW/x8tKgF0Qac7L+pHS3KRZ9zuYXr0JCIBwsAHBBAW CgB5BYJgKGTsBYMJZ5o7A4VkeAkQzcwayEZMj+VHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnJhyW5XbpogHGT1dGfwZLLZ7DAWTP0nIDNzlF ZmqpJ5kWIQRSd8FPnTeg9NYV3ZzNzBrIRkyP5QAAzv8BAMRlrThZHI3pkpaWrNnW Sy2TMrLKjm5bsQ9D0t8fqgFzAQDoJqKktGTcSmDhpe5CuCzmwoPLH41oWYaPHdDz wE/tAc4zBGAJbNUWCSsGAQQB2kcPAQEHQMfASt5xSgPnYr99SqgtvO5Yl0T9hv20 IER36rn0PkjBwsDCBBgWCgE0BYJgCWzVCRAQqbswI8v1WEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdxXFJnG3O8D138jzU0CS+giKg2IljT 7W7t3SKLfLBXhQKbAgIeAb6gBBkWCgBvBYJgCWzVCRA/t2j71RoUGEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcdXWxcGR4M/l92dGC3EHhu OqS5+9RuPkzZvAxdkor7nhYhBBGs7Q5OV8/BQYqIsD+3aPvVGhQYAAA34gEAgQZ8 eqYNlTXwmPKTpOtUy6ceV+oWE8QnZOc3sk/84HkBAImsDEKIm9vimi/xI03PJcbU 948RGd9odEHLzzi5fLYNFiEEvjfbxGr4BCid5oS9EKm7MCPL9VgAAPxbAPwL8SVY Y757pGXlZTq1w+tYy++Gfwg19o+/ipUHeXj57gEAztGmSEkGu9LUcVZG5qOk5Qq1 lMZvcbUhdfvpSfIYvwTOOARgCWzVEgorBgEEAZdVAQUBAQdAuKdBsBaUvZgi854W q+AlAPmKYFwKkXpPaWgAcpqTu0sDAQgJwsADBBgWCgB1BYJgCWzVCRAQqbswI8v1 WEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcPnb6u2+hH y5RXaO7sLfmYfZicfW0i4Umb4GyMu/9+dwKbDAIeARYhBL4328Rq+AQoneaEvRCp uzAjy/VYAAD8bgEAqYntPzlsE2NerUKmuG2TIx7D56JOaOkASaHUpYwtJkoBAOqd iDUdxUaQdEUzYvbRkX56iWOv2BFxMHvrBTLq4mYPxVgEYAlsehYJKwYBBAHaRw8B AQdAPWfVJOEzkbxTwMOae4XNng9hhCi3Ekpk2faA68m7sUQAAP9d2m92jJqWw7vU p7qmL+iJ1v3akWZXoGNUAS5uLRWy0xKGwsALBB8WCgB9BYJgCWx6AwsJBwkQpKqP iAulErVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnXWTZ uGHDtjoWDNjm2XCeUs4RLk/9yC5o2xhQwWjLCAcDFQoIApsBAh4BFiEE0rDDg1wB sMEgvFQNpKqPiAulErUAAKrHAQCthm7xYCAOtOqzC3HIbRTrXnYz82k7r/fjSeZf 3N5qtQD/ZEpZr74PzUnpPtgAHC9w5uGm3Iadi56h1SPMsCBYBgPNEjxyb290QGV4 YW1wbGUub3JnPsLADgQTFgoAgAWCYAlsegMLCQcJEKSqj4gLpRK1RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ29pbe0ZHqkaRlt4JXSSOAKH uAa6DW7OGKG0Me6TyPCTAxUKCAKZAQKbAQIeARYhBNKww4NcAbDBILxUDaSqj4gL pRK1AADmOgD+PhkwMm+UjpJ6bQZ9v2tRjI2JXILeLDOF/ZDz2i/6uqQBAOJU9hhD DB2IwZJ5E1UfXLxR4NJee7B1vzsQWEuFXY8Fx1gEYAlsehYJKwYBBAHaRw8BAQdA K30YiUnaTP/qjEtwiDlT2eQBA5cF4/cC8g8Qu8E8qAEAAQCsrW6BuHtkXVbjA7Xn 1pCBG2ZWkkmqaW+A4ceuOoG9QhDAwsDCBBgWCgE0BYJgCWx6CRCkqo+IC6UStUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdBKQ/404r2leJd IpF5wJBGAd+ZqWD5M7Pu4+uu/29pzQKbAgIeAb6gBBkWCgBvBYJgCWx6CRDj7Nxg x4wK0EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnfE2y +2EUvzVkMUrv1Aodcr77p2NRl70cBLywgwJEyxYhBCxjYeocCmhs5Sn1j+Ps3GDH jArQAAB8IQD/SeweFpSbG4Zr8TmqeN9oxtbtsD7XqezUUp5h9vmzKtIA/1evmuRQ wERmQBqLOBZcQBS72XJMrJK/Lfqgud3JfDgFFiEE0rDDg1wBsMEgvFQNpKqPiAul ErUAAI3cAP9MLJEo939eBCdKa6jmPId0Wf4kf2ZyfWe7Ye7664xMmQEA1BKbkoN2 3ovGmWBqlK/2GRr6HAK6PeFlqm9rZGaszQPHXQRgCWx6EgorBgEEAZdVAQUBAQdA 0WjFvTZUXMw8AkBXHM+3fhduE4EqmyvPsz++iK9lxnsDAQgJAAD/f5FgjejHdf75 AKwCXfXVgVi2GJZ4634SMAAy2Tb6gjAROcLAAwQYFgoAdQWCYAlsegkQpKqPiAul ErVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jno7pUJEW5 dLJ7/91tjubVsSiRtwaxAJQ5PzJDAEZlf9UCmwwCHgEWIQTSsMODXAGwwSC8VA2k qo+IC6UStQAAkt8A/3T5kUrH+HjSvRrqy1s1W8PfRUOZNifSYU/Ki/GOsrktAP0f Hdd6zGpz9zHobw+pOoUD8rwtzQ/DuuHOsQxrYAd6AsYzBGAJbQQWCSsGAQQB2kcP AQEHQNEaUb+6YG+THiAfKMcCWv+glOGLSTT2P17Amar70YBhwsALBB8WCgB9BYJg CW0EAwsJBwkQIitIDrQ+Cv9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn0yxXpb0W6QrzFygR4fhx0JE3hSHfFtNMkOoTI1XolBMDFQoIApsB Ah4BFiEEwP+u3vCSixgSZXdaIitIDrQ+Cv8AADiuAQC4b4Ntu7YzK4cncnlMXHxk 4VRzkorizASFKEXA4km1KgEAuK8TGBmXJD85pIq4j7X8XfSgiezYXmET8ORFiAKw iwvNETxmLTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCW0EAwsJBwkQIitIDrQ+ Cv9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnen9zZtlg gPIcaDRHFoW3HuwYdZ6YK2P3n/73F7ZqXkMDFQoIApkBApsBAh4BFiEEwP+u3vCS ixgSZXdaIitIDrQ+Cv8AAPxkAQD2hjXRytrQKCWDNvx7UBkA8+NK3XutI+YB548M ca/zrAEAuGew2RW9+OoO6078+fiDoHmBmzWiRoBvtgEJtBFetgHCwAYEEBYKAHkF gmAoZPAFgwlnmjsDhWR4CRAm7+DgNaxSLkcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmfas5XkVGOz2VzXmY8q4KOgK/0ZFPl+A0omwWoKWLhO nhYhBNHp+FzvYnFpn73lqybv4OA1rFIuAAC6bQD4imh7+AuQ1RhpmjPRVtey/8Mr rI4dpCCx4PRSgfM3zQEAizBycutEI1oaWCNGK8NtW2lrkWX0GuiAEvNM4OR4VgrO MwRgCW0EFgkrBgEEAdpHDwEBB0CSOrJYZ1JDKgyxrd0MvqKZI2Y7g+nPS6ol761D 7+ImGMLAwgQYFgoBNAWCYAltBAkQIitIDrQ+Cv9HFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnDynvXYrbgKWhTrAFJgzrzrMVHEQkJGaT5Vk4 tS0+idQCmwICHgG+oAQZFgoAbwWCYAltBAkQLFAsJ2GltyJHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnC6vNNaHEndBjrwxFWuBQ/PG/FbNe Ql6EVOsFsXTw2f4WIQTFOQMSYPQyzHQ+9KgsUCwnYaW3IgAA2PoBALgqPglGTZfy wiNp2HAl9FJGhw5RDyGjjatElrC3SkUOAQCVkNxQfuny9u3cPWeGVS0vQRKH5iIb jG6tr4vWGHoSDRYhBMD/rt7wkosYEmV3WiIrSA60Pgr/AACVmAEA3CmrgNv6xh5a 2ExY8RHnEFw/tb+oKSlVXUtlluwI6nEBAM9aUHiu7yDjVRFft55U40T9xx/7IJO0 O58iSB7tZVUKzjgEYAltBBIKKwYBBAGXVQEFAQEHQHK74Z5OVW+KcpTNh9YuZhP7 X1FftJON7zfkOgOtQJU8AwEICcLAAwQYFgoAdQWCYAltBAkQIitIDrQ+Cv9HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnV85fO1cqXOqSS0lJ pbeuIGAi61kZF+PEL2Dood+XUY8CmwwCHgEWIQTA/67e8JKLGBJld1oiK0gOtD4K /wAAO0sA/RMnqjd/fIeK2DXrgQ8+VHqCTYHp8QZLHM9XM4PzQ+RhAP9/U2DcG8VM R6Jwzs3LT1k71p1G4MglVQuYoJQUBOmzD8YzBGAJbOcWCSsGAQQB2kcPAQEHQAEM YkMCncEEE0MGXUWGXBbCu06IZo6bUGmiibTupn0hwsALBB8WCgB9BYJgCWznAwsJ BwkQ81CZAH792D5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnWiCVmBfj4eIBPqnzkuJxA4EFvuapoVOczy69zQepU9UDFQoIApsBAh4BFiEE o3HhoIruGVVL2Pb+81CZAH792D4AAB2/AP4mA79WtW3ekPJ/W/4PngeRElgPBdrP Hew64IWQr5Ry8AEA47CMj4OM6SuMjSNnBesDFB7zB/X6hmhVOiOETXIQbgPNETxk LTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ81CZAH792D5HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnc781Umuc4iCNYBjU MMau82OagNpSiq/2E/O3smtvg4YDFQoIApkBApsBAh4BFiEEo3HhoIruGVVL2Pb+ 81CZAH792D4AANWYAQCe1uwGrhjt2WCxsDTDBxvSlF2w9qICJASFY7CgDYZDiwD7 BjpBIdGULhnlelJD76yd+vgBAQcJk1xypbSfMMihQgzCwAcEEBYKAHkFgmAoZO8F gwlnmjsDhWR4CRAih3oSi2+rMUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfHIYFOjRaigbmAh+M2gS1H5zOe6Bx/RvhJ628/nGzmEBYhBPMC uD6QzWrD48WdOyKHehKLb6sxAAAcNAD7B4XSY/80t0uaPXstzEXY/THqvtEN84JZ ELapZPI+PBUA/RFkccBVIIMss/hgeaHGrOfdlWtFCw2K0PrVt+epfNwEwsAHBBAW CgB5BYJgKGTvBYMJZ5o7A4VkeAkQ1uhlo7iPiIFHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnMQZk/jat44N+YpMiSn7EnZP//PWZfS7JCRxb TS1HEtQWIQS+bFch7cuoF0xZ2ZbW6GWjuI+IgQAAyaoA/0UNE2Cgxbv53P2cnG/I wLRDnr+OICWio0JcJd6OjjmhAPsF/8DQK07fZlyU4KNGmJpJbAnri8Nr1Et2+yu5 //evBcLABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEFijgjF/VNfFRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8SuIbZHrU1yeqZVGdiDoLV7 DrPEYP/Zm8ATBJyOWpiTFiEEz3Aed7ef697fiLRVWKOCMX9U18UAAOJyAQDTA34i QZcqpbtCkkknmJYhvvXsUpv/Z/uSVxxemfhKCgD/QpycQjXy8OgTSZltR3BbVP3G RqWxBY4O+R1tsxI8UwDCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRB8eoqCVBrw X0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfavhy7Wxga p1M8C6tw4//3dAxoCHBTtZBnQUnbI/lQCRYhBMsJYcFqJinihVthQ3x6ioJUGvBf AADrwAEA4K7i1F5S07Wc6nNIeK36ouysBLCBQZL7kFIiIRWK+/8BANGqdCf2DRfK Nb/v6Lb2H5dVreCTFB9ZHIUCIoV+NWQBwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4Vk eAkQpU1dY7C/xntHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnzL9ZBDyU9dpEIpoycIl3HBQ1OyFX+JTqUrm4aXVL8NYWIQSjW9OupyNi9cOm EJClTV1jsL/GewAAttQBAOD1R8itLMbzEMqPwxNihCrNIYy4KRSdSFDB3cH7Gh3q AQDxmWlzAfYfkTJobnMiH283SkSGbL19BtIS40VyT+00C8LABwQQFgoAeQWCYChk 7gWDCWeaOwOFZHgJEP2diwFXRQILRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ4/53vj6LQ0Lzz8FEsT6oXVo0Mq+tlgqI0PyNnh5xg4BFiEE E8i43CAgnLDhVWTh/Z2LAVdFAgsAADPkAP4nU3RD+8KyAXDTpeFVLCarVs/JjDHc AkSW9SwmwFpT+gEAruZ9G2vYIhQmRMGAy1/7BDaMtNzXE0kWCiU0359EBgLCwAcE EBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDq1y/3kUB4skcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcme7rlg9jQVemvPDaPUCinChahjj8PPxKeev ZMpJDBEtcRYhBHqA21Mwt9kA1b0fgurXL/eRQHiyAACohAEAysneQyxWJnogL6JW XSx3EZhSUTAHyA8b4J6j/AqME/UBAONmUZOiN8ZMi29I5otVbaJthXsYEAaucNYU 36uTHxIIwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQFmmCVh4UDANHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnR9rQ6GO4l5TclY5eof7S P/W5AFw9J/lJcQ6AuYk10ckWIQTCTMCRAtIuOOg5PFUWaYJWHhQMAwAAVqABAOoa 90UTk1lpF34tl8cBnxxQC7++nXp9rWsInrTM1mFnAQCgWQCvfZCrK3RXh8E2+HLc iwHl6Wt3+cBmVd+u0eyeCMLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEO5Hcw5d HXOQRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3EI7piB rAjXCWgs3gbNoxs+RgTkj9H9NpZX31SJ8wl5FiEEFuEHoGiGxsHhpEfH7kdzDl0d c5AAAC8pAQD1wHJgzYskaV+T4LjJ1VRWDkFMp7yrmzffHQXpLmIpMgEAsvVNYYpl QFxnJDXabD5paAyjGvPNbR0IW5IVX+mK0wfOMwRgCWznFgkrBgEEAdpHDwEBB0Cq h8U8UxS4VbuuARSH8Q0A2L5dxlhs8ImQmqahcsEuZcLAwgQYFgoBNAWCYAls5wkQ 81CZAH792D5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Lbxe3tGB+SHjbC7ZnV/o9ftRvLKGNgxz3QF4HZ5aLxYCmwICHgG+oAQZFgoAbwWC YAls5wkQ9seUpxm+vHRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnBBYtwiMrYTUIeQEn6xXur+VHgC+MtP7QPG54Qd/GaTUWIQSCuoT2HjxS 3jYwREv2x5SnGb68dAAAj+cBALw+BJIst1JP7CHK0qcnnPwpClkmGemIF2rnaEFJ M7YaAPwP+HYzTK5Kv7eLChxB8crgBHxrWN7Ir0HBqMp2WvVFBxYhBKNx4aCK7hlV S9j2/vNQmQB+/dg+AAAB1gEAzXcCnq8AGjV8I6/9IUZ5XGhJzfJ7TgSDpI70/Frn LFMBALhswnVAPkfABxRijqKCdLuJQ2fZPpr3rrSrhc3a9+YPzjgEYAls5xIKKwYB BAGXVQEFAQEHQPQ8OMHc06WB/kfvvBZe6QpuoIbbd2vpFRgSyJxzc7YEAwEICcLA AwQYFgoAdQWCYAls5wkQ81CZAH792D5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnX2cZPFpP4VgejGmlfFbBcUUz6Q2YJ5Z2dwDLVK9awbUC mwwCHgEWIQSjceGgiu4ZVUvY9v7zUJkAfv3YPgAARtIA/ignlDqUYbzB2xqr0YxN U1xwrMrnqB3ulo6ObLwntxeHAP9I3YXKt47lQsm2Of0cigWBCSuSOji7YRQpg5q2 dD4DD8YzBGAJbNUWCSsGAQQB2kcPAQEHQEYSLllp6B2APEcOict3NF5iLRWjX8tf Gb4qpAl6uEMcwsALBB8WCgB9BYJgCWzVAwsJBwkQ8cXMJ7PZl/FHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnQUW/QOPneUI/Xj2I1bdHCTST 8GCMRJ/n7LmoPBVkUOEDFQoIApsBAh4BFiEETtalMb9iUefDbEU58cXMJ7PZl/EA ABzYAP9TD4Pj/yXjnOVxlljssHFkCya1s/7VsPb8ggBXlV9YCgD/eTgRieDvBqeM ZcGXDD4EDuHQYKjJk5PB03TOF6GGTAHNETxjLTRAZXhhbXBsZS5vcmc+wsAOBBMW CgCABYJgCWzVAwsJBwkQ8cXMJ7PZl/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnKuryRsqEoSX67BLUJw6Uv2fv4gqEtAkXWnkVg59uM+wD FQoIApkBApsBAh4BFiEETtalMb9iUefDbEU58cXMJ7PZl/EAAEMZAP9AFqK6FpIX Jf88TVfe+ok7NzTiR5TCXQLHI5uWckQvuQEAnVNtQ5cegPw96AedAOCzxob2fltC 4a9dmvLO58KcPQHCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDUXuAibV33HkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme5UogpKfCcwFBu 1cwdgKYHktVkHnQ45x1P/0kyhRq3bRYhBLQq/TC7G90uueu9uNRe4CJtXfceAABK owEAqf9fDw65VWPq/kpokXjFdI50sbM0UIQUHilDHVn+SwcBAOog8wvnQpvbi9Wm PYHRpv2Eii9XbO0QcdzmBbjdpY4HwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ hK3bB6EFfp1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 2wK39p4i3c+MviT1MQvhkDcFvSDFDcj0aJtMO8nhM70WIQQot0qnxRdyHDmsgoeE rdsHoQV+nQAAMbcBAIGHm3+83SqgLwPLIL1cbQbwS2Jj3per349qUPshiG/SAP9Y /o9z/4tgbuWlfJTFZDH+0F13+LoLD9EZq5nosRkuA8LABwQQFgoAeQWCYChk7QWD CWeaOwOFZHgJEDrDe94xvmWhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ+oPjrQ3GBg0iqTLGtTVD0wcVoSuG57/vd7fHj4sWgGqFiEEVow3 YiNvvHaFS9TmOsN73jG+ZaEAAErRAQCs66UUUorAXxG5Q9D3ISMGDL5/eLYChqQX L+DNZMRdgQD/SmLO5lMEKMSIpdMNxYstKnujzQCTWg1bC0pd0em16QbCwAcEEBYK AHkFgmAoZO0FgwlnmjsDhWR4CRDcw6J0EK4qPkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmexMfv2TVId/QpI1l1ypkPVMOHz9DfSWZBDiHC7 cVtrfRYhBAxg1DTVE8RlvAdCqtzDonQQrio+AADZwAEA4B8hetLNcCLVXygoFL6Y O/V0y2CmPrWAMbxH+8ZcTh0A/3sHtHAkL6y52c76ZvNJ8D6kPebWCVodPY1Ui6/S glYEwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ7xAwNgMlvRNHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn6ojv864zf8UXsgaSzJ9CN/j3 Ve0QSNwt68eyqIPMNjkWIQRscAQ+GQNb1agFAETvEDA2AyW9EwAA46sBAOMJbFm6 xoqJhwA7j1Gmp3hi1uSUe79dYXcJSvBY4OeeAP4jGOfA9Phu9LfyhTJvJQ5xlwH7 Q6SkJzYGM05VgW8TBsLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEBCpuzAjy/VY RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/i6jtfXQEis iQXTjmnmnx0bhKOG7c7Fgel+ByQ1gQptFiEEvjfbxGr4BCid5oS9EKm7MCPL9VgA AI8tAPwJc1YByYlvPBZ18AiJcRYq+2KVSv4EldwyX+CJzxOUYAD8C9Su4DVLbvtB J7IMpXbEBLNWC2rus9u1Uz6iEpuQZgDCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4 CRB/rbHD/vv+WUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdhK/iOgaWuKLs1ejxjQhyOQ+C8xDPWWBQMs8nuhdBG2hYhBKDNh1gsIXQ8DjBj f3+tscP++/5ZAACW3QEAgTXcE7bUmLz46YwPzCH6ldyKDznWeiEHpNQBrYhgKzwA /jz7lxCJPqSY75a9RbJKs0b9q8H88TLOjlw6MndVzQoOwsAHBBAWCgB5BYJgKGTs BYMJZ5o7A4VkeAkQC6zTjS5tK0NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnh7gIoTtmLZDGRdZspxAEVFyPPGpjxr+QceWXrL/+Fm0WIQQP v5pIpavlygCU7kkLrNONLm0rQwAAE5oBAIzN8Lg37yiizm1os121Yd9SWM4GYAVJ z3SawyhWluBfAQCMJL3R82c2oJ9Atx02hk7ndVj4Mmg0hmogONw5lfLQCsLABwQQ FgoAeQWCYChk7AWDCWeaOwOFZHgJEM3MGshGTI/lRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3/f8tdmu6fuADHFtydPghwZQYtPntMvGUSu 022bM/W5FiEEUnfBT503oPTWFd2czcwayEZMj+UAACGGAQDQFXs0GkejAyzGR9Hr pB5P/7xyE6fEcl9TJ2QkPqEicwEAjbUzjgfUb06T1Ml5a7TmkUpd/wF0BgXIuZpd 9EHoUAbOMwRgCWzVFgkrBgEEAdpHDwEBB0AGhZoMo7t9OZTUE9cLQwN11ySFSAiV CqcJFjxsKipgvMLAwgQYFgoBNAWCYAls1QkQ8cXMJ7PZl/FHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnvfunjnlu1bt/YWWTqZDfWWXOhh7o hzZ3e8eF7ckXlX4CmwICHgG+oAQZFgoAbwWCYAls1QkQno/Ze9O/TuNHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnYF05tNbIIp/RCMS0Luje z+RoT4PYRhwpvKLJqBTBuyAWIQRgP+xjZEjgpbnSF1Oej9l7079O4wAAXSMBAKnC OLm0cztqSJqfs6+XPH1a5f82Wn5AVmxxT7lUCH56AP42/8uztSgjRRKP/azH22n2 HUi6CWnlETnJWfikMc0ACxYhBE7WpTG/YlHnw2xFOfHFzCez2ZfxAADwGgEA70tT dKOcZ4DQK9nHrL+bGRLV3E2yyuevucaz87su1MEBAJDahLIc+cOcobjHtYMOy58d AKN+8RVHW+jSVoeTbOcFzjgEYAls1RIKKwYBBAGXVQEFAQEHQAWmNCAlwWl5Cc2Z mywC0e9zxiD3y4p/x0j8pFq4lztYAwEICcLAAwQYFgoAdQWCYAls1QkQ8cXMJ7PZ l/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnCrpprKYH DZBjKsv1OkHXTxA+3ioY3uVhMGKv67ojTb8CmwwCHgEWIQRO1qUxv2JR58NsRTnx xcwns9mX8QAAUakA/RHzOKg9H32DFrk/SNaTxcoC81m4VKUsbYaaf4fCfRLLAQDw /+BDf3FcskIkxROvfP7x422TY/d0fbhLn4yQM741AcYzBGAJbMkWCSsGAQQB2kcP AQEHQN0ZW6EaX2RVDEvLKjX6Q6dN1d+DYsaGRZQHo4047UpywsALBB8WCgB9BYJg CWzJAwsJBwkQeMV9nelcFvNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnfZL4fAwDI1R7776T6Lp4ae4XX3AzwlZsbzS0xp+COfcDFQoIApsB Ah4BFiEEv8MaaeqUdOuJ/MwueMV9nelcFvMAAN0cAQDZyQeRO8Lmfb4bod0PTpvh Ly2qlEJfOa2Z1yWu4AyncQD/T5hoaxBT+Bp3YWq7vtIYrsIdndT4tYBaCJ5ZWQA4 PQDNETxiLThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzJAwsJBwkQeMV9nelc FvNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn/tNNs7QE pkPWaApKDF25g8cGi4LyMxKG3bdXF8rBX+UDFQoIApkBApsBAh4BFiEEv8MaaeqU dOuJ/MwueMV9nelcFvMAANY8AP0VcTtJ7i89Ou1zAbH6EEoXEiKB1h5b7MNPMfI7 JimUAQD/Ranpdeu2dR++ikf8HM7rbWpdbA59wtKfS7WU8djTbgzCwAcEEBYKAHkF gmAoZOwFgwlnmjsDhWR4CRBGlqXGKeox+kcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcme/1QI5r7Eb37WNtncpPWcyO5YRLnaaXDaFLWY4XD4G BBYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AABiuwEAlkQexUAyF4LYQfg/k55TNGzM WxI9iPSujpJxvgRzBM4A/At1UfTTo8qpzqakdCK6+FlYpYsfNCi+4hudh5+lQ+wD wsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQr+iF+TS/E3xHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnBYfN59KmRn6Cev4olIYApO+iKvrG WRwVh7WN+CSClk0WIQTTZEMQo0ePZzTcJDav6IX5NL8TfAAAxaUA/jvq6jC7174U B9U8ROi/kNXe87h5FdlpQsBa/Xh1Ti8gAQCWmgjl491jgkBcQjZE7eSJCT93RFst 4hxn/yDatyTdAMLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJECr2o+5ddfo+RxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZx/1C+vNiVLQ6W0b zRxj+Yk8MGiWMOX41n6gZl466K95FiEEkKndPnchwiGejXTcKvaj7l11+j4AAM7T AP94D6WYt7n2U6cbjzVQhzQTtOq6dA3Y13ZHmTahMtF/4gEAjizwoxH4zajZlO3Y 7B1a4ExoGw/bYt/orLvhDBnXLgDCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRB+ XbQg5A6xHkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd7 2kJgXDJfEAv2aE0JNQB8JRWqwYEIYHNPkqxJ2y/VXxYhBLsJ7O9Qo3Y7eGudjH5d tCDkDrEeAABEjQEAyERvitRP1QIPDGgSaNIHa3pMzaFbG3Eunhi7l6UkHVAA/2X1 GWM3GXxRXSQBL4y/ZpenE//APgk+3Z2cSbNqx0kGwsAHBBAWCgB5BYJgKGTrBYMJ Z5o7A4VkeAkQLH/cU18GqhRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnGXjYYvw4YMaMfko4w9OOdJmKJT1G38rR455PET0Je0gWIQT9JyeL BRP4/c+4Mu8sf9xTXwaqFAAAoL4BAOGMTAWsDAZ8z+XF9KvS6FBcFi+asEE0TEnO d2gkqU+UAQC8DHVH1jThYVOUoBvU5f69nV2cT1kX7ZVydC7t6xmRC8LABwQQFgoA eQWCYChk6wWDCWeaOwOFZHgJEAhT/buQDgWwRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ8wq/6ipa2RQ17tp/SxiW4t4PGg9Jx7NHI/vV3B9 h2+dFiEEosGd18mTX4tHm10DCFP9u5AOBbAAAKjXAQD9/zMDQf55Kaxo40M9h6k7 U9dYz3LWj7oH1dMtKNW5IwD+IYV/q5eY2AJCDPnP0hYXeo//LFjdiUJ3ELlyqdxY 8w/CwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRB4PxqPxyf8PUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeD4VtCRodPSgax9v7a/okdpwMM BjqjHn+0VsD8ssjzMBYhBCfjX+tIbL9bFmACcHg/Go/HJ/w9AAAMnwD/fLo4WZTz DDTwruTiZd8xdgCt8Jsl4Nm0aZz82Vu1e9YA/iuArtymknm5VyLYSq2CKxg3RqyB jZMTXRfibtYsSCMLwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQlknvga7+UWJH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnE+glIwTH233z ViuYsP1JQm8JtSShDr0RQwtWGvvBnaUWIQQl2OqriUcFu2TUpqiWSe+Brv5RYgAA 1GIBAJRr+wkW3tcI/CjPu6eQinEJTX5hKLzMhTKLowQEPM5RAPwNAb+wPaORptAb 8sm5CGr8qzeqiYxXXTgde+W/KczXDsLABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJ EBugGVBr5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6gg8+PPQxwOkYcBg0Zp53wY77HIVynV86PXfAoPOG5bFiEERtL1ztm9PWOhHd/u G6AZUGvmf7sAAPtBAQCo5s4Fw2cnvTEA4dbSN6i7LGHW2QJZZqIOkbQgPbhcJwEA jjmIb+t7gjTpEcWtjD1b5UwOeERMwyWYL6zNIrs5PQDOMwRgCWzJFgkrBgEEAdpH DwEBB0DQz9pGrj/nU2FG8pLdxM6rIfD1iKjbtE9GnOzz/iLBmMLAwQQYFgoBNAWC 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 wsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQeD8aj8cn/D1HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnvHKidm17kW1bygbyg0y4vCjiNOQ/ mIQSnv10akfE4A4WIQQn41/rSGy/WxZgAnB4PxqPxyf8PQAAYAsBAPTYR27mXOlD hf/bePK7l2PBjc/v9PoLuqgEkXSM8n+dAQDm46F1TtjGo5sJDcgKlN7h0dhlemTa 7Hs7/EeDskI+Ds4zBGAJbMgWCSsGAQQB2kcPAQEHQCxVdBTrTyObjY/3kbTB4yON PDYKTriNxYsF+pNgHHKiwsDCBBgWCgE0BYJgCWzICRB+XbQg5A6xHkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmerYw7muENVOzoDINxeqooe v2cwZDOpoMJQMi6mVad17wKbAgIeAb6gBBkWCgBvBYJgCWzICRDTk2oEbcXDBEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme0Peqf1esPZshS hJIwrMOCJDYv7TCrbLvlswT5/GuGXhYhBPo17Zl0mdgh3wYH5NOTagRtxcMEAAAj mwEA3g/cQRQjnnbbv9lnilVie0bKOZhAazyFOQz4T7PbrZ0BAOJR1HPOmlH5kEVE 9WbXsDmNgJnTuYsFNfXzpRqvUGoHFiEEuwns71Cjdjt4a52Mfl20IOQOsR4AAONQ AQCTDMY63mZq8rtQilhh4bpYSRuAyoHJlzY3bURkfqdQVQD9FMR1ZpzSMuDKboqy ChRPdUQXiP/hwSRcEgLHNiax2gHOOARgCWzIEgorBgEEAZdVAQUBAQdAKHIIbu1s h0cUrz92frjuUTGrf3BplE6b23iD3kYRahQDAQgJwsADBBgWCgB1BYJgCWzICRB+ XbQg5A6xHkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmey 6DQQYM7Pg2wG5n2yKtgflAhw8qv0FGzLAZ6yOebt4QKbDAIeARYhBLsJ7O9Qo3Y7 eGudjH5dtCDkDrEeAAAtrgD/enLYHiWJqgp4e8GGuFOgtzgb+whO5hveRs06VHMl k0kA/1GM85PIkfEfgbDt+jIT7CCgXKvzcxVnwewVzWkwaUEGxjMEYAls5xYJKwYB BAHaRw8BAQdAkIO/U5or8DtRKot2/I67o8g+QAsskVvl8RsFaVOcZm3CwAsEHxYK AH0FgmAJbOcDCwkHCRClTV1jsL/Ge0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmcWtj5xpcG+IEwyy2XwgzXGuurkVzFzdopb/JQnVuMQPgMV CggCmwECHgEWIQSjW9OupyNi9cOmEJClTV1jsL/GewAA9ZUA/0XfHbt1vaPEDiOw pFYyN/7E/Ycg6uTHDqqmJu14SIaOAQDYxI67dG4Qy9uJAzmZbp0rukY1UZZNczFM 89Z1EHIiBM0RPGQtNkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbOcDCwkHCRCl TV1jsL/Ge0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdM 56AwNYDrEVPchm+9zo5Nlcx2ERL7i0aFzqrfj0832AMVCggCmQECmwECHgEWIQSj W9OupyNi9cOmEJClTV1jsL/GewAAUB0BAO41aKY9nyyLvytt+tTvOYql6r7JijVd iBQ/R66dw7V1AP9ho91btSUMw2Xq21SNLMIR0k0IsWFu5KSCvHnsKRYnAcLABwQQ FgoAeQWCYChk7wWDCWeaOwOFZHgJEFijgjF/VNfFRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2HJbdr2eO63fScxhr+CU6PVaV0Yty22Yrmp uHqrMvB2FiEEz3Aed7ef697fiLRVWKOCMX9U18UAADInAPsEsvM/pSsSsUIX1Kbr gUhxIcoDmZAMkLEKG4/eBrDVwwD7BprZTVhtYI34iMKjIS5cBn1JpYjYl+L0He72 749CFw3CwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRAih3oSi2+rMUcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmee3YfSo8UPVZPg7pwBhq95 uIY54JF15s6zn7vUA8Z6DxYhBPMCuD6QzWrD48WdOyKHehKLb6sxAAAvFAD8CynA 5Jil5qXc9bcMdVglyJ9/iIvyMno/O209h+LPLHQA/RG/H2yygBfKpnspkrF0TwKQ jlC4qV9aanqTLblTBBYJwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQfHqKglQa 8F9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnZRSJD1kE hOB7i13PgNM3Q6ykje8EVwr3X/ZUMThtcoIWIQTLCWHBaiYp4oVbYUN8eoqCVBrw XwAA0cIA/RclQt3MKv/upzXsNWzlq9suyszzHV2cP3VjcWhuH1K1AQDpuhUGmGa0 Emvbk9w7YM0xZawHmN7VmaSnajJRoQWEAMLABwQQFgoAeQWCYChk7wWDCWeaOwOF ZHgJENboZaO4j4iBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ/sNOy42sqjUQmPJDXaeuMy7f8J+23NMpaUTp8ZM9z+WFiEEvmxXIe3LqBdM WdmW1uhlo7iPiIEAAHYYAP41nSha9Ih9gk6fR1+0bDgSg76QBHwFJ31tD2aBd7dW lAEAvP5mXsLcxNOBm4dw6r9JHd2KWYLa1DbIf2HXtR0XjQbCwAcEEBYKAHkFgmAo ZO8FgwlnmjsDhWR4CRD9nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfHSGoKncJzdyUBE3kpRyH8LeVubhRceib9GxayFfiukhYh BBPIuNwgIJyw4VVk4f2diwFXRQILAACepwD/UQwsuFkvlqJZ8jJxY08o1UD1NROn 0kIiurEf60FuNJUBAJ4tfLnQVWNl7esBCxIOEQJJAk96pNn6ttBZSozZYjMJwsAH BBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ6tcv95FAeLJHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnM/ueelN/8SVUqYTB3adKkHWeSTlu0xYI FR1g7ddC9ZQWIQR6gNtTMLfZANW9H4Lq1y/3kUB4sgAAv08A/RinikjeMYXRXozj eaL+ob5IE7fwVcLATi4WT5lo0a6JAQCkKzMi/7TC5GMU1xEimsyHHFRUHLl+KtDu G09KfxW/BsLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEO5Hcw5dHXOQRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8+KgtgvN1LVI1+33DoZ nMqL4IFvuYxD6RqL64HQ0VgAFiEEFuEHoGiGxsHhpEfH7kdzDl0dc5AAALhHAQCi m1dLY+ArL1j2cBqz0IV+LypRTXyzKa2ZuR9kUkm20QD8Dygu+Es518lTI3RKRCCe ttM/RLnQTebBSB2dtsYbQg/CwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDzUJkA fv3YPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcKzr2d c+1ODawTf6ISAups5nUFdxNU9jYvmlSQj8UdLxYhBKNx4aCK7hlVS9j2/vNQmQB+ /dg+AAAzhwEAz7iaTQyAUmPBvfq2XHGlpYTTJ8CZ/1bZoJkwUBIGRewA/3cij/oC RdAqlTCMPz7mD453XdF7Y+N4xXZkIGHVgYkCwsAHBBAWCgB5BYJgKGTuBYMJZ5o7 A4VkeAkQFmmCVh4UDANHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn0y4B8mV1WiH18FTeydISKCgSMNkhXKR4hd/HvYD4xSEWIQTCTMCRAtIu OOg5PFUWaYJWHhQMAwAAhgMBANZHB2cc/2RpoHU1FK1HzRu45ka+PiIBOKIIZRR5 iQZeAP0SKpeRqFqFW9ZagZN8lQh76Xd2f9VPDXlGybU5BgKMAM4zBGAJbOcWCSsG AQQB2kcPAQEHQEqBiUJCPkH2PS375DoVw0xAC6i4S15JldNicBHwVu8iwsDCBBgW CgE0BYJgCWznCRClTV1jsL/Ge0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdUasI7FslJFIMZqeGLL/7IjI/1We8peBCs5DaAd+slHQKbAgIe Ab6gBBkWCgBvBYJgCWznCRA6x/mgFuTO9kcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmc7F3e4+n9e4t6iuL4QPw20ZfiDbPsEp2Gcgdb2Vdds 2hYhBONc6BR3dMFtk3kOUDrH+aAW5M72AAB/tgD/XyMXygWu29VrQoEaeQhjfwo/ apgO9JFHQMzyhmvZm0sBAK8x6W8T1Pmv+0iMfJI4YxEop2mzbE2iBgpID1XBDnsF FiEEo1vTrqcjYvXDphCQpU1dY7C/xnsAAHrsAQDE5Jr15ck9awWTlG4Mn++cbVl5 VoAUcOrIkjiCfKwJsgEA6avgI2oh6gc9zDANUNVv8STMEsvHkwGDCSP9GsjsjQzO OARgCWznEgorBgEEAZdVAQUBAQdAv6UuAoykQ2Oxy9g5TasPDS8+q+RN3V5dQt8k JttNtxUDAQgJwsADBBgWCgB1BYJgCWznCRClTV1jsL/Ge0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdInW0/j4Djo/KXpblMghF1ynWPMBK5 f3F+FLl5dFg9FwKbDAIeARYhBKNb066nI2L1w6YQkKVNXWOwv8Z7AACCagEA9LR/ ORZ+qSHX1uy6/gx6FgQUE5UFf7cggENO3lFLddYA/ioswPXtWmHlpqBsiSxdoySS dIhLiYmObi7poJTEONALxjMEYAlsvBYJKwYBBAHaRw8BAQdAcZWkX/ET9zP6IlE+ 5CpUoFENloZbEFgn147g1fofn7bCwAsEHxYKAH0FgmAJbLwDCwkHCRCb1VyeEz6M vkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme6Y4an/k0f Zux/9zq+LtAFUeOh2Jj1zFVizpquMT8D4gMVCggCmwECHgEWIQRDUlV7q3P/lbYy 7l2b1VyeEz6MvgAAmuAA/1TdCfF77SnrGaS7wX+LH9qVW66ryOQxpihzWJ1OXnqI AP9c/R1anvCUiPQUeGZjec/bYGDL+qb160oEcYbceBufAM0RPGEtM0BleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmAJbLwDCwkHCRCb1VyeEz6MvkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc6J4qRl5nig/smRncsoxcc1cTDqyXY DlUkhQugXGh80AMVCggCmQECmwECHgEWIQRDUlV7q3P/lbYy7l2b1VyeEz6MvgAA FPkA/3uZkicd8ECmfeGpaSA7PjSJJaVplw+hnvQWWLzfoW3pAQDGhJog4JS4drj+ iwjkKvSLywHF5YaIT2/wkYe/M8h3AMLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJ EPph5zxvXctGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2kGOQDUlNPvK9ASohd/X7xSc8FZhQq1s5shSOu9nokWFiEEU2rVYrkhe5g5ZiBW +mHnPG9dy0YAAPREAP41v0IPbp2MH5BmqQ9oHKBxIcgB6KqPK89jMC95/d7L4AD+ Ku6VV5mJY5YeqG72KzgDtUTcxomuSj9Z2rZcNWpjJALCwAcEEBYKAHkFgmAoZOkF gwlnmjsDhWR4CRD+3G5cRqqrE0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmf0nsqtNgXFGdYREZxthO7hBNBouvGEr31TU7HXDdTffBYhBEeX d2slmPl9ye+Uyv7cblxGqqsTAABFFgD/UPdVSzIynqNIXVXNQV2DvhhQ0vFn8YsP g4NjPFvVPDIA/jyiHtxBUjV84BwNcDQwdKurVLgf8CG9teL5ap5jbSYOwsAHBBAW CgB5BYJgKGTpBYMJZ5o7A4VkeAkQA5JT7w65kQRHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnHGhQA9OnZ1kIXzkpUqGqLcBmfO5GmPFNvNe0 LJa3LrkWIQQ8kwRHEI5vGqkh2cADklPvDrmRBAAAC50BANwK+sHVMKbTcJjlC0mk XobAsT7xAaV8RFUElEAUgabFAQCln2rpixSRCq/X88UczqE3WhCX0zCdUSlOHrH3 +5DVCcLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJENyS1l+vRlMtRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4ZQw+f2zOJbq2nBjcVg1xtU 7NoIUsN3TGEmlJoFT6TjFiEEl+QI92oIlUYQRdda3JLWX69GUy0AAHR3AQD5og1r eAHTpG078fv6nHcXEwfTweVLovWxeoxzFroNCgEA5uLfdNL0zxyjdMNDBQLq/num Tu/7e2nyZi/7tG1bYQ7CwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRDUN5qeriai P0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfsqQRQ4o1F 0e2YX1xnTT4GVokhlA+GJziylBHq8GWJURYhBC+QxcU7EN/U99x9stQ3mp6uJqI/ AADmdgEA/KwS3dr0aCh5hqfy/PWENMASW6iJGJdkVjm+/xkpxoIA/0CEmaI93Ch2 kO5JHCJhiMfU4ijrZ4ZTv64Sd6La3iIDwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4Vk eAkQ3fp3nZHGmJRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au 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 HgEWIQSSuxpWC//M5HF7BdxGlqXGKeox+gAAePkBALVWAACROwcWCMUjELCIUnvL 1Bpzl7nR+brorSYxIz+/AQCvTy1p+JLUvBK3k/R5MPNSLhnGi+uUCKFnD+iNFfof AsLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEHjFfZ3pXBbzRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1PIN6O+ouNKAnFHUW1q29Rbgv07 5/RK0ZKBQHj2gfjoFiEEv8MaaeqUdOuJ/MwueMV9nelcFvMAAHKPAQC7AFqAkXeU rzfgcwMt2DQcwneRpOlItcWe9qyuwzq4dgEAqeX2se/pYtXCSSEYkvl1vmUGT65g Oxu2bp7yDmvlAg7CwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRAIU/27kA4FsEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcEmXC4eABsRiey AsNEstvTNez4ASl285XZrNEzdX5RdhYhBKLBndfJk1+LR5tdAwhT/buQDgWwAACX sgD/Rw/ElL5fEdxYnXCwQl2rTPFcP3OjfNK8EZ8s+3tnG8cA/A6iQgN8LDffZptK kZ62yBYdwUTQvnFqYJlPWf9HJesKwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQ fl20IOQOsR5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 1J3Ba1YSOwUEO2YgVteFl+KflDm/0gmJiXilEPtu0ksWIQS7CezvUKN2O3hrnYx+ XbQg5A6xHgAAYQQA/28OXewB1yMN5gwYyeR7AfK2kJlVYn9WXaBsUkwBHi5lAP45 DhdvG6nljv33wUfqg5PNgeyVyXFolYhN5u72pQ+bCsLABwQQFgoAeQWCYChk6wWD CWeaOwOFZHgJEK/ohfk0vxN8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZynPCf/CImytutm0LZdOj4MymhEXdYHAX/U2Sotmw5UwFiEE02RD EKNHj2c03CQ2r+iF+TS/E3wAAN3cAQDu+iQJNFfq3zOkeFa/NuCN8+EJ+3nDEUb2 0XBfsgwWFgD/R5fkPF9Y1qjutxNDqxjkQpKggNNrb99XRWp+UIOE4AXCwAcEEBYK AHkFgmAoZOsFgwlnmjsDhWR4CRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmdFkLfVB5DC4KnZ2cMUaPZDDwmap3Ct/gBXecdS TUJM4RYhBJCp3T53IcIhno103Cr2o+5ddfo+AADtDAEA72Sp9f1oeqjkdUnKefOk 1FgmKyrwQKPiJY3TuSLOzToA+QHyhg3VCeBhLDv2GiZixjbDvDx5M0v5s53KQeiB 5bYKwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQLH/cU18GqhRHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnkx0KUkGo6eEZJsF/IVRFfglf /7vIMS5qhMzZqj8A4dMWIQT9JyeLBRP4/c+4Mu8sf9xTXwaqFAAAF2ABAPTXYIzd lDM1D3FyEVn/o5qj45JigHtTTV4q2g3c9x3LAQCpn8GIqdbEZv2/4ZbcnUZ4lIqW jvfukesLqFZ2ymHBDcLABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEHg/Go/HJ/w9 RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxz/GTzf3wj1 PH2ddM5uEfTB8OWnv6vH9ibpw8pzKuNjFiEEJ+Nf60hsv1sWYAJweD8aj8cn/D0A ALBvAP0VAPErm6eJ6yg8CDedhhokKq36UWjk6VBa1YHmr5FuFgEAlKWbkh1XUnks blIDiNsqqDAoghlZNbgjQT9AJn3cVwTCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4 CRAboBlQa+Z/u0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmftuY8v/OblkMTFLF7C3O+v0N1BO7nZWgiOkz6677uBxRYhBEbS9c7ZvT1joR3f 7hugGVBr5n+7AACu4wD/Wcg6nuYuq7hUVxS7oLUQPVswkOe/mlEIcyTyOMJY2G8A /08rF3SC7sKQmp5Qjuyyb9p3z3UCQadYkIgUF30fJrADwsAHBBAWCgB5BYJgKGTq BYMJZ5o7A4VkeAkQlknvga7+UWJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn4A4NASQUYx8m19eTd7uLxpX6A7y77LB/eYDGFVLYFGoWIQQl 2OqriUcFu2TUpqiWSe+Brv5RYgAAq88BAOjrf0TR55W0XMgJPTaeU8NJkiV+VYvb EO/qCy+QLIlPAP41fYZOfpq9pe6i3GqcmME1tSmKXn2MBaT3fKKFa4+xBs4zBGAJ bMkWCSsGAQQB2kcPAQEHQNCkrgMlZZr4tP1y0Jfdh8n+UNOYTFZFQRx0APhRZkk6 wsDCBBgWCgE0BYJgCWzJCRBGlqXGKeox+kcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmeb/E5F5hztkZmh151UyJTbZI1Hpb3RKafXukSaaYP/ awKbAgIeAb6gBBkWCgBvBYJgCWzJCRD23miw3E1GmkcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfJbyN4DlUIipeIt2y4pcWgAv8Czz22BHtr Hu7AV8eQnhYhBICM9aP88oB/kYlWDPbeaLDcTUaaAACTVwEA86c509cc5MPklVh6 em/Nnbg4Ivvn1hFxyUNenXGoiRYBAPzN9vyh19DjP1LFiynfswguQ31MJmFDhe1G +dQQiGUPFiEEkrsaVgv/zORxewXcRpalxinqMfoAAFs6APwIRCIpTP8CXZcybWzw V5vJs5g3TsxFHVfVPok/2TBj3AEA1gTm5CLtSq5xVMni1MHV7Mx11A7BJBFvmha1 7PRNlgDOOARgCWzJEgorBgEEAZdVAQUBAQdAO+zKtODBucyRLdF0W0/uSV1s52Ph uE1O30VjpeEvjlkDAQgJwsADBBgWCgB1BYJgCWzJCRBGlqXGKeox+kcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcsIxwZvlW9n/+V58685Yel CbKM80PxRIYwj38a8L0giQKbDAIeARYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AACS TAEAoy9PEoSz6EuxQp15LS+zIrS4xG1hSFD3z4jolGmT0bUA/RiodFYxGGeKLMx6 3puHx6dicUeULNnZh8aaJJJH2UAHxjMEYAls+xYJKwYBBAHaRw8BAQdAnMP7GJI+ lDKOGAj4xfjiN6jEwBSAiimg5ehgYsEwoMPCwAsEHxYKAH0FgmAJbPsDCwkHCRAm 7+DgNaxSLkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdM waLo7k+kwCMbuHLVcU4Lzq5rXxD06gDgZB1TWVk7HQMVCggCmwECHgEWIQTR6fhc 72JxaZ+95asm7+DgNaxSLgAADsgA/1K0qCgYMRZPJtqPXE9ZbCl4Xa/n4Oa4FDOh uZv1tlfoAQCPuHOdwVbnVEgsCvRX9VxImzElQnjQvtOkZPf8hQvVBM0RPGUtMEBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbPsDCwkHCRAm7+DgNaxSLkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeJesKx51XGltLtgcoBkuYJ x2K3UVMTi21CK6P2rxfbZwMVCggCmQECmwECHgEWIQTR6fhc72JxaZ+95asm7+Dg NaxSLgAAeAIBAJQ0V60zjeqx5MWcRm6pzwZB6ATzCdWMMtO75pFnTNsPAQDNw5E1 LiGWLJbaJk+4L/h1Ns9yFUil6jWitMiciv9oCsLABwQQFgoAeQWCYChk7wWDCWea OwOFZHgJEOrXL/eRQHiyRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ7Bf8rX6A0lmj6yV10CB38N2vvg2c4FP+NRhgmf0jCQ2FiEEeoDbUzC3 2QDVvR+C6tcv95FAeLIAAJS9AP9acazzUngdRyyw9vIct8wMgARgZy9N3DwCWfe2 P8xAygEAn/Ms3uCbOeLWJdZRcX2vj91qSxOZiAmxXR5GBHH8+wnOMwRgCWz7Fgkr BgEEAdpHDwEBB0BspRGvPDrLRN33k5vOHLpo5/uQgLeQ5rduyzm8RjesMMLAwgQY FgoBNAWCYAls+wkQJu/g4DWsUi5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnXhXVwMsmCrzkJKK59lVcM5rho7sAHgY+by96mcLu3VUCmwIC HgG+oAQZFgoAbwWCYAls+wkQDbPhJHmuxrpHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnSZv2b6B3kZYS096TGkyLhdbDPM/H35dqFUbSDY80 vl4WIQTg/47gPhjvrN4tvOANs+Ekea7GugAAgssBAKxf3rGj5gOVKAgyxrcVpE8C EEMJVt+U81SHXQYYZMBfAP9WucZmrjXrHquWgxjUUUGuY44j0WDzLuRVqUcH5Ec6 DBYhBNHp+FzvYnFpn73lqybv4OA1rFIuAAAYJQD+MMvdYCgSomYpMlpuxZtTq7L0 NfpOiCLMDOLGLgbc3ZcA/ibG97+/c8X8gYHPQQVRf0ZusjH/nSfmCLexE4YL8/QI zjgEYAls+xIKKwYBBAGXVQEFAQEHQDIKWBrw+kEYfxh1+RXEo0h03CIkkjr21fwb YKm5VO5nAwEICcLAAwQYFgoAdQWCYAls+wkQJu/g4DWsUi5HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnr2xa+1SZVgChlXcREQ0As+V0LOq2 qTRq2Vpf2p7DVasCmwwCHgEWIQTR6fhc72JxaZ+95asm7+DgNaxSLgAAeV0BAM9y kUPWYjwylMr+5wL2XKgB2z3KOic2x8+7o6cNE/1NAP9/R2VOF7VkY+5ePneW7K6u 1giGSTy6ENEpFcep/lOgDsYzBGAJbNUWCSsGAQQB2kcPAQEHQOx5cDqwMF4Fnfat ryK6uDxxYhgQI+r29fygrS/aCw1uwsALBB8WCgB9BYJgCWzVAwsJBwkQzcwayEZM j+VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnsi3FPX9B wVpmLFGqKQnr6Asg45gY4UtBqkO6XUrR9/IDFQoIApsBAh4BFiEEUnfBT503oPTW Fd2czcwayEZMj+UAADe/AQDgAQ5qKxB5zb2RUzj/glZqit8eTQL/7qWshK53R6ee vAEAlaw5OzAaxMdB1QceaV1mDyTNWioO6XcF6AeoXCXaxw3NETxjLTFAZXhhbXBs ZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQzcwayEZMj+VHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnRotNojeITmz2B0YE7wf9dg1UOECO Xv91q+7zUJFEQYkDFQoIApkBApsBAh4BFiEEUnfBT503oPTWFd2czcwayEZMj+UA AP6tAP4+UiYUkcbVabDtM0fN2hUJDHCGYkD8ESKStp94aKBfqQD9HgrpfAGOBZEc REupxZqaKSAH+RNFarTyrNDxncYx/QbCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4 CRDUXuAibV33HkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v 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 AwsJBwkQJcLA7oPWqQBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jnv5N/xMCz7/S41ibSb4HASP10WFSewmown1U0rWYhISUDFQoIApkBApsB Ah4BFiEEuSfQbZITfrNPx9WnJcLA7oPWqQAAAHHuAP0Sd26dyBqVzZYR+8h+uqo8 5Ne9FjTCTDsgx3HMsZ0/3wEAqkmUHFOGugHipYlGRzg3QS69QYU4fThbqpb+bOAR jwnCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRD+3G5cRqqrE0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcJ72SSWSRUZKmsjDe7/4zivEYO +klAiXww8Z9rjf942xYhBEeXd2slmPl9ye+Uyv7cblxGqqsTAAA4AgD/ba3MqJoT KUt1unceOmku0XHij+sNicksFwIF9aYqJgIA/3vDzE8LgiNbi9Co49+bgb6+dRGE YriZsuALbaL6zy0BwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ3JLWX69GUy1H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnmd5QWmDyGzzm Ph2M7jK2OQRZWHuU6qQZ7zmul/w2J+UWIQSX5Aj3agiVRhBF11rcktZfr0ZTLQAA ZcYA/2bilTv/rsXeDDNo81SERXmpVGRgJN+1RJQ9j+cUdEgQAP9/5dbvoRsHNSZy Fmz/fMNqiRGK1qF3wkZgm5tvVmllAcLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJ EAOSU+8OuZEERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3Ej7HAylv6dxugHofogDSNDPfIQcpNeiIYLeF+bnVgXFiEEPJMERxCObxqpIdnA A5JT7w65kQQAANv7AQCupqVd3ZnFs97GkdFMDim24Zpbns6aj3EmYNgPHag3SQD/ Z0nyj+OiQuJxa62K8vlCBtvdc59/8FrGgnmI7DzPkAfCwAcEEBYKAHkFgmAoZOkF gwlnmjsDhWR4CRDUN5qeriaiP0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc6YAD0FlUARIznAtnaNeUMFBFqHSzZRpgmnyCRiMoTBBYhBC+Q xcU7EN/U99x9stQ3mp6uJqI/AABAdwEA5rCrwhuVu2trDMN8S6PIjgmOBoSiHBZV 2QlDASxyt9AA/3HQ5YDKpJc6t5aUycXr3C3G9zucs7TS1xHbcOeeD14GwsAHBBAW CgB5BYJgKGTpBYMJZ5o7A4VkeAkQ+mHnPG9dy0ZHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnBKSDdeJSDpgRPBvbvtx7veMxznQ9fRaUk2yj 63Kug/sWIQRTatViuSF7mDlmIFb6Yec8b13LRgAAQh4BAPFzq0ITkkcdYISc272u BqDoPJ/DfcphwwifHB0aBnURAP9i+Ju3p+RbhHDkNqdTeMuCNSX4V3CKpjSaKUNf gFJoC8LABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEKltmR2kfAo9RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/Gj09ZlWrN7H9lo+kVtQxo6 XODtu7QF1gqIGCl15BD7FiEE5htjHVZmvtycJU55qW2ZHaR8Cj0AAAejAP92G9FK YRNGPMQXA5asE9ytP4G4JIxKzrIotZx9a6LkvAEAtq+y8q+L+7SC35LtWoN2N9c3 5uKDcu6wBbKMHB6KVwXCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRDd+nedkcaY lEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcBlpOeSf27 KTB1E7CH70G/Tn+BzY1XoBXAINeuPjvwwxYhBHl0wE6NW1QNI81OYt36d52RxpiU AADWPQEAwz+Cj8DkjhHuffTc+AlmNjZR3mzYwixpnO/Ad1iepLkA/3qmmBED64qf 0ZQNWjGy4o/NJBLKWDYMEzUK2A3GCD8GwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4Vk eAkQm9VcnhM+jL5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnnVJxxaGsrWluvoaR4T0M+bC9WnZKPy1Az7Fq/DTN+LkWIQRDUlV7q3P/lbYy 7l2b1VyeEz6MvgAArnABAO2RCrkP2feTJCmCQ6uT1cHippunTQWEMt3wHdFESCOA AQCqdM+2Cx3gfu3U1cXuklpWF8o3SxbxQ5PaB0NJhozAD8LABwQQFgoAeQWCYChk 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 bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyDHI9KcNuZARDjqsA6r7Sc5+x6i /8ASH6BC7E9eonyhFiEE8wK4PpDNasPjxZ07Iod6EotvqzEAAJgCAP92DfzM1Dy5 0pnUn0r0JOjP89DIl87oE0EaysGNdjxaogEA77yHLukxRtHS9OgxvY9gzUAPEp5d BCtSnF3eDbnfYgvCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRD9nYsBV0UCC0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdC9Ybv5PNcdVWJ aHppE7hJ7fJF86UY+XJRRjWMZDBm0RYhBBPIuNwgIJyw4VVk4f2diwFXRQILAACy rAEAhYy3dDmFY7VmwGDbgFQUsaGn7UiUCjFv+wTn6KVy5GUA/2GeZbJaB10SLSQb kVZOrx4l5SJi47SWgVE5liCTuewOwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQ WKOCMX9U18VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 0Z5SnKVujx8Q54f7WIYY0Ic5bwpOyT+CeeAmL1/6mHcWIQTPcB53t5/r3t+ItFVY o4Ixf1TXxQAAigwBAIZdiLAj9fy3KvtLXHfDPXaAJVEXjB9+c54XkMh5GOCoAP9J QQexryxJVf2EyQmXuphLratUnqvEk22ss48/dWxoCMLABwQQFgoAeQWCYChk7gWD CWeaOwOFZHgJEBZpglYeFAwDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZxKxNT/YMoT1d++vtk1dBjEAK+P/pRquaHJXO3+MSIJvFiEEwkzA kQLSLjjoOTxVFmmCVh4UDAMAAL27AP9YDQ2ahzHVIAT6vZRIz7qguKM+Xt/5bM6D T3Kr/SjJxwEAvN33+wtU3j6vQUHNeJcCY+sOyExYhjF9Yutfn0ATYATCwAcEEBYK AHkFgmAoZO4FgwlnmjsDhWR4CRDzUJkAfv3YPkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmcpkThTjirSvZnL5eW8di1lGVobgHziCrg+Mf5b 62IIARYhBKNx4aCK7hlVS9j2/vNQmQB+/dg+AADttwEAgglmv7Ne7w69QzESbZ8Q TuW9gA4R37pevK/xAoYKmoYBAO/Epfh/tOqNFz87M1Ut3ooPngOG+3S/TSqGp0ey spMEwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ7kdzDl0dc5BHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn/9YP688oAdV4/gsmJmLn39c6 7olhoPLQOrAxJzeL7mkWIQQW4QegaIbGweGkR8fuR3MOXR1zkAAA2lABAJFnvcYZ kH9EO3itwa4C1kcXGM+s7T1Fcrc2FbPKg+NrAP9dS6VrMmOSySEcz1PRxGAkGxoY 6B6lHSI/ulNl/dH/BMLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEOrXL/eRQHiy RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzQEj9tBq2yr YnKMUIVgz1bOWkzi3Knwgao08nW1o4MKFiEEeoDbUzC32QDVvR+C6tcv95FAeLIA AO9RAQCVj9BKT24RzQcpinWHbdye55iVkQjuJTwcD1n9+hQ68AD/auuqsiEuTI13 zLiXC+iMSZHZkg5w2JOvtC8I9Yv3/QXOMwRgCWznFgkrBgEEAdpHDwEBB0AHnvSC 3LMsNwacQrBuzKHowBlTdn+Wer/91If2jZOr8cLAwgQYFgoBNAWCYAls5wkQ1uhl o7iPiIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnKnc0 Eoe/qc5kh+hGjktGF7mrfTXl12BuKrUHyX28+NgCmwICHgG+oAQZFgoAbwWCYAls 5wkQtvtPw5lXvD5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnEa+yYW/Y7h/BGYQt2UBEt0wV8m6Uxm8KgZp5BRCNMvYWIQTjTg1/RKa+hArb gMG2+0/DmVe8PgAAV+8A+wWdwvpFecp1uVRySdNecpzRexX0wv7unMQn4nv4QwDp AP49nYkK3e5a8uTioIGEL+w/ZmQiF4b7Xb207klG6HrzAhYhBL5sVyHty6gXTFnZ ltboZaO4j4iBAAC34AD/b0j5Vl2BxacFXNniy0p7XYKGGmCLsebv2QFPG6IbjbsB AL5Ghj7E2DxSwmJBvv75D4IFulzlrZn58MAsUEPHaO0BzjgEYAls5xIKKwYBBAGX VQEFAQEHQCiJsFOW4rBQTgKgI1Tfqy2IS0lhBSVSuw+sZkhjj35NAwEICcLAAwQY FgoAdQWCYAls5wkQ1uhlo7iPiIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn3/diuBiRIKYHfBUxocDmWGlrfzYnoNHJsxFTATJCUwoCmwwC HgEWIQS+bFch7cuoF0xZ2ZbW6GWjuI+IgQAADfQBAKcMcrACHGef690DeigLhadn S2CuVtWhCnW9Lgw0dTysAQCv3t99ZnXni8xYCLvwb5Cky2RQ9NK8dBjnvJUuoM9V BMYzBGAJbOcWCSsGAQQB2kcPAQEHQFf57gZkbg7LY9PrSJicj7IRPPdPowF/6Z/Y IhX7Sx7wwsALBB8WCgB9BYJgCWznAwsJBwkQIod6EotvqzFHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JncMs2dE53PUtRA7WEsbukqQtBZHhu 49IiPrFPJ6IpCOEDFQoIApsBAh4BFiEE8wK4PpDNasPjxZ07Iod6EotvqzEAABkX APwICWPUzSbjElJRqiiH1Y2cmYkEJydrLJQ2yCya0leHxAEAlu1wq9xf0et9X73H TjSc5Zw3Tfru83W3IUN7YkEY9ALNETxkLTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJgCWznAwsJBwkQIod6EotvqzFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jno4xg0CrkPkAMrVw4GtOhFGGVS+22tvE1vme6PhUuHSQDFQoI ApkBApsBAh4BFiEE8wK4PpDNasPjxZ07Iod6EotvqzEAAIaJAP42lqywkpF6kCE7 ib8XJgVo5aqQo1dJP8cJRTPLvGnWEwD/XjgoT3YrKOhKaBvJjkyusGbf80mWI4GH ohaPSsTjGgnCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRB8eoqCVBrwX0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcaw5UCV8unHERFSgFM djp2SYPa0SNnyKTaNP8eJmBpEBYhBMsJYcFqJinihVthQ3x6ioJUGvBfAADQSAD+ JoZ7f4pBW/kWlmNiufIdEyDdBRUUqrHjdFrlNqhCLD4BAPzu4+2oHp9u4vmH34gg sKhfMyFvGMe1bRwu3eBGsHgBwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQ1uhl o7iPiIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnTCo5 dQwOd0ESgCRjcnG5KL9LWfNgJ/OW2C2gXHS1bq4WIQS+bFch7cuoF0xZ2ZbW6GWj uI+IgQAAnWYA/jbg2z+iFVp89ruHe6OZOhXZP1qAcUymKGwEnCZHDaiEAP95Gh2T QKwsXb9HwobgEfcIfY8jwXZV37+mDmyk1fQCB8LABwQQFgoAeQWCYChk7wWDCWea OwOFZHgJEP2diwFXRQILRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ2ENmbStD/pqsGZ/Jqnxi6bSQive0OFzzY67VYE2Es+gFiEEE8i43CAg nLDhVWTh/Z2LAVdFAgsAAEHZAP9EEWWvL15SPPBr31QWqz8SBX4+pYMXd9PxhavD EOENcAD/UXR+fy6QCaSw/UUMS/nzvJPriATtPTHDJgRNcdkvrgnCwAcEEBYKAHkF gmAoZO8FgwlnmjsDhWR4CRBYo4Ixf1TXxUcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmfL3EGBLOe2o8DAp2hWC+B16UmoiJos21BTPQ2bbgFc ChYhBM9wHne3n+ve34i0VVijgjF/VNfFAACdnAEArPHmWHn/KjLAQ5f3Q5TcmV3d iochlxAdB4l/U+MtMrcA/1av+S+9u6mi/5qlAVEJdVa+agqhl/pYjCLDb9bZEEkC wsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQpU1dY7C/xntHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn8rmqVowtleldPbThPVrPh/9Iv8YO uMsMwkGgaObSnZsWIQSjW9OupyNi9cOmEJClTV1jsL/GewAAjtQBAP1az6oMOI5f ypabjbcGSoSAm8p6M+b7Al0SHhoI2w71AP9eeXM73jPRCY4clDlUXIt5B3T0NoVv s98MRBX2eOifD8LABgQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEO5Hcw5dHXOQRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7y3MKbqc/L5ydzU oFS6eIr8tm+GtJS61l5ewX0pcYUoFiEEFuEHoGiGxsHhpEfH7kdzDl0dc5AAAP6f APY473uRUp4GXEa1ampo3cqj3SG3q4+u6/surtvh1ka/AQCPM4wl6nsX6a5BShTZ ZY4Heq+ZFvddw6H/spSwra4PBsLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEPNQ mQB+/dg+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZy1b A8tMNYO22uRNAhM9hXvGzFt2pLy5TRWlfx9hLzolFiEEo3HhoIruGVVL2Pb+81CZ AH792D4AAK+KAP4rGOryhs+WNCNJQMkbBYdK97Go/BtyKxfvR5tUwqB0dwEA8do5 ILm5x9/rOZaFrG/SjfZpOZC9low4/FOimm8ZwALCwAcEEBYKAHkFgmAoZO4Fgwln mjsDhWR4CRAWaYJWHhQMA0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmcOqq0VJtzWxiB6VJCeO8HzBueE9K5HrdixeLrq+eA4ZhYhBMJMwJEC 0i446Dk8VRZpglYeFAwDAACyEAD+Mm9wa72TWKUWfDStdDhxiki02DfdUn0Mf5+E CqIpIZQBAMHWgIn/Bx8xFPaDTsdWOGOfHcGGYKTDg6qtUFP8ObwGwsAHBBAWCgB5 BYJgKGTuBYMJZ5o7A4VkeAkQ6tcv95FAeLJHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnhzJPeF66nXY1jjPYHd9yATD+43YlcVZxlSQ8QS7b mfAWIQR6gNtTMLfZANW9H4Lq1y/3kUB4sgAAAG0BAIeiIJPP+bOMieCq5XmgF8bJ hSrNsK2Z+T8XvA5671RsAQCHD2LA799xYTN2XNQ9R0oD4XckMtFXuyPBZ3c6jWUt D84zBGAJbOcWCSsGAQQB2kcPAQEHQM/s/0sHsmdVWPWR/DxkAqAyalTFMlqDvSaE MBTwsHsOwsDCBBgWCgE0BYJgCWznCRAih3oSi2+rMUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfJ6Buv/Ec8GRs/PVnkCSzFcAwOsTiZKFix Gj1GMhGY4QKbAgIeAb6gBBkWCgBvBYJgCWznCRBcRW9uSXqV2kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme5cbohXm+rKXgzhWeRasAkU7l2 aQLO97RwwSRsDKQy3RYhBFBnz6IShLNiYAM8xVxFb25JepXaAAAK2gEArc9NnsBR 85HY1Y+kwjsrNdWj15N5IqAVpEA1TJzzEjgA/3kTtSzawQLa6PFFmxOXwkv8851N Pgn55SroEuhfa9UIFiEE8wK4PpDNasPjxZ07Iod6EotvqzEAAL0CAQDZtEWmeJXX DHZ8OI/XOlZw6edSRzMmNpIA5OWWUnrC1QD9E6SieBB0pkfBGVBJXw0KA6A2QV5Z NUyV4e5JEvVMIQPOOARgCWznEgorBgEEAZdVAQUBAQdAz+s/uVj1B9JHCA+Lu2xs xtGEHCz+dvUfpGk6lK1KhXcDAQgJwsADBBgWCgB1BYJgCWznCRAih3oSi2+rMUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf3Zb66BTmFO4sS unmtEgI3zmaFEyjDGSmQ/zQnJomp0AKbDAIeARYhBPMCuD6QzWrD48WdOyKHehKL b6sxAADg9gEA6cO4hKD+huUdsrGTb6nlaGjOQ6CL8Q+xQ+xjdIB4Ag4A/igT6a9t qz+Vlg5PFr6AKrInQiGQLRKUNNty8707ndwMxjMEYAlsyBYJKwYBBAHaRw8BAQdA BVjfdQqmyC40BamLPinXyOey92rvEtXBjr/z74fREWDCwAsEHxYKAH0FgmAJbMgD CwkHCRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmdbiFEiQ53wGAdYP7iF97rB39QoxrSp5HeUP24Y9exzDgMVCggCmwECHgEW IQSQqd0+dyHCIZ6NdNwq9qPuXXX6PgAA0hQBAMhv3PZNuEo3WPMEe2as5lJCxcda TykCMPM4itueETWLAP4wExvLW0ycP/It+pc7K4Hb0iuGvNwQc/iiAvN6F8+pBs0R PGItNEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbMgDCwkHCRAq9qPuXXX6PkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf1fTiQvmDbzcUD NTxTxSwWyzpJXQlRe3fv3SOl8QilYQMVCggCmQECmwECHgEWIQSQqd0+dyHCIZ6N dNwq9qPuXXX6PgAAkDkBAIi039GPapW69gYX1Z49X9fMsZJpfnYXi+TKYWPS+b0T AQCNFUhNHARmHnAGP62zoskWFSjEbej4BnPj5mNrBM78AsLABwQQFgoAeQWCYChk 7AWDCWeaOwOFZHgJEHjFfZ3pXBbzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ8Wt81JYLnNSWQV2a+ZJS9wlqVNNunVS5AOZehUy0JK9FiEE v8MaaeqUdOuJ/MwueMV9nelcFvMAANuIAP4lcxmKwTWOHA40dPv0enBlyDsemDwA jy8Rz2guTQOcsQD/SOVEwOfrljcrhW6P+3uVVGo2TmN+00bfvXvtV0xLvQrCwAcE EBYKAHkFgmAoZOwFgwlnmjsDhWR4CRBGlqXGKeox+kcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcme15WWPna9FBViLNQCz2Qid9XkUK10mrfbX 6p/7+zD8BxYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AAAr0AEA1nRbrMbpLaLJtKOl 88L3nm7iJDAsKzBC3IVIUm0HMowA/i0L0GmW8bge9UXgEA1DquFkMWTQylkALnEa WNvxlEECwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQLH/cU18GqhRHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnC26uTje0ZrYw7+Zlidg6 JqsulQKSwpliidJA6mpbib4WIQT9JyeLBRP4/c+4Mu8sf9xTXwaqFAAAHjcA/R9P FPKAUsFgNlVDYFPqz707TKhK+DfBmpGuZVnpLzipAQC05jQJO16yeeGvuS6gvJWr rMS8H3VsjKxsd/Lp2SXwBMLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEK/ohfk0 vxN8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZy1cAIpo Oz1Wn2BY8T0js6cWsQiJUpDhuh5R5N5d2eDrFiEE02RDEKNHj2c03CQ2r+iF+TS/ E3wAAItBAQC3WzB/cudTJ5kAtCt3cXCiRLvO8nkzGyron2UF5ZjWcQD+JABJlfY7 L8DMOKsExToqe4W1QW8WnVvUXeXG8flRFQDCwAcEEBYKAHkFgmAoZOsFgwlnmjsD hWR4CRB+XbQg5A6xHkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmfmkk6K+FhiCoOXPo9BUNtEvZWKWstKD4M+IdAlwRMehxYhBLsJ7O9Qo3Y7 eGudjH5dtCDkDrEeAAD46gEAwdQXcLFK/nxgU5jFphp94fPOZLgENLcVwOlEa0Eo QCQA/1P073GMPOJy0zVI4xjCVD/VQwGGAAJwI5vpSbPbxtMFwsAHBBAWCgB5BYJg KGTqBYMJZ5o7A4VkeAkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnasJLrqUAvEwWVGIdb8u7pH7HlXFTzQCLfqphYUz8WvcW IQQn41/rSGy/WxZgAnB4PxqPxyf8PQAA43gA/REgT+8lXW6j8VyYDRGFvvkHcT8l m/3jnfknFUlQwAsPAQDxcZudRfkctix4qFF1Xrw0cAVNG+1jmpK7Ygf4sc5xBcLA BwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEAhT/buQDgWwRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0mSVTiVa1LEsLeRXludo1Jym2hm39hl g7yWWwJca2CZFiEEosGd18mTX4tHm10DCFP9u5AOBbAAAG15AP0ZelFGhBE0a/v5 Q8EegiQRuFa8Pf03gujgL13fTLXlRgEAgiuOdl29EyHRnPYRN+npsF8VnTwhghN/ tGZK4AaxUwTCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRCWSe+Brv5RYkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmePe8ecNOXP8VhKF7MZ 3Szei6VzwW6uB0FRz+dRzRMIdhYhBCXY6quJRwW7ZNSmqJZJ74Gu/lFiAACnHQD/ ZWQiUF3dnA7GldG84jcMQ5kxB6jf6NC7DKK5xlFMl1oBAIRS+sbh964r5Zd8GZmh J8iffVZahNI8Q7zuqCLMRzsAwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQG6AZ UGvmf7tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnweVv 1nP0rN8SDeo4NcSdB4DPqYSIXGWZh9e8tx5dAOcWIQRG0vXO2b09Y6Ed3+4boBlQ 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 utP69TmzZHuqAQDTbcCnafHyPlDPqQunAmNG6g30ubPVNh/RV56/Y0+RCcLABwQQ FgoAeQWCYChk7QWDCWeaOwOFZHgJEISt2wehBX6dRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZwNTrLMjlsWzvVGvpweMC2VeIeuAyzNo6fGA oOicrlysFiEEKLdKp8UXchw5rIKHhK3bB6EFfp0AALuNAQDUEAUKDjlLQ7ZPVjzk XWrK5ikY9M/9RsF8CTuf/8HEkQD+PcvLRV92nx3SWKzUUDRWOBZOnz9v73JVvNwO 12u9ygnCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDcw6J0EK4qPkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeVnvcb/rjws+B/Y5ZAzVbu cOc1B+0x2HGBFdtZcmig7xYhBAxg1DTVE8RlvAdCqtzDonQQrio+AAAYMAEA6nFw B+6S1HFXzkXJnQJRzd5JPIC3bnwBqyeUsGKtdU0A/242fkYWXp93QqHNjMN3sPMZ 85XIx/PTF9DnSCRvNgkLwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQC6zTjS5t K0NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnCQpgpM2s Yd7s/02zIYmQ3LXM8ohfS4DP+YHwpXF0o+QWIQQPv5pIpavlygCU7kkLrNONLm0r QwAAG4EA/R7fzvHbc8O4TPTLPL5pQ0Yjlo0voo9TrIrzDB8eOC7OAQC/nklBI38B iJBHDIvHqp6w3XTkXAKqVWbcGwEyrZnoBcLABwQQFgoAeQWCYChk7AWDCWeaOwOF ZHgJEH+tscP++/5ZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ4mgMkpTvelShrbgyD9SfRktiIhW1rXsQCtdLxP3eYaHFiEEoM2HWCwhdDwO MGN/f62xw/77/lkAANG3AQCIJimO/KW8BsdyFMrpsRhL3x6gLtozDLgUuIfd+wtN QQD7Butqx5rLomBFVmbdQiZFLP7yT1CTqzpG3M2udxlwxAfCwAcEEBYKAHkFgmAo ZOwFgwlnmjsDhWR4CRAQqbswI8v1WEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmf9RY/5cyt6ettWE2LJF8W/CdO1HgtEidOujLt96A7+/RYh BL4328Rq+AQoneaEvRCpuzAjy/VYAADhYgEAitjdbQo4j9HV5mij5ccz8Ftpmgzc gv4HWdjMpQcVIVEBAKKX/MbCIpZrKiZijQfcjyB4DvugumRPyeh1IhiqU7YPwsAH BBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQzcwayEZMj+VHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnSjWX3kpYzGpYf/OSipT7P/9SdagJPYfF /IV4UsFWcusWIQRSd8FPnTeg9NYV3ZzNzBrIRkyP5QAAAVkBAM/8PAEqOIYFGv8n cEeG5bxCU/WMzdYNYb9xR41VX6o7AP4yksdTNapcnsxKNHcXzFr2AaQe52zzDoZb QE07JJ2TDM4zBGAJbNUWCSsGAQQB2kcPAQEHQPmj9jtswhfDoOmgWxQdd3WnM7oQ cFBiBmTKpKSbPZuIwsDCBBgWCgE0BYJgCWzVCRA6w3veMb5loUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcd9vkdYWmuN/5rzTen4RCcTrRS U9wk/AKgUC8njVpirQKbAgIeAb6gBBkWCgBvBYJgCWzVCRDO2CTI+9fx7EcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmebVt5dbqr/IrET9Vpj oAKTJT1ue3EudLwpXIk7n8APnBYhBAQSxLRoaqaiP+Rh2s7YJMj71/HsAADqYgEA jL52jzO+ailyYB0yRIW7WqSeZgj8zy+LX9YwtEZo5boBANF5/9ryhMLSoeHVbOl6 5j7dDxKRaXgefS829ZVLJ3IMFiEEVow3YiNvvHaFS9TmOsN73jG+ZaEAAC6sAPsF p0ZEBF3s+XZVf+S5mCJSR552WkYTKmB2JO50SHmE+QEAlp35lksMdKDJCzotgWnj iQZdXFD9WJQI8EJiYT+4jAnOOARgCWzVEgorBgEEAZdVAQUBAQdAzsb9DOKsaf8M F6NR4RDw07ZsBipulLyfrphmkcSh+AADAQgJwsADBBgWCgB1BYJgCWzVCRA6w3ve Mb5loUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmclBQcx 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 HZmFDsLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEJvVXJ4TPoy+RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9xYeFDgwknZoHFeZi8wMIZh GVd5sdoea30L7UtpmuZ7FiEEQ1JVe6tz/5W2Mu5dm9VcnhM+jL4AAA31AP0VQsN5 Rc6VUtvgpiOrHpmifIF7NGwtgL/x8LB/xz+64AD/ZsiiXgRxWVOnq7zAyFcZHEL1 IQR0mwX8VyPhmXslngDCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRDd+nedkcaY lEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd5fKbLqb6d T61FBBq+oqm5lxzTnbGMm0MZxKkgaYPanRYhBHl0wE6NW1QNI81OYt36d52RxpiU AACZMgD9G9nfxSMxJ2ii6eYU/qXdBrndCkesOQ3mzpQq2s7+rsEA/3HlzmcGv57X lK25ArFJAudWlJgnm/hfioKPAhBlcUcJwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4Vk eAkQG/6bo/Sr1A5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnMaIS0hC+tJ9lC6y7o35cwkI4ixK8fWNZZRvWXs2klZYWIQQ2MILp7rIuUK0w PYsb/puj9KvUDgAAdq0BAKp4Yfzvv3pQcAhNSxAJuz9cI1uwKd80yzupTmfEF4iv AP9Rg4wcDbiiSuH+KPVGTj0RisHJ8qy/VgPBzyRS+ZBwBs4zBGAJbLwWCSsGAQQB 2kcPAQEHQAYQtXIPQJCwi28nmQjml9MCaCsApiMbS1wWlzra60VPwsDCBBgWCgE0 BYJgCWy8CRADklPvDrmRBEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmeVBixngUK1o9QkbSieOGMYFFp5IHrcbTY5tE0Ip+u64QKbAgIeAb6g BBkWCgBvBYJgCWy8CRBakhPKTjcT3kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdxkIxW5fO52Ou2+tpjgYELIdBzGvzIxjr/3OusprrNqBYh BEKuli8dWAL14aYMe1qSE8pONxPeAAAXcQEArbZHwzPkaiyTTB1UA60sS/S+qFtL D6G8K+0LYB5elW4BAIZvLRAKsi6IKYEEwD5A44pz3ZlsduXN4fLSy77e3Z8MFiEE PJMERxCObxqpIdnAA5JT7w65kQQAANLUAP49fEYolf6uAcXih0yziD7qsFQnLbGT PWC43yktOlZEfgEA/5Yz/9XuAzt0kJQ2j3wzW5RHQ4Htai95teM2pFh03QjOOARg CWy8EgorBgEEAZdVAQUBAQdApj5qFgfgEzB74sNw1fwKjz54xo34g3i90cSg/E8C NyMDAQgJwsADBBgWCgB1BYJgCWy8CRADklPvDrmRBEcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmcfokxbLx+vm3j2FFA0on5urRAp31jQq0If EjRz3ZnxTgKbDAIeARYhBDyTBEcQjm8aqSHZwAOSU+8OuZEEAAB2YwD9HJW15ivp 44WW4RT4ZbNCFqG3bgOfYWkUKTaET1onjIABAOb6NXjGkDGjHUFyBDmgnH5j5jR9 /VwurC4VxCbScMkCxjMEYAlsyRYJKwYBBAHaRw8BAQdAVxnYANs2fQyvBYpvAcU1 rCcuRtHipaBRWkX81NHq4ujCwAsEHxYKAH0FgmAJbMkDCwkHCRCv6IX5NL8TfEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme8DOPkigi8hiyn V8owZnaO5v22XvhuGyTxjUqYup1J4wMVCggCmwECHgEWIQTTZEMQo0ePZzTcJDav 6IX5NL8TfAAAu0cA/j2KIyd/Hbbyfg7nLk8J8f/OIZNk5AKK5I1IH8t9BSoCAQC/ DW6NXHFn/HlXqf0tfod6FtMEgzb+YDq4MeZoJi0kDs0RPGItN0BleGFtcGxlLm9y Zz7CwA4EExYKAIAFgmAJbMkDCwkHCRCv6IX5NL8TfEcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfK3pCphhNo5qmsIchPEsdrme9wbMq+uNIJ htJWjWSDvgMVCggCmQECmwECHgEWIQTTZEMQo0ePZzTcJDav6IX5NL8TfAAApQ4B ANfQgoOr2UADjzJyfap+AvXx3ypd7xTqwXRZuhjaramxAP9kTB+ROsBomRMhv+1I 4nnxHjicyqB2WeOwtDhFR7RgAcLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEHjF fZ3pXBbzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5sL XQ9x8LHHAJnwn6w6ZSmmkyupu0BQfXabfa+y4OkQFiEEv8MaaeqUdOuJ/MwueMV9 nelcFvMAAJlWAP0ZoAMDMVUMBolgeagv1gIzpUvXiHUOt6qyQj92Q/MlogEAqoUW K3KyU6/L66oXLSHql9t/meYQMdiO0eCn3OQZFwTCwAcEEBYKAHkFgmAoZOwFgwln mjsDhWR4CRBGlqXGKeox+kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmeFPEe6HWckw1q9jXTxNXKXx5AkO3hS3BjHLq3Qi6U2JRYhBJK7GlYL /8zkcXsF3EaWpcYp6jH6AABFUwEA91MLd5i1VI3h1VtHih3o+CMuxI2druSMwwHY Tq/3h24A/2YrW54r3ms3gYROf0zYzBhdD8rjXB3dgY23/ciRRdQGwsAHBBAWCgB5 BYJgKGTrBYMJZ5o7A4VkeAkQLH/cU18GqhRHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnZiuPJhUhsBoULVO0mXNiPumFMgXYZjD1D8GPVyHk MI0WIQT9JyeLBRP4/c+4Mu8sf9xTXwaqFAAAitMBALiAK18rLPGhiv6P8L4ngeXs A73Zll9tbLUPyoujNo/dAQDk1lccH16y/VlSNlWQ6KmKyU7xN9UGMRR6Ud/A7rEh B8LABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJECr2o+5ddfo+RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5VD6GY4zIKc8qultDm2IVzHCq2B 3hLdARxlGIIc98GoFiEEkKndPnchwiGejXTcKvaj7l11+j4AAFycAQDFCkP0HtCt d7/bMflMzZDdz/hzo+yjerfUoLdZeevaCgD/R7O4Z857G1NEWl10EWSJuBiTNKYM oYBv24lAcO2SVQfCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRAIU/27kA4FsEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcg5WZTFW3EzDbp aG1DOBV1fe11zMLGqbq0h7WKEboT/RYhBKLBndfJk1+LR5tdAwhT/buQDgWwAABl KAEAxinWBWNxNVmFBXQ8mLGuTEyrMugXD3R7EqJ5Nhu+LvgA/iM7swqb7fme2bEm EwsyI4Ia42tzfW53GJelXiCa/8wMwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQ fl20IOQOsR5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn vq7v52R7ooiYoVRRGRmFzn/E2pe2+3m+z3694fZNAo8WIQS7CezvUKN2O3hrnYx+ XbQg5A6xHgAAescBAOTmzNmRVyslPHjDzYlTTWUKJLspQfl2vq22HK3ASfiqAQDn JDoip8gRtMhGlgECJbveazi+mtLv9VT73sp+dtdQA8LABwQQFgoAeQWCYChk6gWD CWeaOwOFZHgJEJZJ74Gu/lFiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZzSsS2NLLhuGj2FaCUGiBqW8EO+bD7RrhYU72AJ8qYM5FiEEJdjq q4lHBbtk1Kaolknvga7+UWIAANPdAPoDImmQNo2ZgnQB1GxbEJ5evHMoXJ6XIVkb VftQ1+WXhQEAjwMvex6KQG7PxxG4E4GC7D0ZibO1QxNpFMPHcRWUaQrCwAcEEBYK AHkFgmAoZOoFgwlnmjsDhWR4CRAboBlQa+Z/u0cUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmdW21ndBoSJ3wKIEZc8hpbUXuSTyag2JCxTZe3Q He+hoBYhBEbS9c7ZvT1joR3f7hugGVBr5n+7AAAt7gD9H7+mtACHOhpY7IRUf79V xAayBo24QK7LJMiVWOP/fHMBAKR0Yf5InKVfTSKNFGKPGeCYgCP/ACyM4eCLD3jz HGQBwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQeD8aj8cn/D1HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnks9Rj43HJ0pNFSV/3oBEtcwb kDmYw7nQ31RMUZ6I2o4WIQQn41/rSGy/WxZgAnB4PxqPxyf8PQAAQNYBAP7mbMRy RraAr9lVLvP9fybXgc9RV7bNI3WGCpIC0AITAQCC+swFqvdTwafuKpuxiZHxxcHq NfYFMBEs8Ip8553MBs4zBGAJbMkWCSsGAQQB2kcPAQEHQIM3bPQZAny2A4k8f2a6 tB2f+oIFthWk+y89LAqLlOoTwsDBBBgWCgEzBYJgCWzJCRCv6IX5NL8TfEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfKm0V0QVvwU4RKBY/P /I0FPshGcOi3cm8lmFcIKt5OYwKbAgIeAb2gBBkWCgBvBYJgCWzJCRBQXspsjVK6 xUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme9oyhBuLhn 7CQuFztd5IAqzD2ES4KQUlVqvRZQFiVMWhYhBJtemn0SPoU/HSHgFVBeymyNUrrF AADrZAEAsBvPNfT1weUKNb2Xz0xPiW/scy0A5DXTyqIeOANDaM0A+PXrjhA8q314 Dt3nDKvapRE1Mxt28ggwyjTE6s948wwWIQTTZEMQo0ePZzTcJDav6IX5NL8TfAAA 2OYA/0rRdR/xwvdz3ycaj5uDJHpjPQ6c+HOMIjeslmfa6yJ5AQCVgA91Z8PY9jOC l02vbCw7IDrP62hQCsWU7GKFu0fbCM44BGAJbMkSCisGAQQBl1UBBQEBB0AvSKwG mmKKmA9QUDAYLBw0waqugtLW3vlytSnFxG5tUgMBCAnCwAMEGBYKAHUFgmAJbMkJ EK/ohfk0vxN8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7JpuDRvFaxtYWS66SfapFOVcIKKIe6LktUgdFAuIEerApsMAh4BFiEE02RDEKNH j2c03CQ2r+iF+TS/E3wAAPyxAP9O9Ipab0MHO4/WpFYcfeg6cqB1B8hQkbauRkpX Chj6oQEAiue6mefgIP2/I5XEo4vsaluGb5I7JCQP9bMkIFd9DALGMwRgCWzVFgkr BgEEAdpHDwEBB0A1vAFziCcEybWqIkLri3IIDRSebJV/YBnJ9dSVUkIr1sLACwQf FgoAfQWCYAls1QMLCQcJEO8QMDYDJb0TRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ2MZFhXCLcI9oQrSVnSZWwgBlfVplL6NP7da4jWhlJzP AxUKCAKbAQIeARYhBGxwBD4ZA1vVqAUARO8QMDYDJb0TAACfDwEAiHIpKpR39c3J BitVb3lctn0I+jtUgGrAWp8qJsF2EIAA/jOsUsAgD2WGh2eBncwhk6EvjCnU5nON 65SWQq82TvYCzRE8Yy01QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAls1QMLCQcJ EO8QMDYDJb0TRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zyky85pEod0dKaIht6qj6kIdGQg/9N2jh6H95C5BXWBsAxUKCAKZAQKbAQIeARYh BGxwBD4ZA1vVqAUARO8QMDYDJb0TAAChlgD+LZ5CvYDUyjxKQznfWtv5SRXLFvow +nqMIb+q2lcyQ0gA/Aw+AXg9vz7/S1EiW6SYTYWsC6qH2+/IpaEyScQ785cAwsAH BBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ1F7gIm1d9x5HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnUCEuGSApfcoC5uMVj1ASaZlc9zLUxrrm 8f3ae0Q2YJoWIQS0Kv0wuxvdLrnrvbjUXuAibV33HgAAC9wBAIvsgJuSSCORsZWd 8E5t4c0q7nrk5Qtx7o0HiC0qfwI/AP9mmA+GmTW2S8ej+GxfuiPPBNsXncxUe8rx fcrHhEuXCcLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEISt2wehBX6dRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ25CEGHzTtZtwZAFPTzG 2UlXMeDCUhb5BR5Vs5C/dvnuFiEEKLdKp8UXchw5rIKHhK3bB6EFfp0AAIkDAP4h SoUM5q9RwIQLYTz5zTug7KtyNQBYNrQeEWogDYfNuQD+Kd9iSMaadTybktBxPQGL XneexxTRaCvHwo2CNAV0PAXCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDcw6J0 EK4qPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd0DUya k1evSOYqupNnuE/PH5L5AlpEq1Z1v9Tg0AQ7TRYhBAxg1DTVE8RlvAdCqtzDonQQ rio+AACifwD/RXDddlD0t7brX8qPencdACgI00bAtMvI0nnEXXECuNABAMMQo1j9 CRPR8H3YSN4BZyDBCwFPuiL6xoRLWx+JqxcFwsAHBBAWCgB5BYJgKGTtBYMJZ5o7 A4VkeAkQ8cXMJ7PZl/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnfTHKRiMD6lnBe6Kor68enOq7sK/gHQDojFM8rTx4ULEWIQRO1qUxv2JR 58NsRTnxxcwns9mX8QAALDMA/3MA6eyUxh3P1smlzTklaJJrewnhP2hmLCNjnhcT b/1pAQC13tW1D4G9aumcId9ynKDX+pYDAXQbmgtfzZF3NinrAsLABwQQFgoAeQWC YChk7QWDCWeaOwOFZHgJEDrDe94xvmWhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ3ZfNgvgZt9n/hsr/45C6EH/kWlpHPkDRqXzzJya5kI6 FiEEVow3YiNvvHaFS9TmOsN73jG+ZaEAALxgAQCdt5EYW60BTwmk9eLdN8Ws1AIX 20b638CnsqvOVMJoFwD/QF6OjTL8uIK1LQsaSMxqQl664VhmbrXNDpj4vQFdnw3C wAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRALrNONLm0rQ0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdYe2ysrNqDd0vaksQajml0G4gQLmQ0 tXyhz7+m3yQGQxYhBA+/mkilq+XKAJTuSQus040ubStDAAD0mAD9Ha51tE0zuFvE MoMNjLLfLhjS0IAfU3EUKLYUIitLUzcA/il2aQZxRw03jHa5D6Mhe8Aa1NqtaHeI oOU+aBNljTAPwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQEKm7MCPL9VhHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnq1WlLvcxu6hndx2K p/cQJAlXdVRyEKm24TVc4KG+0C0WIQS+N9vEavgEKJ3mhL0QqbswI8v1WAAAH/YB ALLZqf81w33VbtUDsNPrA3QRSkGmTf8KRkqVfC2B0m+cAQC0iprvYpoA1m57T84Y nwQ+z+oQTI4EtUy+fFwFcyVuCcLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEH+t scP++/5ZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZz+W 9svQgdazfSkmsmtVKcxWYpQambvC7aXAmFdVU2/TFiEEoM2HWCwhdDwOMGN/f62x w/77/lkAAEuyAQCzpMDL7JaL1+QW1EidtUi2YV2l42maBb5eT6OcwLEg6gD/dPF6 zH+u0BKcSMdAy9x9DQl3Qk8m952B/84GmagDywfCwAcEEBYKAHkFgmAoZOwFgwln mjsDhWR4CRDNzBrIRkyP5UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmeOM8pJK/smKd3SOEvYZU5fCT7RcrAUgxiC+Q76QRZ28BYhBFJ3wU+d N6D01hXdnM3MGshGTI/lAAB95gEA/GVc/cadBS7IB435qeAI16AvJYu5wl1J5FpW TWMzXDsA/3m9uMspNJbjeUsPNh9EsWaKGHEtDObc2+W1wsvASfsLzjMEYAls1RYJ KwYBBAHaRw8BAQdAerOKE0bRjM/cQXhW1VZvyXM9g0Gr9Lj4i9DAdrKFNdrCwMIE GBYKATQFgmAJbNUJEO8QMDYDJb0TRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ0Fn3J3gdUjUAySwtseQJOA7nVjUousewLVpbBv0NNdwApsC Ah4BvqAEGRYKAG8FgmAJbNUJEOF/rfhbRO3LRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ80tofgUsgIjLZ2rbyjc+4+8NKhowVShZIB29xWs dJe3FiEECZwxSYQTqswPb//e4X+t+FtE7csAAN9OAP40aO3Itpwzup+s+ufbrKJk ZBthAVs9dNWtUdjwOfrMYgEA5RfUV+2nzuRVaD1EjqbrPA6K0BMZrx74bcY0xJA3 oAcWIQRscAQ+GQNb1agFAETvEDA2AyW9EwAA+1EA/RLIBTgPoHQK8/ctLefm0W0D +Fas4W2nCwCa/+FD/cKMAP9vBn0wtU53v5nCffFVDc0yfyKsaWGWGXfaTfFx+FlC BM44BGAJbNUSCisGAQQBl1UBBQEBB0AEEEsRLXh39MNFQAPYTU9MwraqhnD1RUfs vs0VJvDhcgMBCAnCwAMEGBYKAHUFgmAJbNUJEO8QMDYDJb0TRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3en0bOhQWb3iCjj3JkHsdPx8GCX N1vWEty1Q9EXe/gQApsMAh4BFiEEbHAEPhkDW9WoBQBE7xAwNgMlvRMAAFUhAP9A YJu+uA1d38QEr2hDepz90yPx34wLASm8lKLbLG+IfwD/VrzvqGSvQoodKc4Knzbi soXigZ4+/nIpM8sgSBaGdQo= =QoPg -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cliques.pgp000064400000000000000000005163301046102023000164200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYAls5xYJKwYBBAHaRw8BAQdA110U4zu4EKjTAzPWLSDiXoT/5PoDCX+KZhIl ugPqIS3CwAsEHxYKAH0FgmAJbOcDCwkHCRBYo4Ixf1TXxUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme2t5S4FJt02iEgFrRIF+6eX7KcMG3N VZk0EQpbHd3OiQMVCggCmwECHgEWIQTPcB53t5/r3t+ItFVYo4Ixf1TXxQAAyPgB AMeDtVrTI4LQz8e2zJTcrP5Lvmtq8NGyuDrd0Pp1yikMAQCyqeZS+DnJlxsnarM6 /uzOrkt/8xyNJrebAp67DjznC80RPGQtNUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmAJbOcDCwkHCRBYo4Ixf1TXxUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcISISLJ+WPYTIW+znOj1mnKSP7Z/KcnopXsJ1RuTHFXQMVCggC mQECmwECHgEWIQTPcB53t5/r3t+ItFVYo4Ixf1TXxQAAq9IBAMcA+4RODq0TAIg3 VhdnNE8h1JSuajVWxSwf2LsEJQz/AQDcgrQ2IDRjBFFo7z/Vj3picN95K4UDdyro 1oxZ+ZQaBcLABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEKVNXWOwv8Z7RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ88xs+cC3dsQwyepwheh c4dfnKpkINJsZOIOU552uFouFiEEo1vTrqcjYvXDphCQpU1dY7C/xnsAALaoAP4u TnUyLLI2p31qjt2GRnhBY2J2Mr3bvJ5d9Q6M1JfMOwD9HU2CdY/N4yBTcDsDDdOR VwE1BMBIP6WZTyrGzOl0gAjCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRB8eoqC VBrwX0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfP72IT 8DiJZs/7MxD27EoCGiRjr8v+G30wzvJu+Z3v7BYhBMsJYcFqJinihVthQ3x6ioJU GvBfAAB7wgD+NSwdIOuTrY1SOR1BaGSbzwyRdM+12Mi50S826A8BmRYBALq9ixtE Oyl03VvDvV50azi6I+VBYrhswQpvqM2DLDANwsAHBBAWCgB5BYJgKGTvBYMJZ5o7 A4VkeAkQ1uhlo7iPiIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnZXhvkW1bxrBvpW5jcfMrNZVlFy5fSc8hSwLZ4qzgVngWIQS+bFch7cuo F0xZ2ZbW6GWjuI+IgQAAPcQBANNK6iJkk4G+nHLy8FFwBHx8ghmOVAmBNWIuQLad i1rXAP9TRKtpLWXdgLUyUks/pZ+axvtx7PY9ASOFg+2sfW9fBsLABwQQFgoAeQWC YChk7wWDCWeaOwOFZHgJECKHehKLb6sxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ7ppvjP/xjY3+LLAIyhwAx6D2Raq/AZ5ekALQVEWX4FQ FiEE8wK4PpDNasPjxZ07Iod6EotvqzEAAItsAQDZmXh/ClEVMb0e4xl08O45uUdv zvxxYLU57BQv8k1lagD9E+BNnHfZKnGaU3Db4fVEWE5iziZxNj3PK8mQCgKVMw3C wAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDq1y/3kUB4skcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeUY2Bhm0T2fOXlM8jf5CEkLy2TttnN AjZfbKlQEovlTxYhBHqA21Mwt9kA1b0fgurXL/eRQHiyAABSkAD/QV5iCAL8b525 Iy1azEYkgWe8h1+xTZMXu0bbtbPqicEA/i7vJy58OFVjL7f7uO7nyj9GRtWo9HEs hreTyufpc20JwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ/Z2LAVdFAgtHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnCF++mLZ7rYgikC3u Aaq9uT/wmI6AFkjqM7MsudzVwugWIQQTyLjcICCcsOFVZOH9nYsBV0UCCwAAQZMA /0xe/a7/lMAs29SqGwDOgAxW1G1w7CdyCxLcVgXic2tmAP9Q15+/C9d/ffhN2Yyf nxtN+Ka+mgQlS7ztWhB8aN/dBMLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEBZp glYeFAwDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0vG +LsvQ8DD3nhBoUC+AJ9x4/4PiWWl2RoIPe2eE9kaFiEEwkzAkQLSLjjoOTxVFmmC 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 wu2rfiu2gAEjBsLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJEP7cblxGqqsTRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwG+xeMD2ezq+lNz y31BmOpK07vDEDiHQusttCLDhTCwFiEER5d3ayWY+X3J75TK/txuXEaqqxMAAMhG AP91yIf8arTNEOgyq8Kwp9z6Oj15NCTe72Hv+6+fQLsnzgD+Me2D0N9NnxNPemrV dSTMuhqR1aVs4X3+n8vxojHAsg3CwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRDc ktZfr0ZTLUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfT l6Epjo2pdxOU1EKKtkuJcMZ3dpvwQGzSra0k+HdYIBYhBJfkCPdqCJVGEEXXWtyS 1l+vRlMtAAALfwEAmIHfeS5XXgbvjSrGhjy+okE7kcfuIytHCaNyuQBdXgUA+wRU Cxm0UrslrSUQbsZQ5G6avxTz9Z4Hihgg86c3/ywIwsAHBBAWCgB5BYJgKGToBYMJ Z5o7A4VkeAkQm9VcnhM+jL5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn5iMEihk74T9yQH/G+04em9OSRQCYU5mPzOcfVAvCczcWIQRDUlV7 q3P/lbYy7l2b1VyeEz6MvgAAXdQA/0VdKit7F6dGSUbpk45luhSyAtOvkQn2b56x s/Nck30YAQDr2mqAYYItJ9gTO3ROBm+Vaj0S/dpOfD4oz7P68R6DDcLABwQQFgoA eQWCYChk6AWDCWeaOwOFZHgJECXCwO6D1qkARxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZz0mFUIuwx9nrx76FpXNcJ6kobJrNbt+xkGMoWPx V9FqFiEEuSfQbZITfrNPx9WnJcLA7oPWqQAAANN8AP9Zu3Puf7n9qT+gZgcU/LCp f1jSRdigKSfiFmhPyEbQ6wD+MjDNI3EpNp2jH9I6ueINkGI4w4IUq0QFj3lymZji cwzCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRAb/puj9KvUDkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmefhy1gbw9EVIUyxF+BH7msAJVM 8OU7kHJx/qNVoWEYFRYhBDYwgunusi5QrTA9ixv+m6P0q9QOAACTbgEAjZsYPDb4 XITYHTq4H5Fl2wMY7fTtQySES+oXSWbmZlcBAJyDs9stawB18VrigSw1zO1nfnER xDP7FPFfty+Mo0ULwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQ3fp3nZHGmJRH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnZlmXTfREfDsk /9WJNYBYCPKdZcgdz9bsLgSJTa5zP5oWIQR5dMBOjVtUDSPNTmLd+nedkcaYlAAA kuABAMdQip+fu3PJInfXEOaQENRvQozsyN0LzcLd+kubfVnuAQD9MrZVZSwutnlS LqcUPmwhjzG2nsMES1nj/ZT8TONoCM4zBGAJbLwWCSsGAQQB2kcPAQEHQNsGJWK2 lIae5B+RiHdZiraOWtCpac4sbJsWRxTzX0O1wsDCBBgWCgE0BYJgCWy8CRCpbZkd pHwKPUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfLArC5 t3FVCijtI4xw5ey4Vm3OIX7IABFr4CMtr+6VGQKbAgIeAb6gBBkWCgBvBYJgCWy8 CRDT2T23Dj8Nj0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmd9PP2JpjJX4K5NrdTXFFBXfdRHYrJxrvf9qp0+RvqP3xYhBBxVAqoUHRrq6M87 QtPZPbcOPw2PAADxyQD/YH57IApgyahm2Xw7n86BhIp2dCXdBjUp9m/sdFbhkXMB AK8sNJ081yj/Ov2ytyvGzVGcpus2mWK/uy1KS6SIF1UCFiEE5htjHVZmvtycJU55 qW2ZHaR8Cj0AAMeWAQDy0QsynJKEZC/IgVmVdHgN8Yv5gSQffV0sknRa9d/feQEA xD7J0bmLa7qCEwrtdreow/Vu/HbLkZ9I901KoDv5Bw3OOARgCWy8EgorBgEEAZdV AQUBAQdAVAaqyL2Tz+4WhZB9ustCRGHG8z6a/G1WQ/8aAE/RXRYDAQgJwsADBBgW CgB1BYJgCWy8CRCpbZkdpHwKPUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc3wSrK52u9wjO1dWTQeatovzPGvzMkGn0iGspM/kwHhQKbDAIe ARYhBOYbYx1WZr7cnCVOealtmR2kfAo9AACbOwD/ecDXbMvjCgIYRqhZ5n4g1jAK /Uiawl98J+zmoKyuS5cA/3yLapuwbwYbqaxUCbq51Q2y4iRkVvYtLKPmDmykC7IP xjMEYAlsyRYJKwYBBAHaRw8BAQdAVxnYANs2fQyvBYpvAcU1rCcuRtHipaBRWkX8 1NHq4ujCwAsEHxYKAH0FgmAJbMkDCwkHCRCv6IX5NL8TfEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme8DOPkigi8hiynV8owZnaO5v22Xvhu GyTxjUqYup1J4wMVCggCmwECHgEWIQTTZEMQo0ePZzTcJDav6IX5NL8TfAAAu0cA /j2KIyd/Hbbyfg7nLk8J8f/OIZNk5AKK5I1IH8t9BSoCAQC/DW6NXHFn/HlXqf0t fod6FtMEgzb+YDq4MeZoJi0kDs0RPGItN0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmAJbMkDCwkHCRCv6IX5NL8TfEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfK3pCphhNo5qmsIchPEsdrme9wbMq+uNIJhtJWjWSDvgMVCggC mQECmwECHgEWIQTTZEMQo0ePZzTcJDav6IX5NL8TfAAApQ4BANfQgoOr2UADjzJy fap+AvXx3ypd7xTqwXRZuhjaramxAP9kTB+ROsBomRMhv+1I4nnxHjicyqB2WeOw tDhFR7RgAcLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEHjFfZ3pXBbzRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5sLXQ9x8LHHAJnwn6w6 ZSmmkyupu0BQfXabfa+y4OkQFiEEv8MaaeqUdOuJ/MwueMV9nelcFvMAAJlWAP0Z oAMDMVUMBolgeagv1gIzpUvXiHUOt6qyQj92Q/MlogEAqoUWK3KyU6/L66oXLSHq l9t/meYQMdiO0eCn3OQZFwTCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRBGlqXG Keox+kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeFPEe6 HWckw1q9jXTxNXKXx5AkO3hS3BjHLq3Qi6U2JRYhBJK7GlYL/8zkcXsF3EaWpcYp 6jH6AABFUwEA91MLd5i1VI3h1VtHih3o+CMuxI2druSMwwHYTq/3h24A/2YrW54r 3ms3gYROf0zYzBhdD8rjXB3dgY23/ciRRdQGwsAHBBAWCgB5BYJgKGTrBYMJZ5o7 A4VkeAkQLH/cU18GqhRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnZiuPJhUhsBoULVO0mXNiPumFMgXYZjD1D8GPVyHkMI0WIQT9JyeLBRP4 /c+4Mu8sf9xTXwaqFAAAitMBALiAK18rLPGhiv6P8L4ngeXsA73Zll9tbLUPyouj No/dAQDk1lccH16y/VlSNlWQ6KmKyU7xN9UGMRR6Ud/A7rEhB8LABwQQFgoAeQWC YChk6wWDCWeaOwOFZHgJECr2o+5ddfo+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ5VD6GY4zIKc8qultDm2IVzHCq2B3hLdARxlGIIc98Go FiEEkKndPnchwiGejXTcKvaj7l11+j4AAFycAQDFCkP0HtCtd7/bMflMzZDdz/hz o+yjerfUoLdZeevaCgD/R7O4Z857G1NEWl10EWSJuBiTNKYMoYBv24lAcO2SVQfC wAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRAIU/27kA4FsEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcg5WZTFW3EzDbpaG1DOBV1fe11zMLG qbq0h7WKEboT/RYhBKLBndfJk1+LR5tdAwhT/buQDgWwAABlKAEAxinWBWNxNVmF BXQ8mLGuTEyrMugXD3R7EqJ5Nhu+LvgA/iM7swqb7fme2bEmEwsyI4Ia42tzfW53 GJelXiCa/8wMwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQfl20IOQOsR5HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnvq7v52R7ooiYoVRR GRmFzn/E2pe2+3m+z3694fZNAo8WIQS7CezvUKN2O3hrnYx+XbQg5A6xHgAAescB AOTmzNmRVyslPHjDzYlTTWUKJLspQfl2vq22HK3ASfiqAQDnJDoip8gRtMhGlgEC Jbveazi+mtLv9VT73sp+dtdQA8LABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEJZJ 74Gu/lFiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzSs S2NLLhuGj2FaCUGiBqW8EO+bD7RrhYU72AJ8qYM5FiEEJdjqq4lHBbtk1Kaolknv ga7+UWIAANPdAPoDImmQNo2ZgnQB1GxbEJ5evHMoXJ6XIVkbVftQ1+WXhQEAjwMv ex6KQG7PxxG4E4GC7D0ZibO1QxNpFMPHcRWUaQrCwAcEEBYKAHkFgmAoZOoFgwln mjsDhWR4CRAboBlQa+Z/u0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmdW21ndBoSJ3wKIEZc8hpbUXuSTyag2JCxTZe3QHe+hoBYhBEbS9c7Z vT1joR3f7hugGVBr5n+7AAAt7gD9H7+mtACHOhpY7IRUf79VxAayBo24QK7LJMiV WOP/fHMBAKR0Yf5InKVfTSKNFGKPGeCYgCP/ACyM4eCLD3jzHGQBwsAHBBAWCgB5 BYJgKGTqBYMJZ5o7A4VkeAkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jnks9Rj43HJ0pNFSV/3oBEtcwbkDmYw7nQ31RMUZ6I 2o4WIQQn41/rSGy/WxZgAnB4PxqPxyf8PQAAQNYBAP7mbMRyRraAr9lVLvP9fybX gc9RV7bNI3WGCpIC0AITAQCC+swFqvdTwafuKpuxiZHxxcHqNfYFMBEs8Ip8553M Bs4zBGAJbMkWCSsGAQQB2kcPAQEHQIM3bPQZAny2A4k8f2a6tB2f+oIFthWk+y89 LAqLlOoTwsDBBBgWCgEzBYJgCWzJCRCv6IX5NL8TfEcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfKm0V0QVvwU4RKBY/P/I0FPshGcOi3cm8l mFcIKt5OYwKbAgIeAb2gBBkWCgBvBYJgCWzJCRBQXspsjVK6xUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme9oyhBuLhn7CQuFztd5IAqzD2E S4KQUlVqvRZQFiVMWhYhBJtemn0SPoU/HSHgFVBeymyNUrrFAADrZAEAsBvPNfT1 weUKNb2Xz0xPiW/scy0A5DXTyqIeOANDaM0A+PXrjhA8q314Dt3nDKvapRE1Mxt2 8ggwyjTE6s948wwWIQTTZEMQo0ePZzTcJDav6IX5NL8TfAAA2OYA/0rRdR/xwvdz 3ycaj5uDJHpjPQ6c+HOMIjeslmfa6yJ5AQCVgA91Z8PY9jOCl02vbCw7IDrP62hQ CsWU7GKFu0fbCM44BGAJbMkSCisGAQQBl1UBBQEBB0AvSKwGmmKKmA9QUDAYLBw0 waqugtLW3vlytSnFxG5tUgMBCAnCwAMEGBYKAHUFgmAJbMkJEK/ohfk0vxN8RxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7JpuDRvFaxtYWS6 6SfapFOVcIKKIe6LktUgdFAuIEerApsMAh4BFiEE02RDEKNHj2c03CQ2r+iF+TS/ E3wAAPyxAP9O9Ipab0MHO4/WpFYcfeg6cqB1B8hQkbauRkpXChj6oQEAiue6mefg IP2/I5XEo4vsaluGb5I7JCQP9bMkIFd9DALGMwRgCWy8FgkrBgEEAdpHDwEBB0B4 qZHfQfInnCTadezJIlPzMQ29gHN5+BH8MoB+d9AAGsLACwQfFgoAfQWCYAlsvAML CQcJEAOSU+8OuZEERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ/Q7eerBMDLgk2+g5nwAejBdqRyXjOGJ1fPkPaE123iBAxUKCAKbAQIeARYh BDyTBEcQjm8aqSHZwAOSU+8OuZEEAAAvnQEA7nsdeq6C7fKnMafwcr8mlq8LEWQ9 VOuV91yoJlovmoQA/ijT9+pb1gVPMiHq+rBNjf1YHFm/Q88KJl5U1srjnmUMzRE8 YS02QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAlsvAMLCQcJEAOSU+8OuZEERxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6uqgm/q1CgEkCz2 cAo0anFq/f+Sqz1oP1B9QmKA+yU5AxUKCAKZAQKbAQIeARYhBDyTBEcQjm8aqSHZ wAOSU+8OuZEEAABx7wD+LE+BV6/+eFoNJFZ8/BGau2XPC+3loNsfs1P0IMX5ZY0B AJGQZh2NSqcXOkQfypOUj827gkvLNghMLVVOJ1F4tr0GwsAHBBAWCgB5BYJgKGTq BYMJZ5o7A4VkeAkQ/txuXEaqqxNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn61ntAU4UTe3Ja4jrivCE/2ubCJHumSDDmSSenXXoGIMWIQRH l3drJZj5fcnvlMr+3G5cRqqrEwAAJdkA/RKc52hGfLYjdhLs7oBfrDim04I6lxJl lOH7fwKXujVHAP9AwG7chnQFFBrodyMShFOoD52BJFaWHEe2l3i+elynBcLABwQQ FgoAeQWCYChk6QWDCWeaOwOFZHgJENyS1l+vRlMtRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0PwnXyNAGzCDKrKhEc3M65d9C6odjPkbcEc X4T3tVd1FiEEl+QI92oIlUYQRdda3JLWX69GUy0AACWvAQCGUPoACKChM4r6Rpva IQPp6JxEv6D/asXeEqUpHPloEwEAvgrdtSR/UVs+IoUuXu2+m8JQ/KkpBqtH0XVD 3e0vNgjCwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRDUN5qeriaiP0cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme4QgI7GSsebChry5+vkFK1 bBcF9MLQQ6vBmfz9I0kfcBYhBC+QxcU7EN/U99x9stQ3mp6uJqI/AAAxgwEAklwZ OWGVrrQ5i1Z7ONgIZj5K3TJeyI/+EP+B5n5Rt0MA/2vA27R5FwjCXLezr9V8VK6J iHuaVSK3gVzeJEWcfY4HwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQJcLA7oPW qQBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnpZaBexy0 2xzHPjvm2NX1GDUR+86vNr2+uxoOs/kAjn4WIQS5J9BtkhN+s0/H1aclwsDug9ap AAAA0kgBAK/4jUJOI/R6Y9lkhFsCLUKfXcVUtjiNjcSPP4Lnb94FAQDMPUphiS5Q DVuEOOzNN19MVuvd/FDNLFr6Pk4LJBW1CsLABwQQFgoAeQWCYChk6QWDCWeaOwOF ZHgJEPph5zxvXctGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZyNX9eJZ8PXkkg4aBhj6AQdhpG1pW6W40Qbbo1SuVb97FiEEU2rVYrkhe5g5 ZiBW+mHnPG9dy0YAADcUAQDtebh/KrCFiMgbhWLPWmbiMMbOMTwSy+AI6aOUhmfT qQEA8DVScJA7h/P9NDsidvtaOarHOO5/BI+JJpJGuQ5PeATCwAcEEBYKAHkFgmAo ZOgFgwlnmjsDhWR4CRCpbZkdpHwKPUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdq9aejGXGSV9Makytl7wgypQ8wUVW0g4yRyTvn0ysPRRYh BOYbYx1WZr7cnCVOealtmR2kfAo9AAA+lgD8CBTTwu/WFjKCoNATOtqoYeyHjZDA 5jYVk5rR47Z+Ni0A/i2gEqdaDgi8DZ9rqqTlco28zw+Rx4b3NBqA+hQdmYUOwsAH BBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQm9VcnhM+jL5HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn3Fh4UODCSdmgcV5mLzAwhmEZV3mx2h5r fQvtS2ma5nsWIQRDUlV7q3P/lbYy7l2b1VyeEz6MvgAADfUA/RVCw3lFzpVS2+Cm I6semaJ8gXs0bC2Av/HwsH/HP7rgAP9myKJeBHFZU6ervMDIVxkcQvUhBHSbBfxX I+GZeyWeAMLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEN36d52RxpiURxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3l8psupvp1PrUUEGr6i qbmXHNOdsYybQxnEqSBpg9qdFiEEeXTATo1bVA0jzU5i3fp3nZHGmJQAAJkyAP0b 2d/FIzEnaKLp5hT+pd0Gud0KR6w5DebOlCrazv6uwQD/ceXOZwa/nteUrbkCsUkC 51aUmCeb+F+Kgo8CEGVxRwnCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRAb/puj 9KvUDkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcxohLS EL60n2ULrLujflzCQjiLErx9Y1llG9ZezaSVlhYhBDYwgunusi5QrTA9ixv+m6P0 q9QOAAB2rQEAqnhh/O+/elBwCE1LEAm7P1wjW7Ap3zTLO6lOZ8QXiK8A/1GDjBwN uKJK4f4o9UZOPRGKwcnyrL9WA8HPJFL5kHAGzjMEYAlsvBYJKwYBBAHaRw8BAQdA BhC1cg9AkLCLbyeZCOaX0wJoKwCmIxtLXBaXOtrrRU/CwMIEGBYKATQFgmAJbLwJ EAOSU+8OuZEERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5UGLGeBQrWj1CRtKJ44YxgUWnkgetxtNjm0TQin67rhApsCAh4BvqAEGRYKAG8F gmAJbLwJEFqSE8pONxPeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ3GQjFbl87nY67b62mOBgQsh0HMa/MjGOv/c66ymus2oFiEEQq6WLx1Y AvXhpgx7WpITyk43E94AABdxAQCttkfDM+RqLJNMHVQDrSxL9L6oW0sPobwr7Qtg Hl6VbgEAhm8tEAqyLogpgQTAPkDjinPdmWx25c3h8tLLvt7dnwwWIQQ8kwRHEI5v Gqkh2cADklPvDrmRBAAA0tQA/j18RiiV/q4BxeKHTLOIPuqwVCctsZM9YLjfKS06 VkR+AQD/ljP/1e4DO3SQlDaPfDNblEdDge1qL3m14zakWHTdCM44BGAJbLwSCisG AQQBl1UBBQEBB0CmPmoWB+ATMHviw3DV/AqPPnjGjfiDeL3RxKD8TwI3IwMBCAnC wAMEGBYKAHUFgmAJbLwJEAOSU+8OuZEERxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZx+iTFsvH6+bePYUUDSifm6tECnfWNCrQh8SNHPdmfFO ApsMAh4BFiEEPJMERxCObxqpIdnAA5JT7w65kQQAAHZjAP0clbXmK+njhZbhFPhl s0IWobduA59haRQpNoRPWieMgAEA5vo1eMaQMaMdQXIEOaCcfmPmNH39XC6sLhXE JtJwyQLGMwRgCWznFgkrBgEEAdpHDwEBB0AFhTK7LS+hKkkyCfqzLY2icJuNSoCC HyppSameZZGmpcLACwQfFgoAfQWCYAls5wMLCQcJEO5Hcw5dHXOQRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0tDnCv+aQl1nlOkaeXBmG93 FuUbbY34mtUXKJeS8fbkAxUKCAKbAQIeARYhBBbhB6BohsbB4aRHx+5Hcw5dHXOQ AACptwD+OvXy35H426XO8mIwpK6w+1v9dnmKPYcvTrm3vnFHvPsBAMN7gXTFbJ0S oRrOkqYqRhhrw0NUcw5B94lSIv9wiGMEzRE8ZC0yQGV4YW1wbGUub3JnPsLADgQT FgoAgAWCYAls5wMLCQcJEO5Hcw5dHXOQRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ9V2HaGrMS8Rqu2V4b+rlTXWyGPBtgAyKYRBc1EpYlai AxUKCAKZAQKbAQIeARYhBBbhB6BohsbB4aRHx+5Hcw5dHXOQAAAecQEA8rjOR0i1 S+86D83L0Q8gFdt6GOwTs6FXTYhJ16g1nzkA/2wIfZe8oaxLGwESXBxVoamSRWQW OnYbe8TJpKGOFRcOwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQWKOCMX9U18VH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnYrrSauDQzb1b 6OLY0ra8YlqrfSLWVmWtaNS3g4jwPNsWIQTPcB53t5/r3t+ItFVYo4Ixf1TXxQAA i8kA/1a1jAYQ4D2/7Aat+xQP2PDh0OrvGbWKStGeHiMvc+cYAQC72Tsje6VqFoYZ A4bEW81L0h9oqCDpDnXvPdY58OGYA8LABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJ ECKHehKLb6sxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z9LcFsQ72uuTcdDL89gkbzUTpjmP4qj4jzGCGB+57qWWFiEE8wK4PpDNasPjxZ07 Iod6EotvqzEAAJJqAQCdxuoRU1BdmdzYW13XcBlbqOuLUnIgXiuB5dqR6wy8BwD/ aiGu1l3RPdCHFkpy2atcU8+/sqEjtrUZ1uDUcN7ZPgzCwAcEEBYKAHkFgmAoZO8F gwlnmjsDhWR4CRClTV1jsL/Ge0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfkZlPjp6Jp/nRcx37/s3Y9srxDzPkZboyd56dLwYE0FBYhBKNb 066nI2L1w6YQkKVNXWOwv8Z7AAByMgEA0FuMp7fXbsPFFJmkSm3ckGcj/EipeA17 BUhCVAAJFikBAJcYRBc18gadjfgberJ0tZhuYUdwisRoORjA0XCv8X8AwsAHBBAW CgB5BYJgKGTvBYMJZ5o7A4VkeAkQ1uhlo7iPiIFHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jn0+5gUUhLZ5BEGd48tTdRisL12dvvSPvh+68X rSgNiMEWIQS+bFch7cuoF0xZ2ZbW6GWjuI+IgQAA0uoBAOunUNQJQDkWhBG7IfoE iHl9xeE7VMqEt2OpSmPcNFABAP4+/6DzENnnk/luS5DApzHpIMTeehSEAJ20i4v8 11XJC8LABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEHx6ioJUGvBfRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwX42hPYfgIhGtz1tCj5OdGM x+K3cmN1Bz4TAh8HaldZFiEEywlhwWomKeKFW2FDfHqKglQa8F8AAAJNAQD0Mb83 4e47yFTA4rJIe6QfZt1HrDw0oedNiqiPLk0CYgD/UuUROyZNXP6Wv3d6x3FiwzMZ of30WIVaMBUx5LYAZAnCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDzUJkAfv3Y PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeyf83D0C+m vXu/NiBJR9wlNOFNUWlMyJVBApuHflUlURYhBKNx4aCK7hlVS9j2/vNQmQB+/dg+ AADRSgD/RODZcgp7NmOyRsDU4G//C9gNz/o3dURcsWm/3CP2ZJkA/RHO+0LWW212 qKEaALiN3KIkJNPPMKTciRy2ksW9GCUKwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4Vk eAkQ6tcv95FAeLJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn/UUij7lY6n0uK/PqWeb/vbO44C4tWLEt/u6WQlqThDIWIQR6gNtTMLfZANW9 H4Lq1y/3kUB4sgAAf1kA/106rnCiXc0IRQIIFez/3+k+dtzqheie+p0izqG+SIkA APoCQdJdlwXSA59qHb3paCJTP135ivaCerOUmxcoOt9UCcLABwQQFgoAeQWCYChk 7gWDCWeaOwOFZHgJEBZpglYeFAwDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ+mQ5OTNAuX1VXVbMNIYfjwKSKqLG0Pf34Z53kSQ0P54FiEE wkzAkQLSLjjoOTxVFmmCVh4UDAMAAJGlAQDFkdvbGMuMnunt4ar9P6BSEF1sfRKh ZqFdgeDI+Tj20wD9F98mqTdldDhpYdOSPGw0+O9a5BrVAqhrZvxYLomTuQjCwAcE EBYKAHkFgmAoZO4FgwlnmjsDhWR4CRD9nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmf119iG1szK4kygkQ8KaKDXfqvxPXZJoSLK G3Z5pvawaRYhBBPIuNwgIJyw4VVk4f2diwFXRQILAAD9LQEAy1kazgQrNDdZSNHl OqgMG+MEbccnYYohJTwrigM4Ui8A/iGCRhAP7lRmCvUXNX+NAkl4x/1c/PFfVlmH YbigqaABzjMEYAls5xYJKwYBBAHaRw8BAQdA6shMu9FbRbkD5YTYhNud24iJSxA2 2GnXTCzVTKMpZRXCwMIEGBYKATQFgmAJbOcJEO5Hcw5dHXOQRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1oNNUJM8abeuuSRV4Hfy77pB6ES gebRVvqvsoO4DAqtApsCAh4BvqAEGRYKAG8FgmAJbOcJEJGwmBkzsOFSRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+xTGS7sdWS2OisURBHH qf+BT7+eEv0zD6Wb4I/TW9ytFiEEAlbeEcuk9k9XLR2bkbCYGTOw4VIAAHESAQCU 9lUIdrDlPJ6RUmGLbMheOWKzU1Gxy9R/dcYsP31EFQEAzh4pBAKm6osPmObpuT1i Soa1N36T9dOw091Q3z9I7ggWIQQW4QegaIbGweGkR8fuR3MOXR1zkAAAlUYBAIKZ 1B2UPqkjtoi50/ws3U+ovOdVMmKiHQ1tpxEbsmZ4AQDYKyezjVfg+U7rr/X0BSyo 9lEmMgqVusBGZcJaBD1LDc44BGAJbOcSCisGAQQBl1UBBQEBB0DheE2oQY5c4cQV k7/p8K9fjyrSF3POK6zHTT46dWoPKAMBCAnCwAMEGBYKAHUFgmAJbOcJEO5Hcw5d HXOQRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0VYWCbP khLnlYN5AfzsD3jj6vfqcW93OIsutC0y2mCYApsMAh4BFiEEFuEHoGiGxsHhpEfH 7kdzDl0dc5AAAGjNAP0eq+LK25rasL4qzhIIHPf3MPUDtMULPx4O2den7Y9EKgD/ fIW8eakfl+b5KfA/v253SwAM4XFgIMTq+oAgbRJ3hw/GMwRgCWzIFgkrBgEEAdpH DwEBB0Cy7VgSWUD0d7ezlRpxyG0McQK2oLeZly/THEfMTeWhGsLACwQfFgoAfQWC YAlsyAMLCQcJEJZJ74Gu/lFiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZyGNxS+k3OHPFV1pzLZ6cF0/jgsnKNpJ4Pd8i1Q4p0ZWAxUKCAKb AQIeARYhBCXY6quJRwW7ZNSmqJZJ74Gu/lFiAADBdgEAhsq8flkfOHrKUDwQ1HDP zjycV7XHDNBLlqYQsTve5aEA/ip/RYVlXZS+fmkp9oY62xFVRtsGuflXrPiTjSvx 3vUOzRE8Yi0wQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAlsyAMLCQcJEJZJ74Gu /lFiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5ltD37j EEDIar2jnruPkCbIhdxcwkn5E//KAC6oxC3/AxUKCAKZAQKbAQIeARYhBCXY6quJ RwW7ZNSmqJZJ74Gu/lFiAABAngEAsfkwY6CXsGzNJx5HLD9AThkQbIMLJWS03BN8 07FFP7YA/0yG8NiE/SXxpWJDO7x3uhIq1Or0fRXtm+fFBOpkTQMEwsAHBBAWCgB5 BYJgKGTsBYMJZ5o7A4VkeAkQRpalxinqMfpHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jn8fm7Wun5bGwCfy3NMK1U8+c767iiykhwREKOnl0u UcQWIQSSuxpWC//M5HF7BdxGlqXGKeox+gAAWAMBAINO9IvAQkB6y5CwJLM1bRxW CGm2tsccpf/p6gotCGGHAQD8wpfAfzgMo0iL0iBH/L4fsWC2bZXPEOqs82ESU+xR AMLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJECx/3FNfBqoURxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxcfX0qiqBKaXD+BmDXxSPe0Ihtc SssCNjzOusBQH0XQFiEE/ScniwUT+P3PuDLvLH/cU18GqhQAALSKAP4s87u8/y77 vri0pbzRCulQfYgAFx26L88d2D4Lusi2dgD/QKnmzTbFrtdTRokRvhDsivhRBHxB l9dpWVTvs65CUgrCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRB+XbQg5A6xHkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfL22iih4SHo+Vd EFlGMset4qcDXSOwJzmbqjnTP1O60hYhBLsJ7O9Qo3Y7eGudjH5dtCDkDrEeAAAT UgD+MN5TR/+No0okz9mIg8DJB7dORyG/FoirVN7SuZlDsooA/jIfz3BXVEePI8Ns iuwIQffnR7eReWXVflnXvw1qj14FwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQ r+iF+TS/E3xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn nKDTTc+vu4UKI17sR+irchkdw716QwTuyJh9/TW7CREWIQTTZEMQo0ePZzTcJDav 6IX5NL8TfAAAG04A/j/q2Rsbyo1bjxZf0hxcO/UPKUWWHBhh1s/58+mvoBzoAQCC MJJC3ZfcRDWkJy+eaUmm1OnpZr//1oejj1N0s6m5C8LABwQQFgoAeQWCYChk6wWD CWeaOwOFZHgJEHjFfZ3pXBbzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ9S190w3akz4DulH2WrUSZ4YVQx6l9KrI8I9BMekv4afFiEEv8Ma aeqUdOuJ/MwueMV9nelcFvMAACGWAQCOpwctERilYtVhbYPqPbH0fuVERhYes45b 87I8N0DL0gD/R6wGIdGLeT3R3pePTLUtPeRuyYfopSXYzfu6f/FPBw7CwAcEEBYK AHkFgmAoZOsFgwlnmjsDhWR4CRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcme/BTQ4hUh4LseUoDnvZ5DTcbiv9zLRcDUJABkO uJW5dBYhBJCp3T53IcIhno103Cr2o+5ddfo+AAC+uAEApRKpDF2KorbTRs81/iOP FJM5PoLa6DcPpDNARHFgBGIA/17CuyArWPYoMEq88f2KA+RH0hv0Qs/Y2L6/T3ko b/YOwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQ3fp3nZHGmJRHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn2r2rQWFtpfzB12x0nsGjGXCr sqy6Y5mN4i/MCPrors4WIQR5dMBOjVtUDSPNTmLd+nedkcaYlAAApAUA/jHxQr+A 5bZZQmupCs5NK+FEoV1xukzgNdMUFhGy+1ELAPoDNH5qKceGSyvQ8PqMX+YtAhmA b8r6V/bn4HnEOb+lD8LABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEAhT/buQDgWw RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0QnJbtHv6VV 3xJU2vP0iY8m5MC7Ilwd1c71OasbqLNKFiEEosGd18mTX4tHm10DCFP9u5AOBbAA AJroAP49kcX2yl7mGErg97ztjkZ9WrTZ75W/mXn//dO8a/9eewD+PQOn1MZs/aoT PgeoNa9SClSEaAGtA3TXvxMFsTmfNQ7CwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4 CRAboBlQa+Z/u0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmccyT7I5kzjPmesqlYRykFgBHxmcRvDkyC8wfG1RskNbBYhBEbS9c7ZvT1joR3f 7hugGVBr5n+7AADVIwD/YlhmyIp/v7XV847gmWcnUPb7K7l2McfDBCUWYJ6yXFwA /Rd9V3lrl8NUMlHZtZYcQjs7VNkgUUK4r47spM605wwOwsAHBBAWCgB5BYJgKGTq BYMJZ5o7A4VkeAkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnfMmeVq60zYcsFqKPFlv4ybj5Llol0h1uYn4b6y4ByFYWIQQn 41/rSGy/WxZgAnB4PxqPxyf8PQAACAcBAPsXEwdNSUFwv+QW9DEgqTTJsPZ52ypu JOM0d/eE0C3HAP9cCEUymyuUrmS/byUJsEGIlfIW34dU/lDvg9e7ijzACs4zBGAJ bMgWCSsGAQQB2kcPAQEHQGb+iACsAlOY9h77sFvCTNAldb89oDBXzOPLN69ghvJQ wsDCBBgWCgE0BYJgCWzICRCWSe+Brv5RYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmfyab7VMuH2JtsoJ+Bv1qyfsjutITHUvhMnYPfFjlPo owKbAgIeAb6gBBkWCgBvBYJgCWzICRAOhgHtFUzGLUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmeuuOSe1XcyXUrzLRcqAYfgOdUyKrtFWTlA euVAObDkHhYhBEf6Hy0Dx24BFGVLkg6GAe0VTMYtAACHEAD+Pufhnq2FZ5cLNlDp 79MvGsyiFMa/tSdP7tC8YivERyUA+gNJPoy+aGDIU7NtiM7pt/389A7v20tOdLqy VLPH8RIOFiEEJdjqq4lHBbtk1Kaolknvga7+UWIAAOWrAP4lCQRFSBGlYlaREuwW OFfB89fdvpHH9b0nkcG2680QRgEAlnUylmxuv4qZrfDHziC8OYUEs2mZ6tYDB+Tm emPTVALOOARgCWzIEgorBgEEAZdVAQUBAQdAQ5mnnt2cxsKwUEzR0gUGI2JEMbLB Jc1R9BXIBCIgNksDAQgJwsADBBgWCgB1BYJgCWzICRCWSe+Brv5RYkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdY53PXPX1O3Uh3L4czXbPH I1A0vDITQYXXmpBiElAkmAKbDAIeARYhBCXY6quJRwW7ZNSmqJZJ74Gu/lFiAAC3 iwEAycx5pA+4PX6jtsFa4qCvtJT0gEepiqEDP+SWkmZTbP4A/2QssK1vntxvwek0 wa0vHwDrjjG7OZgHnbs5uNjdpJoOxjMEYAls5xYJKwYBBAHaRw8BAQdAs79LvNns 2Y2vdZ0FnRaTfnHEAqFoRXTJ1/GJ/Bgcqj/CwAsEHxYKAH0FgmAJbOcDCwkHCRD9 nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcp dNNdXn++mIxeHlowpe3iZHI4pUuUvvZoWkFmX3RMXgMVCggCmwECHgEWIQQTyLjc ICCcsOFVZOH9nYsBV0UCCwAAmmoBAPAFjdlEtuIANmocjcApvw8kSiIcsyDrpuJr 0tL4BRIqAQDRBdnkg49dheLTQacElx+gpoRQSFdJYzNLK2honUhuDc0RPGQtNEBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbOcDCwkHCRD9nYsBV0UCC0cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfkyRcaEFgxEnmzAFhbvQb8 Vy0aXfciSkAlfLQWUPpOHgMVCggCmQECmwECHgEWIQQTyLjcICCcsOFVZOH9nYsB V0UCCwAAY3MA/2MEcaYBl8NMQTQL9K7rtYa02+JmNmxiRIRe60buX3/cAP9OWUEQ YdUvAFYpUg8vGYNClPr7CfySRaeD2jRziFbYDcLABwQQFgoAeQWCYChk7wWDCWea OwOFZHgJECKHehKLb6sxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ825hHSWQIWqsNxYfSdhHfpv53SZBIfjhg6qzuQnIgoJFiEE8wK4PpDN asPjxZ07Iod6EotvqzEAAFDsAP9EsBQS5EQ3P7vl2YGzvmeMykkgXW2fX7jIFnFT VXYq+gD/a8hvy8vpKyehpXs5pyPtZEKg4xa2uyu3E9vba269kQbCwAcEEBYKAHkF gmAoZO8FgwlnmjsDhWR4CRB8eoqCVBrwX0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmdI8oN413BNw3u3XcTcWcNbjMK37xk+R086zE+3HN39 mxYhBMsJYcFqJinihVthQ3x6ioJUGvBfAABJtgEAhwImY1IPf9xGibFjivq42ZbT jXon11fJpOjrqmVsmUwA/jTd+zB//oqCHOr39NoiRZaEKj9X1JciGwoo7R9xYfoE wsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQpU1dY7C/xntHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnczhZYZ+BwinGoJ0TC4sNw3rks80G 97MH7V4KM4UlpeYWIQSjW9OupyNi9cOmEJClTV1jsL/GewAAJzkBAIu1wXy01I2H 3hXk6nG+dKk99TYKypZs2UKrQNe2h7GOAQDNWS4O5a+moaXBWjveGEPd7OoOvEnb BwXUfvYBVV1CC8LABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEFijgjF/VNfFRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9ZN+c9I8SZ7zG9S MnzyzBB1/XGN9sl/G2BHxOAydiWRFiEEz3Aed7ef697fiLRVWKOCMX9U18UAAOIP AQCvQXQe/hw0IjS5v7DErHb4l5mLLxMbbNaxl1ikmudBbgD/YesMlXE09ftUW+DQ 8a3WrmtQzFY++SBe156oXMIlrw3CwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRDW 6GWjuI+IgUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfm HJGTk4Gxp5hU4chMEa5qxL/P6BVFyUP0eD7VJMUWeRYhBL5sVyHty6gXTFnZltbo ZaO4j4iBAADPcAEAxOchFK7XHNHrWedwZe2D5ztKO+mNeQSPXfZVzh+PVRgBAKyE NtfkFnm/DPC+0RCiGFeNZMxsqT2KsVB9tVZZ9BcJwsAHBBAWCgB5BYJgKGTuBYMJ Z5o7A4VkeAkQ7kdzDl0dc5BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnM2aiNMb8UYAvdqr5kwaPEigQgpknhfPXtGe9xEEZGSUWIQQW4Qeg aIbGweGkR8fuR3MOXR1zkAAAo9YA+gP7pXa4s9l4HVimQvUrC7u1elbnUE4V+nBP 9TygxED8AQCLoi1HJqAakiMewQQ14tFzzbbYU894xqM22CeVsguvB8LABwQQFgoA eQWCYChk7gWDCWeaOwOFZHgJEBZpglYeFAwDRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ+ULMoiyzuaIcLVCz60+bTlRhSG+baF/8J+4cv/Q GZLyFiEEwkzAkQLSLjjoOTxVFmmCVh4UDAMAAI8TAP9DGenkRpJSwSB+1Bf8NOnj Lg8ve7CM7za64iqiQxrbaAD/XU4tAkFqNoJnUMMvlyqLVXnrmeGZWcW7Y+vB2mgK lgrCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDzUJkAfv3YPkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmclzCNsK629ekuGiuIVG3fX6cVm ivAuJfwRGMP9XaKPmhYhBKNx4aCK7hlVS9j2/vNQmQB+/dg+AACt7gD/TYuve4yI Ia4ISWyqZ3CfoADm71Th1nzUxiPq4/6X378BAPazV/EQloBtZqkY7l6ZLsXmBgLY ecZOZGi+fRo0rooIwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ6tcv95FAeLJH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnqfDVjksGwFCg 7rhB6vUdYPGvqfa791mgYhs9oIoIZaAWIQR6gNtTMLfZANW9H4Lq1y/3kUB4sgAA OYIA/3GwCZZEsv7hzLlCC1gtCR05Q8M81L/mOGd/aTUQHWHmAQDo8b+YJrHqCLEZ I52AkPQNR6lrpP7y3o7HegWS3FKEC84zBGAJbOcWCSsGAQQB2kcPAQEHQChlMYuy Y3jEoN1T8puVLvU0dOvXq3Gs6bO1Rp07KLOiwsDCBBgWCgE0BYJgCWznCRD9nYsB V0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdE3okY T9GatTw4FnDmIjbZUak8zX7/R+E0DjoudPPNzQKbAgIeAb6gBBkWCgBvBYJgCWzn CRC1Obc9YOJxX0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeCFe7xWRhgG6mXfJbA/AZbX/TeEbijNuY9emCZHP04lBYhBMRKShhRcEKpxtvr d7U5tz1g4nFfAABlbgD+L62LK5+OyyKI+gKI//cHlCpwwDWDgNp+oRI3/ZhByg8B AMHRI60GEiAjSVvbZJZoZOphat+UA5ZgQajkhZMuAnUHFiEEE8i43CAgnLDhVWTh /Z2LAVdFAgsAAK1QAP0WNDdZSLSXA0PT/7y7ZzRBIq4WnnP4oNGtMxLcDDStFwEA +a6M8ai9YVygcLP0MNCc8CpvsHBpSlt9TnGPhZATRwfOOARgCWznEgorBgEEAZdV AQUBAQdAu/v5IvJTQzfbuCUpQ0S0jGyCYYDICTiueHp2QavrYTADAQgJwsADBBgW CgB1BYJgCWznCRD9nYsBV0UCC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdcGNGOtho9QGPSB6b416+iNiBq9ebf/PK98/BCA4kxmAKbDAIe ARYhBBPIuNwgIJyw4VVk4f2diwFXRQILAAD2oAD8Ct+xEGn4vkxQWvcxn9r0dJd5 agFp239HXbM5GjXboEcBAP0WDh9jB4rLbb75dakajSC2gFWoclLq5NXpRM9qYcUA xjMEYAlsyRYJKwYBBAHaRw8BAQdAnx+wVHpmlfrQvzDgBnaxB5tjJUNpY385Cm2O SsTgv3jCwAsEHxYKAH0FgmAJbMkDCwkHCRAsf9xTXwaqFEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmepF3EquBM1MMxNM+NDSa2/ioiKc+/B p0NvlmhVJmWZhgMVCggCmwECHgEWIQT9JyeLBRP4/c+4Mu8sf9xTXwaqFAAATk8A /0a7dD/Uhf0sPpi6tmOI1eqRZCWWoqYnK/y1jQhvAYRmAQCqPLW52hbLZLTKgtcw fParL955ZxCVAQziANLQaUFIC80RPGItNkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmAJbMkDCwkHCRAsf9xTXwaqFEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfeORLWkCZAEE6d9HdpaxIRNVbFX2ubZFuJNKvyTOFE0AMVCggC mQECmwECHgEWIQT9JyeLBRP4/c+4Mu8sf9xTXwaqFAAAl00A/jSCiy+t1vXtuy1s hb6DMC7hU9XCQbjA1c/NjNtueaciAP9XGONUYQGBg9nR0lZCX07JIf4jlcKNpN9R yX5lQJXmD8LABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEHjFfZ3pXBbzRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ026xhaLl5HBmtVer3NS 4GuYuzSNiPZS60u4uM2YhWOxFiEEv8MaaeqUdOuJ/MwueMV9nelcFvMAADw5AP0W IvQ7cbu/tG3f4UZIxdgL41ub4ozDrkP4iWm+61P2fwD+LJdu+669VCDD1xH1hjtn 3B0vcLoEh2PHfNCqLUVnJQnCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRBGlqXG Keox+kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc6dzSb oycWB1VSRe2y/URmiKBt8h8/AV7h8+UzvtnInRYhBJK7GlYL/8zkcXsF3EaWpcYp 6jH6AAA0nAEAiwYxH2UpPruFG9xlpffCrHzIcdQt4DHjA25DZHNegu8A/2YhmnVl N0Wrx8vpM3NoJu8j5LGPxysr0aDqSn7DLJgHwsAHBBAWCgB5BYJgKGTrBYMJZ5o7 A4VkeAkQCFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnBQp9l7Uh0gyYsw+uuCIrLEszTRC12cc5eUMTAOFdYL8WIQSiwZ3XyZNf i0ebXQMIU/27kA4FsAAAEcgA/jq7KQV34Yt4cNWk0WxgrGf9tNBZWObOLyOtrOcS hEVkAP48EEs01YOxGeNj6DGGDK2wrL1VMXT92YF+zdbiytM/C8LABwQQFgoAeQWC YChk6wWDCWeaOwOFZHgJEK/ohfk0vxN8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ+m7omPAEm3Rt6BEz5GDPcjguc6roEb1sBakjSo5fZOe FiEE02RDEKNHj2c03CQ2r+iF+TS/E3wAAOsSAP97/RTiS7yae/8sMcuZwJFY/W2H 2XZRrRhD8P3Q+jJfigD/bp7nI0zsKu/m4jv18kn/snEAP36GJSU3VhNfxKGSXwDC wAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeFc5rM4M+VgMcwFOrAMgOtNJIygsTq 6qWZpSlcEMQ8HhYhBJCp3T53IcIhno103Cr2o+5ddfo+AAA5DAEA9H/CE4Svf8Y+ /y/0PJUVXMn1HpAVeHto6sBn/4fhVO8A/jYd1r9K131jOpSBjeNR4nSymOQWXlRg mVWnlyuPzT8OwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQfl20IOQOsR5HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnPGt8Iae7CtqzCWnR hxBhmZFygIWmPQvHOpZF2sMJFjUWIQS7CezvUKN2O3hrnYx+XbQg5A6xHgAAEPMB APZqkfs1bMWHbBoIILfI35poeZqYctSZvqa4xaZdY5H0AQDa0B8tNaZYi/WFC/lo Uhcrtb3+S0VyqMK7HysAzCq5AsLABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEBug GVBr5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ65r tMxzhcph0fldcc0cGQYcRhBpxvn/qrag00igo2SZFiEERtL1ztm9PWOhHd/uG6AZ UGvmf7sAAARLAP4kGWLoxaU10Adu5HIhyk+TB1eWfT3hzrx6rtafluQ1MgD+Nvy4 PKrW1VAhwo85Q6vrfF8RJGCd9cVg2BwG6Q0TwgrCwAcEEBYKAHkFgmAoZOoFgwln mjsDhWR4CRB4PxqPxyf8PUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmdQwbml+IhUDE6fzUDnzGbK9hqmHwEf4/p5rAYP2uUO/hYhBCfjX+tI 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 zTug7KtyNQBYNrQeEWogDYfNuQD+Kd9iSMaadTybktBxPQGLXneexxTRaCvHwo2C NAV0PAXCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDcw6J0EK4qPkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd0DUyak1evSOYqupNnuE/P H5L5AlpEq1Z1v9Tg0AQ7TRYhBAxg1DTVE8RlvAdCqtzDonQQrio+AACifwD/RXDd dlD0t7brX8qPencdACgI00bAtMvI0nnEXXECuNABAMMQo1j9CRPR8H3YSN4BZyDB CwFPuiL6xoRLWx+JqxcFwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ8cXMJ7PZ l/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnfTHKRiMD 6lnBe6Kor68enOq7sK/gHQDojFM8rTx4ULEWIQRO1qUxv2JR58NsRTnxxcwns9mX 8QAALDMA/3MA6eyUxh3P1smlzTklaJJrewnhP2hmLCNjnhcTb/1pAQC13tW1D4G9 aumcId9ynKDX+pYDAXQbmgtfzZF3NinrAsLABwQQFgoAeQWCYChk7QWDCWeaOwOF ZHgJEDrDe94xvmWhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ3ZfNgvgZt9n/hsr/45C6EH/kWlpHPkDRqXzzJya5kI6FiEEVow3YiNvvHaF S9TmOsN73jG+ZaEAALxgAQCdt5EYW60BTwmk9eLdN8Ws1AIX20b638CnsqvOVMJo FwD/QF6OjTL8uIK1LQsaSMxqQl664VhmbrXNDpj4vQFdnw3CwAcEEBYKAHkFgmAo ZOwFgwlnmjsDhWR4CRALrNONLm0rQ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdYe2ysrNqDd0vaksQajml0G4gQLmQ0tXyhz7+m3yQGQxYh BA+/mkilq+XKAJTuSQus040ubStDAAD0mAD9Ha51tE0zuFvEMoMNjLLfLhjS0IAf U3EUKLYUIitLUzcA/il2aQZxRw03jHa5D6Mhe8Aa1NqtaHeIoOU+aBNljTAPwsAH BBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQEKm7MCPL9VhHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnq1WlLvcxu6hndx2Kp/cQJAlXdVRyEKm2 4TVc4KG+0C0WIQS+N9vEavgEKJ3mhL0QqbswI8v1WAAAH/YBALLZqf81w33VbtUD sNPrA3QRSkGmTf8KRkqVfC2B0m+cAQC0iprvYpoA1m57T84YnwQ+z+oQTI4EtUy+ fFwFcyVuCcLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEH+tscP++/5ZRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZz+W9svQgdazfSkmsmtV KcxWYpQambvC7aXAmFdVU2/TFiEEoM2HWCwhdDwOMGN/f62xw/77/lkAAEuyAQCz pMDL7JaL1+QW1EidtUi2YV2l42maBb5eT6OcwLEg6gD/dPF6zH+u0BKcSMdAy9x9 DQl3Qk8m952B/84GmagDywfCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRDNzBrI RkyP5UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeOM8pJ K/smKd3SOEvYZU5fCT7RcrAUgxiC+Q76QRZ28BYhBFJ3wU+dN6D01hXdnM3MGshG TI/lAAB95gEA/GVc/cadBS7IB435qeAI16AvJYu5wl1J5FpWTWMzXDsA/3m9uMsp NJbjeUsPNh9EsWaKGHEtDObc2+W1wsvASfsLzjMEYAls1RYJKwYBBAHaRw8BAQdA erOKE0bRjM/cQXhW1VZvyXM9g0Gr9Lj4i9DAdrKFNdrCwMIEGBYKATQFgmAJbNUJ EO8QMDYDJb0TRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z0Fn3J3gdUjUAySwtseQJOA7nVjUousewLVpbBv0NNdwApsCAh4BvqAEGRYKAG8F gmAJbNUJEOF/rfhbRO3LRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ80tofgUsgIjLZ2rbyjc+4+8NKhowVShZIB29xWsdJe3FiEECZwxSYQT qswPb//e4X+t+FtE7csAAN9OAP40aO3Itpwzup+s+ufbrKJkZBthAVs9dNWtUdjw OfrMYgEA5RfUV+2nzuRVaD1EjqbrPA6K0BMZrx74bcY0xJA3oAcWIQRscAQ+GQNb 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 bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+sAEa64ZWCyi1uZER0HCbGpCvXP HfNGCqc4hVbUPPEWApsCAh4BvqAEGRYKAG8FgmAJbMkJEBGLyoB2rEY4RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZznriYDVXSrkOR6jkzaf A15Ei+lnvsT4rg0kBzZaSRPtFiEENnb7D6DpsKG7dZvkEYvKgHasRjgAAH25APwK Pu6hL+bhbzru/aPxQjqV06W2tAkfBB2us9rPsC4LNgD+KxRogJefUlR6a1dnZlPh wUyF11mKD5eb1zmph21oqQEWIQS/wxpp6pR064n8zC54xX2d6VwW8wAA0dwA+OPL yaupaqLe2eIKA/Umeb7xKOoUDniIV5gwX9HbiL8BAKllDd7XQtk6tjBfhAf52+MW vh1z4NG68qoWD7dB1x0GzjgEYAlsyRIKKwYBBAGXVQEFAQEHQP5512SNBPXVvm9F aFpLfV+34iwfHPjZzT5S5G4tmzZ6AwEICcLAAwQYFgoAdQWCYAlsyQkQeMV9nelc FvNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnqlAP+L9h WkbiOSmTsbIXviFj9siOU3+kBsrVeFlhmqkCmwwCHgEWIQS/wxpp6pR064n8zC54 xX2d6VwW8wAAKbkBAP6sEG5InZUJx+ZhfXiYtoxwBUTxqCXGGcp6TtiSKd3KAQCw 78+VnXEfbUGyXMCuOcGA4cyqgzwEJDroQEOM5N9RBcYzBGAJbNUWCSsGAQQB2kcP AQEHQJezGaDSLZKzZFL+wWrDdxsfyLnacgNLE5GuAOkwwAU0wsALBB8WCgB9BYJg CWzVAwsJBwkQ1F7gIm1d9x5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn4X8yy7BA6KTSd8HEKbwFaiwHN8HKg7zY27/VUlWLiDUDFQoIApsB Ah4BFiEEtCr9MLsb3S6567241F7gIm1d9x4AAFMWAQCCGFfUWP1DgpuORzRYfGke C9GcYOoT6O/dp6ad/Za38gD/Q28IwujpOX75uoH8jrnj9lmR2zfDkdz7djM++HVQ +wTNETxjLTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ1F7gIm1d 9x5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JngTbD3+od pJSRGkI58S5LDyUb+MuUmQ7fgsT7nqTU3lgDFQoIApkBApsBAh4BFiEEtCr9MLsb 3S6567241F7gIm1d9x4AAKO9AP4iZ4Ga3Qybx6MAeI93ioJCa7Z8fat2YSAS8hKl 4uFPTwD/YjNNPljPkIPxoAHMrR4sTml48hS00TqAgI4jnh6aIwXCwAYEEBYKAHkF gmAoZO0FgwlnmjsDhWR4CRCErdsHoQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmdJUmcMJjd1rtjpZNhPQO38SI79qnG1NDaEc3K8/kWn KBYhBCi3SqfFF3IcOayCh4St2wehBX6dAACS1wD4njAmC7umQ+Z9JL+FqZmsejsB EHNre9o6dKdKlyv2FAEAq8wjcAz53qFQZd8YJ/SIU7Tzd9XR3x2n/Y2f7+60KArC wAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDxxcwns9mX8UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeI/6F5qbTZ3/YrnH4/e0azqjKnGzHv o/Pro5sRCL3LUhYhBE7WpTG/YlHnw2xFOfHFzCez2ZfxAACLxwD+Nq2A3+9tXKG7 PJkZ5h0hL8UXSUaiQJZZrNu1Fo/WlBEA/2ZSlIRt+WTKsGqxhgRMan9QFNWJ4P/h qbLt7sQ8TiMIwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQC6zTjS5tK0NHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn6fY0U4QFWp7Q7Dsw KLoqTjtIKOV26wiwJXUDMVIROAMWIQQPv5pIpavlygCU7kkLrNONLm0rQwAAPDAA /0z3ZKJ16eNRMMnacA5QnKuStyqWKh5iMFliETPXsmP7AP9+4AIHNpla398SB4JC /wwr1luPSFksxQn4PlPBZiFrDsLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEDrD e94xvmWhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8QZ Wo5EHLtvp44apADRiFSN5+7nEw2YBlqWseybva/SFiEEVow3YiNvvHaFS9TmOsN7 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 c2VxdW9pYS1wZ3Aub3JnHGhQA9OnZ1kIXzkpUqGqLcBmfO5GmPFNvNe0LJa3LrkW IQQ8kwRHEI5vGqkh2cADklPvDrmRBAAAC50BANwK+sHVMKbTcJjlC0mkXobAsT7x AaV8RFUElEAUgabFAQCln2rpixSRCq/X88UczqE3WhCX0zCdUSlOHrH3+5DVCcLA BwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJENyS1l+vRlMtRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4ZQw+f2zOJbq2nBjcVg1xtU7NoIUsN3 TGEmlJoFT6TjFiEEl+QI92oIlUYQRdda3JLWX69GUy0AAHR3AQD5og1reAHTpG07 8fv6nHcXEwfTweVLovWxeoxzFroNCgEA5uLfdNL0zxyjdMNDBQLq/numTu/7e2ny Zi/7tG1bYQ7CwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRDUN5qeriaiP0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfsqQRQ4o1F0e2YX1xn TT4GVokhlA+GJziylBHq8GWJURYhBC+QxcU7EN/U99x9stQ3mp6uJqI/AADmdgEA /KwS3dr0aCh5hqfy/PWENMASW6iJGJdkVjm+/xkpxoIA/0CEmaI93Ch2kO5JHCJh iMfU4ijrZ4ZTv64Sd6La3iIDwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQ3fp3 nZHGmJRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jno0E8 HkLD6T2Mfvi78UYN0N1D9om0PjtyQsk0V2sPR6AWIQR5dMBOjVtUDSPNTmLd+ned kcaYlAAAiXoA/jyRWUW5BsVdA1Xs5u1YcWXKdKLVWa7muNDt7NBBhDSzAP9dDk+o 4HtRI7DYzZ5R9YwA6nrwG2UvZ2WpB3/OG1xqD8LABwQQFgoAeQWCYChk6AWDCWea OwOFZHgJECXCwO6D1qkARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ1qaL6Hu90FB7LNPT+mFJNN3fglayVRhmuEA3XJQ8iToFiEEuSfQbZIT frNPx9WnJcLA7oPWqQAAAMGSAP9dKs/oxPCTQxn7Yy5KmEUpxLY3exFefgBB/0QD V5fpdgEA1xtsD7vq7xqMitAmgNHYbXWJj+wmaZHHnq9aX0HAHw/CwAcEEBYKAHkF gmAoZOgFgwlnmjsDhWR4CRAb/puj9KvUDkcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmdIq7UCFThwgk1Mfpz2/pnnD3bzkIeNgH0p/CAekEPu 1hYhBDYwgunusi5QrTA9ixv+m6P0q9QOAACtLgEAkvL0qCzXRoI/reNrXEcLDZSe uoclnJ4qY/rTTKG0Or4BAL4GhGei5yVV+Fpw7emg9mWhVfsgnV/eUSmBDBTFxPUC wsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQqW2ZHaR8Cj1HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnBVGeXdjfV1+Huw2I+QputK25oL9V lg3mJxRRzoMBIToWIQTmG2MdVma+3JwlTnmpbZkdpHwKPQAAb8IBAKuXlWXPcVJ/ YmQqGO2ifyA2YoxiTrF5N+upgNyDaVIaAP905gBJO7S8/8DCwCKCCOASdR0uuNq+ QpZWRIpSzMpvAc4zBGAJbLwWCSsGAQQB2kcPAQEHQG3inMeUI9ULmN/X8GhaUo5X q33WBn1WnIqCSwc94YRFwsDCBBgWCgE0BYJgCWy8CRCb1VyeEz6MvkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcS4BSARbbCNXcYTFzUbw2k Fr+OqH+NsqdhHoxgzY+wMgKbAgIeAb6gBBkWCgBvBYJgCWy8CRBIaGqfylQse0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme42ESHW1h8HtBl m3DAqZ/vk4GbzfIll3VrPu/2N5+6mxYhBN12AkNYUyPLcXQIoUhoap/KVCx7AAAC vgEAkKJecgtmM8ZM2RAAVqd/KpxQbt7tTBXg9AuBOcC1ffYBAM5s8p2oyjIT8onz 2PE0cV6JxbJiwl5MRtefYFS4Dc8JFiEEQ1JVe6tz/5W2Mu5dm9VcnhM+jL4AACCb AP9C9Qr3mG+VHeIW0CryrLgSc7KnWbmym/jNR6R+/CvUzQEAq8uat6rdQD3yY+Mk KMW44CzqsjzaInyIKqua6pN50wjOOARgCWy8EgorBgEEAZdVAQUBAQdATILZWDZU bXsjjLh2sE1rtHMueyvgu6Mng8Cll9w91H0DAQgJwsADBBgWCgB1BYJgCWy8CRCb 1VyeEz6MvkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd9 WaUPPqNJKv/iKkXK8R/SIXDTwGjeN89ZWrStUQ5dCwKbDAIeARYhBENSVXurc/+V tjLuXZvVXJ4TPoy+AABTZgD9GvD7uHsn9f3MbEyB4FUYk+WdwsqzLMEOEIOghRk0 X6QBAJArTDD/QQ/JTyH0C/ox0bCrLHIC3xwc41bPZ7aO/QgMxjMEYAls1RYJKwYB BAHaRw8BAQdAX8uqUh+vJosbRb7Jeeylmq4rDaSOQHhiwhQG1l3vqknCwAsEHxYK AH0FgmAJbNUDCwkHCRAQqbswI8v1WEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmcb57SK2PEsjBOqLGCzIrOq/DEqnDypCghvD/IwtISJHQMV CggCmwECHgEWIQS+N9vEavgEKJ3mhL0QqbswI8v1WAAAEgABAM9h8Nbp8ZsLztXZ ECS3Miw+xzO6RuIhQhUyVjgKzz9KAP9Igg5OB8JMj6TlGwTaQItHVCfvRsjNFLyG ApuWOhsnB80RPGMtMkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbNUDCwkHCRAQ qbswI8v1WEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeW 4P6ud4mPM5akBlCMQxYF/2JpnErp8DzqE6Ood3tfIgMVCggCmQECmwECHgEWIQS+ N9vEavgEKJ3mhL0QqbswI8v1WAAAIDgBALNMyvkYFRKgTe3PsUbGEc8auh8UeRl5 nl9+G27jcQOzAP0YxsIJcBBjZZ+3hZLypswOIY4q3OuPGCmZ6Nk8kQ4KCsLABwQQ FgoAeQWCYChk7gWDCWeaOwOFZHgJENRe4CJtXfceRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZws0l1lbS8EtC22tJ/GlM19nAtvgw1TIC0Oq DKEcq03aFiEEtCr9MLsb3S6567241F7gIm1d9x4AAEzkAQDT/G+70YAOb3OhGuc0 svSztL76SANHN2uM9QNsaVe2RwEAk3ZkQwRK/FyB2KjFPxa1bCklitVA6297xroS zL2i2QrCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDvEDA2AyW9E0cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcAG/Dk2KWv7lU+Wu7OAv3m rsXb7zRKBy76tff1++/ZDxYhBGxwBD4ZA1vVqAUARO8QMDYDJb0TAAAfdgD+JaCr Op9RmxQY69W8OEoluUgXCLf38DJwptWqJYS+RuoBAJKUM+JZ+Os/Vgm3aHx2KT2c YnB39TvoNwyx5xwuuQ0LwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQhK3bB6EF fp1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnzt7IkR70 KI4y1SQ0u2LFsjNk6jypw2539fSGf4+VaIkWIQQot0qnxRdyHDmsgoeErdsHoQV+ nQAA8QgA/jFslLU4jpQBvfYG8ZbTGMW/OaySonr32QncLLHSUNmmAP4uP5HhC0tD 7sgQxyCJx1HvJNQz7WOBG78PneH+i61LBsLABwQQFgoAeQWCYChk7QWDCWeaOwOF ZHgJEPHFzCez2ZfxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ3c13QiAZu9HULnSRt9MA2R8sU2DlaBMBkKLFCbBPHz1FiEETtalMb9iUefD bEU58cXMJ7PZl/EAAOY7AP9m73tDMcXYR7JNMyii9ST+asY41ZTasLnXNlT9KEKY /QD9GUZ2XW2EzeAFlD63R4lAgijrf7xmokQ3IPHg+GKnsAjCwAcEEBYKAHkFgmAo ZO0FgwlnmjsDhWR4CRA6w3veMb5loUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdf9A1zRj2Ak7U8Owq/PK3vMq0uKiNXMwORg7DQeyk2IBYh BFaMN2Ijb7x2hUvU5jrDe94xvmWhAACR6gEA0RbYWv0qkDTxse7vdW75N7Q4ITWr dibv84616KWX+AcA/0qg0Minm6tWxQhbWswVkbxF8Inhc4/CnJBQVuFsTUUMwsAH BBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ3MOidBCuKj5HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnfFS1UxLaBysvsvl9xzU+2Sv8yYMtO5DT zR4r0IHyDFcWIQQMYNQ01RPEZbwHQqrcw6J0EK4qPgAAgXwBAPQ0fhj4c9xFnlt+ Sd+8Yf8jtjB8Y4MVvnGW9nHGhvYfAP4jpc5xzJJIgXLL0WE/mbZcEbLrWp7gflap 8xlLm0aDBcLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEAus040ubStDRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwVliYHJQ7PAIGB0qRDK xNj7PG3BLSE6FFKfuYy8mLKYFiEED7+aSKWr5coAlO5JC6zTjS5tK0MAAOD1AP0Q vSKd7fgVIANob1IkrBqVWoZVwKDwgIRWPiDT8ipl3AD+OhLPd8bidvjk4aL4/qbl ayyaW2/2CEAyB7b1bPcEmgnCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRB/rbHD /vv+WUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdnh10d 8nyI55vaYkgKTNdy3GM+fwyCHGOfSxCgeo48thYhBKDNh1gsIXQ8DjBjf3+tscP+ +/5ZAADQRgD/bGq2SRQRWYJrPb4uQSJG+1yXQwql9cCEihW9k/Jh0twBALOjjpCD HMYW/x8tKgF0Qac7L+pHS3KRZ9zuYXr0JCIBwsAHBBAWCgB5BYJgKGTsBYMJZ5o7 A4VkeAkQzcwayEZMj+VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnJhyW5XbpogHGT1dGfwZLLZ7DAWTP0nIDNzlFZmqpJ5kWIQRSd8FPnTeg 9NYV3ZzNzBrIRkyP5QAAzv8BAMRlrThZHI3pkpaWrNnWSy2TMrLKjm5bsQ9D0t8f qgFzAQDoJqKktGTcSmDhpe5CuCzmwoPLH41oWYaPHdDzwE/tAc4zBGAJbNUWCSsG AQQB2kcPAQEHQMfASt5xSgPnYr99SqgtvO5Yl0T9hv20IER36rn0PkjBwsDCBBgW CgE0BYJgCWzVCRAQqbswI8v1WEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdxXFJnG3O8D138jzU0CS+giKg2IljT7W7t3SKLfLBXhQKbAgIe Ab6gBBkWCgBvBYJgCWzVCRA/t2j71RoUGEcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcdXWxcGR4M/l92dGC3EHhuOqS5+9RuPkzZvAxdkor7 nhYhBBGs7Q5OV8/BQYqIsD+3aPvVGhQYAAA34gEAgQZ8eqYNlTXwmPKTpOtUy6ce V+oWE8QnZOc3sk/84HkBAImsDEKIm9vimi/xI03PJcbU948RGd9odEHLzzi5fLYN FiEEvjfbxGr4BCid5oS9EKm7MCPL9VgAAPxbAPwL8SVYY757pGXlZTq1w+tYy++G fwg19o+/ipUHeXj57gEAztGmSEkGu9LUcVZG5qOk5Qq1lMZvcbUhdfvpSfIYvwTO OARgCWzVEgorBgEEAZdVAQUBAQdAuKdBsBaUvZgi854Wq+AlAPmKYFwKkXpPaWgA cpqTu0sDAQgJwsADBBgWCgB1BYJgCWzVCRAQqbswI8v1WEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcPnb6u2+hHy5RXaO7sLfmYfZicfW0i 4Umb4GyMu/9+dwKbDAIeARYhBL4328Rq+AQoneaEvRCpuzAjy/VYAAD8bgEAqYnt PzlsE2NerUKmuG2TIx7D56JOaOkASaHUpYwtJkoBAOqdiDUdxUaQdEUzYvbRkX56 iWOv2BFxMHvrBTLq4mYPxjMEYAls5xYJKwYBBAHaRw8BAQdAdo0INyR+7kgSNrO4 GuZiA4mQGb/Vu3MknSoUkTapUjrCwAsEHxYKAH0FgmAJbOcDCwkHCRB8eoqCVBrw X0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdQR+XNZeY1 f3YYRXO42MBOdNeLlgXkr0gVua9XLnuMfAMVCggCmwECHgEWIQTLCWHBaiYp4oVb YUN8eoqCVBrwXwAAfo0BAJdlu58typTig+QG/tvnW9Q0aJXeXKaPpR9E1h8zRYMu AQD1O9QDbSe3fttOyds37fpUnz5f9WAnkVPe37+vW0flCc0RPGQtOUBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmAJbOcDCwkHCRB8eoqCVBrwX0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfSryIVeNuqdQBvYXT2M67Ip3BcmbXO sVfJgMrlcuu/SgMVCggCmQECmwECHgEWIQTLCWHBaiYp4oVbYUN8eoqCVBrwXwAA Hk8A/3514JvojTRQresLpXWoeQSy5pAbZmnLgUl4xzZf33nKAP9p5gFj54dJSI2d ix8MSpuadYXuhtc6r2Tby46xVVhTCcLABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJ EP2diwFXRQILRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5SmP9V+iFG+ufbN5N0ETikCXEItgBWRjrJYDH3drfzQFiEEE8i43CAgnLDhVWTh /Z2LAVdFAgsAAI11AP0QVbwmueQcXWJBr3f2XQX2xyZqOy8mKV16qd5Te8HCOwD+ L2DqyNBIRleonZMUt5YNreWUmT6qsUoG6Avar3SrWAfCwAcEEBYKAHkFgmAoZO8F gwlnmjsDhWR4CRAih3oSi2+rMUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfDx6QLzTCwMpUC6RXP1aABZbEiOuOItrsTI5k7Zs5ciRYhBPMC uD6QzWrD48WdOyKHehKLb6sxAACpHAD+Lz9RLq+K6dMQ7hsVAAHuiPrrj5tuA/o7 Dj82s3++i0IBAObpav9agUQJJJahAT0S1+im+MZdD7kC1tzEAQ/Oyz8AwsAHBBAW CgB5BYJgKGTvBYMJZ5o7A4VkeAkQ1uhlo7iPiIFHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7JsnHy/UMSLx/sbzQmLmgbQY+S/pAIc+FU0G gg6cEFIWIQS+bFch7cuoF0xZ2ZbW6GWjuI+IgQAAEQoA/1P+KMZIYtI4xrX2US2U GovZFW57xk1R2rPl2miFuiZPAP9Y8m7aGxFR5RuMbzcQgt3qZGpicfB5n1boNy27 ap0uD8LABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEKVNXWOwv8Z7RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwtCjEhbk5vSwYpWJzD3qRW2 D2e+bLjwc9oQ9T+l7C0MFiEEo1vTrqcjYvXDphCQpU1dY7C/xnsAAET0AP9ZsGMe 6HTrGznGxWNZJgLX8m9AfmesssVWvWVmg9dhhQD+JkPGbV0fMChH+OXFfgEk6gje SdPqZoPb0p1cQCuOjAXCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRBYo4Ixf1TX xUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeEzLtKXQ0H HLo3YfK0H8N6ipylA0kt+pyVecvZkH9JHBYhBM9wHne3n+ve34i0VVijgjF/VNfF AAB6ugEAjsOUGnYd6kpHmGwjRLLIE0fFyStcVDUplDiq6ZEeYA0A/0gHjgHfbJXF N2TTI+ojBWEnuJdlGa+de2FZseEzMDoLwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4Vk eAkQ7kdzDl0dc5BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jnhcr6rdeukDts3yIg5xnyLUH2HCga7a2hme9z6kdXIE4WIQQW4QegaIbGweGk R8fuR3MOXR1zkAAAhO0BAJ/imu96HjWKgOb7Qwd1jhgwwnhgkVzMS+mVsizo6+RJ AQC7e7BK1QNHcJDUYDu//dYY8cbZtS5x2YTTidGfLcJyBMLABwQQFgoAeQWCYChk 7gWDCWeaOwOFZHgJEBZpglYeFAwDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZz1N8KF1iRisNYzgUhfwer6URq9UqjbFKP64c4564zOFFiEE wkzAkQLSLjjoOTxVFmmCVh4UDAMAAOODAQDLG2amypRRDhtvoZqY8UKJCB4h1R2G H5QN5DOXh1PKDQD9EPVX83SCyJwTsQm6AFRyMipzYi7qaLt+fYhJZmSrZQjCwAcE EBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDq1y/3kUB4skcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnBA7o5vUHKyIY76XqBMKbcdRk1nYQb3rK eCELJ7vUgxYhBHqA21Mwt9kA1b0fgurXL/eRQHiyAAB5OQEA1yUBF3StqY1bveBD 8tyq9cn4zZ4zcwoAeFSi07rlUDQBAMdH1ZYSra5TITBPhcw9GwuCEbvYRZrDIEEu InoEGcoLwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ81CZAH792D5HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn96wFTJi6mazQRIy6m8Ib AVeD4VU1egoDS1BirNFGbjkWIQSjceGgiu4ZVUvY9v7zUJkAfv3YPgAADMwBAOMa edvQOjB/2h/GthY4H3+dcdBoI9w9vAXjVxgvGuSzAQD7DA56GgyhiMiZ6O+oDqGH fusnaT1kU6WNgQ82g+r7Cs4zBGAJbOcWCSsGAQQB2kcPAQEHQAuHFfgQzGK+Jylo +O4EG5/ViahqQFW9QDZHZHOpET7XwsDCBBgWCgE0BYJgCWznCRB8eoqCVBrwX0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdc4V6/z2YASoRV yrJ1esFe93vEs6X5XZnCnMudZqdG9QKbAgIeAb6gBBkWCgBvBYJgCWznCRCh9FOp FGNvSEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfPYUGG OzoZBGVE3n9wucI5dRrm33TRx9BzKQUSwMYqiRYhBAPiumpzvZGnX5uz+KH0U6kU Y29IAAD+hQD/d257BXT8g0S9clJqyl9jTgFfYcYaNsAGXdo2SOn1s3kBAOpGhAox C5+qozWhOE9m6jGRvlj4EE14t2BrWmh6m6wCFiEEywlhwWomKeKFW2FDfHqKglQa 8F8AAGthAQDkY8F+xe2/B5yciZX4I9j6TsW0RTQ9BvevHVtjPmauBgD+OWJ9UrKB 8e3mY7kkIgnGKl22ljFgoxNymcUoTBf8xw7OOARgCWznEgorBgEEAZdVAQUBAQdA ijPujXM6D86BYBol4vpfSr6pLp0XuICZ4ss4mHwUN2kDAQgJwsADBBgWCgB1BYJg CWznCRB8eoqCVBrwX0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmfEVTopIdxQh6QuBKb8CRIOhGVW4oHhWnQOl3GopO6cfAKbDAIeARYhBMsJ YcFqJinihVthQ3x6ioJUGvBfAACHpAD/XX6Od3f6sYsRkTCN8EZZxv2zy9QLquz3 19bgd6VvUqUA/iK6H6yyKioJI4c7eVRylRYaqij4pQ2JxgN+AU7gvxEExjMEYAls vBYJKwYBBAHaRw8BAQdAjjCHPo1VWlGracnHpxiANu66QyVVa23LmUkVwNHGH0zC wAsEHxYKAH0FgmAJbLwDCwkHCRDcktZfr0ZTLUcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmcrzl0iP2pqfAzHMU+CxRRmety3doTfnxtY0ke3 GTSwRgMVCggCmwECHgEWIQSX5Aj3agiVRhBF11rcktZfr0ZTLQAA/EcBANX8d6W2 aDyiKyq7XjgEZcTWI3om5vDtVTQSq2x3IEfvAP9crM19e+hLZ+E5KivdKA2/wqbJ vb90E7FVTgrcNm+aBs0RPGEtN0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbLwD CwkHCRDcktZfr0ZTLUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmcWs5J5Ht6OjwIdDBXM20VjueSUM7koCLpdtEL6KSz2dwMVCggCmQECmwEC HgEWIQSX5Aj3agiVRhBF11rcktZfr0ZTLQAAknkBAN+F4qmJ5zUwh/fzYgsHnHU5 lUmP8WPVp7ZyBIFuLh+eAP99eDf1c8S6cy/ABCZGDzFIksPvFd8J2Gf614hxwrle C8LABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEP7cblxGqqsTRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ16m+2DTQVIn+llD5tmri9eMnDCu kfF/gls7+jOeIaaiFiEER5d3ayWY+X3J75TK/txuXEaqqxMAAIeaAP9VuOZXIgIZ QUDfnoDIfaWzq2IXG7Vh8/e7+CNtB2GUtwD+K/CpwGH+mRgXnO+2AzG8TET0kaNQ yFgdyGKG1seYqQDCwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRDUN5qeriaiP0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfbiB59ObEBQIMr A/eELiXMzbsJE7cdt0hJltBYd82T8hYhBC+QxcU7EN/U99x9stQ3mp6uJqI/AAAe 5wD/aDbwKF+uSQ6zUkyc9L4hTZN+JARstmFM8oHyjuwAPdEA/1JrSwTs3abt5Wko uOxSkBkbu8tl1dHyHaqALMro6bQNwsAGBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ A5JT7w65kQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Msew5xepI/RDmIpKxCPi+G25ej+3cEwyu32ferie5TwWIQQ8kwRHEI5vGqkh2cAD klPvDrmRBAAAtTgBAJpmYMhMKJFsAW1uXE/U1cXUgzQAEU6MU/58qeVsADUhAPi3 YfCFefBWkkvd1mX/IXX3+aWJegIL+vsyL8/50acOwsAHBBAWCgB5BYJgKGTpBYMJ Z5o7A4VkeAkQJcLA7oPWqQBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnwobxuK8yc8jzAWPco/77iD6plO9DAvdDNarCaykz8UgWIQS5J9Bt khN+s0/H1aclwsDug9apAAAAZ3UBAKLuDAd6eP79wX2euGIhoNMKlvp5LSLieEJt erzZnr4bAQCZs4OV1IYUpHE2rdGZF9kpxjmiHPo2V+2yjmucZXKuA8LABwQQFgoA eQWCYChk6QWDCWeaOwOFZHgJEPph5zxvXctGRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ87yMNugiaOV930HG9TiF1522rVAscXlnBJP0uH9 KyTaFiEEU2rVYrkhe5g5ZiBW+mHnPG9dy0YAABUYAQCldsuKacVtF0j8vOovuQAy Wwo+AkzuGvD70UJ6J1zvmQEAupxSoo0tgnWbqhCIHb320Zmu/QXsLxNujyXSW1v9 GQDCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRCpbZkdpHwKPUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeOZHe7gJ+2DJYxU83DYSfnoZj7 +3PLjLipj0lX18/TRhYhBOYbYx1WZr7cnCVOealtmR2kfAo9AACzCgD/QKSlwmst djvfpyUqLKHZnDSQKxa0JoTXrDV7D9krVNkBAPj5I0TnanD5JTPj6QH0E2NT7cTP tXbJUlC9ywkf5pUEwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQ3fp3nZHGmJRH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnNeYc/B0bvxZS pOJRsWLzTrTSDToS/XtOqz/rMCbSlX8WIQR5dMBOjVtUDSPNTmLd+nedkcaYlAAA gAkA/05pTYfSnf8KmAKMNldUAZpfDlysho+THmD+NSaVUxiaAQDfEkY4xmLZzsSR 6+L7/czBXNG1zKl9w9w+ap/5uI40BsLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJ EJvVXJ4TPoy+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y 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 FiEEz3Aed7ef697fiLRVWKOCMX9U18UAAPAZAP4oN62B9ooA9mSxRWpLneXgCYg1 grOyhhHI2sWEBYujHwEAm99tYY/dvk/XJPOKGTBYTofFjq13aAjaIJeIX0hfdAnC wAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRB8eoqCVBrwX0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcUYlHysyqM1ykmxC4Eu7c3PwANpxOe I/Egsa2zmR1pQhYhBMsJYcFqJinihVthQ3x6ioJUGvBfAAAPwwEAgGjRyfJjoAGE RM7lIWNjI6QpC9GUWVuR1bgToqfyzCIA/09cmyvOrioKjb3OZNbobvtVAVkEyRaS 3Qqz/qYLyXMOwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQIod6EotvqzFHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnXrbYZa8SrpyVWI1q GBZ0qZsxmc96q0fnHvlgMv9darUWIQTzArg+kM1qw+PFnTsih3oSi2+rMQAAs5YB AIiI8GhDi2cj1yV4/PJIWdaEsXmqB/dXZ6fZhMBCXI2EAP9cOzVJ/XY/AZJsI8kf x86kF221ouwMwJ6sIXoyuibKB8LABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJENbo ZaO4j4iBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyPa N70z6+Uv8Ti2crQY29KEEKY8LYGiPfaJQV2wjqSmFiEEvmxXIe3LqBdMWdmW1uhl o7iPiIEAAG0zAQDdn0eAQ9+VcWTbTcDSbsU31Bp0MIOW/QpsEJDn9u0GpQD/YuYf L85QuazS4NpfUikRE2CRUMy7TQhq6FHUazZ8sQLCwAcEEBYKAHkFgmAoZO4Fgwln mjsDhWR4CRDNzBrIRkyP5UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfOU1Ajq9cuRNCdFijdxL6H+PCZlGyWIm60mra/erqC7xYhBFJ3wU+d N6D01hXdnM3MGshGTI/lAAAdBAD9FlTDyGDyNyhBCUbEkFLGpcy50ZuM7b05YxCJ kizWS8QA+wU6bgNEXKX8LXSa6QMP9XNy6CFKV694xcrRMZHz4jAMwsAHBBAWCgB5 BYJgKGTuBYMJZ5o7A4VkeAkQ6tcv95FAeLJHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jn6zeL7Q8QddH3mnSRFWqmwmzSmUncV8I0TPPK69I+ jFoWIQR6gNtTMLfZANW9H4Lq1y/3kUB4sgAAnaoA/jCO2avoUdo683R7kTp3Uoyv Id3e3sS7ekdTOtd7CXLSAQCUX+ku6CE+gqV23fo1V/Lr3F3zjTGDLZMTGil8DOMW AsLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEP2diwFXRQILRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4xT3iNtlxIjPfy+Y3k7EU+HmtPI BBFUqF9d7u4yhjMvFiEEE8i43CAgnLDhVWTh/Z2LAVdFAgsAAJ2gAQCBmWbcOy1d ppTwJw+DUixOKtXdzgVQcosxyHKCsn46lAD/dB5awvFDLWU3z5DXljgbRnvtGrkb U5nFjVsJ2mJeZQnCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDzUJkAfv3YPkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfgS+hvL5bsfYcj 3WlllOau6p3Z2M9otvbQIRLTCaOMHhYhBKNx4aCK7hlVS9j2/vNQmQB+/dg+AAAc ggEAuyI4HLE2OtJzWg0OAxN4bRPnPNzWmz/pXCELelZ7PL4A/2uSlSMeP206d1zm dWlMEji0phnd1VD6Y2yQrPrW+18CwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ 7kdzDl0dc5BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 8wYVRSzX56cIZ9iNebPQWu7RcZSoP5qaLvrSqBH/iuUWIQQW4QegaIbGweGkR8fu R3MOXR1zkAAAm1wBAOizlhtbX7HBWJNA8kIbWgY01outOAvSLFw3dbKkXIiAAPsH s5gYDm0MnRWqgICW5zBqoYXytZS2CIQT5EdGs7ulA84zBGAJbOcWCSsGAQQB2kcP AQEHQFXXfAhrO0MtZs6SYydd+K0hVmPGclR5xKzjN4X2hphJwsDCBBgWCgE0BYJg CWznCRAWaYJWHhQMA0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn 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 dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JndX3wd2tN7XlmNy9vi6080UsZbPKU fug8IMGs+d67pDAWIQS5J9BtkhN+s0/H1aclwsDug9apAAAA1nYBAMKy8hrBsoU3 HtgWQ3WN8yadJ+BEJwqJ/YvSxds/ock0AQC2ZzSh8McjQM41we5N5aXdT+uGkVEP nzTrXmtKCvn5DsLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEN36d52RxpiURxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8Gfi4oiVB4Drzd4 dUDI6AxGf+G9hpV9UUxQm9UwivjmFiEEeXTATo1bVA0jzU5i3fp3nZHGmJQAAN1c AQDKYOcuBFf/d2/9wKGlXRm2hBlX+HIi8rf/Mkbjg8cvFgD9HpYUlbxSFR8IO9I1 DnavuVgXsEufBYp573q2YyezWQfOMwRgCWy7FgkrBgEEAdpHDwEBB0AkSW8vvjgE j2W/FOvamLVAoCk4irplq2d2I61DWupM7cLAwgQYFgoBNAWCYAlsuwkQG/6bo/Sr 1A5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnLhyzFhBU Pe9C7syKX/aJx7rORxq4+mVlH1e4B8BZdHYCmwICHgG+oAQZFgoAbwWCYAlsuwkQ UpqfZy36Pq9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn bcgxY+BTeSPI0qAwCnzbyGcPqSSZuzE8PCDAsQZEYokWIQRihdiKhzoUrriaXIRS mp9nLfo+rwAAoMEBAMw1EEuvkgYssI8FWTZGSbrEzlgv+xumrpKyXPiU33apAQDN H34NflUfcBHGqJyNYXXBEHDlOYSTcGZKFTf8pf6bAhYhBDYwgunusi5QrTA9ixv+ m6P0q9QOAAC0awD/QWJcWcCGg1Rh8NjVhYOZv4Eog8Rx/B3tV+20nr0DS3IBANcm 0TVfnZLrKuKQcPINpCASPa4WUBeM+Dien6Lo+BMJzjgEYAlsuxIKKwYBBAGXVQEF AQEHQJJ1Mas7HgQoxQ8AYedV2fQ+VR2fGnsTMUoIZCQMjJRfAwEICcLAAwQYFgoA dQWCYAlsuwkQG/6bo/Sr1A5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnJd/gaXN/7g40MmMuZXs+wmePS49rjQrWftxjIKgo2MYCmwwCHgEW IQQ2MILp7rIuUK0wPYsb/puj9KvUDgAAnIQBAOOsY/rFOIjgc8CG3vNE4xgTq3Ao 959OFjuzqCYF7dg+AP46QxLmfL0Roqe0+hEkQlrE5SqWWvM/7rEKAd7XHbhtC8Yz BGAJbNUWCSsGAQQB2kcPAQEHQAmpZJfFz5XwdvQX35CwmWNHNlpTSAcVdzvJubId yvn/wsALBB8WCgB9BYJgCWzVAwsJBwkQhK3bB6EFfp1HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnsBfzbl3yt40Pl171xIsTBbTGH4DIX4OT 8yyjRTXdYjcDFQoIApsBAh4BFiEEKLdKp8UXchw5rIKHhK3bB6EFfp0AAPN6AQCa iDCU5sm0J4kLQjaLfbPtxmauK2s9TSZGdpHtgpHJmAEAhte1ktb+szTBTl1VsG4x ieyj4xDa0MdwhkPQ5C+T/QPNETxjLTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJg CWzVAwsJBwkQhK3bB6EFfp1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnlnkeEfeursYYYxp41Ecj7gHogaN1YQaS6dqTwrRS1gUDFQoIApkB ApsBAh4BFiEEKLdKp8UXchw5rIKHhK3bB6EFfp0AALKHAPsE92iLxAoYjdzWShVC 38/6uW/CbXqbUnJBt+pEi0E6AQEA57Jx+fTvQ1m9p7DN7QfuzMVyxTtpr5uEOwOE qUuAjQPCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDUXuAibV33HkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcd1Ov2mAM99pfH6NFKSHP9 EyrlyyxA+Km8Rj5uxORB8xYhBLQq/TC7G90uueu9uNRe4CJtXfceAADjMwEAy+rc K/oYgiX6BlAOoCLD1RZc/R8CUu2FxJ82rPRM2SoA/Rk0+iu7nKAeD5OHPgjZoGw/ xkQb1ViF6fJBbXv3X5YKwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ3MOidBCu Kj5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn9bw4YXwv Q00LEEuemwzQ9o2pDfHZblC3qLTtdvW0Bk8WIQQMYNQ01RPEZbwHQqrcw6J0EK4q PgAAmH8A/jEXVJCfmT+jNfLWUk+w9JSPm+IrWtn64EiQYfCmGJXIAPsHK+WGMbka cqWqVPDJCFDWTdhWivW9MUk74C6EBGFlAsLABwQQFgoAeQWCYChk7QWDCWeaOwOF ZHgJEDrDe94xvmWhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZzntTHURmsPZBbSSadU7GPKVPU+qFmGObNB4sytWw8VvFiEEVow3YiNvvHaF S9TmOsN73jG+ZaEAAMzVAP9Jg2o7XekqEQhui9d/PCb7HGE0v7lzUNe0kqXqPAv5 AQD/WXFCEIXjwu88ver3fMEScd+92t7Uos+8I9TPVgpI9wbCwAcEEBYKAHkFgmAo ZO0FgwlnmjsDhWR4CRALrNONLm0rQ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfJOY0YYwuAHg7ng96xR27WsYdMojjn5ollw6VhPqceYxYh BA+/mkilq+XKAJTuSQus040ubStDAABnCwEAsXp38riEOdMmNmAxMfMg8B/7sCHD sIIzY1qpzuMt6SgBAP7ypncHiDOXfZcScLTKUh5kktync7hG8xhogR3li3wBwsAH BBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnNdqtz1c+QtrZ8k9MA7kWXdCBEe32XLdf lEB0Ph8WpYMWIQRscAQ+GQNb1agFAETvEDA2AyW9EwAAB1IBAN+ogIUligDBWSPw hzf1AmY8jFjJTcH7fHSETuiW5S1TAQC5BQIvJ9lddLJmQcO173Kf7nkwJLTLopJR IDEHUgvmAsLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEPHFzCez2ZfxRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8xK2jkiZ961gI2e4Sf2 quL5s9LAUvMn99j87t/bq0B/FiEETtalMb9iUefDbEU58cXMJ7PZl/EAALr/AQDr T4Tw/jT6C/PJsrjAvE18HRaVgZM3qeUfGtkFQYNYRQEAz/h13tvTb1MyvwfA9GaR ZPa3VdkUaVbaAg/xrr8+EAPCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRDNzBrI RkyP5UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfczmhv 0+MCVFz/Cpairn2nSk7U+bdR2nsDyVgJxfZ8MRYhBFJ3wU+dN6D01hXdnM3MGshG TI/lAAAYAwD+Jd+H+XZL4R32wqrO+zGvWGr1dXpn8QfBlNNLwAZyDcABAMLCVbA0 3wWSg38J2p+5GO59iSYLe/yxSl37mKSGi8gMwsAHBBAWCgB5BYJgKGTsBYMJZ5o7 A4VkeAkQf62xw/77/llHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn95c2Tycoexe1QZzO9fqQa/hiMN+JYyxhw0zEzFIbpPMWIQSgzYdYLCF0 PA4wY39/rbHD/vv+WQAAfnEA/0wmVZzcNc9Tm2aATmoau9Y/vY3h004khgwYb6S9 IkYFAP9Vb1rQKT7Crfcio2EQ6kjQIF8zdX3uadQ+bsVWFHT8DsLABwQQFgoAeQWC YChk7AWDCWeaOwOFZHgJEBCpuzAjy/VYRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ0I9T5+rrP4xE85VHW6/qQ2rhDqyPjKc1zzvq5Ve9uuv FiEEvjfbxGr4BCid5oS9EKm7MCPL9VgAAE6NAQCrYvv/ULddMf7CzMmEIZjZw0wc xiXkGzpcZUgnpjCVrwD/TW/I5fR73BK9dgWc4xzRIHPsrq0y6LKSqbbB0KAzGgLO MwRgCWzVFgkrBgEEAdpHDwEBB0ByXqzm40NW4o6T6WMJ41h0L95LKbeijwf9g9Fc Q6ymrMLAwgQYFgoBNAWCYAls1QkQhK3bB6EFfp1HFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnsAVzgRm8b9JCyDCJIrLw4WwOCGeMtwwIRGAG j5Xi0D4CmwICHgG+oAQZFgoAbwWCYAls1QkQDC4cPI4HbjJHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn76ARitp3YZMBRSwEqKM7s0QcRq9i sSyXpJP+XSAkl7cWIQQ6ZELXesy0vZ3RGf0MLhw8jgduMgAAHMcA/34keXRz4oUw V0OCP7mbc6d7/ALGqYxx2JkTit8BkzBhAP9z1gqt5qOAKiLw1wbbH8xK8BauAf6O 2eeMqC6hKYxuAhYhBCi3SqfFF3IcOayCh4St2wehBX6dAAAdHAD/S7o6QInPldKJ YQMM2TUj317H3UIl6gOZaYo5ns1+lNsA/3az/zJVOK6UwJAk+NuGm7Rzdi5AbQtZ hI+ZTj/rqeUEzjgEYAls1RIKKwYBBAGXVQEFAQEHQJvmefO/K34DrmkTfPzzgRIS VzOG7dUqAaZklIEdNRZdAwEICcLAAwQYFgoAdQWCYAls1QkQhK3bB6EFfp1HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnnaQ2RTWCASWi69LO 65jkcx4mDNjWxwthRbZqWKGvagkCmwwCHgEWIQQot0qnxRdyHDmsgoeErdsHoQV+ nQAAQGoBAJy57Sx3+rSBEI88RgqU+pvJEXOi8USlS+B4NTUrOXJuAQDWgo3jkZYP BAIOKXEAZxWHcTN9XWnuNU73vgNEmFm0BMYzBGAJbMkWCSsGAQQB2kcPAQEHQAMn HPrfSjsqG1Glc3VV0gZNzqyOL9W+vzq2QPFicEqRwsALBB8WCgB9BYJgCWzJAwsJ BwkQRpalxinqMfpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnH25tlvrTopi4YwFD+dypzCt1LNnZtKbATV87yLt03tkDFQoIApsBAh4BFiEE krsaVgv/zORxewXcRpalxinqMfoAABubAQCkEnTJBMRfUJed9zNwBKO+YiQY+wPc zPf8OpZczjmgBgD/Q1BzY7p9Mwh/JSH6C6Kmls6Vbgw5k359phefeKPU8w7NETxi LTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzJAwsJBwkQRpalxinqMfpHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnheM9PqD3R9Oix5qk nRwV4u3SxlrTaLaMK7Tyl2gINngDFQoIApkBApsBAh4BFiEEkrsaVgv/zORxewXc RpalxinqMfoAAHj5AQC1VgAAkTsHFgjFIxCwiFJ7y9Qac5e50fm66K0mMSM/vwEA r08tafiS1LwSt5P0eTDzUi4ZxovrlAihZw/ojRX6HwLCwAcEEBYKAHkFgmAoZOwF gwlnmjsDhWR4CRB4xX2d6VwW80cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdTyDejvqLjSgJxR1FtatvUW4L9O+f0StGSgUB49oH46BYhBL/D GmnqlHTrifzMLnjFfZ3pXBbzAAByjwEAuwBagJF3lK834HMDLdg0HMJ3kaTpSLXF nvasrsM6uHYBAKnl9rHv6WLVwkkhGJL5db5lBk+uYDsbtm6e8g5r5QIOwsAHBBAW CgB5BYJgKGTrBYMJZ5o7A4VkeAkQCFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnBJlwuHgAbEYnsgLDRLLb0zXs+AEpdvOV2azR M3V+UXYWIQSiwZ3XyZNfi0ebXQMIU/27kA4FsAAAl7IA/0cPxJS+XxHcWJ1wsEJd q0zxXD9zo3zSvBGfLPt7ZxvHAPwOokIDfCw332abSpGetsgWHcFE0L5xamCZT1n/ RyXrCsLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEH5dtCDkDrEeRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9SdwWtWEjsFBDtmIFbXhZfi n5Q5v9IJiYl4pRD7btJLFiEEuwns71Cjdjt4a52Mfl20IOQOsR4AAGEEAP9vDl3s AdcjDeYMGMnkewHytpCZVWJ/Vl2gbFJMAR4uZQD+OQ4Xbxup5Y7998FH6oOTzYHs lclxaJWITebu9qUPmwrCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRCv6IX5NL8T fEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcpzwn/wiJs rbrZtC2XTo+DMpoRF3WBwF/1NkqLZsOVMBYhBNNkQxCjR49nNNwkNq/ohfk0vxN8 AADd3AEA7vokCTRX6t8zpHhWvzbgjfPhCft5wxFG9tFwX7IMFhYA/0eX5DxfWNao 7rcTQ6sY5EKSoIDTa2/fV0VqflCDhOAFwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4Vk eAkQKvaj7l11+j5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnRZC31QeQwuCp2dnDFGj2Qw8Jmqdwrf4AV3nHUk1CTOEWIQSQqd0+dyHCIZ6N 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 aW9ucy5zZXF1b2lhLXBncC5vcmfuXkyhfQEQd/eToki4PZOsvioBw0CBspO4d8lo aX1P3xYhBJCp3T53IcIhno103Cr2o+5ddfo+AABEQgEAqOoND30cDadTKugkGgea O7ToKkR1jmBmVtE4MGQfPmIBAKC/XSb58XFLSQM/UomdtSgR0isqzzoN3V4mlxZg IAUMwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQr+iF+TS/E3xHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnIUkbULkubk8YbxsvfUW+oJcD BO9GlzxJ9Pggu1G/Mg0WIQTTZEMQo0ePZzTcJDav6IX5NL8TfAAALtMBAPdlyJ0n B552mEb/uyUydQGUDeLKlf4dF20HOb7DxuzTAP0QznobUvAhQk3L74RSPPX+ESsY qVIxUimMDksGPz0rC8LABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEBugGVBr5n+7 RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ63fr7NiPV8y /xbqFSY8zN8E3N8eAY3Mu4vVeWwzGcknFiEERtL1ztm9PWOhHd/uG6AZUGvmf7sA AHIUAP4krEL22uWim74frBNKifjZyYtxghyYQsHOZqit9lcviAEAsZDtw59N+co/ 2nO6srMLoFl+m25PZk3YGVTP7RigxAfCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4 CRAIU/27kA4FsEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfG4jwxNkcZeRMFVZLF1STbTWuDJiRvwEqqKSmubDcLABYhBKLBndfJk1+LR5td AwhT/buQDgWwAAAwLgD/V2MicBJoUs/qnTMj88VejbQtE1SjRq9zaVojVyC9nXkA /iFy3NzgZ4qdr9LxEJQJSxdq1WBgb96Ws2YEVWSTLbwMwsAHBBAWCgB5BYJgKGTq BYMJZ5o7A4VkeAkQlknvga7+UWJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnbhb9vLNA2cDrAUjZdy280HRHBa27tCsmTF7PWyKWBdkWIQQl 2OqriUcFu2TUpqiWSe+Brv5RYgAAlAoBAOUuODLscevquC7TVkgdFAkK3u04ukZL GYJXoJm6GrY+AQCw9TtBej0bYEUSrGuM793KSPc7SXKK+RmasL2P0f5eA8LABwQQ FgoAeQWCYChk6gWDCWeaOwOFZHgJEHg/Go/HJ/w9RxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7xyonZte5FtW8oG8oNMuLwo4jTkP5iEEp79 dGpHxOAOFiEEJ+Nf60hsv1sWYAJweD8aj8cn/D0AAGALAQD02Edu5lzpQ4X/23jy u5djwY3P7/T6C7qoBJF0jPJ/nQEA5uOhdU7YxqObCQ3ICpTe4dHYZXpk2ux7O/xH g7JCPg7OMwRgCWzIFgkrBgEEAdpHDwEBB0AsVXQU608jm42P95G0weMjjTw2Ck64 jcWLBfqTYBxyosLAwgQYFgoBNAWCYAlsyAkQfl20IOQOsR5HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnq2MO5rhDVTs6AyDcXqqKHr9nMGQz qaDCUDIuplWnde8CmwICHgG+oAQZFgoAbwWCYAlsyAkQ05NqBG3FwwRHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JntD3qn9XrD2bIUoSSMKzD giQ2L+0wq2y75bME+fxrhl4WIQT6Ne2ZdJnYId8GB+TTk2oEbcXDBAAAI5sBAN4P 3EEUI55227/ZZ4pVYntGyjmYQGs8hTkM+E+z262dAQDiUdRzzppR+ZBFRPVm17A5 jYCZ07mLBTX186Uar1BqBxYhBLsJ7O9Qo3Y7eGudjH5dtCDkDrEeAADjUAEAkwzG Ot5mavK7UIpYYeG6WEkbgMqByZc2N21EZH6nUFUA/RTEdWac0jLgym6KsgoUT3VE F4j/4cEkXBICxzYmsdoBzjgEYAlsyBIKKwYBBAGXVQEFAQEHQChyCG7tbIdHFK8/ dn647lExq39waZROm9t4g95GEWoUAwEICcLAAwQYFgoAdQWCYAlsyAkQfl20IOQO sR5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnsug0EGDO z4NsBuZ9sirYH5QIcPKr9BRsywGesjnm7eECmwwCHgEWIQS7CezvUKN2O3hrnYx+ XbQg5A6xHgAALa4A/3py2B4liaoKeHvBhrhToLc4G/sITuYb3kbNOlRzJZNJAP9R jPOTyJHxH4Gw7foyE+wgoFyr83MVZ8HsFc1pMGlBBsYzBGAJbNUWCSsGAQQB2kcP AQEHQD0TsB2WTJRvQyzsmf3fGW59urYeq7apeuO6/78qcX1swsALBB8WCgB9BYJg CWzVAwsJBwkQ3MOidBCuKj5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnt8M8cKLewFSWq85K9zkGuGL9yUgaJauTpvsXEbkRBd4DFQoIApsB Ah4BFiEEDGDUNNUTxGW8B0Kq3MOidBCuKj4AANCuAP4iZnAzKGKv7RghfizwGHl8 EgLzcXUJEIazO0ZtEuvGhQEA+gQ3W1zMG+rWL1DloBdPfqyHwHB9FVSx8BSUpw/Y 7wzNETxjLThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ3MOidBCu Kj5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JncxggiS2J bUjxqkx6LH5GAV2icjhlJWTBaNiugyAYIj8DFQoIApkBApsBAh4BFiEEDGDUNNUT xGW8B0Kq3MOidBCuKj4AAKhMAP9MUlhPFpF5jEFE5dkkC3NNUv/0B77zo0wlRho8 cpIhdQEAuh2U6uPQ0AuHjMIddy6CcAQzVDqNWW1xQgfyGgosOwPCwAcEEBYKAHkF gmAoZO4FgwlnmjsDhWR4CRDUXuAibV33HkcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmf1UnL8o/jKxJsahZHq20d2iRmAmsxYb5oAR5L8OGOZ KhYhBLQq/TC7G90uueu9uNRe4CJtXfceAAC7kgEAhDozPUzSqPf2Mn31QyLxcBlD hU75W5LkWSZDG1aTWL4BAMHvoeZxQe07ZS6BYhLeyfB5o/nGp5qczIndRsUs6BwI wsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQC6zTjS5tK0NHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnUh7QK3N3WwMPwFCcpUxK+4qhX3NP 5lE6trz2i3KzIQMWIQQPv5pIpavlygCU7kkLrNONLm0rQwAAGWwA/0aap9o5pRdJ RBvAD2s05sOw7RMLGgFuEyC53AKIVVxiAP9hrikhlv9nN1LlRKKoijPeeh1eIAve oOBe1WfIQFw0A8LABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEPHFzCez2ZfxRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxfm8SyZck0L+joD oqyoPe9wKb+FNAE/TbuqsmEKQG+JFiEETtalMb9iUefDbEU58cXMJ7PZl/EAAPsi AP9fRyMKZ/ucAac0gaswozCnjliHSE1s6k+o+Wq8tExkCwD/eQHL5RivI8zEnOu/ lgGXDTBvLHPw4ISuq1s8YBnDugLCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRCE rdsHoQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdL 2tebZlTDQgcBBLWMG2DqlpAfc5es5X+Bzd06lpOq4hYhBCi3SqfFF3IcOayCh4St 2wehBX6dAAAgRAEAlR1dM1v6rCNWLAM0Btzw1zdbztEfUPWZVDgvdvwJ4D4BANlJ ZMrNDA6xtusfCGf90w0mDm2tkB4rPPIHIHkuMU0AwsAHBBAWCgB5BYJgKGTtBYMJ Z5o7A4VkeAkQ7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnwzw6Edvl2GzY6KH8tYSJCgmslewDxbkx2+t5uKoRRi0WIQRscAQ+ GQNb1agFAETvEDA2AyW9EwAAYL0BAM5f2Zy1yin/mRZ0rhw3T14aq/IYvmlqwhIh wKWnKWTYAQDeW6LhoIRfTwzh2tyV6WuAiD197NfBe7HsEIgReOg9DcLABwQQFgoA eQWCYChk7QWDCWeaOwOFZHgJEDrDe94xvmWhRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZwAJVRd7Rxpzt740JD8BmkkEfxiVZUMEvgsfPWoV KwVPFiEEVow3YiNvvHaFS9TmOsN73jG+ZaEAAP/wAQDYv8t4PdBk6xYgOJk1kaps RqNVHikQ61EXtZ3kl6YhRwEAu2iDBP/f06zd8l1N/KCBtc60+rHLh9b7NT+T1LLh FA/CwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRAQqbswI8v1WEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmckUT/WwkwNpGt7pAHjK0BjtA76 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 iwFXRQILRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4/5 3vj6LQ0Lzz8FEsT6oXVo0Mq+tlgqI0PyNnh5xg4BFiEEE8i43CAgnLDhVWTh/Z2L AVdFAgsAADPkAP4nU3RD+8KyAXDTpeFVLCarVs/JjDHcAkSW9SwmwFpT+gEAruZ9 G2vYIhQmRMGAy1/7BDaMtNzXE0kWCiU0359EBgLCwAcEEBYKAHkFgmAoZO4Fgwln mjsDhWR4CRDq1y/3kUB4skcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcme7rlg9jQVemvPDaPUCinChahjj8PPxKeevZMpJDBEtcRYhBHqA21Mw t9kA1b0fgurXL/eRQHiyAACohAEAysneQyxWJnogL6JWXSx3EZhSUTAHyA8b4J6j /AqME/UBAONmUZOiN8ZMi29I5otVbaJthXsYEAaucNYU36uTHxIIwsAHBBAWCgB5 BYJgKGTuBYMJZ5o7A4VkeAkQFmmCVh4UDANHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnR9rQ6GO4l5TclY5eof7SP/W5AFw9J/lJcQ6AuYk1 0ckWIQTCTMCRAtIuOOg5PFUWaYJWHhQMAwAAVqABAOoa90UTk1lpF34tl8cBnxxQ C7++nXp9rWsInrTM1mFnAQCgWQCvfZCrK3RXh8E2+HLciwHl6Wt3+cBmVd+u0eye CMLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEO5Hcw5dHXOQRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3EI7piBrAjXCWgs3gbNoxs+RgTk j9H9NpZX31SJ8wl5FiEEFuEHoGiGxsHhpEfH7kdzDl0dc5AAAC8pAQD1wHJgzYsk aV+T4LjJ1VRWDkFMp7yrmzffHQXpLmIpMgEAsvVNYYplQFxnJDXabD5paAyjGvPN bR0IW5IVX+mK0wfOMwRgCWznFgkrBgEEAdpHDwEBB0Cqh8U8UxS4VbuuARSH8Q0A 2L5dxlhs8ImQmqahcsEuZcLAwgQYFgoBNAWCYAls5wkQ81CZAH792D5HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnLbxe3tGB+SHjbC7ZnV/o 9ftRvLKGNgxz3QF4HZ5aLxYCmwICHgG+oAQZFgoAbwWCYAls5wkQ9seUpxm+vHRH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnBBYtwiMrYTUI eQEn6xXur+VHgC+MtP7QPG54Qd/GaTUWIQSCuoT2HjxS3jYwREv2x5SnGb68dAAA j+cBALw+BJIst1JP7CHK0qcnnPwpClkmGemIF2rnaEFJM7YaAPwP+HYzTK5Kv7eL ChxB8crgBHxrWN7Ir0HBqMp2WvVFBxYhBKNx4aCK7hlVS9j2/vNQmQB+/dg+AAAB 1gEAzXcCnq8AGjV8I6/9IUZ5XGhJzfJ7TgSDpI70/FrnLFMBALhswnVAPkfABxRi jqKCdLuJQ2fZPpr3rrSrhc3a9+YPzjgEYAls5xIKKwYBBAGXVQEFAQEHQPQ8OMHc 06WB/kfvvBZe6QpuoIbbd2vpFRgSyJxzc7YEAwEICcLAAwQYFgoAdQWCYAls5wkQ 81CZAH792D5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn X2cZPFpP4VgejGmlfFbBcUUz6Q2YJ5Z2dwDLVK9awbUCmwwCHgEWIQSjceGgiu4Z VUvY9v7zUJkAfv3YPgAARtIA/ignlDqUYbzB2xqr0YxNU1xwrMrnqB3ulo6ObLwn txeHAP9I3YXKt47lQsm2Of0cigWBCSuSOji7YRQpg5q2dD4DD8YzBGAJbMgWCSsG AQQB2kcPAQEHQMzE7hqx6O3MVTlGTD5sbC5PPJFw7LYg5/ZYzC/R9pHCwsALBB8W CgB9BYJgCWzIAwsJBwkQCFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnkFJzxVpraQKmlCsEECNwJH5qESVhfsLuMr1t0AQ8BsED FQoIApsBAh4BFiEEosGd18mTX4tHm10DCFP9u5AOBbAAAM8eAP9TrJb/NniPBu0l i+TQZCrW90p+C0lPiSOecDwd3nFFgAEA5KgbZFM9xZ83DnlZTC/OngTxMKhYL/Gd N2QTH6/+FAzNETxiLTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJBwkQ CFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Of6bx4daF1rMYACIUaFr/cAThL7vq4nLFIi9ptNOc4UDFQoIApkBApsBAh4BFiEE osGd18mTX4tHm10DCFP9u5AOBbAAAOM9AP9iFmBfmPB+4LjxEnBFKx69S4Ur0a+z AskTVWTIWKB8VAD9EjMUE+w3spesicSVxZcFW6oS/kmPmM7hv8aFRCPWDQLCwAcE EBYKAHkFgmAoZOwFgwlnmjsDhWR4CRBGlqXGKeox+kcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfvnwehSu/KBivBYHW7wVo5j23FT7YHD2ll hzF7HwkgRBYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AADhNQEA7y1g0xB+nSar4KsO 3dJ9coqmsu+UHOItnpyhhNLZoPwA/jyFaTgQNCRa9zW4pGITwzjCuL2CIoVzZZFL jqSdjxkFwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQeMV9nelcFvNHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JniMyO2ljU7SoVVVw5hkel +aJnis58kKeICClwhY+IpZIWIQS/wxpp6pR064n8zC54xX2d6VwW8wAAoMoA/1JO WymEazxhUjRbLRL5HGBd/pKWNjItocq8N8JvqEUBAQD/rKRZaLaMd89tMmLViSGf /JaGiSeDOzdO0Yh2gyOOCMLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEH5dtCDk DrEeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0E5jFPE jMK3Wo54YODOdNC3vkkCkfZZy7dJV3WHw4akFiEEuwns71Cjdjt4a52Mfl20IOQO sR4AAAT9AP9dYvVP4SdCKdnzz6wNro2bh7bADQeew/S75LsZsTxKMAD+Jne8L74j jwjdAElCfivsePlMUEYwn7EFNpRw7JYLBgfCwAcEEBYKAHkFgmAoZOsFgwlnmjsD hWR4CRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmejDVtpVxRp1c01lk+T4cXvF+2ZgWDiNn+dRisp10fRhxYhBJCp3T53IcIh no103Cr2o+5ddfo+AACuuQD/cq7vn8tITRFlO26iSDpa4Ik6ku2LQgLPZg5OEohS 0HEBAN/WZg7+stMQpam5RPZvW+gCmiUBzE0pWhBCz/ux7eUIwsAHBBAWCgB5BYJg KGTrBYMJZ5o7A4VkeAkQLH/cU18GqhRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnFUj4/rF7QGEWz7vW307/pc6To6v3hiN8kPjo2NVmknIW IQT9JyeLBRP4/c+4Mu8sf9xTXwaqFAAAK/EBAOsfVT7rAE9gV8R6KVpBwvGzqAjZ c+zwRLo/EniPQ5pQAQDQx2hlCo2ImQ3MzTaFfLF+ZOupAa/jkvnCPK2BvF88AsLA BwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEK/ohfk0vxN8RxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9yUMhZ1udQpHm4sL6Fk1g5EkG/hzEHu iNJlY38+SS1RFiEE02RDEKNHj2c03CQ2r+iF+TS/E3wAAHjrAQDy9V5T7ZvKmnNt 4cFWHabbuliTH/yH0DkzhH9ggkbYfwEApG8IEEW3oUYMHpm32JaNYJ3ERakeYf4T PLO5wgCQ1wnCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRB4PxqPxyf8PUcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcIP84bo9y3A7CYQAtk goAEBFN70Q4k8vWAKe4VCFEoaRYhBCfjX+tIbL9bFmACcHg/Go/HJ/w9AADzPgD+ LOTyA99N0n1DH5/lkFlN8PiCPEn+VRJmOnpw+/JQVBMA/A18k+p7Gl3J/DuGLnKm oTvp+yq5JRCn/qFbL4KnUKAHwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQlknv ga7+UWJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnFXtq 1y8wea2jZnw1WO9h3jFd/dMTIbnwsHEI6MKNWxwWIQQl2OqriUcFu2TUpqiWSe+B rv5RYgAAdzUA/jVNQMTsH0LmkeOCAXc8ZIr3MD9Wofv/SZmN20Y3PgzLAQDuP8Op JgXg+jPxafZgM7t17d0FBzrebzNovSzG2k0CBsLABwQQFgoAeQWCYChk6gWDCWea OwOFZHgJEBugGVBr5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZzPbn9/loP4CyMgA0cvI5EfYVkOZ5OOvCUuY11HDj6jyFiEERtL1ztm9 PWOhHd/uG6AZUGvmf7sAALqZAQCSjoBiWncNx+6OMNhz5qCKjrfqBWzNiNXaNZqj 7DbcEAD/Q/luc1bdWapTY+xBbP9S1JnxBKP+H9BYUOGvva5J2g/OMwRgCWzIFgkr BgEEAdpHDwEBB0CRGIa/5InlyLBL3QIbJ/P71KoC3OoF1QiWnOw75tuUVcLAwgQY FgoBNAWCYAlsyAkQCFP9u5AOBbBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnfTNiJHQPuYUOB7BzrXuVQlfjId1it7otaeWsfECmKCECmwIC HgG+oAQZFgoAbwWCYAlsyAkQhC4qppqIjopHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jn86ZHHdEuK0w7+j5gTG9CKIXKRIn3WscIpBMVvDDb EFAWIQR02P8yZoghbnt+L9SELiqmmoiOigAAaOgA/RPJCKQDNHD3f0/e9BvrS3pi LceWbC0N9XcPWXYYBSEQAQCXCTVuKBwBTb1u7592Vay42DGf0J6xt+vv+qUdjWVO DxYhBKLBndfJk1+LR5tdAwhT/buQDgWwAAD0RAD+JAhODv6VN+1huz2ut9CkCA/T McrKMJAO3VKCExJTYv4A/3pAPlLodex28G7MCocpQee9pmiHG3A/dTFOVmM1RQUE zjgEYAlsyBIKKwYBBAGXVQEFAQEHQC8ppttlo9pRDnC3M24rIuSbymSqPuMsdszV aQu6nsEbAwEICcLAAwQYFgoAdQWCYAlsyAkQCFP9u5AOBbBHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnDQJ52pMK/Wj4ZJYROkhVNVdwWRqs Uj5En/iFNoVR780CmwwCHgEWIQSiwZ3XyZNfi0ebXQMIU/27kA4FsAAAcEYA/2i/ Yb497FOoHspkhuo8afP+mB+6alOAxpRMYTJdGSMFAP46MmFrm9iwYt7WW0V4Fs6x mk6Eld78CxLtsnkUQ9l5AMYzBGAJbNUWCSsGAQQB2kcPAQEHQKuzYAnVa8wDDqIp 0uPvFCxDuKnoggRdmTd/67YZwtRxwsALBB8WCgB9BYJgCWzVAwsJBwkQC6zTjS5t K0NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnq4eRp/Xz RLnGI5Fcr5bd3Co9kZLwZvUv2iWWBaUs5mQDFQoIApsBAh4BFiEED7+aSKWr5coA lO5JC6zTjS5tK0MAAFKfAQCZwCxQkkHWEFufR9iOzU97OOH7paCKI6UrmGU0e1Wv VQEAiAlsf4IjQjBMNHmlZySNnxrIDPPNHHpQSrigclSL9wTNETxjLTNAZXhhbXBs ZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQC6zTjS5tK0NHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn5tCkak8O3+uBtE+aYeQVeYMUnf3p EB64TeYwmNMBQSoDFQoIApkBApsBAh4BFiEED7+aSKWr5coAlO5JC6zTjS5tK0MA AEeFAP0QK3cH0AOpu7PmxJSEnEUbio8wOYnb1e4FahB9fAAU0AD/WzlJmR5sP+Zo Xg3enPAHRrEDK3D0HK86U+1LN6efOgbCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4 CRDUXuAibV33HkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmftzEqUt/94kfExfuEdHH0zCqTJupypNvVHwBaDdESC9BYhBLQq/TC7G90uueu9 uNRe4CJtXfceAABiGgEA0npxZ0ZvrVtDHscc5ONYlewXR09D/XYzphSx5dd7IAAA /jJsgW+UXieBJPJzLUhUnW7yu/Ck9iKaqSvQtnHmexoGwsAHBBAWCgB5BYJgKGTt BYMJZ5o7A4VkeAkQ3MOidBCuKj5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnX2/VzHKUigoUFDF1AVzC0AcTLUyBwyFFNrQGdKKO+ocWIQQM YNQ01RPEZbwHQqrcw6J0EK4qPgAA7dwA/RKzL3Y8HnbsC8egsG655ZqxV3ogHQSe 2ilLd1Q/Axq3AQCqTWbSQ02FOEjFc6oJ9Syw4lCwUzydCdmhBWQK0NlLDsLABwQQ FgoAeQWCYChk7QWDCWeaOwOFZHgJEO8QMDYDJb0TRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZzCbkgGdb0yYDuBwwxylRKNo6Nkh5KQmbal0 Mp+kl6QoFiEEbHAEPhkDW9WoBQBE7xAwNgMlvRMAAJpvAP4wCcZGmcd9rKEFU3kB u9jcC/Tr5m33PrA9LxlIvH0wYAEAvVgWoFIkr13jLBJqqouGuhmoznYFPWm+/nr0 +n8+hgjCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRA6w3veMb5loUcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmedMyayTuFX6S/xFd+uS/4/ WXaepF8TtgKZfTMjf51SvRYhBFaMN2Ijb7x2hUvU5jrDe94xvmWhAAC+fQD+Nxm2 WyhUCtwsgnGEFaMg2OIfPKAh4oum+TqRew8CTd4A/0A5RameXRjIGYRrRlwEbZXt f5kI+K4vaiqOdOHoXZ8JwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQhK3bB6EF fp1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnGfwaZM7K IQcUDEFcaVkIWHgk3fRHrIENjq19DL/XEWcWIQQot0qnxRdyHDmsgoeErdsHoQV+ nQAA1tIA/2xDTtRHGwm/XdoIl4hRp5YAXo1LKB27rpboIgS2XXuyAP9yuve1FzyG kpvBpp+IqRLWMVxrEtXF4RUHPeERm2WiDcLABwQQFgoAeQWCYChk7QWDCWeaOwOF ZHgJEPHFzCez2ZfxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ/8/qWsQWF8pLdmtQ/6iZYX4Dpre4XKtLSWrW8RWW0VWFiEETtalMb9iUefD bEU58cXMJ7PZl/EAAMTqAQCR0D/OVfEQtwuVNfjZDEWDMG9xZp/RWf29Dj24HXhJ kwEA8VN5bDaymnUrb/oMItKcLtdlDUOd5uEUsEVH2OdXYQTCwAcEEBYKAHkFgmAo ZOwFgwlnmjsDhWR4CRDNzBrIRkyP5UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcme5BKb+HT5AqNLAJCGm2YMVpXevJNdvx7THLXmZL5IFsxYh BFJ3wU+dN6D01hXdnM3MGshGTI/lAACDPQD+JEMNVMOh2ffRoW+viMZNHe6qGoF9 lVwmVD4svhSxbfwA/A3QApJMZ+mkQTL5XLZ2mNK4xlWvhtORn7iasx9lyYUHwsAH BBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQEKm7MCPL9VhHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnm2MTvC34TzA22lki9C4/DcCE/cG8ebj3 wKlulvR8VF8WIQS+N9vEavgEKJ3mhL0QqbswI8v1WAAA3VwA/2iKsx7qHQblUmKv vfiw3joCs3hsVqoHO15clIcLWFgEAP9WRNlBC9eK2+C3XZ+jV+vGkv/FQGZHKU8p Zl9iCJhgC8LABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEH+tscP++/5ZRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3YbUGFx1yRUYO4ofprA JONSGM3u3rjciLd5nnfXMou1FiEEoM2HWCwhdDwOMGN/f62xw/77/lkAAPxKAQC9 DgMtFjThbyEW7TU1n1baHIMB3gnQgvXoQGA99j2c4gEArK17JH+OAgaDb2i8rYzj RK7gOrZ06wOU2bPnkVbprgzOMwRgCWzVFgkrBgEEAdpHDwEBB0BO/KqiQharQkpM LEV7X3H6bbgX8R/WYp7RsSeHTzYOBMLAwgQYFgoBNAWCYAls1QkQC6zTjS5tK0NH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1VkSL7qu+WRD Xo/7NMCoJoRCoq+QZzp8U/SZyyN+XHkCmwICHgG+oAQZFgoAbwWCYAls1QkQo+LO 9AsFUg5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnjGgt zohO3XwgKPjO8vPevEiRVlOE/vA1ffL2oofq0coWIQSGQa/jk48rsqQB86yj4s70 CwVSDgAA9f4BALzmeMzySv23x7mbXOIbVwhJvLqDv6weDpY1wK07CZmkAP9kgfw6 bD2HliFG3D16zT1MdP/n6+RyGn7rmE7sel5EAxYhBA+/mkilq+XKAJTuSQus040u bStDAACiigD/XEEC3tZnZrjQwm61ievwGr0nZc2Nu4PjQCno/6uur+QA/iy3YNKr ZXHG6WnaaWAWbG5tYl6QEE577MHA8GSFS/gKzjgEYAls1RIKKwYBBAGXVQEFAQEH QPZnawl3DmNjgBMFmWFxEIYBdAWayxD+sSmynQ1Q1WZ/AwEICcLAAwQYFgoAdQWC YAls1QkQC6zTjS5tK0NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnRKrHykGw9uci9ntxURpZzME1IiFNKXqjyBdN4Km3f+kCmwwCHgEWIQQP v5pIpavlygCU7kkLrNONLm0rQwAAc90A/R0oIk+KbqUYJvKfKcDv8plwwrPW+Ouz R7ifh4wh1eCHAQD2z0c0byT8qJmsavz4EQcYLuYWRYTD41OLjlBRcswGCMYzBGAJ bLwWCSsGAQQB2kcPAQEHQNIRZuC2rGnFgtpYLwwSv4mlAsIAkConDTIt0vEW/HuZ wsALBB8WCgB9BYJgCWy8AwsJBwkQ+mHnPG9dy0ZHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnMJdB+bs7Kfo9zV9hCjtjIL46/e+kP545etqf RoYIdzEDFQoIApsBAh4BFiEEU2rVYrkhe5g5ZiBW+mHnPG9dy0YAAJPEAP4zB6Oy vdHwfEOT3o5N128S65LzThUvG0akRi9k5e1evwEArH/mdNfFHSODGBQaRK+0FwQF 3rgzaOtiznVjW6DNtQDNETxhLThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8 AwsJBwkQ+mHnPG9dy0ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn+SpCB59vGoSu+ye02r0Wa/CJMqo65PWhLlZctwX/atIDFQoIApkBApsB Ah4BFiEEU2rVYrkhe5g5ZiBW+mHnPG9dy0YAACkwAP91GVFqh9KdQ+cWF878vGdG AGL0X3+sD3DFIru0ahJuDgEArcumvKl+KeN9l41iskKamuPrVVtNgolQKeMvmH4i cAnCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRD+3G5cRqqrE0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcpJ2bkM7BIPCXf/zsEbOAsZA6W Qp6hbH7EDjaDL8BPLBYhBEeXd2slmPl9ye+Uyv7cblxGqqsTAABrWAD/U5S4BHRN 9NtgFV/aldFwMLfT2tXG7qmY93xzYcrILHsA/RkrGSLxKtphRdbHr7/Z9A43dVl6 WEOYPFotqgAt2c8BwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ1Deanq4moj9H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnxcZg712FAE5A jCJ3DhpcfgJVoMiSsUPqQ0VrJlGo64IWIQQvkMXFOxDf1PfcfbLUN5qeriaiPwAA 6a8A/RhaccmQTOqByklU/JbdY9mkNZ5XuXxQmJ6bR96p+socAQCQu2PSuB7qBY3Z DLC0dTfCsr6v1/JgvTStlN2jRRVfDMLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJ ENyS1l+vRlMtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z8KVaB1mIIWpSYe0hiBjjDkzcb4pWfW0uI8q9BZ/iEBJFiEEl+QI92oIlUYQRdda 3JLWX69GUy0AABvvAP4lKNOCrCGiJHaI3S9OzlIQ2DqTNyjW9QOJhEi5nmgQ9wEA gBMZ6NFQsANDXHu+CefxMfUokrzuA1OkqRaO7jsspAjCwAcEEBYKAHkFgmAoZOkF gwlnmjsDhWR4CRAlwsDug9apAEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcqkbuPErusH4vGIHA5+jLwxRxbDDTcVb0VLY115gyQORYhBLkn 0G2SE36zT8fVpyXCwO6D1qkAAADF4wD/RaLr0JFrfE7UOTlFWChv440/AJdcK6HW qRGayQru5qgBAPlVE+D77nTYEJD5GDziXQcF1xg27khPfv+nOhikfAcJwsAHBBAW CgB5BYJgKGTpBYMJZ5o7A4VkeAkQA5JT7w65kQRHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnAdMBaJFX2Md0/o3ZOvIHmKoHfP2qnT+AfJHz R9FhS9oWIQQ8kwRHEI5vGqkh2cADklPvDrmRBAAAASMBAOVbkuXlktTT1pMYUAsj h9JY2468mhVBr9wMrCLVSC96AP4+uJTguk52Sw7B5IV+isQxvgHcSb9ijKoeIYc6 QUdgAcLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEKltmR2kfAo9RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2EI6VP7SVeCjwcNI18XNluk IQFYfN4ZTvorQITH9YR3FiEE5htjHVZmvtycJU55qW2ZHaR8Cj0AABXPAPsHfofi +0ta2erztqyYtyzs+QoufwM+YRcKemZ6+L31zAEAnHkatajQcUXtD4aNH0P8B3Tb LFP0yDQoROyReuyLlwfCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRAb/puj9KvU DkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeZUafPj4iY wXC8fulOll2TwfCq372Sp7nB70Xew4CgwRYhBDYwgunusi5QrTA9ixv+m6P0q9QO AACXGwD/ZZGDQfi5Mtje+uaf/i480C/VQSheJCmkuC/yuKVAu08BAN51vjKwWXVs Mo0OJMs5pTosLbLvm/AUGvR299gZhzUIwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4Vk eAkQ3fp3nZHGmJRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn1D6TgzJ4vwuan7ZfK25/WLCamB2fyXRRMe7NUIIYUYwWIQR5dMBOjVtUDSPN TmLd+nedkcaYlAAAcIoA/3gKnVAPtNKNHpXEb8r4sbCC1HYz3Xn1YscIEIrol41m AQC4rpLOc7+KZ7QXw3F7OAaeiXtLY9NzdlX+qHWbldSmDsLABwQQFgoAeQWCYChk 6AWDCWeaOwOFZHgJEJvVXJ4TPoy+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ6kIvly9xnEuWgBXqW0Wxm6iKUnM0VuTPRAPk31XX6zxFiEE Q1JVe6tz/5W2Mu5dm9VcnhM+jL4AACJOAQDsp1hwKw9liCi0h+m4voai4v5IeIEs lMnA5ffRXHOlIQEAvSiA2/VTVhOE3UZPuFjeLenrcN6F/Cc9rVRoJHnNzALOMwRg CWy8FgkrBgEEAdpHDwEBB0ApFMwVfYropsJ+GseOvXN/+hV5MkDWNfsQTltlj15F JMLAwgQYFgoBNAWCYAlsvAkQ+mHnPG9dy0ZHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnFMHU3Zlu32d0n6X500INj7ufkgkCVuNzppWEszRF kTQCmwICHgG+oAQZFgoAbwWCYAlsvAkQW2pNcxP0aEpHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnou/7I0tmpiYYbq3ggs+bJpV3v807qRpQ 8TL/stFViloWIQTvdYjFR3022bnct71bak1zE/RoSgAAhB0A/3N4onowfgICJrLl 372ZluwZFbbl3Lt8yIGhZ53OGXQRAPwKkQ7y5yq3QD9KYG+bWIVX3VSzQ4GMBMha q+MI/Tu0DRYhBFNq1WK5IXuYOWYgVvph5zxvXctGAABflAEAr8UznSq1f+91bW0X gsj+Jybyv4kN8wpQbqUg/xozI+wA/josQJRH/H/dZTfbGuqAio3Fp7HQkcTwFZLa l9BEtacDzjgEYAlsvBIKKwYBBAGXVQEFAQEHQHwWvPySUmD8qgbzBoIwmHo+9tk4 TbbPbTBMrs49MEoIAwEICcLAAwQYFgoAdQWCYAlsvAkQ+mHnPG9dy0ZHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnBhGzOIkBcW+WD+vJkrBW jlbgckQnFsatwaMN1+YQKsECmwwCHgEWIQRTatViuSF7mDlmIFb6Yec8b13LRgAA OYwBAI3GIIpEoNFnliYgFVmJfk2eg1P2V4qpL6pqVlH+28GVAQCMQxNZcwamnfI5 lco+K5Y+atLq3Lmb02V5nE2KuHI6AsYzBGAJbRAWCSsGAQQB2kcPAQEHQKLnXaoO wpxBnjzSfq+4ooVFF8w0/rihTjpIRSbtJkznwsALBB8WCgB9BYJgCW0QAwsJBwkQ tYp9phypf1VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 0euT6nEFQzUq6mM+h0zbApdqZ+FkXl1uXh1HhWT0FpADFQoIApsBAh4BFiEEziLs 0oLyGaqZWYujtYp9phypf1UAAAnaAQD1mKxfeJjFEAFRBtCbeEBVMGIgjIAJUoH3 SXNhCCbN3QD9FW/cihgvRS+AH7fSme36x2NJuBM7Qv0DywdXha3k2QfNFDx0YXJn ZXRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCW0QAwsJBwkQtYp9phypf1VHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JngIwwuPLAWVpQsKrE NRgnMTH0aw5wlJgNG5OgSSxyDeMDFQoIApkBApsBAh4BFiEEziLs0oLyGaqZWYuj tYp9phypf1UAAIEzAQDqFCE+ypcpEOAbG8CaylQE0B6ia8iVDnNeQL8mnqGYfgEA 0FHkyyJ4HQPu9mOp5MMJhrCSoMXhcK1PZXflMpTs6gTCwAcEEBYKAHkFgmAoZPAF gwlnmjsDhWR4CRAiK0gOtD4K/0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeqwndAMhtIHES0it0+j4M4tliB4Cfo73SJ19h1eAQRuRYhBMD/ rt7wkosYEmV3WiIrSA60Pgr/AADb+QEAkpg00dmnARcLLazSG5HrTX30dJuRHQ44 1E2TXyDQ+8IA/RbFf1jSMaRctqTsjRZYV5EKdJxjqiMRYoYqtXlIa2YIzjMEYAlt EBYJKwYBBAHaRw8BAQdA9jzLpvTbIZS5wrNjo5z+QG6JM1K1x/gyrgk54IPNCabC wMIEGBYKATQFgmAJbRAJELWKfaYcqX9VRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZyS3LlX1ZYPsLdA/VrUVqGQOM1/9sXQ+zjYX3qoKBZcv ApsCAh4BvqAEGRYKAG8FgmAJbRAJEBxmjdXoCcrKRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0fT1Ln9nEWnJE8YqZvx+uxjIgEI86tsXN9h 9dvhzou+FiEEKXpdJwBBEPDL+V1RHGaN1egJysoAAFsZAP4l4gGZDiyfS7IsOfVb WirotxI7yg+M/9lYd4jdbDxKKwD+OY9sR0BBtZV2Ko4ZmmmSAKt/OMubqRYq6mjp DnI0qwgWIQTOIuzSgvIZqplZi6O1in2mHKl/VQAAxrQBAPBL3dTPaE8n5x30UFZd j7txRG5Nk9/Qo3kQ0r+trTrjAP4p0gpqBw+6QtHQcboQ4jH/8cQB4bEOZHX76gqa VdI6CM44BGAJbRASCisGAQQBl1UBBQEBB0D0BJudZnxQlhWR31x8zM8RkW9t5QQv MQwRDYGO1y+LawMBCAnCwAMEGBYKAHUFgmAJbRAJELWKfaYcqX9VRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3t0QjxYWXs7agaFzv6UgQHS ic542OYyQiCKibR0e5myApsMAh4BFiEEziLs0oLyGaqZWYujtYp9phypf1UAAK80 AP9nfqxHuTF+zzHE6Dx07mw4JZYPIDUI5jVlZz/ghiGy/AEAptd6ndzfrhjdVoIn A2yKw4XmsfjZC7uR/nm0Fcss3gXGMwRgCWy8FgkrBgEEAdpHDwEBB0AMY2vnAeJC Dnlgcw987PMpDgDuvv6RpXwLsUpvIJjoIcLACwQfFgoAfQWCYAlsvAMLCQcJECXC wO6D1qkARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzgm hD5lPxePtOEXbfiXTbpK12/8O/XxNhhqgYQkarWjAxUKCAKbAQIeARYhBLkn0G2S E36zT8fVpyXCwO6D1qkAAACiFQEAh7SPhCx+zo5XNvXm7LlraYFzJQbAuj7BUwzH mQUEd/UBAN/wgsVTujdwk5REo7H3zSi/fT0rWSCeGDROnvew0tMHzRE8YS00QGV4 YW1wbGUub3JnPsLADgQTFgoAgAWCYAlsvAMLCQcJECXCwO6D1qkARxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7+Tf8TAs+/0uNYm0m+BwEj9 dFhUnsJqMJ9VNK1mISElAxUKCAKZAQKbAQIeARYhBLkn0G2SE36zT8fVpyXCwO6D 1qkAAABx7gD9Enduncgalc2WEfvIfrqqPOTXvRY0wkw7IMdxzLGdP98BAKpJlBxT hroB4qWJRkc4N0EuvUGFOH04W6qW/mzgEY8JwsAHBBAWCgB5BYJgKGTqBYMJZ5o7 A4VkeAkQ/txuXEaqqxNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnCe9kklkkVGSprIw3u/+M4rxGDvpJQIl8MPGfa43/eNsWIQRHl3drJZj5 fcnvlMr+3G5cRqqrEwAAOAIA/22tzKiaEylLdbp3HjppLtFx4o/rDYnJLBcCBfWm KiYCAP97w8xPC4IjW4vQqOPfm4G+vnURhGK4mbLgC22i+s8tAcLABwQQFgoAeQWC YChk6QWDCWeaOwOFZHgJENyS1l+vRlMtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ5neUFpg8hs85j4djO4ytjkEWVh7lOqkGe85rpf8Nifl FiEEl+QI92oIlUYQRdda3JLWX69GUy0AAGXGAP9m4pU7/67F3gwzaPNUhEV5qVRk YCTftUSUPY/nFHRIEAD/f+XW76EbBzUmchZs/3zDaokRitahd8JGYJubb1ZpZQHC wAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRADklPvDrmRBEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdxI+xwMpb+ncboB6H6IA0jQz3yEHKT XoiGC3hfm51YFxYhBDyTBEcQjm8aqSHZwAOSU+8OuZEEAADb+wEArqalXd2ZxbPe xpHRTA4ptuGaW57Omo9xJmDYDx2oN0kA/2dJ8o/jokLicWutivL5Qgbb3XOff/Ba xoJ5iOw8z5AHwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ1Deanq4moj9HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnOmAA9BZVAESM5wLZ 2jXlDBQRah0s2UaYJp8gkYjKEwQWIQQvkMXFOxDf1PfcfbLUN5qeriaiPwAAQHcB AOawq8IblbtrawzDfEujyI4JjgaEohwWVdkJQwEscrfQAP9x0OWAyqSXOreWlMnF 69wtxvc7nLO00tcR23Dnng9eBsLABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJEPph 5zxvXctGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwSk g3XiUg6YETwb277ce73jMc50PX0WlJNso+tyroP7FiEEU2rVYrkhe5g5ZiBW+mHn PG9dy0YAAEIeAQDxc6tCE5JHHWCEnNu9rgag6Dyfw33KYcMInxwdGgZ1EQD/Yvib t6fkW4Rw5DanU3jLgjUl+FdwiqY0milDX4BSaAvCwAcEEBYKAHkFgmAoZOgFgwln mjsDhWR4CRCpbZkdpHwKPUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfxo9PWZVqzex/ZaPpFbUMaOlzg7bu0BdYKiBgpdeQQ+xYhBOYbYx1W Zr7cnCVOealtmR2kfAo9AAAHowD/dhvRSmETRjzEFwOWrBPcrT+BuCSMSs6yKLWc fWui5LwBALavsvKvi/u0gt+S7VqDdjfXN+big3LusAWyjBweilcFwsAHBBAWCgB5 BYJgKGToBYMJZ5o7A4VkeAkQ3fp3nZHGmJRHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnAZaTnkn9uykwdROwh+9Bv05/gc2NV6AVwCDXrj47 8MMWIQR5dMBOjVtUDSPNTmLd+nedkcaYlAAA1j0BAMM/go/A5I4R7n303PgJZjY2 Ud5s2MIsaZzvwHdYnqS5AP96ppgRA+uKn9GUDVoxsuKPzSQSylg2DBM1CtgNxgg/ BsLABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEJvVXJ4TPoy+RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ51SccWhrK1pbr6GkeE9DPmwvVp2 Sj8tQM+xavw0zfi5FiEEQ1JVe6tz/5W2Mu5dm9VcnhM+jL4AAK5wAQDtkQq5D9n3 kyQpgkOrk9XB4qabp00FhDLd8B3RREgjgAEAqnTPtgsd4H7t1NXF7pJaVhfKN0sW 8UOT2gdDSYaMwA/CwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRAb/puj9KvUDkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmetKVAim0lTd01f niXMTQVcKY2XlHU9TB9lk/pYfJvr1hYhBDYwgunusi5QrTA9ixv+m6P0q9QOAAAj 3QEA/GlhJXvzs4K6GwF71iKZyhS02Z2PxXAiNHsHaY6DFwkA/RF5e9RqrEmNxXsH Kizw08lBiUyfO7XSsgCiQCkJa24MzjMEYAlsvBYJKwYBBAHaRw8BAQdAI7tul4pm IXeQ5a/6tpfs3xo6gaq/oqHGmkwyhp8RmxzCwMIEGBYKATQFgmAJbLwJECXCwO6D 1qkARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7r2IZGG PbFGRZmxZGB+kw2buRu3JKsUg9JrX3tQwQpiApsCAh4BvqAEGRYKAG8FgmAJbLwJ ECoACV5FiuH8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7PNZ5m9bFf5MWDuh/j+rxLyBM6t5yW+02UKwtwaw80SFiEE4igQ04JjikwYZkW7 KgAJXkWK4fwAAMe9AQD42mu/YxIHZ37R3QLtl7og3OgZLUMINBy+rbjsSk2POgEA nyR0046ueYDzHf7CtQpeWUx+M6phR81iAnxvqNGZ8A0WIQS5J9BtkhN+s0/H1acl wsDug9apAAAAKIQA/0dmKWVWjlMsa8YW8IKDeVxIfhh1Ce6zAg8IEByJUeVNAP46 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 G7msxn9iApsCAh4BvqAEGRYKAG8FgmAJbLwJEKNR9XL3rbyeRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ77wVpNsSDioS1oZNLLS5V/HSJi6 fWM7+PrrEO6NmCr8FiEEOVtU/5wg57gyPtH7o1H1cvetvJ4AAOx1AQCWjb8k+RY6 8308osnOtxHpy8+wQwp9TmLheHM/TMLTiAD/RtyV79E2iets0nGP0BYaQmXadqss b9alLx5RS3cgTQwWIQRHl3drJZj5fcnvlMr+3G5cRqqrEwAA8SkA/jxhyAsDwiyW bBcP2fEbIte79IwKWJu2+109+Ns+y66sAP9PXziXBlK+AXhcYi2jtFAbY6xzJksV XWZLUHlq8smHBM44BGAJbLwSCisGAQQBl1UBBQEBB0D97iE5Rnj6Vahj0uH77E39 5OHTnJ9F6uQvsvBcEcdnSAMBCAnCwAMEGBYKAHUFgmAJbLwJEP7cblxGqqsTRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1fdK0FoZ2+9ciRi yr15rn/IQJqaElJSxRTzT6tGdCAAApsMAh4BFiEER5d3ayWY+X3J75TK/txuXEaq qxMAALvmAP9EguTboSB8JwoFot5YZDWyLZQ6sdJc997GF/WwNs1dKgEAktPu5f7t gqlKAKydGSwSj5ZPAzduJ266MMNiV+M3hg/GMwRgCWy8FgkrBgEEAdpHDwEBB0Dm fkWMakTPx/+WVBQ/TxOPLAEyvJk+8W9DdIELnFf7SsLACwQfFgoAfQWCYAlsvAML CQcJEN36d52RxpiURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ2T2HHe5njw9ld3jISGiZtm5O0iUI9U2Ob7mLkp75CAXAxUKCAKbAQIeARYh BHl0wE6NW1QNI81OYt36d52RxpiUAACynQD+MNNJRUGBPca6F+4ZE6RwR/CqGWlM 5RxEjg3niqvUmeUA/jXVVao+puJya+SFqaseI4Vq/su10cfF9xZ+U3W+MFoOzRE8 YS0xQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYAlsvAMLCQcJEN36d52RxpiURxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzAZV1mv2sag+aHl U86vxXKEYkyt9PMoBMVcQfbjwCxEAxUKCAKZAQKbAQIeARYhBHl0wE6NW1QNI81O Yt36d52RxpiUAAB+rAEA4UHOZ5JFs2OwzNg9J+HHLi7E6O6Azz9IgIVjmTtvxaAA /Ap17Bk3ctQ9EPUlr0f/pDsbDRIMblhB4K0zcDFxIAcLwsAHBBAWCgB5BYJgKGTp BYMJZ5o7A4VkeAkQA5JT7w65kQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jno0PQjZFy4zr65HBrYuK8HKyvqHTB0IeIRR2QuhuR69EWIQQ8 kwRHEI5vGqkh2cADklPvDrmRBAAAKKYA/RviLHWRsYznSqeJ2n3cEqQKljy9JYZs 1U/1yLuOADQCAQDjxOuMK/fAjLbpE8pz9LTCTrOe74T8fjzk+maZCTYIC8LABwQQ FgoAeQWCYChk6QWDCWeaOwOFZHgJEPph5zxvXctGRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4/d+oeX+WFpJNuukpPwf130NP4PgScaJiAO UYsOA6gzFiEEU2rVYrkhe5g5ZiBW+mHnPG9dy0YAALpdAP9LbXprnRSmi0MpQwdK BmLcBPxdj/5bUWPHTlNi2E09QgEAp486L2Catc/nh2w+vlTRBqseWHbxFGWsAeT6 DRhCmAbCwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4CRDUN5qeriaiP0cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdURaT/IWPPeULQvvO+fSZj TcORnC+Xt+j569Udym5BFxYhBC+QxcU7EN/U99x9stQ3mp6uJqI/AAA81wEAjWoz QyNx1+pb6RDGfMyNVIIznZ5ZnSghv9pkAQmNtEMA/3N45IhoJcOPRJOGEQ5aNwWo tiywRIxF/Bn0bZA8J84PwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQ3JLWX69G Uy1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jne/CuLOfY f0n+rcbE9myip/yZ2YEqmzg28A3FnUp6N9wWIQSX5Aj3agiVRhBF11rcktZfr0ZT LQAA9IgBAMdTrhknPIdWE5KwfCP/AWMizM9tmXmfDzWa5OGTo2hBAQD4EWXdubS/ L6BOMzK0P490cmQMks4Leg0LjhyO+UmXDMLABwQQFgoAeQWCYChk6QWDCWeaOwOF ZHgJEP7cblxGqqsTRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ3IWz6Y0o4fX/2hH4ORDAZI8heg/f+XjWhcrUTMga9KYFiEER5d3ayWY+X3J 75TK/txuXEaqqxMAAChLAQDa7nrvA8JNLssnNdvpVOwTOgyloeDvwVYHpNdBjfNd fAEA8J3RNVEeIfZglRxYrvSOxB3ZumTW/FBlAEju1BflZg/CwAcEEBYKAHkFgmAo ZOgFgwlnmjsDhWR4CRCpbZkdpHwKPUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfLraB08WQXrEGA9ZjwFK0EG6ZxjkqWCvdLl+PvGsJu0BYh BOYbYx1WZr7cnCVOealtmR2kfAo9AABHtAD/YsXRrgk1I9WLowelCHrX8wR0aQJN pCiMJkbJf44WXykBAI11SEOs+nZBdc8I6oEuMD1/y1Uk/2pHFCBTXjGCUHwDwsAH BBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQG/6bo/Sr1A5HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JngJB+BXM1/UlrGZcJ1WuS62CusYzTKxN9 RzDpb7DcpsMWIQQ2MILp7rIuUK0wPYsb/puj9KvUDgAAcKkBAKv5mDhEB5l0+807 I+HVcejoaNazH6G64JXA2B1hJ6JIAQCx2e+mM3fQ8JoemAlVBRQIASz/Cqg/ha3L 8axdj2EEC8LABwQQFgoAeQWCYChk6AWDCWeaOwOFZHgJEJvVXJ4TPoy+RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzgGZ/0hm9vH53LCp2AY 9xIb02dOenz8CTrkaSK/kji9FiEEQ1JVe6tz/5W2Mu5dm9VcnhM+jL4AACDUAQDU H7OhUNF8KSGpMoXcKEBrScJ4KHA/On3e3BtOFvB9swEAhbC4sDDtF6GKBJjUD6kx ccqLyrpkns2U1B13ovKKIADCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRAlwsDu g9apAEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcX7s2P FRA5akoVvGH7zM6SUHHQRCYDyu5EqSLIoYikbhYhBLkn0G2SE36zT8fVpyXCwO6D 1qkAAACBCwEA+WyfPCAV8rSRqqNSn8h/K/Y4LFIl+vSPPSm2oFN7WVEA/RoLYuDb ShsxBuEMph0iK8hx0Zr5txXZsVu/U6XjI5YFzjMEYAlsvBYJKwYBBAHaRw8BAQdA NnFJJPpKsv9if2LZ8JcTyqZ4QZkWTSisegkUDMbjJpfCwMIEGBYKATQFgmAJbLwJ EN36d52RxpiURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z0bbcRXi2lgAYVsg/RA2arPB9YcGD/0lu+BeHfqHedwrApsCAh4BvqAEGRYKAG8F gmAJbLwJEDrQpmMwEmuARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ+Omw3VSHG4UPrDyjQLJevBFg2mSGtaDl3SZScBq0Rr6FiEEL5nJ2FCB PEFqGhWlOtCmYzASa4AAAFxVAP9z+U39Dqzpl5kg8R4dXSqx1PCVxtBd0zx/+MC+ K7U0cQEAuLEdOsFR9QiCkCz7QtPggIHqxuvuFvYupMXeUZEk/QoWIQR5dMBOjVtU DSPNTmLd+nedkcaYlAAA/hwBAMPvJqGTTHJ5jmEASpcuHTliasTOPWZk3VfBFEfS afiVAQDOnJP62tbugR09tNYug8QHgTt8oRLL9gKPX5HDOlmeD844BGAJbLwSCisG AQQBl1UBBQEBB0AsAi6WoCyDe7fFiogFxpPFv41Hg8qXIr1lmP4hV679QAMBCAnC wAMEGBYKAHUFgmAJbLwJEN36d52RxpiURxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZzupjA93zNzGf5JVMZ5cIbEAs9zzYIJsTZwHeAG3XBb8 ApsMAh4BFiEEeXTATo1bVA0jzU5i3fp3nZHGmJQAABL8AQDCjECdLBzLwAbcVyXY 6ExIEURSowsE1+w3lyQbZfIx8AD+K4Xx5KhKpB4GTjr50t/OVypRiWyIyekCHUG0 ZA1jeA3GMwRgCWzVFgkrBgEEAdpHDwEBB0DIpf0nwKCC99NV8g/bHebnfwulkZfW Ci16ZpEx4h6/NsLACwQfFgoAfQWCYAls1QMLCQcJEH+tscP++/5ZRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5EG7tNd8V0k/ECqSAfkEg40 3kE4xMYRZI3gY6bdIushAxUKCAKbAQIeARYhBKDNh1gsIXQ8DjBjf3+tscP++/5Z AABi6QD9HwuXhwo1qc0gUpn16tsh7YiqsFaDyEH00JgrgEo8eF8A/AhO+n8Fgh3P PnvkLCBmzD06TBV/Ri5UgvzdqB6SkOINzRE8Yy0wQGV4YW1wbGUub3JnPsLADgQT FgoAgAWCYAls1QMLCQcJEH+tscP++/5ZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ5te+zvKjUmAI6ZmYCD5ENe0Pi/Opf7XuOqpMPGjYFD9 AxUKCAKZAQKbAQIeARYhBKDNh1gsIXQ8DjBjf3+tscP++/5ZAAC0pgEA2dk9YRWR SGyWWfoa7/wRa4JCpksH1KD4lb5Fmw0O56gA/j09C5uiELwZDDtjvqfyoBK9ESuC dwByMGC7WBMlyxsBwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ1F7gIm1d9x5H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn9WhjzUma/SMF tJBm7mfnxr6A67kmtMc0Pd0M8Ff4CNUWIQS0Kv0wuxvdLrnrvbjUXuAibV33HgAA Y/wA/Rbn2Wr6xW+RNF08KL4DKRpFlk43sg42ItjO9PAI8QkPAQCibNn9bE4T4Z9t s4KFGhcb8q8drIOb5gHFzneO+VqoCsLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJ EISt2wehBX6dRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+KHt7C1DPnVgQ/ftMnU/gOUETN2YHPSPsnSwiTf75blFiEEKLdKp8UXchw5rIKH hK3bB6EFfp0AAINoAPsGSxpBZUEuvd++0KSWF+Zsy1RYg1b+zTa1urjbbXYAeQEA 7sGqYB+GoC71h4j8rZNtrCpP9pnLFsQY7wXyyEUSxQHCwAcEEBYKAHkFgmAoZO0F gwlnmjsDhWR4CRDvEDA2AyW9E0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmd0nc1BOBHbS2cMs74yoD/l0lolYMeX9oDoEXJGqCC+uhYhBGxw BD4ZA1vVqAUARO8QMDYDJb0TAACOXgD8Cjfjic6ENdR2koU5kPZuIByEA7gdKXwh q/NScJYYRcEBALwRURjE9n/1yYNa3gqZwptgPwygwEfRq8jqbL9E7pkBwsAHBBAW CgB5BYJgKGTtBYMJZ5o7A4VkeAkQ8cXMJ7PZl/FHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnlkUdgxO/fh8o2ZcTxzMLcXAVoMOrO6QoVAXu DdaCk94WIQRO1qUxv2JR58NsRTnxxcwns9mX8QAAFkIA/1qGHjSJp//arMuDVHhw roQlRZCrP6iSRmASU7hr2xLRAQD6Yl/FUaTwj6knrEpGqpAzO0QNOdopJJaGXL49 EYbuDcLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJENzDonQQrio+RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7pPhqLtS1lyGpTFFRZ07ZuV mie2gEDHhJUlhZ+PZIWiFiEEDGDUNNUTxGW8B0Kq3MOidBCuKj4AAKwvAQCTJ9fh 0qGnkGu8O4E/o2Ze7KXZAox3+DBM0YVBYI+bJwEAsDJrHPgLiIuQUZuI+cDThEmw y/U8FC8U99KU6XmcIgvCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRA6w3veMb5l oUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdusobAL3Zx AGyplaVbmk8d6GlV6gjPygXePb9zpmjvdBYhBFaMN2Ijb7x2hUvU5jrDe94xvmWh AAAgCQEA2L+I/5xli8tm0qybB6TdbbxCZDxV1sbNkUfA2x83xysA/RXQ8qhcdLRk i6tdT6rewM8c551/HT1rsRYdPdJNmnUBwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4Vk eAkQG6AZUGvmf7tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn4KpBaKQq0P3ay8gFuvqRPgsAqG2jukHLQ+m+Rr7TqdwWIQRG0vXO2b09Y6Ed 3+4boBlQa+Z/uwAA7ioA/0rWswICZx9yQF93gvENn7Acu99VN4XXRr+Tw4VAc9FK AP4yb+8ammnTVkUXjdxInwrY0LIYW99ey6LtNhCaejBSA8LABwQQFgoAeQWCYChk 7AWDCWeaOwOFZHgJEM3MGshGTI/lRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ0gVryJOyoARJRzGrkgEBAIoj7zfJM6snuujuHfuWbi3FiEE UnfBT503oPTWFd2czcwayEZMj+UAAMmDAQDbN7x6sa8LIsw/YzqeZa0HCaL/6l4L dLGE5GRrgwngHQD/YNkPoRZBwNiO4evKI9AUpqSUHz0mVUi8GSjXHojZ8QvCwAcE EBYKAHkFgmAoZOwFgwlnmjsDhWR4CRALrNONLm0rQ0cUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmdgAvno+C0toEdJwdwT3khK/Y+zR6xE/d68 2L7FrukuMBYhBA+/mkilq+XKAJTuSQus040ubStDAAC9PgEA8xHBkW6PsOMKn4qg clpkMmE9WnnDqx17FK0xC1VFj/UA/ih7wxILDlK/ASJsNJSHxEOL51qGN8oZzbrH ebAUgroDwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQEKm7MCPL9VhHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn8/gWtB/sIxt0EM1x6rEm YCQB5Uj3NIjvV1y/SwDpTZcWIQS+N9vEavgEKJ3mhL0QqbswI8v1WAAAfccBAP46 qG1AFKYOMFeGdw7AYCTeqXCgGrGGcGZpsybDGXaFAP4zhktNSvk0iJVlaiIRktRi Nz+mVuJjpd81ZnOWoQsXDs4zBGAJbNUWCSsGAQQB2kcPAQEHQMiUvWTm814R56dq XD0A2l6wAE6yININJqBih28T6S+vwsDCBBgWCgE0BYJgCWzVCRB/rbHD/vv+WUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme1mu6cqf0Yo5kN c+2sDjcfaHP/F3bSa/esXVe6CLYt0AKbAgIeAb6gBBkWCgBvBYJgCWzVCRDGQaV/ pNjtyUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfwrYqL 79oltgqBvnJXjZvcvJ8iOdGZ4HNNlsmCG5yaYRYhBN3htDISRPEkNRtzKcZBpX+k 2O3JAABFcgEA4f6b0LrECCRfBLfUhJ2v3tCD6voWivT4DVKYtxoWC+kA/1sKTtJg doueQ5bAgkA8GcDmVdiUyRpFANDOnyQo52kGFiEEoM2HWCwhdDwOMGN/f62xw/77 /lkAALbsAP9BcUMFRAhdv1yTho8LGN5evAzVipo4mGEyiFr7fbPcbgD+OSeLiYWB BrfLU/tlzBZQzVfAO8xflYW1kychXIG66A/OOARgCWzVEgorBgEEAZdVAQUBAQdA u26Enq0YvlmxT+BMzrScjfr3nhUzk3CO2SMowsdLUzADAQgJwsADBBgWCgB1BYJg CWzVCRB/rbHD/vv+WUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmdEFrBibVW/DwZxFe5/sNYKSFJpJULF+IJamTuwisK3lAKbDAIeARYhBKDN h1gsIXQ8DjBjf3+tscP++/5ZAABE1QEA+dwLkTIkFxvCdFpxoyrZb2UPKNaF/BOs R/w1Avo1prcA/iutckHp86Ozg7GCBfIlSW53W/kW7BY8HR0+oRpKLoUCxjMEYAls 5xYJKwYBBAHaRw8BAQdAzWXjDvPfYT+Kh9IBC3OzQeAhyj/8XrYqYnNVqFtt+KfC wAsEHxYKAH0FgmAJbOcDCwkHCRDW6GWjuI+IgUcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmcIrn9WWLCBQPqzDW1vau4QORtI9KGRfVK9qojM tlTFowMVCggCmwECHgEWIQS+bFch7cuoF0xZ2ZbW6GWjuI+IgQAA1gEA/3ZMuqBr 2NLRc06fYdkhd+EnYnX3Tgrv2eW6gpY/vwuuAP0a7hR0ntkMKo1v9LJZt80vyHo9 TVWe7KbpWxSoowIsD80RPGQtOEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbOcD CwkHCRDW6GWjuI+IgUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmfj3/IKBT/4/AE2AOO5iu2hp2tBa2wga/qi0SPUsBeZGQMVCggCmQECmwEC HgEWIQS+bFch7cuoF0xZ2ZbW6GWjuI+IgQAALc4BAIfkf9q8JVfg0ISLE92mTOA/ NA2O5wdOGHo/+5y5YKwhAQDFgpsgbcPB7dSipp1VXHzpI+/tnZmwjhWq4p7MvpiU BcLABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEHx6ioJUGvBfRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4WRCOO9f37v4Ch+KMrfrubs4tr0 5F8rb6LOR/EeVBQlFiEEywlhwWomKeKFW2FDfHqKglQa8F8AAEZ1AP0TJqonZHT8 0ayQuch8ijK3XoCzwnDhqv1Rer47OA0M3gEA4fXJWxFwPqgAOTvfeSGB8Cn6o/4s yroMVj25+h1fQgzCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRClTV1jsL/Ge0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfpVcQnmYX2/vlf 4KZ/raFLkLm77BnD2FrGHOxy8zvhRhYhBKNb066nI2L1w6YQkKVNXWOwv8Z7AADF mAD/T+Z7f13XWvpoNyG8KsOg6sNggzkggSrLSmn+V3jbjoABANLPlTyj560RNb6W 0dVTccP9/A8F+IS6+0unyB0NntsCwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQ Iod6EotvqzFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn IMcj0pw25kBEOOqwDqvtJzn7HqL/wBIfoELsT16ifKEWIQTzArg+kM1qw+PFnTsi h3oSi2+rMQAAmAIA/3YN/MzUPLnSmdSfSvQk6M/z0MiXzugTQRrKwY12PFqiAQDv vIcu6TFG0dL06DG9j2DNQA8Snl0EK1KcXd4Nud9iC8LABwQQFgoAeQWCYChk7wWD CWeaOwOFZHgJEP2diwFXRQILRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ0L1hu/k81x1VYloemkTuEnt8kXzpRj5clFGNYxkMGbRFiEEE8i4 3CAgnLDhVWTh/Z2LAVdFAgsAALKsAQCFjLd0OYVjtWbAYNuAVBSxoaftSJQKMW/7 BOfopXLkZQD/YZ5lsloHXRItJBuRVk6vHiXlImLjtJaBUTmWIJO57A7CwAcEEBYK AHkFgmAoZO8FgwlnmjsDhWR4CRBYo4Ixf1TXxUcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmfRnlKcpW6PHxDnh/tYhhjQhzlvCk7JP4J54CYv X/qYdxYhBM9wHne3n+ve34i0VVijgjF/VNfFAACKDAEAhl2IsCP1/Lcq+0tcd8M9 doAlUReMH35znheQyHkY4KgA/0lBB7GvLElV/YTJCZe6mEutq1Seq8STbayzjz91 bGgIwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQFmmCVh4UDANHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnErE1P9gyhPV376+2TV0GMQAr 4/+lGq5oclc7f4xIgm8WIQTCTMCRAtIuOOg5PFUWaYJWHhQMAwAAvbsA/1gNDZqH MdUgBPq9lEjPuqC4oz5e3/lszoNPcqv9KMnHAQC83ff7C1TePq9BQc14lwJj6w7I TFiGMX1i61+fQBNgBMLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEPNQmQB+/dg+ RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZymROFOOKtK9 mcvl5bx2LWUZWhuAfOIKuD4x/lvrYggBFiEEo3HhoIruGVVL2Pb+81CZAH792D4A AO23AQCCCWa/s17vDr1DMRJtnxBO5b2ADhHful68r/EChgqahgEA78Sl+H+06o0X PzszVS3eig+eA4b7dL9NKoanR7KykwTCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4 CRDuR3MOXR1zkEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmf/1g/rzygB1Xj+CyYmYuff1zruiWGg8tA6sDEnN4vuaRYhBBbhB6BohsbB4aRH x+5Hcw5dHXOQAADaUAEAkWe9xhmQf0Q7eK3BrgLWRxcYz6ztPUVytzYVs8qD42sA /11LpWsyY5LJIRzPU9HEYCQbGhjoHqUdIj+6U2X90f8EwsAHBBAWCgB5BYJgKGTu BYMJZ5o7A4VkeAkQ6tcv95FAeLJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnNASP20GrbKticoxQhWDPVs5aTOLcqfCBqjTydbWjgwoWIQR6 gNtTMLfZANW9H4Lq1y/3kUB4sgAA71EBAJWP0EpPbhHNBymKdYdt3J7nmJWRCO4l PBwPWf36FDrwAP9q66qyIS5MjXfMuJcL6IxJkdmSDnDYk6+0Lwj1i/f9Bc4zBGAJ bOcWCSsGAQQB2kcPAQEHQAee9ILcsyw3BpxCsG7MoejAGVN2f5Z6v/3Uh/aNk6vx wsDCBBgWCgE0BYJgCWznCRDW6GWjuI+IgUcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcqdzQSh7+pzmSH6EaOS0YXuat9NeXXYG4qtQfJfbz4 2AKbAgIeAb6gBBkWCgBvBYJgCWznCRC2+0/DmVe8PkcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmcRr7Jhb9juH8EZhC3ZQES3TBXybpTGbwqB mnkFEI0y9hYhBONODX9Epr6ECtuAwbb7T8OZV7w+AABX7wD7BZ3C+kV5ynW5VHJJ 015ynNF7FfTC/u6cxCfie/hDAOkA/j2diQrd7lry5OKggYQv7D9mZCIXhvtdvbTu SUboevMCFiEEvmxXIe3LqBdMWdmW1uhlo7iPiIEAALfgAP9vSPlWXYHFpwVc2eLL SntdgoYaYIux5u/ZAU8bohuNuwEAvkaGPsTYPFLCYkG+/vkPggW6XOWtmfnwwCxQ Q8do7QHOOARgCWznEgorBgEEAZdVAQUBAQdAKImwU5bisFBOAqAjVN+rLYhLSWEF JVK7D6xmSGOPfk0DAQgJwsADBBgWCgB1BYJgCWznCRDW6GWjuI+IgUcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmff92K4GJEgpgd8FTGhwOZY aWt/Nieg0cmzEVMBMkJTCgKbDAIeARYhBL5sVyHty6gXTFnZltboZaO4j4iBAAAN 9AEApwxysAIcZ5/r3QN6KAuFp2dLYK5W1aEKdb0uDDR1PKwBAK/e331mdeeLzFgI u/BvkKTLZFD00rx0GOe8lS6gz1UExVgEYAlsehYJKwYBBAHaRw8BAQdAPWfVJOEz kbxTwMOae4XNng9hhCi3Ekpk2faA68m7sUQAAP9d2m92jJqWw7vUp7qmL+iJ1v3a kWZXoGNUAS5uLRWy0xKGwsALBB8WCgB9BYJgCWx6AwsJBwkQpKqPiAulErVHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnXWTZuGHDtjoWDNjm 2XCeUs4RLk/9yC5o2xhQwWjLCAcDFQoIApsBAh4BFiEE0rDDg1wBsMEgvFQNpKqP iAulErUAAKrHAQCthm7xYCAOtOqzC3HIbRTrXnYz82k7r/fjSeZf3N5qtQD/ZEpZ r74PzUnpPtgAHC9w5uGm3Iadi56h1SPMsCBYBgPNEjxyb290QGV4YW1wbGUub3Jn PsLADgQTFgoAgAWCYAlsegMLCQcJEKSqj4gLpRK1RxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ29pbe0ZHqkaRlt4JXSSOAKHuAa6DW7OGKG0 Me6TyPCTAxUKCAKZAQKbAQIeARYhBNKww4NcAbDBILxUDaSqj4gLpRK1AADmOgD+ PhkwMm+UjpJ6bQZ9v2tRjI2JXILeLDOF/ZDz2i/6uqQBAOJU9hhDDB2IwZJ5E1Uf XLxR4NJee7B1vzsQWEuFXY8Fx1gEYAlsehYJKwYBBAHaRw8BAQdAK30YiUnaTP/q jEtwiDlT2eQBA5cF4/cC8g8Qu8E8qAEAAQCsrW6BuHtkXVbjA7Xn1pCBG2ZWkkmq aW+A4ceuOoG9QhDAwsDCBBgWCgE0BYJgCWx6CRCkqo+IC6UStUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdBKQ/404r2leJdIpF5wJBGAd+Z qWD5M7Pu4+uu/29pzQKbAgIeAb6gBBkWCgBvBYJgCWx6CRDj7Nxgx4wK0EcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnfE2y+2EUvzVkMUrv 1Aodcr77p2NRl70cBLywgwJEyxYhBCxjYeocCmhs5Sn1j+Ps3GDHjArQAAB8IQD/ SeweFpSbG4Zr8TmqeN9oxtbtsD7XqezUUp5h9vmzKtIA/1evmuRQwERmQBqLOBZc QBS72XJMrJK/Lfqgud3JfDgFFiEE0rDDg1wBsMEgvFQNpKqPiAulErUAAI3cAP9M LJEo939eBCdKa6jmPId0Wf4kf2ZyfWe7Ye7664xMmQEA1BKbkoN23ovGmWBqlK/2 GRr6HAK6PeFlqm9rZGaszQPHXQRgCWx6EgorBgEEAZdVAQUBAQdA0WjFvTZUXMw8 AkBXHM+3fhduE4EqmyvPsz++iK9lxnsDAQgJAAD/f5FgjejHdf75AKwCXfXVgVi2 GJZ4634SMAAy2Tb6gjAROcLAAwQYFgoAdQWCYAlsegkQpKqPiAulErVHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jno7pUJEW5dLJ7/91tjubV sSiRtwaxAJQ5PzJDAEZlf9UCmwwCHgEWIQTSsMODXAGwwSC8VA2kqo+IC6UStQAA kt8A/3T5kUrH+HjSvRrqy1s1W8PfRUOZNifSYU/Ki/GOsrktAP0fHdd6zGpz9zHo bw+pOoUD8rwtzQ/DuuHOsQxrYAd6AsYzBGAJbNUWCSsGAQQB2kcPAQEHQEYSLllp 6B2APEcOict3NF5iLRWjX8tfGb4qpAl6uEMcwsALBB8WCgB9BYJgCWzVAwsJBwkQ 8cXMJ7PZl/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn QUW/QOPneUI/Xj2I1bdHCTST8GCMRJ/n7LmoPBVkUOEDFQoIApsBAh4BFiEETtal Mb9iUefDbEU58cXMJ7PZl/EAABzYAP9TD4Pj/yXjnOVxlljssHFkCya1s/7VsPb8 ggBXlV9YCgD/eTgRieDvBqeMZcGXDD4EDuHQYKjJk5PB03TOF6GGTAHNETxjLTRA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQ8cXMJ7PZl/FHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnKuryRsqEoSX67BLUJw6U v2fv4gqEtAkXWnkVg59uM+wDFQoIApkBApsBAh4BFiEETtalMb9iUefDbEU58cXM J7PZl/EAAEMZAP9AFqK6FpIXJf88TVfe+ok7NzTiR5TCXQLHI5uWckQvuQEAnVNt Q5cegPw96AedAOCzxob2fltC4a9dmvLO58KcPQHCwAcEEBYKAHkFgmAoZO4Fgwln mjsDhWR4CRDUXuAibV33HkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcme5UogpKfCcwFBu1cwdgKYHktVkHnQ45x1P/0kyhRq3bRYhBLQq/TC7 G90uueu9uNRe4CJtXfceAABKowEAqf9fDw65VWPq/kpokXjFdI50sbM0UIQUHilD HVn+SwcBAOog8wvnQpvbi9WmPYHRpv2Eii9XbO0QcdzmBbjdpY4HwsAHBBAWCgB5 BYJgKGTtBYMJZ5o7A4VkeAkQhK3bB6EFfp1HFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jn2wK39p4i3c+MviT1MQvhkDcFvSDFDcj0aJtMO8nh M70WIQQot0qnxRdyHDmsgoeErdsHoQV+nQAAMbcBAIGHm3+83SqgLwPLIL1cbQbw S2Jj3per349qUPshiG/SAP9Y/o9z/4tgbuWlfJTFZDH+0F13+LoLD9EZq5nosRku A8LABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJEDrDe94xvmWhRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+oPjrQ3GBg0iqTLGtTVD0wcVoSu G57/vd7fHj4sWgGqFiEEVow3YiNvvHaFS9TmOsN73jG+ZaEAAErRAQCs66UUUorA XxG5Q9D3ISMGDL5/eLYChqQXL+DNZMRdgQD/SmLO5lMEKMSIpdMNxYstKnujzQCT Wg1bC0pd0em16QbCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRDcw6J0EK4qPkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmexMfv2TVId/QpI 1l1ypkPVMOHz9DfSWZBDiHC7cVtrfRYhBAxg1DTVE8RlvAdCqtzDonQQrio+AADZ wAEA4B8hetLNcCLVXygoFL6YO/V0y2CmPrWAMbxH+8ZcTh0A/3sHtHAkL6y52c76 ZvNJ8D6kPebWCVodPY1Ui6/SglYEwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ 7xAwNgMlvRNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 6ojv864zf8UXsgaSzJ9CN/j3Ve0QSNwt68eyqIPMNjkWIQRscAQ+GQNb1agFAETv EDA2AyW9EwAA46sBAOMJbFm6xoqJhwA7j1Gmp3hi1uSUe79dYXcJSvBY4OeeAP4j GOfA9Phu9LfyhTJvJQ5xlwH7Q6SkJzYGM05VgW8TBsLABwQQFgoAeQWCYChk7AWD CWeaOwOFZHgJEBCpuzAjy/VYRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ/i6jtfXQEisiQXTjmnmnx0bhKOG7c7Fgel+ByQ1gQptFiEEvjfb xGr4BCid5oS9EKm7MCPL9VgAAI8tAPwJc1YByYlvPBZ18AiJcRYq+2KVSv4Eldwy X+CJzxOUYAD8C9Su4DVLbvtBJ7IMpXbEBLNWC2rus9u1Uz6iEpuQZgDCwAcEEBYK AHkFgmAoZOwFgwlnmjsDhWR4CRB/rbHD/vv+WUcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmdhK/iOgaWuKLs1ejxjQhyOQ+C8xDPWWBQMs8nu hdBG2hYhBKDNh1gsIXQ8DjBjf3+tscP++/5ZAACW3QEAgTXcE7bUmLz46YwPzCH6 ldyKDznWeiEHpNQBrYhgKzwA/jz7lxCJPqSY75a9RbJKs0b9q8H88TLOjlw6MndV zQoOwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQC6zTjS5tK0NHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnh7gIoTtmLZDGRdZspxAEVFyP PGpjxr+QceWXrL/+Fm0WIQQPv5pIpavlygCU7kkLrNONLm0rQwAAE5oBAIzN8Lg3 7yiizm1os121Yd9SWM4GYAVJz3SawyhWluBfAQCMJL3R82c2oJ9Atx02hk7ndVj4 Mmg0hmogONw5lfLQCsLABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEM3MGshGTI/l RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3/f8tdmu6fu ADHFtydPghwZQYtPntMvGUSu022bM/W5FiEEUnfBT503oPTWFd2czcwayEZMj+UA ACGGAQDQFXs0GkejAyzGR9HrpB5P/7xyE6fEcl9TJ2QkPqEicwEAjbUzjgfUb06T 1Ml5a7TmkUpd/wF0BgXIuZpd9EHoUAbOMwRgCWzVFgkrBgEEAdpHDwEBB0AGhZoM o7t9OZTUE9cLQwN11ySFSAiVCqcJFjxsKipgvMLAwgQYFgoBNAWCYAls1QkQ8cXM J7PZl/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnvfun jnlu1bt/YWWTqZDfWWXOhh7ohzZ3e8eF7ckXlX4CmwICHgG+oAQZFgoAbwWCYAls 1QkQno/Ze9O/TuNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnYF05tNbIIp/RCMS0Lujez+RoT4PYRhwpvKLJqBTBuyAWIQRgP+xjZEjgpbnS F1Oej9l7079O4wAAXSMBAKnCOLm0cztqSJqfs6+XPH1a5f82Wn5AVmxxT7lUCH56 AP42/8uztSgjRRKP/azH22n2HUi6CWnlETnJWfikMc0ACxYhBE7WpTG/YlHnw2xF OfHFzCez2ZfxAADwGgEA70tTdKOcZ4DQK9nHrL+bGRLV3E2yyuevucaz87su1MEB AJDahLIc+cOcobjHtYMOy58dAKN+8RVHW+jSVoeTbOcFzjgEYAls1RIKKwYBBAGX VQEFAQEHQAWmNCAlwWl5Cc2ZmywC0e9zxiD3y4p/x0j8pFq4lztYAwEICcLAAwQY FgoAdQWCYAls1QkQ8cXMJ7PZl/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnCrpprKYHDZBjKsv1OkHXTxA+3ioY3uVhMGKv67ojTb8CmwwC HgEWIQRO1qUxv2JR58NsRTnxxcwns9mX8QAAUakA/RHzOKg9H32DFrk/SNaTxcoC 81m4VKUsbYaaf4fCfRLLAQDw/+BDf3FcskIkxROvfP7x422TY/d0fbhLn4yQM741 AcYzBGAJbNUWCSsGAQQB2kcPAQEHQEb0FEa4xcuesDczepdLecC5YAPsGtdR6IoR Z8THkpzJwsALBB8WCgB9BYJgCWzVAwsJBwkQOsN73jG+ZaFHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnJELf+D2MrHk+jwneu3gDzMJBKrtf /3s2ElBfMyaRuY8DFQoIApsBAh4BFiEEVow3YiNvvHaFS9TmOsN73jG+ZaEAAA2e AQCs9t0fKg88eSIFGX8q6T5xuJn+hSpOXQU/kokyAuzppAEAq1Jd7J6mA0oBbRGb agg7tPUxTUPbsFwWDsZwOYTPpwjNETxjLTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJgCWzVAwsJBwkQOsN73jG+ZaFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnKHaFG+rmMV5aJ9wGZqCK+I+ttys4noBukoE+dRPjvooDFQoI ApkBApsBAh4BFiEEVow3YiNvvHaFS9TmOsN73jG+ZaEAAODnAQCT+/DxRr3R6BOw VlsQvcuk5pIRm3v/0Br9kNCDs+q8DAD7Byocd3eE9JBqHzg+CYp8PCnGx7p3WlFU TR/qzP6oyQDCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDUXuAibV33HkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf02uh+5+5XTHYsK8NL PavUq3WHXM/fu0p1RM9m5YSwxRYhBLQq/TC7G90uueu9uNRe4CJtXfceAAC+yQD/ cwKJA+bUdeFVI7YPKy+jpjYUvANcl2kNcpzGKptf33kA/Ayw4iDm4/0neQgciwO0 Gq2/hWhGis/Iqtv3m6MKC4wFwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ8cXM J7PZl/FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnmyc/ SiTyd4h6cODFiVBhUU32qJwbifes71KGSOJJ7lkWIQRO1qUxv2JR58NsRTnxxcwn s9mX8QAATcEA/iM1UOVj0dmHOyIWERDaulyMl4F8LlVHgYG+LbKvQ+e2AP9NNwNI P6v2bTEGb2Vj9vcgkgUrGTVvMoExcfcU4fY3CMLABwQQFgoAeQWCYChk7QWDCWea OwOFZHgJEO8QMDYDJb0TRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZwhAbiiDrJW2ZBUwttwFscnlFn31v+Rbc0o0eu4qdRzuFiEEbHAEPhkD W9WoBQBE7xAwNgMlvRMAAH2dAP9yb8ATDsT+E+7xZb9eu4S4Ir6s72FqJLrT+vU5 s2R7qgEA023Ap2nx8j5Qz6kLpwJjRuoN9Lmz1TYf0Veev2NPkQnCwAcEEBYKAHkF gmAoZO0FgwlnmjsDhWR4CRCErdsHoQV+nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcDU6yzI5bFs71Rr6cHjAtlXiHrgMszaOnxgKDonK5c rBYhBCi3SqfFF3IcOayCh4St2wehBX6dAAC7jQEA1BAFCg45S0O2T1Y85F1qyuYp GPTP/UbBfAk7n//BxJEA/j3Ly0Vfdp8d0lis1FA0VjgWTp8/b+9yVbzcDtdrvcoJ wsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ3MOidBCuKj5HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnlZ73G/648LPgf2OWQM1W7nDnNQft MdhxgRXbWXJooO8WIQQMYNQ01RPEZbwHQqrcw6J0EK4qPgAAGDABAOpxcAfuktRx V85FyZ0CUc3eSTyAt258AasnlLBirXVNAP9uNn5GFl6fd0KhzYzDd7DzGfOVyMfz 0xfQ50gkbzYJC8LABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEAus040ubStDRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwkKYKTNrGHe7P9N syGJkNy1zPKIX0uAz/mB8KVxdKPkFiEED7+aSKWr5coAlO5JC6zTjS5tK0MAABuB AP0e387x23PDuEz0yzy+aUNGI5aNL6KPU6yK8wwfHjguzgEAv55JQSN/AYiQRwyL x6qesN105FwCqlVm3BsBMq2Z6AXCwAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRB/ rbHD/vv+WUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeJ oDJKU73pUoa24Mg/Un0ZLYiIVta17EArXS8T93mGhxYhBKDNh1gsIXQ8DjBjf3+t scP++/5ZAADRtwEAiCYpjvylvAbHchTK6bEYS98eoC7aMwy4FLiH3fsLTUEA+wbr aseay6JgRVZm3UImRSz+8k9Qk6s6RtzNrncZcMQHwsAHBBAWCgB5BYJgKGTsBYMJ Z5o7A4VkeAkQEKm7MCPL9VhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn/UWP+XMrenrbVhNiyRfFvwnTtR4LRInTroy7fegO/v0WIQS+N9vE avgEKJ3mhL0QqbswI8v1WAAA4WIBAIrY3W0KOI/R1eZoo+XHM/BbaZoM3IL+B1nY zKUHFSFRAQCil/zGwiKWayomYo0H3I8geA77oLpkT8nodSIYqlO2D8LABwQQFgoA eQWCYChk7AWDCWeaOwOFZHgJEM3MGshGTI/lRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ0o1l95KWMxqWH/zkoqU+z//UnWoCT2HxfyFeFLB VnLrFiEEUnfBT503oPTWFd2czcwayEZMj+UAAAFZAQDP/DwBKjiGBRr/J3BHhuW8 QlP1jM3WDWG/cUeNVV+qOwD+MpLHUzWqXJ7MSjR3F8xa9gGkHuds8w6GW0BNOySd kwzOMwRgCWzVFgkrBgEEAdpHDwEBB0D5o/Y7bMIXw6DpoFsUHXd1pzO6EHBQYgZk yqSkmz2biMLAwgQYFgoBNAWCYAls1QkQOsN73jG+ZaFHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnHfb5HWFprjf+a803p+EQnE60UlPcJPwC oFAvJ41aYq0CmwICHgG+oAQZFgoAbwWCYAls1QkQztgkyPvX8exHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnm1beXW6q/yKxE/VaY6ACkyU9 bntxLnS8KVyJO5/AD5wWIQQEEsS0aGqmoj/kYdrO2CTI+9fx7AAA6mIBAIy+do8z vmopcmAdMkSFu1qknmYI/M8vi1/WMLRGaOW6AQDRef/a8oTC0qHh1WzpeuY+3Q8S kWl4Hn0vNvWVSydyDBYhBFaMN2Ijb7x2hUvU5jrDe94xvmWhAAAurAD7BadGRARd 7Pl2VX/kuZgiUkeedlpGEypgdiTudEh5hPkBAJad+ZZLDHSgyQs6LYFp44kGXVxQ /ViUCPBCYmE/uIwJzjgEYAls1RIKKwYBBAGXVQEFAQEHQM7G/QzirGn/DBejUeEQ 8NO2bAYqbpS8n66YZpHEofgAAwEICcLAAwQYFgoAdQWCYAls1QkQOsN73jG+ZaFH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnJQUHMTuARUwT 5bWeiAS29OBLr2bJLCcEbB/U5TdaA4oCmwwCHgEWIQRWjDdiI2+8doVL1OY6w3ve Mb5loQAA7R0A/12038EFJZQ+Ibg+fyu4kDp3uqIaDRCJBX4SxiPSMWSMAP48ZPGs 6A3CiWH/MiNMVK8xD3Zj0w8Suo+4PHrWAQQqCsYzBGAJbOcWCSsGAQQB2kcPAQEH QIYWBeOP+FYhjfqlKvOpq+DdVwkU22JHVTgvr6SEKq4ZwsALBB8WCgB9BYJgCWzn AwsJBwkQ6tcv95FAeLJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnpzKWiA9oVf+IgeuUdgJZYfaaEVnF1H7XCH643nNb2DkDFQoIApsBAh4B FiEEeoDbUzC32QDVvR+C6tcv95FAeLIAAJPYAQD67UXb+CZO6IsJx18UN+by6s+D 2wCI2RQ7dCGp+7wlFwEAuVUcSdQtHv9SrPAy0DANttcbdU5+x5NO0Sy4ssaSRgXN ETxkLTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWznAwsJBwkQ6tcv95FAeLJH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1HbfSSviIckx 1jh0jVAIyeSfLwcuKhtBC6he43ImPUsDFQoIApkBApsBAh4BFiEEeoDbUzC32QDV vR+C6tcv95FAeLIAACxXAQD1AfakL+4wvHzIcJLzLe34RpzxmLtEr2FtQc1tsrLj OwEA298VsUz5hRSnYe0QINwZHwZB9n+kNzxng0aKElbhTQnCwAcEEBYKAHkFgmAo ZO8FgwlnmjsDhWR4CRAih3oSi2+rMUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmerFDGAxEqM7tUl2Cj1uuRItTCvPNwiXP410i5JKAEeXRYh BPMCuD6QzWrD48WdOyKHehKLb6sxAADoZQD9GJrpwqWvJYPsC/KdELZ7z+Y1LvJZ MouoZ02/mDwAFY8BAKsnXnvte5ZRUcRxNjI2sEV3ZpMjvXfnh5Fjo5V5DGUJwsAH BBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQWKOCMX9U18VHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnYPkWA5Ka92xvofbX6SCxj3i7J/jsWnn/ 9UOKe/nQcuEWIQTPcB53t5/r3t+ItFVYo4Ixf1TXxQAAoaIA/R/LMPXUXYDqD9k/ L6RkEfrZIAGhu6iPibDWVWJikQJwAQCDBdm6XfEEf6+YQUe5XHs8bRI5i8KRtyPM aXSuG68TBsLABwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJENboZaO4j4iBRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ48LqNbBpm7QhyEc7rFa thWh5/HWkFcAPrMPtxlA9h2kFiEEvmxXIe3LqBdMWdmW1uhlo7iPiIEAAOkJAP48 jCpgq/T2bf6t+IjIldrB199N7b5by2sdwf/GYPpwcAD/RYpGK6ux/XyPCH4mpwqQ ZSsTO1seSuXASw5sTPmFKwzCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRClTV1j sL/Ge0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfs8dgZ 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 07R1USP8AcYzBGAJbOcWCSsGAQQB2kcPAQEHQJCDv1OaK/A7USqLdvyOu6PIPkAL LJFb5fEbBWlTnGZtwsALBB8WCgB9BYJgCWznAwsJBwkQpU1dY7C/xntHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnFrY+caXBviBMMstl8IM1 xrrq5Fcxc3aKW/yUJ1bjED4DFQoIApsBAh4BFiEEo1vTrqcjYvXDphCQpU1dY7C/ xnsAAPWVAP9F3x27db2jxA4jsKRWMjf+xP2HIOrkxw6qpibteEiGjgEA2MSOu3Ru EMvbiQM5mW6dK7pGNVGWTXMxTPPWdRByIgTNETxkLTZAZXhhbXBsZS5vcmc+wsAO BBMWCgCABYJgCWznAwsJBwkQpU1dY7C/xntHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnTOegMDWA6xFT3IZvvc6OTZXMdhES+4tGhc6q349P N9gDFQoIApkBApsBAh4BFiEEo1vTrqcjYvXDphCQpU1dY7C/xnsAAFAdAQDuNWim PZ8si78rbfrU7zmKpeq+yYo1XYgUP0euncO1dQD/YaPdW7UlDMNl6ttUjSzCEdJN CLFhbuSkgrx57CkWJwHCwAcEEBYKAHkFgmAoZO8FgwlnmjsDhWR4CRBYo4Ixf1TX xUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdhyW3a9nju t30nMYa/glOj1WldGLcttmK5qbh6qzLwdhYhBM9wHne3n+ve34i0VVijgjF/VNfF AAAyJwD7BLLzP6UrErFCF9Sm64FIcSHKA5mQDJCxChuP3gaw1cMA+waa2U1YbWCN +IjCoyEuXAZ9SaWI2Jfi9B3u9u+PQhcNwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4Vk eAkQIod6EotvqzFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jnnt2H0qPFD1WT4O6cAYavebiGOeCRdebOs5+71APGeg8WIQTzArg+kM1qw+PF nTsih3oSi2+rMQAALxQA/AspwOSYpeal3PW3DHVYJciff4iL8jJ6PzttPYfizyx0 AP0Rvx9ssoAXyqZ7KZKxdE8CkI5QuKlfWmp6ky25UwQWCcLABwQQFgoAeQWCYChk 7wWDCWeaOwOFZHgJEHx6ioJUGvBfRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ2UUiQ9ZBITge4tdz4DTN0OspI3vBFcK91/2VDE4bXKCFiEE ywlhwWomKeKFW2FDfHqKglQa8F8AANHCAP0XJULdzCr/7qc17DVs5avbLsrM8x1d nD91Y3Fobh9StQEA6boVBphmtBJr25PcO2DNMWWsB5je1Zmkp2oyUaEFhADCwAcE EBYKAHkFgmAoZO8FgwlnmjsDhWR4CRDW6GWjuI+IgUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmf7DTsuNrKo1EJjyQ12nrjMu3/CfttzTKWl E6fGTPc/lhYhBL5sVyHty6gXTFnZltboZaO4j4iBAAB2GAD+NZ0oWvSIfYJOn0df tGw4EoO+kAR8BSd9bQ9mgXe3VpQBALz+Zl7C3MTTgZuHcOq/SR3dilmC2tQ2yH9h 17UdF40GwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQ/Z2LAVdFAgtHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnx0hqCp3Cc3clARN5KUch /C3lbm4UXHom/RsWshX4rpIWIQQTyLjcICCcsOFVZOH9nYsBV0UCCwAAnqcA/1EM LLhZL5aiWfIycWNPKNVA9TUTp9JCIrqxH+tBbjSVAQCeLXy50FVjZe3rAQsSDhEC SQJPeqTZ+rbQWUqM2WIzCcLABwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEOrXL/eR QHiyRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzP7nnpT f/ElVKmEwd2nSpB1nkk5btMWCBUdYO3XQvWUFiEEeoDbUzC32QDVvR+C6tcv95FA eLIAAL9PAP0Yp4pI3jGF0V6M43mi/qG+SBO38FXCwE4uFk+ZaNGuiQEApCszIv+0 wuRjFNcRIprMhxxUVBy5firQ7htPSn8VvwbCwAcEEBYKAHkFgmAoZO4FgwlnmjsD hWR4CRDuR3MOXR1zkEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmfPioLYLzdS1SNft9w6GZzKi+CBb7mMQ+kai+uB0NFYABYhBBbhB6BohsbB 4aRHx+5Hcw5dHXOQAAC4RwEAoptXS2PgKy9Y9nAas9CFfi8qUU18symtmbkfZFJJ ttEA/A8oLvhLOdfJUyN0SkQgnrbTP0S50E3mwUgdnbbGG0IPwsAHBBAWCgB5BYJg KGTuBYMJZ5o7A4VkeAkQ81CZAH792D5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnCs69nXPtTg2sE3+iEgLqbOZ1BXcTVPY2L5pUkI/FHS8W IQSjceGgiu4ZVUvY9v7zUJkAfv3YPgAAM4cBAM+4mk0MgFJjwb36tlxxpaWE0yfA mf9W2aCZMFASBkXsAP93Io/6AkXQKpUwjD8+5g+Od13Re2PjeMV2ZCBh1YGJAsLA BwQQFgoAeQWCYChk7gWDCWeaOwOFZHgJEBZpglYeFAwDRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9MuAfJldVoh9fBU3snSEigoEjDZIVyk eIXfx72A+MUhFiEEwkzAkQLSLjjoOTxVFmmCVh4UDAMAAIYDAQDWRwdnHP9kaaB1 NRStR80buOZGvj4iATiiCGUUeYkGXgD9EiqXkahahVvWWoGTfJUIe+l3dn/VTw15 Rsm1OQYCjADOMwRgCWznFgkrBgEEAdpHDwEBB0BKgYlCQj5B9j0t++Q6FcNMQAuo uEteSZXTYnAR8FbvIsLAwgQYFgoBNAWCYAls5wkQpU1dY7C/xntHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnVGrCOxbJSRSDGanhiy/+yIyP 9VnvKXgQrOQ2gHfrJR0CmwICHgG+oAQZFgoAbwWCYAls5wkQOsf5oBbkzvZHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnOxd3uPp/XuLeori+ ED8NtGX4g2z7BKdhnIHW9lXXbNoWIQTjXOgUd3TBbZN5DlA6x/mgFuTO9gAAf7YA /18jF8oFrtvVa0KBGnkIY38KP2qYDvSRR0DM8oZr2ZtLAQCvMelvE9T5r/tIjHyS OGMRKKdps2xNogYKSA9VwQ57BRYhBKNb066nI2L1w6YQkKVNXWOwv8Z7AAB67AEA xOSa9eXJPWsFk5RuDJ/vnG1ZeVaAFHDqyJI4gnysCbIBAOmr4CNqIeoHPcwwDVDV b/EkzBLLx5MBgwkj/RrI7I0MzjgEYAls5xIKKwYBBAGXVQEFAQEHQL+lLgKMpENj scvYOU2rDw0vPqvkTd1eXULfJCbbTbcVAwEICcLAAwQYFgoAdQWCYAls5wkQpU1d Y7C/xntHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnSJ1t P4+A46Pyl6W5TIIRdcp1jzASuX9xfhS5eXRYPRcCmwwCHgEWIQSjW9OupyNi9cOm EJClTV1jsL/GewAAgmoBAPS0fzkWfqkh19bsuv4MehYEFBOVBX+3IIBDTt5RS3XW AP4qLMD17Vph5aagbIksXaMkknSIS4mJjm4u6aCUxDjQC8YzBGAJbMgWCSsGAQQB 2kcPAQEHQAVY33UKpsguNAWpiz4p18jnsvdq7xLVwY6/8++H0RFgwsALBB8WCgB9 BYJgCWzIAwsJBwkQKvaj7l11+j5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnW4hRIkOd8BgHWD+4hfe6wd/UKMa0qeR3lD9uGPXscw4DFQoI ApsBAh4BFiEEkKndPnchwiGejXTcKvaj7l11+j4AANIUAQDIb9z2TbhKN1jzBHtm rOZSQsXHWk8pAjDzOIrbnhE1iwD+MBMby1tMnD/yLfqXOyuB29IrhrzcEHP4ogLz ehfPqQbNETxiLTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJBwkQKvaj 7l11+j5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn9X04 kL5g283FAzU8U8UsFss6SV0JUXt3790jpfEIpWEDFQoIApkBApsBAh4BFiEEkKnd PnchwiGejXTcKvaj7l11+j4AAJA5AQCItN/Rj2qVuvYGF9WePV/XzLGSaX52F4vk ymFj0vm9EwEAjRVITRwEZh5wBj+ts6LJFhUoxG3o+AZz4+ZjawTO/ALCwAcEEBYK AHkFgmAoZOwFgwlnmjsDhWR4CRB4xX2d6VwW80cUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmfFrfNSWC5zUlkFdmvmSUvcJalTTbp1UuQDmXoV MtCSvRYhBL/DGmnqlHTrifzMLnjFfZ3pXBbzAADbiAD+JXMZisE1jhwONHT79Hpw Zcg7Hpg8AI8vEc9oLk0DnLEA/0jlRMDn65Y3K4Vuj/t7lVRqNk5jftNG37177VdM S70KwsAHBBAWCgB5BYJgKGTsBYMJZ5o7A4VkeAkQRpalxinqMfpHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnteVlj52vRQVYizUAs9kInfV5 FCtdJq321+qf+/sw/AcWIQSSuxpWC//M5HF7BdxGlqXGKeox+gAAK9ABANZ0W6zG 6S2iybSjpfPC955u4iQwLCswQtyFSFJtBzKMAP4tC9BplvG4HvVF4BANQ6rhZDFk 0MpZAC5xGljb8ZRBAsLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJECx/3FNfBqoU RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwturk43tGa2 MO/mZYnYOiarLpUCksKZYonSQOpqW4m+FiEE/ScniwUT+P3PuDLvLH/cU18GqhQA AB43AP0fTxTygFLBYDZVQ2BT6s+9O0yoSvg3wZqRrmVZ6S84qQEAtOY0CTtesnnh r7kuoLyVq6zEvB91bIysbHfy6dkl8ATCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4 CRCv6IX5NL8TfEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmctXACKaDs9Vp9gWPE9I7OnFrEIiVKQ4boeUeTeXdng6xYhBNNkQxCjR49nNNwk Nq/ohfk0vxN8AACLQQEAt1swf3LnUyeZALQrd3FwokS7zvJ5Mxsq6J9lBeWY1nEA /iQASZX2Oy/AzDirBMU6KnuFtUFvFp1b1F3lxvH5URUAwsAHBBAWCgB5BYJgKGTr BYMJZ5o7A4VkeAkQfl20IOQOsR5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn5pJOivhYYgqDlz6PQVDbRL2VilrLSg+DPiHQJcETHocWIQS7 CezvUKN2O3hrnYx+XbQg5A6xHgAA+OoBAMHUF3CxSv58YFOYxaYafeHzzmS4BDS3 FcDpRGtBKEAkAP9T9O9xjDzictM1SOMYwlQ/1UMBhgACcCOb6Umz28bTBcLABwQQ FgoAeQWCYChk6gWDCWeaOwOFZHgJEHg/Go/HJ/w9RxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2rCS66lALxMFlRiHW/Lu6R+x5VxU80Ai36q YWFM/Fr3FiEEJ+Nf60hsv1sWYAJweD8aj8cn/D0AAON4AP0RIE/vJV1uo/FcmA0R hb75B3E/JZv94535JxVJUMALDwEA8XGbnUX5HLYseKhRdV68NHAFTRvtY5qSu2IH +LHOcQXCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRAIU/27kA4FsEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJklU4lWtSxLC3kV5bnaNS cptoZt/YZYO8llsCXGtgmRYhBKLBndfJk1+LR5tdAwhT/buQDgWwAABteQD9GXpR RoQRNGv7+UPBHoIkEbhWvD39N4Lo4C9d30y15UYBAIIrjnZdvRMh0Zz2ETfp6bBf FZ08IYITf7RmSuAGsVMEwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQlknvga7+ UWJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnj3vHnDTl z/FYShezGd0s3oulc8FurgdBUc/nUc0TCHYWIQQl2OqriUcFu2TUpqiWSe+Brv5R YgAApx0A/2VkIlBd3ZwOxpXRvOI3DEOZMQeo3+jQuwyiucZRTJdaAQCEUvrG4feu K+WXfBmZoSfIn31WWoTSPEO87qgizEc7AMLABwQQFgoAeQWCYChk6gWDCWeaOwOF ZHgJEBugGVBr5n+7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ8Hlb9Zz9KzfEg3qODXEnQeAz6mEiFxlmYfXvLceXQDnFiEERtL1ztm9PWOh Hd/uG6AZUGvmf7sAAL0MAQDZ07xL2J3mKRLL6cwsmU5UYC5CmwRo49JF5yz7Wxut 4wEA7i9YheUCCAOCIdpc9aGLfFB/UT3Hb2mEz49vTPx5dAzOMwRgCWzIFgkrBgEE AdpHDwEBB0BuneQYy2ktv74tBv6YkEWQtJJ164Y1a1O2Mdho4ljVasLAwgQYFgoB NAWCYAlsyAkQKvaj7l11+j5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnWvsF+QFNuskKyW8vVlgjrI9mgfToOMgGY8bI3XPACMgCmwICHgG+ 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 l/pYjCLDb9bZEEkCwsAHBBAWCgB5BYJgKGTvBYMJZ5o7A4VkeAkQpU1dY7C/xntH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn8rmqVowtleld PbThPVrPh/9Iv8YOuMsMwkGgaObSnZsWIQSjW9OupyNi9cOmEJClTV1jsL/GewAA jtQBAP1az6oMOI5fypabjbcGSoSAm8p6M+b7Al0SHhoI2w71AP9eeXM73jPRCY4c lDlUXIt5B3T0NoVvs98MRBX2eOifD8LABgQQFgoAeQWCYChk7gWDCWeaOwOFZHgJ EO5Hcw5dHXOQRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7y3MKbqc/L5ydzUoFS6eIr8tm+GtJS61l5ewX0pcYUoFiEEFuEHoGiGxsHhpEfH 7kdzDl0dc5AAAP6fAPY473uRUp4GXEa1ampo3cqj3SG3q4+u6/surtvh1ka/AQCP M4wl6nsX6a5BShTZZY4Heq+ZFvddw6H/spSwra4PBsLABwQQFgoAeQWCYChk7gWD CWeaOwOFZHgJEPNQmQB+/dg+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZy1bA8tMNYO22uRNAhM9hXvGzFt2pLy5TRWlfx9hLzolFiEEo3Hh oIruGVVL2Pb+81CZAH792D4AAK+KAP4rGOryhs+WNCNJQMkbBYdK97Go/BtyKxfv R5tUwqB0dwEA8do5ILm5x9/rOZaFrG/SjfZpOZC9low4/FOimm8ZwALCwAcEEBYK AHkFgmAoZO4FgwlnmjsDhWR4CRAWaYJWHhQMA0cUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmcOqq0VJtzWxiB6VJCeO8HzBueE9K5HrdixeLrq +eA4ZhYhBMJMwJEC0i446Dk8VRZpglYeFAwDAACyEAD+Mm9wa72TWKUWfDStdDhx iki02DfdUn0Mf5+ECqIpIZQBAMHWgIn/Bx8xFPaDTsdWOGOfHcGGYKTDg6qtUFP8 ObwGwsAHBBAWCgB5BYJgKGTuBYMJZ5o7A4VkeAkQ6tcv95FAeLJHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnhzJPeF66nXY1jjPYHd9yATD+ 43YlcVZxlSQ8QS7bmfAWIQR6gNtTMLfZANW9H4Lq1y/3kUB4sgAAAG0BAIeiIJPP +bOMieCq5XmgF8bJhSrNsK2Z+T8XvA5671RsAQCHD2LA799xYTN2XNQ9R0oD4Xck MtFXuyPBZ3c6jWUtD84zBGAJbOcWCSsGAQQB2kcPAQEHQM/s/0sHsmdVWPWR/Dxk AqAyalTFMlqDvSaEMBTwsHsOwsDCBBgWCgE0BYJgCWznCRAih3oSi2+rMUcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfJ6Buv/Ec8GRs/PVnk CSzFcAwOsTiZKFixGj1GMhGY4QKbAgIeAb6gBBkWCgBvBYJgCWznCRBcRW9uSXqV 2kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme5cbohXm+r KXgzhWeRasAkU7l2aQLO97RwwSRsDKQy3RYhBFBnz6IShLNiYAM8xVxFb25JepXa AAAK2gEArc9NnsBR85HY1Y+kwjsrNdWj15N5IqAVpEA1TJzzEjgA/3kTtSzawQLa 6PFFmxOXwkv8851NPgn55SroEuhfa9UIFiEE8wK4PpDNasPjxZ07Iod6EotvqzEA AL0CAQDZtEWmeJXXDHZ8OI/XOlZw6edSRzMmNpIA5OWWUnrC1QD9E6SieBB0pkfB GVBJXw0KA6A2QV5ZNUyV4e5JEvVMIQPOOARgCWznEgorBgEEAZdVAQUBAQdAz+s/ uVj1B9JHCA+Lu2xsxtGEHCz+dvUfpGk6lK1KhXcDAQgJwsADBBgWCgB1BYJgCWzn CRAih3oSi2+rMUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmf3Zb66BTmFO4sSunmtEgI3zmaFEyjDGSmQ/zQnJomp0AKbDAIeARYhBPMCuD6Q zWrD48WdOyKHehKLb6sxAADg9gEA6cO4hKD+huUdsrGTb6nlaGjOQ6CL8Q+xQ+xj dIB4Ag4A/igT6a9tqz+Vlg5PFr6AKrInQiGQLRKUNNty8707ndwMxjMEYAls+xYJ KwYBBAHaRw8BAQdAnMP7GJI+lDKOGAj4xfjiN6jEwBSAiimg5ehgYsEwoMPCwAsE HxYKAH0FgmAJbPsDCwkHCRAm7+DgNaxSLkcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmdMwaLo7k+kwCMbuHLVcU4Lzq5rXxD06gDgZB1TWVk7 HQMVCggCmwECHgEWIQTR6fhc72JxaZ+95asm7+DgNaxSLgAADsgA/1K0qCgYMRZP JtqPXE9ZbCl4Xa/n4Oa4FDOhuZv1tlfoAQCPuHOdwVbnVEgsCvRX9VxImzElQnjQ vtOkZPf8hQvVBM0RPGUtMEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmAJbPsDCwkH CRAm7+DgNaxSLkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeJesKx51XGltLtgcoBkuYJx2K3UVMTi21CK6P2rxfbZwMVCggCmQECmwECHgEW IQTR6fhc72JxaZ+95asm7+DgNaxSLgAAeAIBAJQ0V60zjeqx5MWcRm6pzwZB6ATz CdWMMtO75pFnTNsPAQDNw5E1LiGWLJbaJk+4L/h1Ns9yFUil6jWitMiciv9oCsLA BwQQFgoAeQWCYChk7wWDCWeaOwOFZHgJEOrXL/eRQHiyRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7Bf8rX6A0lmj6yV10CB38N2vvg2c4FP +NRhgmf0jCQ2FiEEeoDbUzC32QDVvR+C6tcv95FAeLIAAJS9AP9acazzUngdRyyw 9vIct8wMgARgZy9N3DwCWfe2P8xAygEAn/Ms3uCbOeLWJdZRcX2vj91qSxOZiAmx XR5GBHH8+wnOMwRgCWz7FgkrBgEEAdpHDwEBB0BspRGvPDrLRN33k5vOHLpo5/uQ gLeQ5rduyzm8RjesMMLAwgQYFgoBNAWCYAls+wkQJu/g4DWsUi5HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnXhXVwMsmCrzkJKK59lVcM5rh o7sAHgY+by96mcLu3VUCmwICHgG+oAQZFgoAbwWCYAls+wkQDbPhJHmuxrpHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnSZv2b6B3kZYS096T GkyLhdbDPM/H35dqFUbSDY80vl4WIQTg/47gPhjvrN4tvOANs+Ekea7GugAAgssB AKxf3rGj5gOVKAgyxrcVpE8CEEMJVt+U81SHXQYYZMBfAP9WucZmrjXrHquWgxjU UUGuY44j0WDzLuRVqUcH5Ec6DBYhBNHp+FzvYnFpn73lqybv4OA1rFIuAAAYJQD+ MMvdYCgSomYpMlpuxZtTq7L0NfpOiCLMDOLGLgbc3ZcA/ibG97+/c8X8gYHPQQVR f0ZusjH/nSfmCLexE4YL8/QIzjgEYAls+xIKKwYBBAGXVQEFAQEHQDIKWBrw+kEY fxh1+RXEo0h03CIkkjr21fwbYKm5VO5nAwEICcLAAwQYFgoAdQWCYAls+wkQJu/g 4DWsUi5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnr2xa +1SZVgChlXcREQ0As+V0LOq2qTRq2Vpf2p7DVasCmwwCHgEWIQTR6fhc72JxaZ+9 5asm7+DgNaxSLgAAeV0BAM9ykUPWYjwylMr+5wL2XKgB2z3KOic2x8+7o6cNE/1N AP9/R2VOF7VkY+5ePneW7K6u1giGSTy6ENEpFcep/lOgDsYzBGAJbLwWCSsGAQQB 2kcPAQEHQALU3bYqtSSNfzDIAzPY4OcYbHTVnP/VO8sFJaSSunAawsALBB8WCgB9 BYJgCWy8AwsJBwkQ1Deanq4moj9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnzM/15yIeYlc4JPku/lHRdpp2tb30bwh1HhJJ6+Lh5XQDFQoI ApsBAh4BFiEEL5DFxTsQ39T33H2y1Deanq4moj8AAAQFAPwN8I5rrjffdayh+INt zloEnArqvEMooUJ21gElABhlBQD6A7Yt/ySwBnhUwSN9oXD9dZXLfbslzbAavtTB RwbjyQPNETxhLTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWy8AwsJBwkQ1Dea nq4moj9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnadrl AWM+adkSQaSy3Jfgf2xq5K8QnUzKpc3I/q5OMtcDFQoIApkBApsBAh4BFiEEL5DF xTsQ39T33H2y1Deanq4moj8AAL7oAQD4X9BovJrfUhB9iHblI6ESpoz6/MyUBPKV IgIHQWNlGwD/TrbGoIoUkNQUUMGZsCn4ymllMnJBUV+tjz37dePFfAfCwAcEEBYK AHkFgmAoZOoFgwlnmjsDhWR4CRD+3G5cRqqrE0cUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmf0uqJCqUNQmrjpToN7WyhvMIUx4fwdpsnrRyfB r5siXhYhBEeXd2slmPl9ye+Uyv7cblxGqqsTAAAOdQD/bTigcCT1VB1V/083em90 vyIN/1Ek17MxCp+igwjL6JIBAK5RbAnpDVRHByFj19KG9cfLwD9x84xHl+bdpo1U RXkJwsAHBBAWCgB5BYJgKGTpBYMJZ5o7A4VkeAkQA5JT7w65kQRHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnB9E4ViU/eAekUlc82NU0SFRb i9KBTUYsacDDXlcL+KgWIQQ8kwRHEI5vGqkh2cADklPvDrmRBAAABdsA/RL5orYw hI+666kOKuj9gJat87ILbYKek02GHpv8Jt6xAPwP7f6ohdIIZpDwql9bmdGu2LeV 7Hqpu4Rkcc0vA8QoC8LABwQQFgoAeQWCYChk6QWDCWeaOwOFZHgJENyS1l+vRlMt RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9OFScEv01TC EspzZpmtJsDsOWV6dEZIvRN+8OVRhbjbFiEEl+QI92oIlUYQRdda3JLWX69GUy0A ABKbAP47spsRsUrI/LL8UTuXiRsMeKgFVGmoGUiMst8ZA64bxAD/dezdX401To6W gRuK5VSbLlg94EXj5XKiERGiT3TYwg7CwAcEEBYKAHkFgmAoZOkFgwlnmjsDhWR4 CRD6Yec8b13LRkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfHlZ2YcPyZTL7sYhNEajAX6bQ2A5tGSPoCoyDOmiOxphYhBFNq1WK5IXuYOWYg Vvph5zxvXctGAABvWwD/TrAVd/xH1+Y2hW/W+zd/9yQS64oDgLuvVBTTo7Oa4nEB AP1uBAjUcADQnB57gBASII7SP5IA96OlKv3VD8oPeqACwsAHBBAWCgB5BYJgKGTo BYMJZ5o7A4VkeAkQ3fp3nZHGmJRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnYAMBd2dyD/XBYYFbZRyKsjUtgZxcxfEw1CbCswLEn20WIQR5 dMBOjVtUDSPNTmLd+nedkcaYlAAA720BAJlUYAyyHhZFOyg+MttO9t/4DoAQDSmU e8XQH6sjvC3MAP94shfqHsC49pV1cJm9+mdlVhAzBjGYHKebG/qPw/ToBsLABwQQ FgoAeQWCYChk6AWDCWeaOwOFZHgJECXCwO6D1qkARxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3nUfBp6mm4PT/QcKFFPUcIYRcY0dGwEk9Jz hQc3lkUYFiEEuSfQbZITfrNPx9WnJcLA7oPWqQAAAPL7AQC89/sdPiFOTPunptHf jGiWytDu8tLD5Kkqq1Ve5652yQD/Z8Us/3cvmPMzmnWJjsPitv2CPupRY8uOsOzT G1bH9gHCwAcEEBYKAHkFgmAoZOgFgwlnmjsDhWR4CRAb/puj9KvUDkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcQFSqd5DvngitCGoIZr0Ft jaOT5iT6Dyq6DXfEqv6MOhYhBDYwgunusi5QrTA9ixv+m6P0q9QOAAB8WgEAxeYS IjoansFrOOhMpHaOnq/SX7dMCDDd+NwXsatvSH4A/jB+59R+aMliqdHO1Gy3DSQk 4grhb3vLmmy9rLTHAJANwsAHBBAWCgB5BYJgKGToBYMJZ5o7A4VkeAkQqW2ZHaR8 Cj1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JneHhk0gxR nt1f5pRnhidZLmm1r+A3MlXlgSN2y1YgiRYWIQTmG2MdVma+3JwlTnmpbZkdpHwK PQAAYQcBAMr7ZOm2gRPnlIEU7CVKU4OCaph2unaAREs+Hbw9mGQSAQCQoxFkO7oz 6dvAWaDOZPRXbqnWb1G0OPqyF2q/rQqIBMLABwQQFgoAeQWCYChk6AWDCWeaOwOF ZHgJEJvVXJ4TPoy+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ+UkMtfqxmaXRvlNcZJ9eZ3vtvtnz/f5bLx4+fyVxo5mFiEEQ1JVe6tz/5W2 Mu5dm9VcnhM+jL4AADKaAQDjnTNL8Qbax8F2cFdtWofKtXAtiZLCht+QkCOpn363 GQD9EawV9sOBEngnC/2YBfv7vHocZHP0ffMhyWupsRpbKgTOMwRgCWy8FgkrBgEE AdpHDwEBB0DcXTM/9ZB08TMzG2RFpinZID7BZJ14AndGEm2wuIlLYsLAwgQYFgoB NAWCYAlsvAkQ1Deanq4moj9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnEeptQOXxll+QaGePflXrGK9QnFg74v7weomJmo1GJmoCmwICHgG+ oAQZFgoAbwWCYAlsvAkQXMw69GAcWWpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnPAeBuTlIClboKcK0rrAt6Yz92kjlMdSWqlXd9foKqaYW IQSgiwW8v4nCMwa5CU1czDr0YBxZagAAt2MBAPoZ1JTzOSUBEl9+z5znydko536e ytOuHC3yIvmrCV38AP9zI4sJ94JY1SlxkweotFbVkFIaBJ4dXhGAs4qMjkPbARYh BC+QxcU7EN/U99x9stQ3mp6uJqI/AABTegEA8SvHoHkXppGrKr29TPiBL+d5MTiw n2fJz4r7qC7gzPQBAKEmwpeT0BxsyHp2rhTR7OqAFHnJFJ7FCpRbHxlDo8gAzjgE YAlsvBIKKwYBBAGXVQEFAQEHQND/hFwbMaRR1KyVZtyQuso1kDGvOS/SiqAOBeZp lk8rAwEICcLAAwQYFgoAdQWCYAlsvAkQ1Deanq4moj9HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnpbY7QtusSEVOBBojPhN7VD80/P+Vk2E0 9CKYJlQ+XEgCmwwCHgEWIQQvkMXFOxDf1PfcfbLUN5qeriaiPwAAO58BAPjT7ZBv s7QRa4Hf44ChC8BPH8n1SWmM4trET2T38QkHAQDgpiQXEw8J/cAVz6+D3K7D0nQC BC9wGe84YkpdWSw8AsYzBGAJbNUWCSsGAQQB2kcPAQEHQOx5cDqwMF4FnfatryK6 uDxxYhgQI+r29fygrS/aCw1uwsALBB8WCgB9BYJgCWzVAwsJBwkQzcwayEZMj+VH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnsi3FPX9BwVpm LFGqKQnr6Asg45gY4UtBqkO6XUrR9/IDFQoIApsBAh4BFiEEUnfBT503oPTWFd2c zcwayEZMj+UAADe/AQDgAQ5qKxB5zb2RUzj/glZqit8eTQL/7qWshK53R6eevAEA law5OzAaxMdB1QceaV1mDyTNWioO6XcF6AeoXCXaxw3NETxjLTFAZXhhbXBsZS5v cmc+wsAOBBMWCgCABYJgCWzVAwsJBwkQzcwayEZMj+VHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnRotNojeITmz2B0YE7wf9dg1UOECOXv91 q+7zUJFEQYkDFQoIApkBApsBAh4BFiEEUnfBT503oPTWFd2czcwayEZMj+UAAP6t AP4+UiYUkcbVabDtM0fN2hUJDHCGYkD8ESKStp94aKBfqQD9HgrpfAGOBZEcREup xZqaKSAH+RNFarTyrNDxncYx/QbCwAcEEBYKAHkFgmAoZO4FgwlnmjsDhWR4CRDU XuAibV33HkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeN BRMcd40ckn4tyMScOixaFWQrpidtFyNBofU+rxD3dhYhBLQq/TC7G90uueu9uNRe 4CJtXfceAABkPQEAwU/YBurtA6YLJzfVjsP2xFqrz/0Z/MfbflnFwBSfpowBAJrG 8uAYEMKmH9oKb0KeBQ+GTV+dxYh0hUiWgx++RT4BwsAHBBAWCgB5BYJgKGTtBYMJ Z5o7A4VkeAkQ3MOidBCuKj5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnedTxd81AseYxTXsQDk4o1Co15LJsfoVuGmeT9SL6plkWIQQMYNQ0 1RPEZbwHQqrcw6J0EK4qPgAAPbwA/0lHmOADs9827+9KHm0EwUPYnIvG6THRW9NC lIuq5Gs3AQC61UAdXQRAcVaGnbjggI7PCLD1RISL+Dk3V089EFO7AMLABwQQFgoA eQWCYChk7QWDCWeaOwOFZHgJEISt2wehBX6dRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ87iNyls83wCU41mOSc58aUWEEea0hvXYqoDoSDV rF7nFiEEKLdKp8UXchw5rIKHhK3bB6EFfp0AAN0ZAP9sBCv24atpeEf7jBvJ5gIo yHwgPUnFh/GV5xeWfqrVqgEAwZKA7rRpwf7AElzkv3yZMeZfh6f7KW4qFD7NytYm JQfCwAcEEBYKAHkFgmAoZO0FgwlnmjsDhWR4CRA6w3veMb5loUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmczWD+355UtSS9yox9DJJEWDFSs DEy9/TwR0RHQGEDQexYhBFaMN2Ijb7x2hUvU5jrDe94xvmWhAABxywD/dx20XS3R kviEN+K++qDTT7BEgfBVXrv3l52tEY7TqfABAKYpYKS+wJOn9SA0HdpLxyipt1av hEuxL29nsyWBVXMOwsAHBBAWCgB5BYJgKGTtBYMJZ5o7A4VkeAkQ7xAwNgMlvRNH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnQk34rmjQlOB5 Y14OQzlc/Zh9DUMBQINHW6nDHbbNslMWIQRscAQ+GQNb1agFAETvEDA2AyW9EwAA X+MBAMX+kWsd+n6WdjD9dtcu8cuLJ3sUiQppL8JZFLak1IpwAQD6Otk07mQWR2v3 WDdk7JI/fCMO+HUXJIH/nO+SXFPnAcLABwQQFgoAeQWCYChk7QWDCWeaOwOFZHgJ EPHFzCez2ZfxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7AUrLULZssE0Z13YGrf3NdvNW79M4eMlLfQHYdPF3DwFiEETtalMb9iUefDbEU5 8cXMJ7PZl/EAALQBAQDo4xo/X/oFz0hf03g6Qs+Uo6a2J3egj4UJ49SJwN3E0wD/ cVnqlfomlkCPpn2MLqx6yVwdNmcvD1caFTG5DPj37AfCwAcEEBYKAHkFgmAoZOwF gwlnmjsDhWR4CRB/rbHD/vv+WUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdgjJsRQ7gM6JAaVnRSd9hflzn7/26DLoAPok8Zq+ZklhYhBKDN h1gsIXQ8DjBjf3+tscP++/5ZAAC/QwD9H0vansUWuim0vy5igMiX1yk1Ph7N07v3 MSgATyOCC2gA/A5XOZP9QKWwE5lFGQffWQ8DqLsLMxY0fQqfIytVNgIHwsAHBBAW CgB5BYJgKGTsBYMJZ5o7A4VkeAkQC6zTjS5tK0NHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jngoiz97wGvkDhvQtK5N7ZRo83JLYqvAnrmc0o b+/TMp4WIQQPv5pIpavlygCU7kkLrNONLm0rQwAAvDUA/jcPNXIdJ5xyuNQzqyQM DCjqKDXBF+N1YZr4Wz9iESo3AP4z77on3OYGwJq8bP6k3PI7968/rJ75JJxnDaEJ YcRLC8LABwQQFgoAeQWCYChk7AWDCWeaOwOFZHgJEBCpuzAjy/VYRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0YqKXDAiVSkHGPPNmp5YLCR zYlUhg+2pPsN1RgblrSnFiEEvjfbxGr4BCid5oS9EKm7MCPL9VgAAB2lAQC+z3TM s7vgfkcH92RrQn9tgphkZgCCQUeFzX1aqMOYdwEAirZeP8JvqbdkzT0vlHdQzuSF 74/xEkJ/9j5rCNLvOw3OMwRgCWzVFgkrBgEEAdpHDwEBB0CDgOdtErE43Qt4NcWx 4iIYFIYotrRd09AjT7ImXCH4GcLAwgQYFgoBNAWCYAls1QkQzcwayEZMj+VHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn4oO/bLipkGEYdys5 wgmydV21XSEAFTzAwdwr/1qENgcCmwICHgG+oAQZFgoAbwWCYAls1QkQTK8vHVBF BD5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnZsigNc4h Ooq0s1EVTOHfBw+7nmuUuXl9aFUS4/v6q2kWIQQ+hiNeL53tRRll7HhMry8dUEUE PgAAJXEA/3TgC7hzxh1jYeidQ/2JntZrAdqdbzp/Ev2gnEupoXkeAQCNWp9oSpx3 RVprUhpwhqncIWWQ3CqR2HLKtMmhcTAWDhYhBFJ3wU+dN6D01hXdnM3MGshGTI/l AAD0jwEAlgbAzqvkI2lJq8UM51EM2vF3DSTlGSJUFj/7Ve1TInMBAM8i5IGD3vxQ csNp+doxxHWwpu0dMagUIFWUepc/i2YPzjgEYAls1RIKKwYBBAGXVQEFAQEHQL8k 3TlAU+7EemZvksBIqHnawR4eN22BsvhiQ8bH1K0yAwEICcLAAwQYFgoAdQWCYAls 1QkQzcwayEZMj+VHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnOjD1OOuMup+pVlfVq4Tr1zzKu88ixAzo3g8tbUe5ZfcCmwwCHgEWIQRSd8FP nTeg9NYV3ZzNzBrIRkyP5QAAXIEBAJajCoW/K0KAtRcwGgwASA4EesKAaiSPfWNP RxaGr8gfAP9HQVUQNB1Lyu/M9XA8gdNRviMH/qa8H4aLRByedorDDcYzBGAJbMgW CSsGAQQB2kcPAQEHQAsHfhldoZuZnbYcecZWKhpnatRtSanYKAdrI3JkCoXswsAL BB8WCgB9BYJgCWzIAwsJBwkQG6AZUGvmf7tHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnEGqcHTwKsftptBDk2SA/ZUlA+TOApsUGTSy9Q+TU W7cDFQoIApsBAh4BFiEERtL1ztm9PWOhHd/uG6AZUGvmf7sAAMV3AQD+PL8dg4jO ziTO0TwigbXCHYZpgfhhuiuba5tS6iv7pAEAjLXN3cbFS1G1pF3BW7VHVxDDdBmM Az+TV8E2DddG/wnNETxiLTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJ BwkQG6AZUGvmf7tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnYDlnnvYL+ULu1wU+yvE2Kr62zxBZi5Pzt+VBpV4HrpsDFQoIApkBApsBAh4B FiEERtL1ztm9PWOhHd/uG6AZUGvmf7sAAEpRAP950P59KlXV6IsddtiX2dntxI4y Cs1iJ996LO7nX651UQD/Rr6vbw/hlxhc5/5ci1YlANySSjsUHzrEJZLCTMSxWgnC wAcEEBYKAHkFgmAoZOwFgwlnmjsDhWR4CRBGlqXGKeox+kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeTSOekpT2x7uS7vX6S5jjT6Vxtymeo Cg7Ob3X0LTJEmBYhBJK7GlYL/8zkcXsF3EaWpcYp6jH6AAAQ9wEAnavM48eD6dlj JuQJfPbQn/o7thXwCEmIBGRIGYa4zjkA/3M2e+6/3syxW53e1sum5ca0B4gGGQX9 qsBxauzgvI8NwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQfl20IOQOsR5HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnyI/Ac2TOXDsih1Ij TkUc6AdRwtg/vI62uwH4t8kS1h0WIQS7CezvUKN2O3hrnYx+XbQg5A6xHgAAum8A /Rmrg55UpSTkSECrTlYdEfg/k7P060qjtn1vvUN+BDTbAQDGgCd8UG7eEsrQP4i9 LocHJZ43exczs2yeWFoN1FsgAMLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJECx/ 3FNfBqoURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4ly UTes/ftCM+VlrOd09HvcRwUL2vKZFM/z61fGilTUFiEE/ScniwUT+P3PuDLvLH/c U18GqhQAAIGdAP4is47AxRlq0j5F8w3aHxTxR6875HACXsQuq3sCkqrnkwEAgM3O dn2Cvb/4YuySxQ6tBFnc/RPQZ1wm1XmsZqq9xAHCwAcEEBYKAHkFgmAoZOsFgwln mjsDhWR4CRAq9qPuXXX6PkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmcTxlHJe5xrh467yxvcetpuMbuRe6GSeIEB8XtuMTEimhYhBJCp3T53 IcIhno103Cr2o+5ddfo+AAAH4QD/VKG00pw5ZVjs9AXzbPB0ofyjeZaNjVrpNq5n kuA7oDcBAPOUpr3VrjBgjxw5q+DxETPZu69QJxIztB9NyH6gEk0KwsAHBBAWCgB5 BYJgKGTrBYMJZ5o7A4VkeAkQeMV9nelcFvNHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JndZ0YnwKXP09zXbG8vQAB8px7k6PL/EfWZxzjkD4R ouAWIQS/wxpp6pR064n8zC54xX2d6VwW8wAAD0IA/1bvQTphSlC/Yfxm4uvLPiRZ 1VEMvXpNQRbyNvMnvOcHAQDX+TVBHU1/JHdJp2dCj6hUo/jb6LlvbBDymiWGZQUd DcLABwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEK/ohfk0vxN8RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyoawmxAES3VzVLHzzG4AQPdyppE tRVVnOz2cfDcah0nFiEE02RDEKNHj2c03CQ2r+iF+TS/E3wAANQ5AQD+xYct4XMd EsdDVHoxotom1D1vmUkVK2BW/kDhPhHz+QD/SxnaHS+Xcp7XFH3fl+qqWVTp8TK9 DOwZClCh4JL9gQPCwAcEEBYKAHkFgmAoZOoFgwlnmjsDhWR4CRAIU/27kA4FsEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfoEQs1WmI51y7P QUFGdhiza9CJNHlGJselep9m4MuhfhYhBKLBndfJk1+LR5tdAwhT/buQDgWwAADm eQD+PPzf60Lx+tUfy29gSUS41JR1eVRWIuQO23/okd1mKf4A/251IY/AZ7nGB+ss aCxDwaJfFBSSiNSC2KmY+4Q1YUAIwsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQ eD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn R2i5elfNCBkoATHXwb1Bg3AWxobd4hCZOECcjB90gzoWIQQn41/rSGy/WxZgAnB4 PxqPxyf8PQAAB64BALKS1F5AcquDF7fSUz2btI4s53CDMgjGimR0X6SF4IHbAQDo vjytQ9HT4GMS7Ka59kes3ZIXMKGVntWuDtayAY5uBMLABwQQFgoAeQWCYChk6gWD CWeaOwOFZHgJEJZJ74Gu/lFiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZxFVkel+EClZxFSrGuxA0JyxS+3WEPpkepTAV0+JUupXFiEEJdjq q4lHBbtk1Kaolknvga7+UWIAAJnjAQC1012RxxgImIt4DyClVFST22UXhGYJvvJ0 eFFgPE3HWAD9FtWfG56MlA8xnb2vyn9S4npdbmIRQF3v1JzJ/cM2Zg7OMwRgCWzI FgkrBgEEAdpHDwEBB0C/TlXawgfn6aa7ufJVR+Q/gWRXVrKkr4rUYHwc7rh8+MLA wgQYFgoBNAWCYAlsyAkQG6AZUGvmf7tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnMrkOfnRWZBk2VXIICDkaLWQD9W+S4rp04lLuEg6GJM0C mwICHgG+oAQZFgoAbwWCYAlsyAkQB4k6Pk0j5JhHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jn9lBVT+X5yoL9UbAgDoCkTWBaqgikCQxJF/b+ LvMtKj4WIQQ9QapOjfe+y0MsfBgHiTo+TSPkmAAA054A/iMVtqBGqBuGJt8w6o9J AqKwL1mLYZho/fzvLBr5q4PfAP0REp1kKCyONUEMnHE23QDt5htyQOIBtcUE5pon ibq5ARYhBEbS9c7ZvT1joR3f7hugGVBr5n+7AACZ6gEAs5bCLraUoPVON2QS6SGI kXdWvlu5doa/mghZh2yw0pkBALjwFznXDqKw49L+QHI9DrDP91mFnn63B5eL9as6 EkIDzjgEYAlsyBIKKwYBBAGXVQEFAQEHQPxEPo+I1aXCJj1gxvKBW4m8a3mbz8tF ongK4Ih2VcYxAwEICcLAAwQYFgoAdQWCYAlsyAkQG6AZUGvmf7tHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnrL/g6RkucLsdVEcV6aYQKdbd ZYrwVrxDLJZeE0YnKOsCmwwCHgEWIQRG0vXO2b09Y6Ed3+4boBlQa+Z/uwAAadUB AOi1xTehsIJ4qZHUwJpXuqYYWsjBXskGTrPvvXYvK3HxAQCVaUfDr6nvB4sipu5S fIo5MOyVhZh5rYijkbpVnHCUAcYzBGAJbMgWCSsGAQQB2kcPAQEHQGVceqc+K5+5 n/wcKizTElbv6Pca/PwGM8NxERF97j1HwsALBB8WCgB9BYJgCWzIAwsJBwkQeD8a j8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnkWn+ 7HqLE0siCDuhYDkkAC5gl6hVYyY+6c3zYnfSGfoDFQoIApsBAh4BFiEEJ+Nf60hs v1sWYAJweD8aj8cn/D0AAOl6AQDWTP8S6+D5lf/Lnn6ct8wurEcxdCCqT+1464pG 9kxC0wD+IvyNp2Uz6P88I08ExAA5f5cEo26En3Ocdwaq0RuRKwvNETxiLTJAZXhh bXBsZS5vcmc+wsAOBBMWCgCABYJgCWzIAwsJBwkQeD8aj8cn/D1HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn+mKyPk92oQWxU9P8vxPFCaVE kXo0Pg8RV3W3gLlYiZADFQoIApkBApsBAh4BFiEEJ+Nf60hsv1sWYAJweD8aj8cn /D0AAOMKAQC9YlTghZBi52IMmxpoer9q6CDxqkCm7EFHU33LGkDa4gEA9QRd7eiO pVC1mDe9wbL5xT2zpFHj+1CizKexCtfZCQ/CwAcEEBYKAHkFgmAoZOwFgwlnmjsD hWR4CRBGlqXGKeox+kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmdwFtargqlOBhNnvsK7QfPuH4H9ao2py9Yut9Ar6gVN0BYhBJK7GlYL/8zk cXsF3EaWpcYp6jH6AACogwEA048zUDoyb9wqilIP+ohLFn76ysdiHFcBK2jON3Kw QUYA/2Jp3cxU31M1Yrb97zCKJypWdeRnyJscPdWuzM6QpAsJwsAHBBAWCgB5BYJg KGTrBYMJZ5o7A4VkeAkQKvaj7l11+j5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnBOUwP2II2dh9LBSC9BfleO+PaMr81Pt1IvfwuAsbs/IW IQSQqd0+dyHCIZ6NdNwq9qPuXXX6PgAAr2AA/RZ7ZBHoddAAH+1kY4Sao29XV7rs 1XJ4Z4iYY8FlkALYAQDqnnwaXWZ6RzPey5QPfbBsY2A8V/yDGCLtqCCNkdcJBsLA BwQQFgoAeQWCYChk6wWDCWeaOwOFZHgJEHjFfZ3pXBbzRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9FNQNYYIhGelcbuf3hiAyHBx6Zz7SpY xzPXOwjY2wY5FiEEv8MaaeqUdOuJ/MwueMV9nelcFvMAAI2zAP40rBQ6hx4I1F60 yoGX7giQYbRPXpmMEaNjOQVxFM9QgAEAriKF46vpOcG0AUyWBFyYGaA6Cddjct/S GLv1z3Fu9QHCwAcEEBYKAHkFgmAoZOsFgwlnmjsDhWR4CRAsf9xTXwaqFEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcHRG4xsqcXF8o7ZUMQ V5hkEetJVAXBhEYVofqccqyYpxYhBP0nJ4sFE/j9z7gy7yx/3FNfBqoUAAAQ7gD+ PG/JM6x+yEqE9T1Y2mIrQ8cbVMeOzwat7DnFFdZEBeYBAN2Q7PpUn4CSIzIM9ukj vku8EOPZPZfqavRlo5sEengJwsAHBBAWCgB5BYJgKGTrBYMJZ5o7A4VkeAkQfl20 IOQOsR5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7ujK WgsPy1Z57o0PCCVSuA5XdGodK0ATRvz6/vfIo9cWIQS7CezvUKN2O3hrnYx+XbQg 5A6xHgAAceEBANY1Nfl0f0jqKW8xfBxIQse6o6Vo/Yt9g4ReIkXsaM9kAP99jQfS fA6VBDNvwtC63UvMacgc5J5xSjwVxdyZ0sVvBMLABwQQFgoAeQWCYChk6wWDCWea OwOFZHgJEK/ohfk0vxN8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ2J8c3bvJRSTj1OmS++1tpXFgoZDhHyGf0oStLM3pLoBFiEE02RDEKNH j2c03CQ2r+iF+TS/E3wAAO2eAQDcEHQimXw7nSq6BoeYWZkyBCvxj2u3wboIUqGm s3HoAgEAultK2NdGRHl8T/SSogdYazztmb4qL+jHIChX5EzRKATCwAcEEBYKAHkF gmAoZOoFgwlnmjsDhWR4CRCWSe+Brv5RYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmf64+3SlR4Ag6xpqqKcDzk5vCu6mmmp08R55Zx6zloh cRYhBCXY6quJRwW7ZNSmqJZJ74Gu/lFiAAC6PQD/QjxOAziQgSs6niuPOwYNnelu emallQ3eXqM3jeQMUs0A/0GNIV7hHofvNqoTSaTAiXvX7kN8HEmQZvhjT4l+lTQK wsAHBBAWCgB5BYJgKGTqBYMJZ5o7A4VkeAkQCFP9u5AOBbBHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JndPlJj15d7zDckTLwsJ6aarqCPFjk JsTdrkjyBeyTfvkWIQSiwZ3XyZNfi0ebXQMIU/27kA4FsAAAOIMA/3CKPO9g3uF0 wcZiRK/Teb5ppn+4Zy+3PiiKmtRHf4X7AQCJQWewhWvsoAiPLB1f7WTNodd7eIgR jdKl/Na6fMAGDsLABwQQFgoAeQWCYChk6gWDCWeaOwOFZHgJEBugGVBr5n+7RxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZycIBRN9VvTpkqDD aBwGoJhwz6VTEdO7n69LLlvBo79ZFiEERtL1ztm9PWOhHd/uG6AZUGvmf7sAAJ5j AQCBpZK+Xe66J/OTmFG1PAwiUQF9WgotQIxbww+a6/p8NAD8DxnzuRpaZjdiwPJ4 yG67Sf75xb6/N+TojM8U+ngd9AHOMwRgCWzIFgkrBgEEAdpHDwEBB0AKNFzGBzOR NWcjz0b1f8CKHqfcDBpr2n+QMOdmVPUyJcLAwgQYFgoBNAWCYAlsyAkQeD8aj8cn /D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEcP4YHCo q2QB+H8vxXRsVmumkhoi4xOipz4pQLUFAskCmwICHgG+oAQZFgoAbwWCYAlsyAkQ PRMwb1hku01HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Fe1ejxptFXnFISD0BgfQ+vMu5hxRSvgB4w+Fs+4LfGoWIQSfuvMPjW3uC0tDh7g9 EzBvWGS7TQAA6VcA/0/z38Fin71F+oS9IOLWIriu6ZtEIGkyRmQMWMFcDTVZAQDg 2nVIoiSDUZnPxRmlX1WDzWA53ll+Owxl/A4Li1JnCRYhBCfjX+tIbL9bFmACcHg/ Go/HJ/w9AADAvAEAjABRBPi0F1aOZBpPDUL/csyOIUqxroWfkGH39UOyQxwA/1zN PSqPA4Lz286C9aad2Qoytq75rflqsee8rBTd6iQGzjgEYAlsyBIKKwYBBAGXVQEF AQEHQAydviohtxo+S0Dmvrdh/e1nTA7ft6mdrPnrZMoNqvFfAwEICcLAAwQYFgoA dQWCYAlsyAkQeD8aj8cn/D1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnKzRuK1kYYGVQaaHc8i3OCH1Dc1nSENAGcBp3gTAS6rICmwwCHgEW IQQn41/rSGy/WxZgAnB4PxqPxyf8PQAAGRwA/AjE+KED0RTGoNrfRtNcpitB+ZL7 QK9X4kH4O2fnFe6zAP0T+pCi077faRZbobu/v0ruau1aIhIIwH8GJRko/stfDw== =9xn2 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/README.md000064400000000000000000000003431046102023000166110ustar 00000000000000```text Alice | 3,120 | v 255,90 Bob --> Carol ^ / 255,120 \ v 255,60 Dave | v 1,30 Ed | v 0,120 Frank ``` sequoia-wot-0.11.0/tests/data/cycle/alice-priv.pgp000064400000000000000000000027671046102023000201110ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BFC5 CA10 FB55 A4B7 90E2 A1DB A5CF AB9A 9E34 E183 Comment: xVgEYVbkCRYJKwYBBAHaRw8BAQdAEHx8cw6se/2qPUJMhoMA9jaSc8TpBID9TMKy prKEOVcAAQDAnJ374QrH5D+AxhwMvb50+bPLMAgagPYnZx6gVSUXLA9vwsALBB8W CgB9BYJhVuQJAwsJBwkQpc+rmp404YNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnQcNzI+0LBwwaJ957bl9KWKPh1WDutO6vGazuCmobOusD FQoIApsBAh4BFiEEv8XKEPtVpLeQ4qHbpc+rmp404YMAAKkvAQDrwkSA0nKST0EO WybkOGSlRxQni7f9uEZ7jMNx+kxCtgD+OmiGeMZjre4vQZxNlfuSXhJt6R08KW3F LcKE5whkogrNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFW5AkDCwkH CRClz6uanjThg0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdIy2zmqyWvjrU0YXC0vGUJqwWSQUBjtWciZ8KRH8gRuwMVCggCmQECmwECHgEW IQS/xcoQ+1Wkt5Diodulz6uanjThgwAAvgQBAPfkyIItbqXq1Exnk6qdLJpuUw6E 1R5z6xKDbna9WNtJAQDltfRdwhjpnWZCNIyqsO2kFiPCfGKUPsLu8i9EmfW8AcdY BGFW5AkWCSsGAQQB2kcPAQEHQIIBvTiec0JhAjlX2oJ11yXjPR2Zxb9Q9GW2MDCa lrxkAAEA4Um+6+Hifrw32iJTbBeW4JjFJ0u2vzkI/GX1sJHiqRMSCsLAvwQYFgoB MQWCYVbkCQkQpc+rmp404YNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnW0HXbOfdQLjqR9NLn0aaOOUez00mZ3rk7DWy6VW8etECmwK+oAQZ FgoAbwWCYVbkCQkQ6I0tUhU9049HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnB90zq4VU5wDk9qKs5azXTnAh47rNh1AjY6WOCqGG/UwWIQTz Ii/hFCDtY+cazQzojS1SFT3TjwAAlRIA/jTKCBH8yNK/ykalZG5ACDPBPrJNKQPn NTwFnWvg2tu2AQCsw7ip2oh7mqjL49PomF+rPGhEV3loMKYkz9+QjT11BBYhBL/F yhD7VaS3kOKh26XPq5qeNOGDAADbQAEArYsmGJw4Dwo6twaJFtggJflkk48//YvA aBEOxOPOd1AA/j058S94N6eGHz39MYb4VUQx0njs2xdXBsEep3rDM9gE =lpTT -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/alice.pgp000064400000000000000000000026241046102023000171230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: BFC5 CA10 FB55 A4B7 90E2 A1DB A5CF AB9A 9E34 E183 Comment: xjMEYVbkCRYJKwYBBAHaRw8BAQdAEHx8cw6se/2qPUJMhoMA9jaSc8TpBID9TMKy prKEOVfCwAsEHxYKAH0FgmFW5AkDCwkHCRClz6uanjThg0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdBw3Mj7QsHDBon3ntuX0pYo+HVYO60 7q8ZrO4Kahs66wMVCggCmwECHgEWIQS/xcoQ+1Wkt5Diodulz6uanjThgwAAqS8B AOvCRIDScpJPQQ5bJuQ4ZKVHFCeLt/24RnuMw3H6TEK2AP46aIZ4xmOt7i9BnE2V +5JeEm3pHTwpbcUtwoTnCGSiCs0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVbkCQMLCQcJEKXPq5qeNOGDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ0jLbOarJa+OtTRhcLS8ZQmrBZJBQGO1ZyJnwpEfyBG7AxUK CAKZAQKbAQIeARYhBL/FyhD7VaS3kOKh26XPq5qeNOGDAAC+BAEA9+TIgi1uperU TGeTqp0smm5TDoTVHnPrEoNudr1Y20kBAOW19F3CGOmdZkI0jKqw7aQWI8J8YpQ+ wu7yL0SZ9bwBzjMEYVbkCRYJKwYBBAHaRw8BAQdAggG9OJ5zQmECOVfagnXXJeM9 HZnFv1D0ZbYwMJqWvGTCwL8EGBYKATEFgmFW5AkJEKXPq5qeNOGDRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1tB12zn3UC46kfTS59Gmjjl Hs9NJmd65Ow1sulVvHrRApsCvqAEGRYKAG8FgmFW5AkJEOiNLVIVPdOPRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwfdM6uFVOcA5PairOWs 105wIeO6zYdQI2Oljgqhhv1MFiEE8yIv4RQg7WPnGs0M6I0tUhU9048AAJUSAP40 yggR/MjSv8pGpWRuQAgzwT6yTSkD5zU8BZ1r4NrbtgEArMO4qdqIe5qoy+PT6Jhf qzxoRFd5aDCmJM/fkI09dQQWIQS/xcoQ+1Wkt5Diodulz6uanjThgwAA20ABAK2L JhicOA8KOrcGiRbYICX5ZJOPP/2LwGgRDsTjzndQAP49OfEveDenhh89/TGG+FVE MdJ47NsXVwbBHqd6wzPYBA== =+rA6 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/bob-priv.pgp000064400000000000000000000027651046102023000175740ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A637 747D CF87 6A7F 6C91 49F7 4D47 846E 24A2 0C0B Comment: xVgEYVbkCRYJKwYBBAHaRw8BAQdAaH+/6DIzz+NXGDKiN4u+K3I+rUVXaONd8bkQ ze7aF0wAAPwNW89uGMwzyZ6Y+To0Kp0LTNtvgCOCIZMVHEfz6Ccwag5zwsALBB8W CgB9BYJhVuQJAwsJBwkQTUeEbiSiDAtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn9s3Pl8itGUAGHwjqW+29wYl6Z17ciSj5wu+u7fOZ1p0D FQoIApsBAh4BFiEEpjd0fc+Han9skUn3TUeEbiSiDAsAAIJuAQCwYYal4x8Qu4fi NmrUGsGQBB5UpfaagX3N/YeOe5q3BwEAnGdgjvMerRdvHTAmakapfBD6TizXPyCS SHwEX+QoawTNETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhVuQJAwsJBwkQ TUeEbiSiDAtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn jZL/FtNU3yTpnCSHE9SaNxmhe7E0hIcTFhetZtKYvaQDFQoIApkBApsBAh4BFiEE pjd0fc+Han9skUn3TUeEbiSiDAsAAD9TAP9UeEuwZ28ON6cxXeo6sipwdgQJZy5e dDPg/q3KVJmC8AEAn7GKeh9e5gPZ3H456pTJRoXRLlIjnsQXk0tGBc87igXHWARh VuQJFgkrBgEEAdpHDwEBB0Az4LahTAwoBNDkYPNnKvr4CGrQvi+nf7JhSmx870UI +QABAIbEAnn5/K34CrxbjGdM+50lhe+yIHWKOM7bkYIwJFJMEKjCwL8EGBYKATEF gmFW5AkJEE1HhG4kogwLRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZzuQwDu/T9jiZh+JBP0xr2zSWIFzlvXsv4og1FhoVvAnApsCvqAEGRYK AG8FgmFW5AkJEPohf9OgOrS7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ088wiutK0HP4KG04dySM3amS20IIDla7vjNzEN/+5WCFiEEzzum a6JgKmEcHf4D+iF/06A6tLsAAK0oAQDBOXkbDreV13FeUFYVAOfWjdbPxAldneL6 PFP8w2BGvgD/S/99svHkUU6mPDtrhywjnEBUKXJT5LOOUqCqkCKABAIWIQSmN3R9 z4dqf2yRSfdNR4RuJKIMCwAAgpUBAN2rlfa+99APs5MvnUK1sYUepjXuebVilWhL rUFqlI9+APwK31pO+85zLKkp42IVt4EhrXayC/p/z8DS8p1K/sMJBg== =CVV7 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/bob.pgp000064400000000000000000000035331046102023000166100ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbkCRYJKwYBBAHaRw8BAQdAaH+/6DIzz+NXGDKiN4u+K3I+rUVXaONd8bkQ ze7aF0zCwAsEHxYKAH0FgmFW5AkDCwkHCRBNR4RuJKIMC0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf2zc+XyK0ZQAYfCOpb7b3BiXpnXtyJ KPnC767t85nWnQMVCggCmwECHgEWIQSmN3R9z4dqf2yRSfdNR4RuJKIMCwAAgm4B ALBhhqXjHxC7h+I2atQawZAEHlSl9pqBfc39h457mrcHAQCcZ2CO8x6tF28dMCZq Rql8EPpOLNc/IJJIfARf5ChrBM0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFW5AkDCwkHCRBNR4RuJKIMC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeNkv8W01TfJOmcJIcT1Jo3GaF7sTSEhxMWF61m0pi9pAMVCggC mQECmwECHgEWIQSmN3R9z4dqf2yRSfdNR4RuJKIMCwAAP1MA/1R4S7Bnbw43pzFd 6jqyKnB2BAlnLl50M+D+rcpUmYLwAQCfsYp6H17mA9ncfjnqlMlGhdEuUiOexBeT S0YFzzuKBcLABwQQFgoAeQWCYVbkRgWDCWeaOwOF/3gJECMVDY5ECGOKRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ91qLr3vCVdL+iEhYTmr yBcVmdTVrPV5fJZbSCtyV8gzFiEERFgGLcc4iQnPdg5oIxUNjkQIY4oAAOKsAP9S quKE9pb16oxk9x5bTDMaQLplJAPdyrEJ2e4lo94T0wEAmKZRxYT7Uzu+IsUkVAz7 i7mKwfjVWJXOGLC6VbWP6QbCwAcEEBYKAHkFgmFW5EUFgwlnmjsDhQN4CRClz6ua njThg0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdus7Fj seMD4oYDGBwTXdv2TcV3r9YCru5QTmiiGko7fBYhBL/FyhD7VaS3kOKh26XPq5qe NOGDAADi7gD9FFEilzxTieekcjsDIx/whhePEBvaPIZTSP0xp6okEqUBAKrl45z+ WZ1RuJWwKFnHs5aWW9kEUZ8q2G1k3JIsRgAAzjMEYVbkCRYJKwYBBAHaRw8BAQdA M+C2oUwMKATQ5GDzZyr6+Ahq0L4vp3+yYUpsfO9FCPnCwL8EGBYKATEFgmFW5AkJ EE1HhG4kogwLRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZzuQwDu/T9jiZh+JBP0xr2zSWIFzlvXsv4og1FhoVvAnApsCvqAEGRYKAG8FgmFW 5AkJEPohf9OgOrS7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ088wiutK0HP4KG04dySM3amS20IIDla7vjNzEN/+5WCFiEEzzuma6JgKmEc Hf4D+iF/06A6tLsAAK0oAQDBOXkbDreV13FeUFYVAOfWjdbPxAldneL6PFP8w2BG vgD/S/99svHkUU6mPDtrhywjnEBUKXJT5LOOUqCqkCKABAIWIQSmN3R9z4dqf2yR SfdNR4RuJKIMCwAAgpUBAN2rlfa+99APs5MvnUK1sYUepjXuebVilWhLrUFqlI9+ APwK31pO+85zLKkp42IVt4EhrXayC/p/z8DS8p1K/sMJBg== =Nt1I -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/carol-priv.pgp000064400000000000000000000027671046102023000201340ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 394B 0477 4FDA B0CD BF4D 6FFD 7930 EA0F B549 E303 Comment: xVgEYVbkCRYJKwYBBAHaRw8BAQdANuquM29TCnvdYslezgS9rtCki8Byv4EZKix1 DT73E0IAAP45YdgtlBPuBSUn/QWmdXeplaAl8E4gVe50V29JdOr53BBxwsALBB8W CgB9BYJhVuQJAwsJBwkQeTDqD7VJ4wNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnWHGCMvuHJgRXZjin9OWwhLZD9PeeSQcJPVLcElaTDdoD FQoIApsBAh4BFiEEOUsEd0/asM2/TW/9eTDqD7VJ4wMAAJKtAP4u/L6nwiEeg5MR Yc6PgQkP7tItUk2CrF6pWRiW3ydInAD+PDPZn3yFQoeUd1SqC7fOshcNYE8/WrzA dG61zUJ0+ATNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFW5AkDCwkH CRB5MOoPtUnjA0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmecg5rIx8ABK84gfQDRoVJjQikpOc5TNRYKW4cm7IKlYwMVCggCmQECmwECHgEW IQQ5SwR3T9qwzb9Nb/15MOoPtUnjAwAA2SIBAKkz3X3ppezH+0wTFTq7iMYVYXqg UBpvSYSUoTate3XRAP9adpKR1ESAp5nr8AIW65jBRjOfIFVpx6M2F2D/n2DKAcdY BGFW5AkWCSsGAQQB2kcPAQEHQKBFNdp5UcVyRvXT50MGVh+Qd0myf3v2lHcYsBpR NItKAAD/fyks6ySi0j1/iD6sUu1CAXvn8gId0abxdYQQbpzKQZIQkcLAvwQYFgoB MQWCYVbkCQkQeTDqD7VJ4wNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnkT8y4jqdLCG3t4NA6rDn22YHgpA7AsrnKHv6eUvfWcUCmwK+oAQZ FgoAbwWCYVbkCQkQt67H1o+4dINHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnkp8a1Z94LtV2qOXpIsQAEo62BP93FZSNP0d39XJ+zggWIQSS OtbjBSc4MdjIkym3rsfWj7h0gwAA8cYBAMMqWyR4ovbGzpxKL6l9rq5k6wRH0Scf 26NxPxCXWDtuAP0flhjSzNAEQjneLw93tV8q23nOFPRCVOelfLkG4rKzCxYhBDlL BHdP2rDNv01v/Xkw6g+1SeMDAADkBQD7BtwE/Qkoihij1N6pSi3T8Crt88eKk1mG DybnR1k7JP4BALFGJePfWk1j1DUMPjF5VrWdw5hz6Df4RbiEaTdKfUkJ =R0F/ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/carol.pgp000064400000000000000000000031131046102023000171400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbkCRYJKwYBBAHaRw8BAQdANuquM29TCnvdYslezgS9rtCki8Byv4EZKix1 DT73E0LCwAsEHxYKAH0FgmFW5AkDCwkHCRB5MOoPtUnjA0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdYcYIy+4cmBFdmOKf05bCEtkP0955J Bwk9UtwSVpMN2gMVCggCmwECHgEWIQQ5SwR3T9qwzb9Nb/15MOoPtUnjAwAAkq0A /i78vqfCIR6DkxFhzo+BCQ/u0i1STYKsXqlZGJbfJ0icAP48M9mffIVCh5R3VKoL t86yFw1gTz9avMB0brXNQnT4BM0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVbkCQMLCQcJEHkw6g+1SeMDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ5yDmsjHwAErziB9ANGhUmNCKSk5zlM1FgpbhybsgqVjAxUK CAKZAQKbAQIeARYhBDlLBHdP2rDNv01v/Xkw6g+1SeMDAADZIgEAqTPdfeml7Mf7 TBMVOruIxhVheqBQGm9JhJShNq17ddEA/1p2kpHURICnmevwAhbrmMFGM58gVWnH ozYXYP+fYMoBwsAHBBAWCgB5BYJhVuRFBYMJZ5o7A4X/WgkQTUeEbiSiDAtHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnggxRXeVcZsaBJZxb on1mKwMMlwJCGJLEUbSi3wKAxwMWIQSmN3R9z4dqf2yRSfdNR4RuJKIMCwAAgfYA /ifYGjCujVHWTl0gCFUK5ViWQJ5RbxlYHA9umP6b6kOxAQD2trs5sGuMLJe2YO5A VCDcIww54t2YEMPrexSk1JzsAM4zBGFW5AkWCSsGAQQB2kcPAQEHQKBFNdp5UcVy RvXT50MGVh+Qd0myf3v2lHcYsBpRNItKwsC/BBgWCgExBYJhVuQJCRB5MOoPtUnj A0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeRPzLiOp0s Ibe3g0DqsOfbZgeCkDsCyucoe/p5S99ZxQKbAr6gBBkWCgBvBYJhVuQJCRC3rsfW j7h0g0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeSnxrV n3gu1Xao5ekixAASjrYE/3cVlI0/R3f1cn7OCBYhBJI61uMFJzgx2MiTKbeux9aP uHSDAADxxgEAwypbJHii9sbOnEovqX2urmTrBEfRJx/bo3E/EJdYO24A/R+WGNLM 0ARCOd4vD3e1Xyrbec4U9EJU56V8uQbisrMLFiEEOUsEd0/asM2/TW/9eTDqD7VJ 4wMAAOQFAPsG3AT9CSiKGKPU3qlKLdPwKu3zx4qTWYYPJudHWTsk/gEAsUYl499a TWPUNQw+MXlWtZ3DmHPoN/hFuIRpN0p9SQk= =xZoW -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/dave-priv.pgp000064400000000000000000000027661046102023000177520ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4458 062D C738 8909 CF76 0E68 2315 0D8E 4408 638A Comment: xVgEYVbkCRYJKwYBBAHaRw8BAQdAfAp3XIjQdQIyLollkBZ0gampvu8N+1XI/DA4 lC1uRggAAP9qYnbioV+qF8yvDi5pLNzv4M/jfsZIEt1uaCNLkwD7gBFawsALBB8W CgB9BYJhVuQJAwsJBwkQIxUNjkQIY4pHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnQHKKRTE9w4o29HNKvjkJi+cuBEp2fypbpqBhritNFhMD FQoIApsBAh4BFiEERFgGLcc4iQnPdg5oIxUNjkQIY4oAAJDFAP9EVYK63RM9Efua dx6Jja14tnvWOSc5d2dV4HOeLVktGQD+PlwW84K5hNf0wngoerV69BUGibCU5rjj 500pO4C8WAbNEjxkYXZlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVbkCQMLCQcJ ECMVDY5ECGOKRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2yoY6jxKYMabmMict7o8W5kcRoaSo7Uxrcml8h2ZW/3AxUKCAKZAQKbAQIeARYh BERYBi3HOIkJz3YOaCMVDY5ECGOKAABC9QEAwISoYRX7aQDTmLlPmHuSNBDz+wlD tNFbBMrqJUQIgV4A/iV4BOl5/Ef2YZoRdw/mtMx1sHS4WtOLNONR1hXPHdwEx1gE YVbkCRYJKwYBBAHaRw8BAQdA0RMIWI9aui4f0sHNyzGd+/3CvjYmB/QweWWBdQbe rY4AAP9J3OvAb9pK/pe6QVTxfmwAUlh8R4q9EZYGk/UZRIEOWRBPwsC/BBgWCgEx BYJhVuQJCRAjFQ2ORAhjikcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmd0YXCGJYjODXKB4OaaKe1IXAuDA0is48dfe7iuxuIf3AKbAr6gBBkW CgBvBYJhVuQJCRDVdAAPMyaCsEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeMNZ+IjoprN8ZCTGxdeM5Wp0IS92M0Co8efeL0SqPKCRYhBLYL +WEjP3LflIuVD9V0AA8zJoKwAAAwuwD8DfiJl+CRDHTMWT6iCtFCufWYhu6kLMsC a5U7n3pdaJgBAPrJVMdKblh0DmTf+XcV+NEiWUuEZNHp7k2sFZB3VEwIFiEERFgG Lcc4iQnPdg5oIxUNjkQIY4oAAGyGAPwIJMN7hO3qz/JkAg1YMHyKdhFWl2W5AosW Im2UOn3rlwD9G2Shygr9hhc0ICdoI3F7Xs1McSzxt1hitpCU+LFe2g0= =s6rq -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/dave.pgp000064400000000000000000000031131046102023000167570ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbkCRYJKwYBBAHaRw8BAQdAfAp3XIjQdQIyLollkBZ0gampvu8N+1XI/DA4 lC1uRgjCwAsEHxYKAH0FgmFW5AkDCwkHCRAjFQ2ORAhjikcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdAcopFMT3Dijb0c0q+OQmL5y4ESnZ/ KlumoGGuK00WEwMVCggCmwECHgEWIQREWAYtxziJCc92DmgjFQ2ORAhjigAAkMUA /0RVgrrdEz0R+5p3HomNrXi2e9Y5Jzl3Z1Xgc54tWS0ZAP4+XBbzgrmE1/TCeCh6 tXr0FQaJsJTmuOPnTSk7gLxYBs0SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJhVuQJAwsJBwkQIxUNjkQIY4pHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnbKhjqPEpgxpuYyJy3ujxbmRxGhpKjtTGtyaXyHZlb/cDFQoI ApkBApsBAh4BFiEERFgGLcc4iQnPdg5oIxUNjkQIY4oAAEL1AQDAhKhhFftpANOY uU+Ye5I0EPP7CUO00VsEyuolRAiBXgD+JXgE6Xn8R/ZhmhF3D+a0zHWwdLha04s0 41HWFc8d3ATCwAcEEBYKAHkFgmFW5EUFgwlnmjsDhf88CRB5MOoPtUnjA0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf05pM3Cb9Lk9clRl4P 8rWlS8z6lQ2ufJSzxueqS+fQhhYhBDlLBHdP2rDNv01v/Xkw6g+1SeMDAABgsAD9 G2YBQQTYcklUFmY4gCqG7xj8gby2z6APi4oakzBWdl4A/jtlcsQ1nqeMCbN0WwXY OTWPv17rITfUz7R7kPkGCcoEzjMEYVbkCRYJKwYBBAHaRw8BAQdA0RMIWI9aui4f 0sHNyzGd+/3CvjYmB/QweWWBdQberY7CwL8EGBYKATEFgmFW5AkJECMVDY5ECGOK RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3RhcIYliM4N coHg5pop7UhcC4MDSKzjx197uK7G4h/cApsCvqAEGRYKAG8FgmFW5AkJENV0AA8z JoKwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4w1n4iO ims3xkJMbF14zlanQhL3YzQKjx594vRKo8oJFiEEtgv5YSM/ct+Ui5UP1XQADzMm grAAADC7APwN+ImX4JEMdMxZPqIK0UK59ZiG7qQsywJrlTufel1omAEA+slUx0pu WHQOZN/5dxX40SJZS4Rk0enuTawVkHdUTAgWIQREWAYtxziJCc92DmgjFQ2ORAhj igAAbIYA/Agkw3uE7erP8mQCDVgwfIp2EVaXZbkCixYibZQ6feuXAP0bZKHKCv2G FzQgJ2gjcXtezUxxLPG3WGK2kJT4sV7aDQ== =p2Gd -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/ed-priv.pgp000064400000000000000000000027601046102023000174150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 78C3 814E FD16 E68F 4F1A B4B8 74E3 0AE1 1FFC FB1B Comment: xVgEYVbkCRYJKwYBBAHaRw8BAQdALfVf9BauRDDB6iwDVaajFRjTxgP75GBtk/9R ZFvI72gAAP4sM9uw/65867LKhIUM4rRYG05X6/kVOyHYEZ3NqZCZUhIHwsALBB8W CgB9BYJhVuQJAwsJBwkQdOMK4R/8+xtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnsaPmMfa9pm/9WMOL174ioMH5nKr6IJ5I7btHCFphBDsD FQoIApsBAh4BFiEEeMOBTv0W5o9PGrS4dOMK4R/8+xsAAJLWAQDYcZUOAlGVxFvK 4zgrdKtT4X/vGyWcPiIIff/19gSnxAD8Ci+Bbd8xQOVJnvQYamhqHfClFnBPSdAR cMp0uRsmzwrNEDxlZEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFW5AkDCwkHCRB0 4wrhH/z7G0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeA 68yg1R5DU4SWdZ4up6atfb3hzu+WDr1X7uMB7BQIMQMVCggCmQECmwECHgEWIQR4 w4FO/Rbmj08atLh04wrhH/z7GwAAmtYA/2/VbMzhcFItFszgJ4Q8HI8d0hrzMY82 JeatCkOEaGz/AP92IzD+ifWoFTXYAI0OeQCqASrh4ur4+RchIqs606AuAsdYBGFW 5AkWCSsGAQQB2kcPAQEHQL/RWZkqKkgoi+ISxa4Xe+1fYO4qy1cEvysKqfqrb3wr AAD+MSlt0siA+8WYH8Px/aT+kH6PP3yuySpdTucV0IW948QUAsLAvwQYFgoBMQWC YVbkCQkQdOMK4R/8+xtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnCYXO6dIvvbcPOXzWipu6jY/dVfraT2RjDQWRJAJHabcCmwK+oAQZFgoA bwWCYVbkCQkQR3SfdfQEnBhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JncHcblLIzjVjazKITdr+AC5EcT/iNdAvP1tav6XnzqXwWIQSj+d5y 4ktYcSB1muRHdJ919AScGAAAerYBAI4TF9Fw2vnfZW1HTDDfwzfh/BdZO6S8CeH7 BXtPuGotAQC1Bxyks8wxgzj6Cz/szgvRqu+Tvrn2n57I5pd7thHgBxYhBHjDgU79 FuaPTxq0uHTjCuEf/PsbAADMNAD7BU8EsJO9qb54cVEDfuOFiI7K1L4VPg9sDMg2 jMxOW2AA/0C3EVcohaphv+DpVMaxefZHkhYnUDYG0xLQjrEIHG0B =t5qq -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/ed.pgp000064400000000000000000000031071046102023000164330ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbkCRYJKwYBBAHaRw8BAQdALfVf9BauRDDB6iwDVaajFRjTxgP75GBtk/9R ZFvI72jCwAsEHxYKAH0FgmFW5AkDCwkHCRB04wrhH/z7G0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmexo+Yx9r2mb/1Yw4vXviKgwfmcqvog nkjtu0cIWmEEOwMVCggCmwECHgEWIQR4w4FO/Rbmj08atLh04wrhH/z7GwAAktYB ANhxlQ4CUZXEW8rjOCt0q1Phf+8bJZw+Igh9//X2BKfEAPwKL4Ft3zFA5Ume9Bhq aGod8KUWcE9J0BFwynS5GybPCs0QPGVkQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YVbkCQMLCQcJEHTjCuEf/PsbRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ4DrzKDVHkNThJZ1ni6npq19veHO75YOvVfu4wHsFAgxAxUKCAKZ AQKbAQIeARYhBHjDgU79FuaPTxq0uHTjCuEf/PsbAACa1gD/b9VszOFwUi0WzOAn hDwcjx3SGvMxjzYl5q0KQ4RobP8A/3YjMP6J9agVNdgAjQ55AKoBKuHi6vj5FyEi qzrToC4CwsAHBBAWCgB5BYJhVuRGBYMJZ5o7A4UBHgkQIxUNjkQIY4pHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnSRoFNI/xXGObtsBltCrP TM4R5S/NVzFzsqoQZeq+aCcWIQREWAYtxziJCc92DmgjFQ2ORAhjigAAFyEA/R4C ZfUddfbS8BlzAfyB1gbPXRfikiZYJLNdQmRm/hgXAP0TNzO/9QBanZdF9Z2xU0S/ 5Lsh1YQkiZwHOYC2P0niAM4zBGFW5AkWCSsGAQQB2kcPAQEHQL/RWZkqKkgoi+IS xa4Xe+1fYO4qy1cEvysKqfqrb3wrwsC/BBgWCgExBYJhVuQJCRB04wrhH/z7G0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcJhc7p0i+9tw85 fNaKm7qNj91V+tpPZGMNBZEkAkdptwKbAr6gBBkWCgBvBYJhVuQJCRBHdJ919ASc GEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdwdxuUsjON WNrMohN2v4ALkRxP+I10C8/W1q/pefOpfBYhBKP53nLiS1hxIHWa5Ed0n3X0BJwY AAB6tgEAjhMX0XDa+d9lbUdMMN/DN+H8F1k7pLwJ4fsFe0+4ai0BALUHHKSzzDGD OPoLP+zOC9Gq75O+ufafnsjml3u2EeAHFiEEeMOBTv0W5o9PGrS4dOMK4R/8+xsA AMw0APsFTwSwk72pvnhxUQN+44WIjsrUvhU+D2wMyDaMzE5bYAD/QLcRVyiFqmG/ 4OlUxrF59keSFidQNgbTEtCOsQgcbQE= =1Dmu -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/frank-priv.pgp000064400000000000000000000027671046102023000201350ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A621 9FF7 53AE AE2D E8A7 4E84 8797 7DD5 68A0 8237 Comment: xVgEYVbkCRYJKwYBBAHaRw8BAQdAqEP6nBTPNAlrE94YZ9e3RHV8CoUZRC6EN6fh 0zFdd1UAAQDD/779DMWpDSRrvH+nnFOD20atNBOhBx4QH2zfQ1rEGQ63wsALBB8W CgB9BYJhVuQJAwsJBwkQh5d91WiggjdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnqLgibpltx6IqKJnPj69QMgJhBXVHGGW0bnTPEKvGkWMD FQoIApsBAh4BFiEEpiGf91Ouri3op06Eh5d91WiggjcAAPKKAQCEgaOUHXmeApUU 7i+HRIA2JLWBzmX/6QfS/bpiRMsdkQD/cQAoAsbAL6bJ1kE3umaQ96N5vZlgCrO/ xGGf3YjpvwDNEzxmcmFua0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFW5AkDCwkH CRCHl33VaKCCN0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmepy68AVEyV420DRdic5n5tXnAiprtkSm28NB54y/ZGfQMVCggCmQECmwECHgEW IQSmIZ/3U66uLeinToSHl33VaKCCNwAAQwcBAIxkttuJXQN3Stf7L8aMrzC6cFNy /vPVZcuwjRUnb3KaAQCy4nyf8CngMOR52SihJuIYmxmfzgw4pX7qxCLSnPtZCMdY BGFW5AkWCSsGAQQB2kcPAQEHQJtT+Y0O83XvZVBFM3LcY6MJlckVgNDXFvIOdA8L io1IAAD/aHzZQ6fDDSc4UwVs1PN0R/D5DKc1XfdLQR3Vp6+PlLkQ8MLAvwQYFgoB MQWCYVbkCQkQh5d91WiggjdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnqpyKhnlHEPIzcFaRd1uFhfNnRbxlP8yixeXT1GeNNWYCmwK+oAQZ FgoAbwWCYVbkCQkQ2KeBWMSHlmhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnmooQDOqtofvA1thMshOvYj24g4aBb9AGFEfjvumqW5sWIQSG Ub0+On36Lv2Fx9/Yp4FYxIeWaAAAIVABAJCsCgzFJWqxmNpRmbwZM1PJbsc7ipUL t/3APOzrF3wVAQDjQeI+S1q0j78LMcm5gaVKahd/iIg9DJgQPJ3hzQdhARYhBKYh n/dTrq4t6KdOhIeXfdVooII3AADWBAD/aN/Hn01+fkGqJxOdWNzJgmg6HKCdtSGa VMk/IMsIOj4BAJmBdeF+ShZOwcMau3xh1gqlFussjWRWNddm6d4Wk7oL =GhsU -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle/frank.pgp000064400000000000000000000031071046102023000171440ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbkCRYJKwYBBAHaRw8BAQdAqEP6nBTPNAlrE94YZ9e3RHV8CoUZRC6EN6fh 0zFdd1XCwAsEHxYKAH0FgmFW5AkDCwkHCRCHl33VaKCCN0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeouCJumW3Hoioomc+Pr1AyAmEFdUcY ZbRudM8Qq8aRYwMVCggCmwECHgEWIQSmIZ/3U66uLeinToSHl33VaKCCNwAA8ooB AISBo5QdeZ4ClRTuL4dEgDYktYHOZf/pB9L9umJEyx2RAP9xACgCxsAvpsnWQTe6 ZpD3o3m9mWAKs7/EYZ/diOm/AM0TPGZyYW5rQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVbkCQMLCQcJEIeXfdVooII3RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ6nLrwBUTJXjbQNF2Jzmfm1ecCKmu2RKbbw0HnjL9kZ9AxUK CAKZAQKbAQIeARYhBKYhn/dTrq4t6KdOhIeXfdVooII3AABDBwEAjGS224ldA3dK 1/svxoyvMLpwU3L+89Vly7CNFSdvcpoBALLifJ/wKeAw5HnZKKEm4hibGZ/ODDil furEItKc+1kIwsADBBAWCgB1BYJhVuRGBYMJZ5o7CRB04wrhH/z7G0cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcGimKUZOTwkXDwDUjmO1YJ pualRfJg6INZg9MVxHv0aBYhBHjDgU79FuaPTxq0uHTjCuEf/PsbAACn5wD+LIwJ B3UsT2TzIv5TMBZloE175ROYC2vtJXsi8fBNhScA/2AOXki2KcMiulgJ3yV+mXKZ VNtgyRF22eIb0k7t4kMOzjMEYVbkCRYJKwYBBAHaRw8BAQdAm1P5jQ7zde9lUEUz ctxjowmVyRWA0NcW8g50DwuKjUjCwL8EGBYKATEFgmFW5AkJEIeXfdVooII3RxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6qcioZ5RxDyM3BW kXdbhYXzZ0W8ZT/MosXl09RnjTVmApsCvqAEGRYKAG8FgmFW5AkJENingVjEh5Zo RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5qKEAzqraH7 wNbYTLITr2I9uIOGgW/QBhRH477pqlubFiEEhlG9Pjp9+i79hcff2KeBWMSHlmgA ACFQAQCQrAoMxSVqsZjaUZm8GTNTyW7HO4qVC7f9wDzs6xd8FQEA40HiPktatI+/ CzHJuYGlSmoXf4iIPQyYEDyd4c0HYQEWIQSmIZ/3U66uLeinToSHl33VaKCCNwAA 1gQA/2jfx59Nfn5BqicTnVjcyYJoOhygnbUhmlTJPyDLCDo+AQCZgXXhfkoWTsHD Grt8YdYKpRbrLI1kVjXXZuneFpO6Cw== =qXWq -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle.pgp000064400000000000000000000220411046102023000160410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbkCRYJKwYBBAHaRw8BAQdAaH+/6DIzz+NXGDKiN4u+K3I+rUVXaONd8bkQ ze7aF0zCwAsEHxYKAH0FgmFW5AkDCwkHCRBNR4RuJKIMC0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf2zc+XyK0ZQAYfCOpb7b3BiXpnXtyJ KPnC767t85nWnQMVCggCmwECHgEWIQSmN3R9z4dqf2yRSfdNR4RuJKIMCwAAgm4B ALBhhqXjHxC7h+I2atQawZAEHlSl9pqBfc39h457mrcHAQCcZ2CO8x6tF28dMCZq Rql8EPpOLNc/IJJIfARf5ChrBM0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFW5AkDCwkHCRBNR4RuJKIMC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeNkv8W01TfJOmcJIcT1Jo3GaF7sTSEhxMWF61m0pi9pAMVCggC mQECmwECHgEWIQSmN3R9z4dqf2yRSfdNR4RuJKIMCwAAP1MA/1R4S7Bnbw43pzFd 6jqyKnB2BAlnLl50M+D+rcpUmYLwAQCfsYp6H17mA9ncfjnqlMlGhdEuUiOexBeT S0YFzzuKBcLABwQQFgoAeQWCYVbkRgWDCWeaOwOF/3gJECMVDY5ECGOKRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ91qLr3vCVdL+iEhYTmr yBcVmdTVrPV5fJZbSCtyV8gzFiEERFgGLcc4iQnPdg5oIxUNjkQIY4oAAOKsAP9S quKE9pb16oxk9x5bTDMaQLplJAPdyrEJ2e4lo94T0wEAmKZRxYT7Uzu+IsUkVAz7 i7mKwfjVWJXOGLC6VbWP6QbCwAcEEBYKAHkFgmFW5EUFgwlnmjsDhQN4CRClz6ua njThg0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdus7Fj seMD4oYDGBwTXdv2TcV3r9YCru5QTmiiGko7fBYhBL/FyhD7VaS3kOKh26XPq5qe NOGDAADi7gD9FFEilzxTieekcjsDIx/whhePEBvaPIZTSP0xp6okEqUBAKrl45z+ WZ1RuJWwKFnHs5aWW9kEUZ8q2G1k3JIsRgAAzjMEYVbkCRYJKwYBBAHaRw8BAQdA M+C2oUwMKATQ5GDzZyr6+Ahq0L4vp3+yYUpsfO9FCPnCwL8EGBYKATEFgmFW5AkJ EE1HhG4kogwLRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZzuQwDu/T9jiZh+JBP0xr2zSWIFzlvXsv4og1FhoVvAnApsCvqAEGRYKAG8FgmFW 5AkJEPohf9OgOrS7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ088wiutK0HP4KG04dySM3amS20IIDla7vjNzEN/+5WCFiEEzzuma6JgKmEc Hf4D+iF/06A6tLsAAK0oAQDBOXkbDreV13FeUFYVAOfWjdbPxAldneL6PFP8w2BG vgD/S/99svHkUU6mPDtrhywjnEBUKXJT5LOOUqCqkCKABAIWIQSmN3R9z4dqf2yR SfdNR4RuJKIMCwAAgpUBAN2rlfa+99APs5MvnUK1sYUepjXuebVilWhLrUFqlI9+ APwK31pO+85zLKkp42IVt4EhrXayC/p/z8DS8p1K/sMJBsYzBGFW5AkWCSsGAQQB 2kcPAQEHQKhD+pwUzzQJaxPeGGfXt0R1fAqFGUQuhDen4dMxXXdVwsALBB8WCgB9 BYJhVuQJAwsJBwkQh5d91WiggjdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnqLgibpltx6IqKJnPj69QMgJhBXVHGGW0bnTPEKvGkWMDFQoI ApsBAh4BFiEEpiGf91Ouri3op06Eh5d91WiggjcAAPKKAQCEgaOUHXmeApUU7i+H RIA2JLWBzmX/6QfS/bpiRMsdkQD/cQAoAsbAL6bJ1kE3umaQ96N5vZlgCrO/xGGf 3YjpvwDNEzxmcmFua0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFW5AkDCwkHCRCH l33VaKCCN0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmep y68AVEyV420DRdic5n5tXnAiprtkSm28NB54y/ZGfQMVCggCmQECmwECHgEWIQSm IZ/3U66uLeinToSHl33VaKCCNwAAQwcBAIxkttuJXQN3Stf7L8aMrzC6cFNy/vPV ZcuwjRUnb3KaAQCy4nyf8CngMOR52SihJuIYmxmfzgw4pX7qxCLSnPtZCMLAAwQQ FgoAdQWCYVbkRgWDCWeaOwkQdOMK4R/8+xtHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnBopilGTk8JFw8A1I5jtWCabmpUXyYOiDWYPTFcR7 9GgWIQR4w4FO/Rbmj08atLh04wrhH/z7GwAAp+cA/iyMCQd1LE9k8yL+UzAWZaBN e+UTmAtr7SV7IvHwTYUnAP9gDl5ItinDIrpYCd8lfplymVTbYMkRdtniG9JO7eJD Ds4zBGFW5AkWCSsGAQQB2kcPAQEHQJtT+Y0O83XvZVBFM3LcY6MJlckVgNDXFvIO dA8Lio1IwsC/BBgWCgExBYJhVuQJCRCHl33VaKCCN0cUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmeqnIqGeUcQ8jNwVpF3W4WF82dFvGU/zKLF 5dPUZ401ZgKbAr6gBBkWCgBvBYJhVuQJCRDYp4FYxIeWaEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeaihAM6q2h+8DW2EyyE69iPbiDhoFv 0AYUR+O+6apbmxYhBIZRvT46ffou/YXH39ingVjEh5ZoAAAhUAEAkKwKDMUlarGY 2lGZvBkzU8luxzuKlQu3/cA87OsXfBUBAONB4j5LWrSPvwsxybmBpUpqF3+IiD0M mBA8neHNB2EBFiEEpiGf91Ouri3op06Eh5d91WiggjcAANYEAP9o38efTX5+Qaon E51Y3MmCaDocoJ21IZpUyT8gywg6PgEAmYF14X5KFk7Bwxq7fGHWCqUW6yyNZFY1 12bp3haTugvGMwRhVuQJFgkrBgEEAdpHDwEBB0AQfHxzDqx7/ao9QkyGgwD2NpJz xOkEgP1MwrKmsoQ5V8LACwQfFgoAfQWCYVbkCQMLCQcJEKXPq5qeNOGDRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0HDcyPtCwcMGifee25f Slij4dVg7rTurxms7gpqGzrrAxUKCAKbAQIeARYhBL/FyhD7VaS3kOKh26XPq5qe NOGDAACpLwEA68JEgNJykk9BDlsm5DhkpUcUJ4u3/bhGe4zDcfpMQrYA/jpohnjG Y63uL0GcTZX7kl4SbekdPCltxS3ChOcIZKIKzRM8YWxpY2VAZXhhbXBsZS5vcmc+ wsAOBBMWCgCABYJhVuQJAwsJBwkQpc+rmp404YNHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnSMts5qslr461NGFwtLxlCasFkkFAY7VnImfC kR/IEbsDFQoIApkBApsBAh4BFiEEv8XKEPtVpLeQ4qHbpc+rmp404YMAAL4EAQD3 5MiCLW6l6tRMZ5OqnSyablMOhNUec+sSg252vVjbSQEA5bX0XcIY6Z1mQjSMqrDt pBYjwnxilD7C7vIvRJn1vAHOMwRhVuQJFgkrBgEEAdpHDwEBB0CCAb04nnNCYQI5 V9qCddcl4z0dmcW/UPRltjAwmpa8ZMLAvwQYFgoBMQWCYVbkCQkQpc+rmp404YNH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnW0HXbOfdQLjq R9NLn0aaOOUez00mZ3rk7DWy6VW8etECmwK+oAQZFgoAbwWCYVbkCQkQ6I0tUhU9 049HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnB90zq4VU 5wDk9qKs5azXTnAh47rNh1AjY6WOCqGG/UwWIQTzIi/hFCDtY+cazQzojS1SFT3T jwAAlRIA/jTKCBH8yNK/ykalZG5ACDPBPrJNKQPnNTwFnWvg2tu2AQCsw7ip2oh7 mqjL49PomF+rPGhEV3loMKYkz9+QjT11BBYhBL/FyhD7VaS3kOKh26XPq5qeNOGD AADbQAEArYsmGJw4Dwo6twaJFtggJflkk48//YvAaBEOxOPOd1AA/j058S94N6eG Hz39MYb4VUQx0njs2xdXBsEep3rDM9gExjMEYVbkCRYJKwYBBAHaRw8BAQdALfVf 9BauRDDB6iwDVaajFRjTxgP75GBtk/9RZFvI72jCwAsEHxYKAH0FgmFW5AkDCwkH CRB04wrhH/z7G0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmexo+Yx9r2mb/1Yw4vXviKgwfmcqvognkjtu0cIWmEEOwMVCggCmwECHgEWIQR4 w4FO/Rbmj08atLh04wrhH/z7GwAAktYBANhxlQ4CUZXEW8rjOCt0q1Phf+8bJZw+ Igh9//X2BKfEAPwKL4Ft3zFA5Ume9BhqaGod8KUWcE9J0BFwynS5GybPCs0QPGVk QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVbkCQMLCQcJEHTjCuEf/PsbRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4DrzKDVHkNThJZ1ni6n pq19veHO75YOvVfu4wHsFAgxAxUKCAKZAQKbAQIeARYhBHjDgU79FuaPTxq0uHTj CuEf/PsbAACa1gD/b9VszOFwUi0WzOAnhDwcjx3SGvMxjzYl5q0KQ4RobP8A/3Yj MP6J9agVNdgAjQ55AKoBKuHi6vj5FyEiqzrToC4CwsAHBBAWCgB5BYJhVuRGBYMJ Z5o7A4UBHgkQIxUNjkQIY4pHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnSRoFNI/xXGObtsBltCrPTM4R5S/NVzFzsqoQZeq+aCcWIQREWAYt xziJCc92DmgjFQ2ORAhjigAAFyEA/R4CZfUddfbS8BlzAfyB1gbPXRfikiZYJLNd QmRm/hgXAP0TNzO/9QBanZdF9Z2xU0S/5Lsh1YQkiZwHOYC2P0niAM4zBGFW5AkW CSsGAQQB2kcPAQEHQL/RWZkqKkgoi+ISxa4Xe+1fYO4qy1cEvysKqfqrb3wrwsC/ BBgWCgExBYJhVuQJCRB04wrhH/z7G0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmcJhc7p0i+9tw85fNaKm7qNj91V+tpPZGMNBZEkAkdptwKb Ar6gBBkWCgBvBYJhVuQJCRBHdJ919AScGEcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmdwdxuUsjONWNrMohN2v4ALkRxP+I10C8/W1q/pefOp fBYhBKP53nLiS1hxIHWa5Ed0n3X0BJwYAAB6tgEAjhMX0XDa+d9lbUdMMN/DN+H8 F1k7pLwJ4fsFe0+4ai0BALUHHKSzzDGDOPoLP+zOC9Gq75O+ufafnsjml3u2EeAH FiEEeMOBTv0W5o9PGrS4dOMK4R/8+xsAAMw0APsFTwSwk72pvnhxUQN+44WIjsrU vhU+D2wMyDaMzE5bYAD/QLcRVyiFqmG/4OlUxrF59keSFidQNgbTEtCOsQgcbQHG MwRhVuQJFgkrBgEEAdpHDwEBB0B8CndciNB1AjIuiWWQFnSBqam+7w37Vcj8MDiU LW5GCMLACwQfFgoAfQWCYVbkCQMLCQcJECMVDY5ECGOKRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0ByikUxPcOKNvRzSr45CYvnLgRKdn8q W6agYa4rTRYTAxUKCAKbAQIeARYhBERYBi3HOIkJz3YOaCMVDY5ECGOKAACQxQD/ RFWCut0TPRH7mnceiY2teLZ71jknOXdnVeBzni1ZLRkA/j5cFvOCuYTX9MJ4KHq1 evQVBomwlOa44+dNKTuAvFgGzRI8ZGF2ZUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFW5AkDCwkHCRAjFQ2ORAhjikcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdsqGOo8SmDGm5jInLe6PFuZHEaGkqO1Ma3JpfIdmVv9wMVCggC mQECmwECHgEWIQREWAYtxziJCc92DmgjFQ2ORAhjigAAQvUBAMCEqGEV+2kA05i5 T5h7kjQQ8/sJQ7TRWwTK6iVECIFeAP4leATpefxH9mGaEXcP5rTMdbB0uFrTizTj UdYVzx3cBMLABwQQFgoAeQWCYVbkRQWDCWeaOwOF/zwJEHkw6g+1SeMDRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/TmkzcJv0uT1yVGXg/y taVLzPqVDa58lLPG56pL59CGFiEEOUsEd0/asM2/TW/9eTDqD7VJ4wMAAGCwAP0b ZgFBBNhySVQWZjiAKobvGPyBvLbPoA+LihqTMFZ2XgD+O2VyxDWep4wJs3RbBdg5 NY+/XushN9TPtHuQ+QYJygTOMwRhVuQJFgkrBgEEAdpHDwEBB0DREwhYj1q6Lh/S wc3LMZ37/cK+NiYH9DB5ZYF1Bt6tjsLAvwQYFgoBMQWCYVbkCQkQIxUNjkQIY4pH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JndGFwhiWIzg1y geDmmintSFwLgwNIrOPHX3u4rsbiH9wCmwK+oAQZFgoAbwWCYVbkCQkQ1XQADzMm grBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnjDWfiI6K azfGQkxsXXjOVqdCEvdjNAqPHn3i9EqjygkWIQS2C/lhIz9y35SLlQ/VdAAPMyaC sAAAMLsA/A34iZfgkQx0zFk+ogrRQrn1mIbupCzLAmuVO596XWiYAQD6yVTHSm5Y dA5k3/l3FfjRIllLhGTR6e5NrBWQd1RMCBYhBERYBi3HOIkJz3YOaCMVDY5ECGOK AABshgD8CCTDe4Tt6s/yZAINWDB8inYRVpdluQKLFiJtlDp965cA/RtkocoK/YYX NCAnaCNxe17NTHEs8bdYYraQlPixXtoNxjMEYVbkCRYJKwYBBAHaRw8BAQdANuqu M29TCnvdYslezgS9rtCki8Byv4EZKix1DT73E0LCwAsEHxYKAH0FgmFW5AkDCwkH CRB5MOoPtUnjA0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdYcYIy+4cmBFdmOKf05bCEtkP0955JBwk9UtwSVpMN2gMVCggCmwECHgEWIQQ5 SwR3T9qwzb9Nb/15MOoPtUnjAwAAkq0A/i78vqfCIR6DkxFhzo+BCQ/u0i1STYKs XqlZGJbfJ0icAP48M9mffIVCh5R3VKoLt86yFw1gTz9avMB0brXNQnT4BM0TPGNh cm9sQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVbkCQMLCQcJEHkw6g+1SeMDRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5yDmsjHwAErziB9 ANGhUmNCKSk5zlM1FgpbhybsgqVjAxUKCAKZAQKbAQIeARYhBDlLBHdP2rDNv01v /Xkw6g+1SeMDAADZIgEAqTPdfeml7Mf7TBMVOruIxhVheqBQGm9JhJShNq17ddEA /1p2kpHURICnmevwAhbrmMFGM58gVWnHozYXYP+fYMoBwsAHBBAWCgB5BYJhVuRF BYMJZ5o7A4X/WgkQTUeEbiSiDAtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnggxRXeVcZsaBJZxbon1mKwMMlwJCGJLEUbSi3wKAxwMWIQSm N3R9z4dqf2yRSfdNR4RuJKIMCwAAgfYA/ifYGjCujVHWTl0gCFUK5ViWQJ5RbxlY HA9umP6b6kOxAQD2trs5sGuMLJe2YO5AVCDcIww54t2YEMPrexSk1JzsAM4zBGFW 5AkWCSsGAQQB2kcPAQEHQKBFNdp5UcVyRvXT50MGVh+Qd0myf3v2lHcYsBpRNItK wsC/BBgWCgExBYJhVuQJCRB5MOoPtUnjA0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmeRPzLiOp0sIbe3g0DqsOfbZgeCkDsCyucoe/p5S99Z xQKbAr6gBBkWCgBvBYJhVuQJCRC3rsfWj7h0g0cUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmeSnxrVn3gu1Xao5ekixAASjrYE/3cVlI0/R3f1 cn7OCBYhBJI61uMFJzgx2MiTKbeux9aPuHSDAADxxgEAwypbJHii9sbOnEovqX2u rmTrBEfRJx/bo3E/EJdYO24A/R+WGNLM0ARCOd4vD3e1Xyrbec4U9EJU56V8uQbi srMLFiEEOUsEd0/asM2/TW/9eTDqD7VJ4wMAAOQFAPsG3AT9CSiKGKPU3qlKLdPw Ku3zx4qTWYYPJudHWTsk/gEAsUYl499aTWPUNQw+MXlWtZ3DmHPoN/hFuIRpN0p9 SQk= =0fqz -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/cycle.sh000075500000000000000000000004651046102023000156760ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=cycle ${@:+"$@"} for U in alice bob carol dave ed frank do key "$U" done certify alice -a 120 -d 3 bob certify bob -a 90 -d 255 carol certify carol -a 60 -d 255 dave certify dave -a 120 -d 255 bob certify dave -a 30 -d 1 ed certify ed -a 120 -d 0 frank finish sequoia-wot-0.11.0/tests/data/gen-helper.sh000075500000000000000000000203221046102023000166170ustar 00000000000000#! /bin/bash # This file contains a number of functions that simplify key # generation and certification. See simple.sh for an example of its # usage. set -e # Some files that must exist in the current directory. assert_files="gen-helper.sh cliques cycle local-optima roundabout simple my-own-grandpa" skip_keygen=0 function init { function usage { echo "Usage: $0 [--skip-keygen] [--directory=DIR]" 1>&2 exit 1 } options=$(getopt -o "" -l skip-keygen,directory: -- "$@") [ $? -eq 0 ] || { echo "Incorrect options provided" exit 1 } eval set -- "$options" while true; do case "$1" in --skip-keygen) skip_keygen=1 ;; --directory) shift dir=$1 ;; --) shift break ;; esac shift done if test $# -gt 0 then echo "Too many arguments" usage fi echo $0 if test x"$dir.sh" != x"${0#*/}" then echo "Value of --directory ($dir) does not match script ($0)." exit 1 fi # Make sure we are at the right spot. for f in $assert_files $dir do if ! test -e $f then echo "Invalid current working directory; '%f' not found." exit 1 fi done } function check_init { if test -z "$dir" then echo "output directory not set, did you call init?" exit 1 fi } key_files="" # Generate a key. # # key [-t CREATION_TIME] PRIMARY_USERID_EMAIL [EMAIL...] # # $1 is primary user id's email address. If it is not an email # address, then it is expanded to "$1@example.org". The basename is # derived from the local part. # # Email addresses are unconditionally wrapped in angle brackets ("<" # and ">"). # # The created key is saved in "$dir/$basename-priv.pgp". # # Example: # # key alice # # Generates a key in $dir/alice-priv.pgp with the User ID: # "". # # key alice@some.org alice@other.org # # Generates a key in $dir/alice-priv.pgp with the primary User ID # "" and the secondary User ID "". function key { check_init time= expires_in=never options=$(getopt -o t:e: -l domain: -- "$@") [ $? -eq 0 ] || { echo "Incorrect options provided" exit 1 } eval set -- "$options" while true; do case "$1" in -t) shift time=$1 ;; -e) shift expires_in=$1 ;; --) shift break ;; esac shift done if test "${1%@*}" != "$1" then # It's an email address. Use the local part for the # filename. userid="<$1>" basename="${1%@*}" else userid="<$1@example.org>" basename=$1 fi shift declare -a userids userids+=(--userid "$userid") for userid in ${@:+"$@"} do userids+=(--userid "<$userid>") done keyfile="$dir"/"$basename"-priv.pgp if test $skip_keygen -eq 1 then if ! test -e "$keyfile" then echo --skip-keygen provided, but "$keyfile" does not exist. exit 1 fi else sq --force key generate --cannot-sign --cannot-encrypt --cannot-authenticate \ ${expires_in:+--expiry "$expires_in"} \ ${time:+--creation-time "$time"} \ ${userids[@]} \ --output "$keyfile" \ --rev-cert /dev/null fi keyfiles="$keyfiles $keyfile" sq key extract-cert "$keyfile" > "$dir"/"$basename".pgp } # Certifies a key. # # certify SIGNER TARGET [USERID] [-a AMOUNT] [-d DEPTH] [-r REGEX] # # SIGNER and TARGET are basenames. The output is written to # DIR/TARGET.pgp. # # If USERID is not provided, it defaults to "<$TARGET@example.org>". # # If AMOUNT is not provided, it defaults to 120. # # If DEPTH is not provided, it defaults to 0. # # If REGEX is not provided, no regex is set. # # If --domain is provided, a regex based on the domain is set. function certify { check_init function usage { echo "Usage: $0 [-a AMOUNT] [-d DEPTH] [-r REGEX] [--domain=DOMAIN] [-t TIME] [-e EXPIRES_IN] SIGNER TARGET [USERID]" 1>&2 exit 1 } amount=120 depth=0 declare -a regex time= expires_in=never options=$(getopt -o a:d:r:t:e: -l domain: -- "$@") [ $? -eq 0 ] || { echo "Incorrect options provided" exit 1 } eval set -- "$options" while true; do case "$1" in -a) shift amount=$1 ;; -d) shift depth=$1 ;; -r) shift regex+=(-r "$1") ;; --domain) shift regex+=(-r '<[^>]+[@.]'"$(echo -n "$1" | sed 's/[.]/\\./')"'>$') ;; -t) shift time=$1 ;; -e) shift expires_in=$1 ;; --) shift break ;; esac shift done if test $# -lt 2 then echo "Too few arguments" usage fi if test $# -gt 3 then echo "Too many arguments" usage fi signer=$1 target=$2 if test $# -eq 3 then userid=$3 elif test x"$target" != x"${target%@*}" then # Email address. userid="<$target>" # Compute the base name. target=${target%@*} else # Base name. userid="<$target@example.org>" fi sq certify --amount $amount --depth $depth ${regex[@]} \ ${time:+--time "$time"} \ ${expires_in:+--expiry "$expires_in"} \ --allow-not-alive-certifier --allow-revoked-certifier \ "$dir"/"$signer"-priv.pgp \ "$dir"/"$target".pgp \ "$userid" > "$dir"/"$target".pgp~ mv "$dir"/"$target".pgp~ "$dir"/"$target".pgp } # Revokes a certificate or user id. # # revoke [-r REVOKER] [-u USERID] [-t TIME] CERT REASON # # CERT is a basename. The output is written to DIR/CERT.pgp. function revoke { check_init function usage { echo "Usage: $0 [-r REVOKER] [-u USERID] [-t TIME] CERT REASON" 1>&2 exit 1 } subcommand=certificate userid= time= revoker= options=$(getopt -o u:t:r: -l domain: -- "$@") [ $? -eq 0 ] || { echo "Incorrect options provided" exit 1 } eval set -- "$options" while true; do case "$1" in -u) shift subcommand=userid userid=$1 ;; -t) shift time=$1 ;; -r) shift revoker=$1 ;; --) shift break ;; esac shift done if test $# -lt 2 then echo "Too few arguments" usage fi if test $# -gt 3 then echo "Too many arguments" usage fi cert=$1 reason=$2 if test "x$revoker" = x then revoker=$cert fi set -x set -o pipefail { sq dearmor "$dir"/"$cert".pgp sq revoke ${subcommand} ${userid:+"$userid"} -B \ ${time:+--time "$time"} \ --revocation-key "$dir"/"$revoker"-priv.pgp \ --certificate "$dir"/"$cert".pgp \ "$reason" "some message" } | sq toolbox keyring merge > "$dir"/"$cert".pgp~ set +o pipefail mv "$dir"/"$cert".pgp~ "$dir"/"$cert".pgp } function finish { find "$dir" -type f -name '*-priv.pgp' | while read f do cat "${f%-priv.pgp}.pgp" done | sq toolbox keyring merge > "$dir.pgp" ./torust.sh "$dir" find "$dir" -type f -name '*-priv.pgp' \ -a -\( $(for f in $keyfiles; do echo -wholename $f -o; done) -print -\) \ | while read f do echo "WARNING: $f unused." done } init ${@:+"$@"} sequoia-wot-0.11.0/tests/data/gpg-trustroots/README.md000064400000000000000000000012441046102023000205360ustar 00000000000000How gpg interprets ownertrust is a bit complicated. For a certificate that is marked as "fully trusted" or "partially trusted" to be considered a trust root, it also has to be reachable from an ultimately trusted trust root. Further, it is permissible for that to happen via fully trusted or marginally trusted trust roots. Consider: ``` root 0/120 / | \ a1 a2 a3 0/120 \ | / d | target ``` Clearly, d cannot be authenticated from the root. But if a1, a2, and a3 are partially trusted trust roots, then it can be. This means that sq-wot has to iterate when adding gpg trust roots. sequoia-wot-0.11.0/tests/data/gpg-trustroots/a1-priv.pgp000064400000000000000000000015561046102023000212540ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8066 6EDD 21A0 08D4 6724 3E47 444D 4C0F 515D 269A Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdA9WkYMaFswUsX3opdua5gBAhPcriyaNSif5tC F5jHdrEAAP0WHFvzD9iTQAPcMfYvqQjw+e9ZkyV51AB4t6PxugsXtxCpwsALBB8W CgB9BYJeC+EAAwsJBwkQRE1MD1FdJppHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn470dUQ6PJtGSwdwECmv2LSW+dX/gJ1FjNaDQRQ8yFMoD FQoIApsBAh4BFiEEgGZu3SGgCNRnJD5HRE1MD1FdJpoAAHAgAP0fRe2NBmMpSE3N RAjSzGiHJsDnPMml65/mA4gx5LrulAD9Fbm680PwwpBAzS2xrDz/pTHumzxbWCgF WxKDG1cyKgTNEDxhMUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkHCRBE TUwPUV0mmkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdm 3qjHW4raF8/lSplcO1emSL+E1EnZk3MlpniqO508hQMVCggCmQECmwECHgEWIQSA Zm7dIaAI1GckPkdETUwPUV0mmgAAKkoBAN+oq81iP+vNZBV++MINgujO7AoPCvOf tCJkJIPnt7CMAQD4YnT212PYFqgIGTPb014sa4FasCO77kfVfViRiiBzCw== =KDPn -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots/a1.pgp000064400000000000000000000017461046102023000202770ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdA9WkYMaFswUsX3opdua5gBAhPcriyaNSif5tC F5jHdrHCwAsEHxYKAH0Fgl4L4QADCwkHCRBETUwPUV0mmkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfjvR1RDo8m0ZLB3AQKa/YtJb51f+An UWM1oNBFDzIUygMVCggCmwECHgEWIQSAZm7dIaAI1GckPkdETUwPUV0mmgAAcCAA /R9F7Y0GYylITc1ECNLMaIcmwOc8yaXrn+YDiDHkuu6UAP0VubrzQ/DCkEDNLbGs PP+lMe6bPFtYKAVbEoMbVzIqBM0QPGExQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC XgvhAAMLCQcJEERNTA9RXSaaRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ2beqMdbitoXz+VKmVw7V6ZIv4TUSdmTcyWmeKo7nTyFAxUKCAKZ AQKbAQIeARYhBIBmbt0hoAjUZyQ+R0RNTA9RXSaaAAAqSgEA36irzWI/681kFX74 wg2C6M7sCg8K85+0ImQkg+e3sIwBAPhidPbXY9gWqAgZM9vTXixrgVqwI7vuR9V9 WJGKIHMLwr0EEBYKAG8Fgl40v4AJEKrn6ewhKc7DRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/g/wVoInu1E/8bK1/7YXNkf6Oy3XYTGPSgS krY7iEKoFiEE2DMDVOmdtQNymmjUqufp7CEpzsMAAGOWAQDOaqkoaJC0DxZ7QFp/ Ieas97uLpRmCaA+J5Rx/HyfIugEAzTb9pO/MMJCuOl+xgPQZEUj8AzLMSE2kmMnd FQjkLwU= =k3Bb -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots/a2-priv.pgp000064400000000000000000000015561046102023000212550ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A6D2 F50B 1C95 44A7 17B7 6253 95FD 89DA 7093 B735 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdA9I6pO5e60YHcMDX6592WxGYG4YxfDvdaMobF zj3rEd4AAQDrrJjwCBhtR3p7AxCW/frOXaBhwOXG3EgClBQ2YvWQFxAiwsALBB8W CgB9BYJeC+EAAwsJBwkQlf2J2nCTtzVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JndFyX5EKOHSj8fl9AtGRAhgy0pAVN1AixUrEQ2L2sdqcD FQoIApsBAh4BFiEEptL1CxyVRKcXt2JTlf2J2nCTtzUAAICAAP9LPp0XUIHLJZge EEfDruIBZqT5WcdVTM8gihEIEyAORgEAiJ0Sr1ue14B5sU5qSX3n3hZbyU0ChMSs WOVoKEJluQPNEDxhMkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkHCRCV /YnacJO3NUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme5 Vf4YBrIiXLPCLkm+2LbKmjci89c4nnlQYIhJbDfIJwMVCggCmQECmwECHgEWIQSm 0vULHJVEpxe3YlOV/YnacJO3NQAA1fQA/joxDNEkNPlI2xEaf7zK4GGQtO7b5uY9 OyZrC8IDegwdAQCFz+USdzWRZcHurMTDCiil9SU4OL15sF1Jr5KeuVflAQ== =wT8Q -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots/a2.pgp000064400000000000000000000017461046102023000203000ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdA9I6pO5e60YHcMDX6592WxGYG4YxfDvdaMobF zj3rEd7CwAsEHxYKAH0Fgl4L4QADCwkHCRCV/YnacJO3NUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd0XJfkQo4dKPx+X0C0ZECGDLSkBU3U CLFSsRDYvax2pwMVCggCmwECHgEWIQSm0vULHJVEpxe3YlOV/YnacJO3NQAAgIAA /0s+nRdQgcslmB4QR8Ou4gFmpPlZx1VMzyCKEQgTIA5GAQCInRKvW57XgHmxTmpJ fefeFlvJTQKExKxY5WgoQmW5A80QPGEyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC XgvhAAMLCQcJEJX9idpwk7c1RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ7lV/hgGsiJcs8IuSb7YtsqaNyLz1zieeVBgiElsN8gnAxUKCAKZ AQKbAQIeARYhBKbS9QsclUSnF7diU5X9idpwk7c1AADV9AD+OjEM0SQ0+UjbERp/ vMrgYZC07tvm5j07JmsLwgN6DB0BAIXP5RJ3NZFlwe6sxMMKKKX1JTg4vXmwXUmv kp65V+UBwr0EEBYKAG8Fgl40v4AJEKrn6ewhKc7DRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2ocUzyGV+9NvVOIQFYMXJY+E8EW1izBwUCw VBpSsmbTFiEE2DMDVOmdtQNymmjUqufp7CEpzsMAAGUjAP4o9Ul06LL6Sy7BRaP6 xHBa1MbtmsWkACdY1gzBb776uAEA9z5aRux0IvwfzpSCgyaBiTvtMNpXSj241o3x dwnt8QA= =dK4b -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots/a3-priv.pgp000064400000000000000000000015561046102023000212560ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: AFDD 8AEC D999 F5CD C702 7B23 EECC 4F0E A03A 5F35 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAB7agcZ94cKzmaSkc11/0WLzwsOCNy4e5YY93 4wUzv6cAAP9spIONmvhZ2A0kaq7PLNaX3DlXC/nsDaV5979xxDPYRxJXwsALBB8W CgB9BYJeC+EAAwsJBwkQ7sxPDqA6XzVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnU+4XqoPgS7Oj9y78IedecQXwsW6h5ctZKo2WrlzreT4D FQoIApsBAh4BFiEEr92K7NmZ9c3HAnsj7sxPDqA6XzUAAJinAQD5BN5XUt8v8jJM J6CkdeZPnFk6Wh5Jf8r9OVlz9Rg18AD/RALGVmUkBlEweAp4LCP7lESBtlPVjk1C CJlOp3hfmgHNEDxhM0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkHCRDu zE8OoDpfNUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf1 31wcALU/1HtGCx8qRdVFaojao7uXexGi7DAqsImGCAMVCggCmQECmwECHgEWIQSv 3Yrs2Zn1zccCeyPuzE8OoDpfNQAA3dsA/i5N371rF14oHp7NYocUWlKwzXdwGGOz 0smM2nwUzwlEAP0R3rohpkilfFBcC10wR4QMn/I08ZeaZuQlkyFx8r8uAQ== =4PZE -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots/a3.pgp000064400000000000000000000017461046102023000203010ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAB7agcZ94cKzmaSkc11/0WLzwsOCNy4e5YY93 4wUzv6fCwAsEHxYKAH0Fgl4L4QADCwkHCRDuzE8OoDpfNUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdT7heqg+BLs6P3Lvwh515xBfCxbqHl y1kqjZauXOt5PgMVCggCmwECHgEWIQSv3Yrs2Zn1zccCeyPuzE8OoDpfNQAAmKcB APkE3ldS3y/yMkwnoKR15k+cWTpaHkl/yv05WXP1GDXwAP9EAsZWZSQGUTB4Cngs I/uURIG2U9WOTUIImU6neF+aAc0QPGEzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC XgvhAAMLCQcJEO7MTw6gOl81RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ/XfXBwAtT/Ue0YLHypF1UVqiNqju5d7EaLsMCqwiYYIAxUKCAKZ AQKbAQIeARYhBK/diuzZmfXNxwJ7I+7MTw6gOl81AADd2wD+Lk3fvWsXXigens1i hxRaUrDNd3AYY7PSyYzafBTPCUQA/RHeuiGmSKV8UFwLXTBHhAyf8jTxl5pm5CWT IXHyvy4Bwr0EEBYKAG8Fgl40v4AJEKrn6ewhKc7DRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+7HsaDw+yjyf0wJnHVYo8FV47uPT/KfCzNp XOF34I3XFiEE2DMDVOmdtQNymmjUqufp7CEpzsMAALfQAP92UBvZ7Vd+gONZJz2Z sdPIO3Kbyp6vGWji1jJC/O9O3wD/T8S4ALBvVCthWT8AN1yfvUzHOMl6gM0MTysh uA5X0Ao= =srHs -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots/d-priv.pgp000064400000000000000000000015511046102023000211710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BB03 33A9 8A05 430F F6A7 84A7 06D4 74BF 36A3 D4F9 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAmmLIsk7qu1r/h7chIjkEBZRbjM195krY8qYt H5ftmH0AAQCgYujK69WvjK5EUNvtm4d33b5CdClG9oJz9o2dRzo7ShIkwsALBB8W CgB9BYJeC+EAAwsJBwkQBtR0vzaj1PlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnhpg/VZ2BYI8b/nicfk7c8o1FtSpfwT9eBUFVF9a3bb0D FQoIApsBAh4BFiEEuwMzqYoFQw/2p4SnBtR0vzaj1PkAAPufAPsEjZpDrFhO9qIW 8M9gMyJVnzEHpf3sq07n7NtyZAmkCwEAlcD1jR0SffMCce5Amvv3/HgOQfMvJSig eUQojphKQQvNDzxkQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCXgvhAAMLCQcJEAbU dL82o9T5RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzvP hTkrlDFsbL9EfvwVDA/LNqRl0xA0CyVO+sZ1n7hMAxUKCAKZAQKbAQIeARYhBLsD M6mKBUMP9qeEpwbUdL82o9T5AAD2PQEArxTDat5a5Oj/fEkDXXYvXGkw+WeftySo bwRav9OsyRoBAKJwfVlhHbVgC2lhwBjjAMfryuO98NabWSgVTnvrSSIO =S0K1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots/d.pgp000064400000000000000000000027521046102023000202170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAmmLIsk7qu1r/h7chIjkEBZRbjM195krY8qYt H5ftmH3CwAsEHxYKAH0Fgl4L4QADCwkHCRAG1HS/NqPU+UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeGmD9VnYFgjxv+eJx+TtzyjUW1Kl/B P14FQVUX1rdtvQMVCggCmwECHgEWIQS7AzOpigVDD/anhKcG1HS/NqPU+QAA+58A +wSNmkOsWE72ohbwz2AzIlWfMQel/eyrTufs23JkCaQLAQCVwPWNHRJ98wJx7kCa +/f8eA5B8y8lKKB5RCiOmEpBC80PPGRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJe C+EAAwsJBwkQBtR0vzaj1PlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnO8+FOSuUMWxsv0R+/BUMD8s2pGXTEDQLJU76xnWfuEwDFQoIApkB ApsBAh4BFiEEuwMzqYoFQw/2p4SnBtR0vzaj1PkAAPY9AQCvFMNq3lrk6P98SQNd di9caTD5Z5+3JKhvBFq/06zJGgEAonB9WWEdtWALaWHAGOMAx+vK473w1ptZKBVO e+tJIg7CvQQQFgoAbwWCXjS/gAkQ7sxPDqA6XzVHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jnka4cfTm4OAt8fRtATIOy3qu8ESZxJA/cBH+Z DQl/V4QWIQSv3Yrs2Zn1zccCeyPuzE8OoDpfNQAAHMABAIgwupgj5z+GEU8tGdMo J6OJJ/xMRxsMF046wNvCfmkSAQCdwSkYtsLb0lDR/Fa836tl61ln325OS06VHg+Z cbo7DMK9BBAWCgBvBYJeNL+ACRBETUwPUV0mmkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmeXorz3cfCZB9Tp7I/kCPstEmj7Aa4oCZvMvn0y 7ob+4xYhBIBmbt0hoAjUZyQ+R0RNTA9RXSaaAABDMQEArasCTRsEUzUnwcImIhYG mEKJ0od/hNcBnK5XcTao0NkA/2okHAZTE00AV09CfDwwGzf4knKFl8+3fBAFpjw1 4zkHwr0EEBYKAG8Fgl40v4AJEJX9idpwk7c1RxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ/H9VxUl5z5FVN7uxu0WGBcnapYwsSKO33rleF9K s4NHFiEEptL1CxyVRKcXt2JTlf2J2nCTtzUAAK4eAQDbUjPiVMjVn/o0GFZdNBvf LY6Gnph+gWSe0mHbwjbvvgEA/GwDrTuxyS9cK8B29mIinODgpFuzMA6fraXEDFS1 Ngs= =veDY -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots/root-priv.pgp000064400000000000000000000015601046102023000217310ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D833 0354 E99D B503 729A 68D4 AAE7 E9EC 2129 CEC3 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAgU8rVR2HBXKnOyHNbMpHqOIBAnm8iNAyJwL9 jAvNe+gAAQC20PhX5NmVz/ik5cCk9V7hTfaWO+yhcz5ueZGGxxS4UxRGwsALBB8W CgB9BYJeC+EAAwsJBwkQqufp7CEpzsNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnVu9W3vZ06sDDugRogefek8jprAApEZqMhYwNvYjRDGwD FQoIApsBAh4BFiEE2DMDVOmdtQNymmjUqufp7CEpzsMAAHjFAP0dVtafx0HGzhtv oEMwWMtLWz8HeEZI8A6U9EKj/5a9IwD+KGLs0v9xtGDr9QJJqtjta8wW9o4rlK6Y 0nwL7I2yzgrNEjxyb290QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCXgvhAAMLCQcJ EKrn6ewhKc7DRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZwTCaeXiU8rKmUt7AHEIJ1lqvitAFgeXpJEosrJq5tabAxUKCAKZAQKbAQIeARYh BNgzA1TpnbUDcppo1Krn6ewhKc7DAABemgD/WwxtXl0FxCnZPB4UnLPMEQzbUww6 N/L2YBX36wZFmFMBAOa66X5RkQP1qhQfz49NeEq33xa17MA0Lt3cQvMtzLoF =HyDQ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots/root.pgp000064400000000000000000000014761046102023000207610ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: D833 0354 E99D B503 729A 68D4 AAE7 E9EC 2129 CEC3 Comment: xjMEXgvhABYJKwYBBAHaRw8BAQdAgU8rVR2HBXKnOyHNbMpHqOIBAnm8iNAyJwL9 jAvNe+jCwAsEHxYKAH0Fgl4L4QADCwkHCRCq5+nsISnOw0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdW71be9nTqwMO6BGiB596TyOmsACkR moyFjA29iNEMbAMVCggCmwECHgEWIQTYMwNU6Z21A3KaaNSq5+nsISnOwwAAeMUA /R1W1p/HQcbOG2+gQzBYy0tbPwd4RkjwDpT0QqP/lr0jAP4oYuzS/3G0YOv1Akmq 2O1rzBb2jiuUrpjSfAvsjbLOCs0SPHJvb3RAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJeC+EAAwsJBwkQqufp7CEpzsNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnBMJp5eJTysqZS3sAcQgnWWq+K0AWB5ekkSiysmrm1psDFQoI ApkBApsBAh4BFiEE2DMDVOmdtQNymmjUqufp7CEpzsMAAF6aAP9bDG1eXQXEKdk8 HhScs8wRDNtTDDo38vZgFffrBkWYUwEA5rrpflGRA/WqFB/Pj014SrffFrXswDQu 3dxC8y3MugU= =8JBm -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots/target-priv.pgp000064400000000000000000000015661046102023000222420ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 30A1 85EA 9319 FF1D 0BCB DBFC F2CD 31DC C3DC AA02 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAOZf1PMJnbUO+nQT60QRUhTeBbKdySIPjNgD7 GNRgv+sAAP4ikZOt16ltlmcCt/jWfN8DQobTOxi0NMFMywKLj0QzQhBDwsALBB8W CgB9BYJeC+EAAwsJBwkQ8s0x3MPcqgJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJegBN8xnLJVinaD7kEs3Yxnz6liKG8RRdIxqgrq+sJsD FQoIApsBAh4BFiEEMKGF6pMZ/x0Ly9v88s0x3MPcqgIAAPvsAQD0qVvdpzGNtkWi TkfCFS7DSFrtNc90qnTMUUEMwtmSIgD/aoHw+DHJwqZvLxJXIK6nOnA4kGGKFH3P 5vddA6/qLgzNFDx0YXJnZXRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJeC+EAAwsJ BwkQ8s0x3MPcqgJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnhlzEqhMLFMQ9/TF1ttCg1NOqE/ga7XfG5ckAQxVGuWkDFQoIApkBApsBAh4B FiEEMKGF6pMZ/x0Ly9v88s0x3MPcqgIAALWzAQDBl/+9odGJMzHAwoaLjgWG35DE HGpO6m/XBEtqqX55KQD/dcMNFa4/VqFXzUgy9Peh5g9jVGxn0AxhguTPVffj8Ao= =/9wS -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots/target.pgp000064400000000000000000000017521046102023000212610ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAOZf1PMJnbUO+nQT60QRUhTeBbKdySIPjNgD7 GNRgv+vCwAsEHxYKAH0Fgl4L4QADCwkHCRDyzTHcw9yqAkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcl6AE3zGcslWKdoPuQSzdjGfPqWIob xFF0jGqCur6wmwMVCggCmwECHgEWIQQwoYXqkxn/HQvL2/zyzTHcw9yqAgAA++wB APSpW92nMY22RaJOR8IVLsNIWu01z3SqdMxRQQzC2ZIiAP9qgfD4McnCpm8vElcg rqc6cDiQYYoUfc/m910Dr+ouDM0UPHRhcmdldEBleGFtcGxlLm9yZz7CwA4EExYK AIAFgl4L4QADCwkHCRDyzTHcw9yqAkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmeGXMSqEwsUxD39MXW20KDU06oT+Brtd8blyQBDFUa5aQMV CggCmQECmwECHgEWIQQwoYXqkxn/HQvL2/zyzTHcw9yqAgAAtbMBAMGX/72h0Ykz McDChouOBYbfkMQcak7qb9cES2qpfnkpAP91ww0Vrj9WoVfNSDL096HmD2NUbGfQ DGGC5M9V9+PwCsK9BBAWCgBvBYJeNL+ACRAG1HS/NqPU+UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdrK6t8mxPYRdWQz0IqQ4oaMXF7gzDB pd/znddCEVA2phYhBLsDM6mKBUMP9qeEpwbUdL82o9T5AAAIxgD+Kk7JShc8WpLl sUdwmNlaRlz5pYmvxgR9rQvqhkANCQcA/1P1X3VK5lnIQSrsOe7WEbITG9lNuXKU 2Uz/4xMB1S4C =nR1h -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots.pgp000064400000000000000000000133301046102023000177660ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAOZf1PMJnbUO+nQT60QRUhTeBbKdySIPjNgD7 GNRgv+vCwAsEHxYKAH0Fgl4L4QADCwkHCRDyzTHcw9yqAkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcl6AE3zGcslWKdoPuQSzdjGfPqWIob xFF0jGqCur6wmwMVCggCmwECHgEWIQQwoYXqkxn/HQvL2/zyzTHcw9yqAgAA++wB APSpW92nMY22RaJOR8IVLsNIWu01z3SqdMxRQQzC2ZIiAP9qgfD4McnCpm8vElcg rqc6cDiQYYoUfc/m910Dr+ouDM0UPHRhcmdldEBleGFtcGxlLm9yZz7CwA4EExYK AIAFgl4L4QADCwkHCRDyzTHcw9yqAkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmeGXMSqEwsUxD39MXW20KDU06oT+Brtd8blyQBDFUa5aQMV CggCmQECmwECHgEWIQQwoYXqkxn/HQvL2/zyzTHcw9yqAgAAtbMBAMGX/72h0Ykz McDChouOBYbfkMQcak7qb9cES2qpfnkpAP91ww0Vrj9WoVfNSDL096HmD2NUbGfQ DGGC5M9V9+PwCsK9BBAWCgBvBYJeNL+ACRAG1HS/NqPU+UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdrK6t8mxPYRdWQz0IqQ4oaMXF7gzDB pd/znddCEVA2phYhBLsDM6mKBUMP9qeEpwbUdL82o9T5AAAIxgD+Kk7JShc8WpLl sUdwmNlaRlz5pYmvxgR9rQvqhkANCQcA/1P1X3VK5lnIQSrsOe7WEbITG9lNuXKU 2Uz/4xMB1S4CxjMEXgvhABYJKwYBBAHaRw8BAQdA9WkYMaFswUsX3opdua5gBAhP criyaNSif5tCF5jHdrHCwAsEHxYKAH0Fgl4L4QADCwkHCRBETUwPUV0mmkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfjvR1RDo8m0ZLB3AQK a/YtJb51f+AnUWM1oNBFDzIUygMVCggCmwECHgEWIQSAZm7dIaAI1GckPkdETUwP UV0mmgAAcCAA/R9F7Y0GYylITc1ECNLMaIcmwOc8yaXrn+YDiDHkuu6UAP0Vubrz Q/DCkEDNLbGsPP+lMe6bPFtYKAVbEoMbVzIqBM0QPGExQGV4YW1wbGUub3JnPsLA DgQTFgoAgAWCXgvhAAMLCQcJEERNTA9RXSaaRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ2beqMdbitoXz+VKmVw7V6ZIv4TUSdmTcyWmeKo7 nTyFAxUKCAKZAQKbAQIeARYhBIBmbt0hoAjUZyQ+R0RNTA9RXSaaAAAqSgEA36ir zWI/681kFX74wg2C6M7sCg8K85+0ImQkg+e3sIwBAPhidPbXY9gWqAgZM9vTXixr gVqwI7vuR9V9WJGKIHMLwr0EEBYKAG8Fgl40v4AJEKrn6ewhKc7DRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/g/wVoInu1E/8bK1/7YXNkf 6Oy3XYTGPSgSkrY7iEKoFiEE2DMDVOmdtQNymmjUqufp7CEpzsMAAGOWAQDOaqko aJC0DxZ7QFp/Ieas97uLpRmCaA+J5Rx/HyfIugEAzTb9pO/MMJCuOl+xgPQZEUj8 AzLMSE2kmMndFQjkLwXGMwReC+EAFgkrBgEEAdpHDwEBB0D0jqk7l7rRgdwwNfrn 3ZbEZgbhjF8O91oyhsXOPesR3sLACwQfFgoAfQWCXgvhAAMLCQcJEJX9idpwk7c1 RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3Rcl+RCjh0o /H5fQLRkQIYMtKQFTdQIsVKxENi9rHanAxUKCAKbAQIeARYhBKbS9QsclUSnF7di U5X9idpwk7c1AACAgAD/Sz6dF1CByyWYHhBHw67iAWak+VnHVUzPIIoRCBMgDkYB AIidEq9bnteAebFOakl9594WW8lNAoTErFjlaChCZbkDzRA8YTJAZXhhbXBsZS5v cmc+wsAOBBMWCgCABYJeC+EAAwsJBwkQlf2J2nCTtzVHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnuVX+GAayIlyzwi5Jvti2ypo3IvPXOJ55 UGCISWw3yCcDFQoIApkBApsBAh4BFiEEptL1CxyVRKcXt2JTlf2J2nCTtzUAANX0 AP46MQzRJDT5SNsRGn+8yuBhkLTu2+bmPTsmawvCA3oMHQEAhc/lEnc1kWXB7qzE wwoopfUlODi9ebBdSa+SnrlX5QHCvQQQFgoAbwWCXjS/gAkQqufp7CEpzsNHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnahxTPIZX7029U4hA Vgxclj4TwRbWLMHBQLBUGlKyZtMWIQTYMwNU6Z21A3KaaNSq5+nsISnOwwAAZSMA /ij1SXTosvpLLsFFo/rEcFrUxu2axaQAJ1jWDMFvvvq4AQD3PlpG7HQi/B/OlIKD JoGJO+0w2ldKPbjWjfF3Ce3xAMYzBF4L4QAWCSsGAQQB2kcPAQEHQAe2oHGfeHCs 5mkpHNdf9Fi88LDgjcuHuWGPd+MFM7+nwsALBB8WCgB9BYJeC+EAAwsJBwkQ7sxP DqA6XzVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnU+4X qoPgS7Oj9y78IedecQXwsW6h5ctZKo2WrlzreT4DFQoIApsBAh4BFiEEr92K7NmZ 9c3HAnsj7sxPDqA6XzUAAJinAQD5BN5XUt8v8jJMJ6CkdeZPnFk6Wh5Jf8r9OVlz 9Rg18AD/RALGVmUkBlEweAp4LCP7lESBtlPVjk1CCJlOp3hfmgHNEDxhM0BleGFt cGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkHCRDuzE8OoDpfNUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf131wcALU/1HtGCx8qRdVFaoja o7uXexGi7DAqsImGCAMVCggCmQECmwECHgEWIQSv3Yrs2Zn1zccCeyPuzE8OoDpf NQAA3dsA/i5N371rF14oHp7NYocUWlKwzXdwGGOz0smM2nwUzwlEAP0R3rohpkil fFBcC10wR4QMn/I08ZeaZuQlkyFx8r8uAcK9BBAWCgBvBYJeNL+ACRCq5+nsISnO w0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfux7Gg8Pso 8n9MCZx1WKPBVeO7j0/ynwszaVzhd+CN1xYhBNgzA1TpnbUDcppo1Krn6ewhKc7D AAC30AD/dlAb2e1XfoDjWSc9mbHTyDtym8qerxlo4tYyQvzvTt8A/0/EuACwb1Qr YVk/ADdcn71MxzjJeoDNDE8rIbgOV9AKxjMEXgvhABYJKwYBBAHaRw8BAQdAmmLI sk7qu1r/h7chIjkEBZRbjM195krY8qYtH5ftmH3CwAsEHxYKAH0Fgl4L4QADCwkH CRAG1HS/NqPU+UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeGmD9VnYFgjxv+eJx+TtzyjUW1Kl/BP14FQVUX1rdtvQMVCggCmwECHgEWIQS7 AzOpigVDD/anhKcG1HS/NqPU+QAA+58A+wSNmkOsWE72ohbwz2AzIlWfMQel/eyr Tufs23JkCaQLAQCVwPWNHRJ98wJx7kCa+/f8eA5B8y8lKKB5RCiOmEpBC80PPGRA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJeC+EAAwsJBwkQBtR0vzaj1PlHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnO8+FOSuUMWxsv0R+/BUM D8s2pGXTEDQLJU76xnWfuEwDFQoIApkBApsBAh4BFiEEuwMzqYoFQw/2p4SnBtR0 vzaj1PkAAPY9AQCvFMNq3lrk6P98SQNddi9caTD5Z5+3JKhvBFq/06zJGgEAonB9 WWEdtWALaWHAGOMAx+vK473w1ptZKBVOe+tJIg7CvQQQFgoAbwWCXjS/gAkQ7sxP DqA6XzVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnka4c fTm4OAt8fRtATIOy3qu8ESZxJA/cBH+ZDQl/V4QWIQSv3Yrs2Zn1zccCeyPuzE8O oDpfNQAAHMABAIgwupgj5z+GEU8tGdMoJ6OJJ/xMRxsMF046wNvCfmkSAQCdwSkY tsLb0lDR/Fa836tl61ln325OS06VHg+Zcbo7DMK9BBAWCgBvBYJeNL+ACRBETUwP UV0mmkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeXorz3 cfCZB9Tp7I/kCPstEmj7Aa4oCZvMvn0y7ob+4xYhBIBmbt0hoAjUZyQ+R0RNTA9R XSaaAABDMQEArasCTRsEUzUnwcImIhYGmEKJ0od/hNcBnK5XcTao0NkA/2okHAZT E00AV09CfDwwGzf4knKFl8+3fBAFpjw14zkHwr0EEBYKAG8Fgl40v4AJEJX9idpw k7c1RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/H9VxUl 5z5FVN7uxu0WGBcnapYwsSKO33rleF9Ks4NHFiEEptL1CxyVRKcXt2JTlf2J2nCT tzUAAK4eAQDbUjPiVMjVn/o0GFZdNBvfLY6Gnph+gWSe0mHbwjbvvgEA/GwDrTux yS9cK8B29mIinODgpFuzMA6fraXEDFS1NgvGMwReC+EAFgkrBgEEAdpHDwEBB0CB TytVHYcFcqc7Ic1sykeo4gECebyI0DInAv2MC8176MLACwQfFgoAfQWCXgvhAAML CQcJEKrn6ewhKc7DRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ1bvVt72dOrAw7oEaIHn3pPI6awAKRGajIWMDb2I0QxsAxUKCAKbAQIeARYh BNgzA1TpnbUDcppo1Krn6ewhKc7DAAB4xQD9HVbWn8dBxs4bb6BDMFjLS1s/B3hG SPAOlPRCo/+WvSMA/ihi7NL/cbRg6/UCSarY7WvMFvaOK5SumNJ8C+yNss4KzRI8 cm9vdEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkHCRCq5+nsISnOw0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcEwmnl4lPKyplL ewBxCCdZar4rQBYHl6SRKLKyaubWmwMVCggCmQECmwECHgEWIQTYMwNU6Z21A3Ka aNSq5+nsISnOwwAAXpoA/1sMbV5dBcQp2TweFJyzzBEM21MMOjfy9mAV9+sGRZhT AQDmuul+UZED9aoUH8+PTXhKt98WtezANC7d3ELzLcy6BQ== =Y68O -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/gpg-trustroots.sh000075500000000000000000000005651046102023000176230ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=gpg-trustroots ${@:+"$@"} t0=20200101 t1=20200201 t2=20200301 t3=20200401 key -t $t0 root key -t $t0 a1 key -t $t0 a2 key -t $t0 a3 key -t $t0 d key -t $t0 target certify -t $t1 root a1 certify -t $t1 root a2 certify -t $t1 root a3 certify -t $t1 a1 d certify -t $t1 a2 d certify -t $t1 a3 d certify -t $t1 d target finish sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u1-priv.pgp000064400000000000000000000015561046102023000221240ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B557 8627 80A9 7676 CC32 F4BB 1491 A9C2 BDE6 F1DC Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdASQtnhkcdeyDg3qA9y88D4/AQWrAqfwmh+Nbd wwY6gwsAAQDS8xfxcZ95mPU9KcFAg17Yq9EwVKaSJDgIbbtWGPwyaA/MwsALBB8W CgB9BYJh8/avAwsJBwkQFJGpwr3m8dxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnSXLr5Pjxfz1zuQgCc5lgnkdKhwMmf5wXruDpMxQvcPkD FQoIApsBAh4BFiEEtVeGJ4CpdnbMMvS7FJGpwr3m8dwAAHfDAQCqDtFqGa+HMk2D lVi9tpXDPNtAfupJDdeaf38yDUHb8wEA0P6Ri6pjR42QO2wnxJOCS58Rw3tz6x1r ZlreSYir7ArNEDx1MUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9q8DCwkHCRAU kanCvebx3EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfq LdUBnU3siuEE+AEwXSdf+7uVfxK3CQNNgJvh3sl0bgMVCggCmQECmwECHgEWIQS1 V4YngKl2dswy9LsUkanCvebx3AAA3LoA/iCNtGELz4l3Q8Wgp5dkCG03ivUMmSQd IhLVwUBK7N/IAQC8m/8geKFfHF39y+dWhZKVV6Xc6a2bN1TloGR09kvFDw== =X0EN -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u1.pgp000064400000000000000000000014701046102023000211410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: B557 8627 80A9 7676 CC32 F4BB 1491 A9C2 BDE6 F1DC Comment: xjMEYfP2rxYJKwYBBAHaRw8BAQdASQtnhkcdeyDg3qA9y88D4/AQWrAqfwmh+Nbd wwY6gwvCwAsEHxYKAH0FgmHz9q8DCwkHCRAUkanCvebx3EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJcuvk+PF/PXO5CAJzmWCeR0qHAyZ/ nBeu4OkzFC9w+QMVCggCmwECHgEWIQS1V4YngKl2dswy9LsUkanCvebx3AAAd8MB AKoO0WoZr4cyTYOVWL22lcM820B+6kkN15p/fzINQdvzAQDQ/pGLqmNHjZA7bCfE k4JLnxHDe3PrHWtmWt5JiKvsCs0QPHUxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YfP2rwMLCQcJEBSRqcK95vHcRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ+ot1QGdTeyK4QT4ATBdJ1/7u5V/ErcJA02Am+HeyXRuAxUKCAKZ AQKbAQIeARYhBLVXhieAqXZ2zDL0uxSRqcK95vHcAADcugD+II20YQvPiXdDxaCn l2QIbTeK9QyZJB0iEtXBQErs38gBALyb/yB4oV8cXf3L51aFkpVXpdzprZs3VOWg ZHT2S8UP =93l4 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u10-priv.pgp000064400000000000000000000015571046102023000222050ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 12C9 2685 CA2A 867B 93FD 7976 2B2D 56CF 0B94 304E Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdA5dHBDkjwLCS3cFkX9fKB0Nj2+7ZCa5v9W37X mbKj6OMAAP0ccjRw9gga7cFmqL75GhTi1e+9rZdvbz1olywIvuotZhEYwsALBB8W CgB9BYJh8/avAwsJBwkQKy1WzwuUME5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnSwWVQq2ZOJZxGXILJZG/Tq8cD5Yr4JE0jEu046Zio6YD FQoIApsBAh4BFiEEEskmhcoqhnuT/Xl2Ky1WzwuUME4AALJHAP9Z+LkqRhUjpuy9 DuyopDUzRPSWagoc3BACs9ZWuz4+KwEA4333GPbeQ3ENmWMFxA7upWnNBb8EoVOv xCQhKoskdgbNETx1MTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/avAwsJBwkQ Ky1WzwuUME5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn ICBzv7Ql3ERDC1fKijNGH4a9FsQoZfXg3AoRpypT6DYDFQoIApkBApsBAh4BFiEE EskmhcoqhnuT/Xl2Ky1WzwuUME4AAFyVAQDU0q3PP1Duzb4dSh8C/edvWQqhb/lE deYoECFhNJeCQwD/e/5P7gx2D/Tcziy40fm5yz+pUPU2iZvRwkyK60AqLws= =CJM8 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u10.pgp000064400000000000000000000017561046102023000212300ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2rxYJKwYBBAHaRw8BAQdA5dHBDkjwLCS3cFkX9fKB0Nj2+7ZCa5v9W37X mbKj6OPCwAsEHxYKAH0FgmHz9q8DCwkHCRArLVbPC5QwTkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdLBZVCrZk4lnEZcgslkb9OrxwPlivg kTSMS7TjpmKjpgMVCggCmwECHgEWIQQSySaFyiqGe5P9eXYrLVbPC5QwTgAAskcA /1n4uSpGFSOm7L0O7KikNTNE9JZqChzcEAKz1la7Pj4rAQDjffcY9t5DcQ2ZYwXE Du6lac0FvwShU6/EJCEqiyR2Bs0RPHUxMEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9q8DCwkHCRArLVbPC5QwTkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcgIHO/tCXcREMLV8qKM0Yfhr0WxChl9eDcChGnKlPoNgMVCggC mQECmwECHgEWIQQSySaFyiqGe5P9eXYrLVbPC5QwTgAAXJUBANTSrc8/UO7Nvh1K HwL9529ZCqFv+UR15igQIWE0l4JDAP97/k/uDHYP9NzOLLjR+bnLP6lQ9TaJm9HC TIrrQCovC8LAAQQQFgoAcwWCYfQI5wOF/3gJEOkXvCTS1T95RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/JGss+9J+AZ+Aka2eLRPKoKINJO ls2x49VRJtcoZn4PFiEEf5RSRKIKdOG6UL5z6Re8JNLVP3kAAJ43AP4ojqa8c07K 75Uyi7SxQ0SWdmfRKYAKK5uA+x4h6MbaKAEA9LaRbVDjpEOEiMRbuYGswNR0V5Pl W0C6j4UTO3aqrww= =vwFe -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u100-priv.pgp000064400000000000000000000015601046102023000222570ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: AF87 AF11 83FB 3E93 70D5 09CE 4E25 5380 D5F3 A8D5 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAEyQbuBCIZDShbhSf+yvzAmC4nDSNxcStNtJE d3+igT0AAP91W4y0a/EuIE6SEBRWsX4ZUXpu0D1D/ZwXL7O1fLAtYQ7lwsALBB8W CgB9BYJh8/a0AwsJBwkQTiVTgNXzqNVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnQgNJgtceXERc3gKOv7l0iFZ6IJ4uDR809h94vtR2px8D FQoIApsBAh4BFiEEr4evEYP7PpNw1QnOTiVTgNXzqNUAALfqAQDRnwc3DjPZMCnx DTcvOj+KQKJI1ysMEIxvkPdj+9aYqgD8CbHsSkmlw58+SZfWnkyw+CLGYLOS/1JT P14LhN2oWgbNEjx1MTAwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EE4lU4DV86jVRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZxpUfm24CFPW7IlZpqq7Xa5kzfyCg8qnX7NtiwPEbn7HAxUKCAKZAQKbAQIeARYh BK+HrxGD+z6TcNUJzk4lU4DV86jVAABQfwEAiewknWnp7o9VKAepVubNfSLMnnwt UpJrgP5w6eCUza8A/0GiMF8ySHW7mGLjp7aWEH+DS3c0oBK2sID0rcfgnXcJ =3jfe -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u100.pgp000064400000000000000000000017561046102023000213100ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAEyQbuBCIZDShbhSf+yvzAmC4nDSNxcStNtJE d3+igT3CwAsEHxYKAH0FgmHz9rQDCwkHCRBOJVOA1fOo1UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdCA0mC1x5cRFzeAo6/uXSIVnogni4N HzT2H3i+1HanHwMVCggCmwECHgEWIQSvh68Rg/s+k3DVCc5OJVOA1fOo1QAAt+oB ANGfBzcOM9kwKfENNy86P4pAokjXKwwQjG+Q92P71piqAPwJsexKSaXDnz5Jl9ae TLD4IsZgs5L/UlM/XguE3ahaBs0SPHUxMDBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQTiVTgNXzqNVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnGlR+bbgIU9bsiVmmqrtdrmTN/IKDyqdfs22LA8RufscDFQoI ApkBApsBAh4BFiEEr4evEYP7PpNw1QnOTiVTgNXzqNUAAFB/AQCJ7CSdaenuj1Uo B6lW5s19IsyefC1SkmuA/nDp4JTNrwD/QaIwXzJIdbuYYuOntpYQf4NLdzSgEraw gPStx+CddwnCwAEEEBYKAHMFgmH0COoDhf94CRDi2eNQt889ikcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme4GNxpzP760ccqjE7p8Ju65Mv+ u67xkDuPCUncHHycuhYhBChuxdTl0dE25UyZb+LZ41C3zz2KAADmxwEA7cISdfzG 69KdaaRnrd6KeTESFIL/g652a0oivy4/xuQA/3KK/JUU4jpB8t58g1xP65vH/LTe WZOr0N/kBLvzcbsH =4CBm -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u101-priv.pgp000064400000000000000000000015601046102023000222600ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 036F 0956 E343 6BB1 0D03 0C89 241E B37A 3E93 1678 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdANul6Z7QQ3T6Z50bZnGviTSb/uyXID3LDIsap HnIqxz4AAP0YaLACGOEWIC5z7UyQ0k96K/FPz0Pcf5krk1DCJapEPw72wsALBB8W CgB9BYJh8/a0AwsJBwkQJB6zej6TFnhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnDtq8IIp0poGRJGvJN2U+iMdxif3HEqAvfyehxOz+G+8D FQoIApsBAh4BFiEEA28JVuNDa7ENAwyJJB6zej6TFngAAF6mAPsHvlNIIWAaY7ct G9a/+5Z0VpAVHEYsP/hDGKqLmhC6fgD/S0TuDAx8q0tFz6GzGtKgGE6cCUapuLzw KBOrOtcIXArNEjx1MTAxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ ECQes3o+kxZ4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2PyIuszAjfWuOB/fy1YRoRJTbGxdNXXD9VqZv5CxCgbAxUKCAKZAQKbAQIeARYh BANvCVbjQ2uxDQMMiSQes3o+kxZ4AADBJAD/R4Ldc4lT5/S9M21+/D7nHqBns6FD kf/2LSxZO2atCS0A/jrk7GicZXhRGDELXQ6TlxPq20jbxu8Nyva/CFU0f6EH =tEAV -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u101.pgp000064400000000000000000000017561046102023000213110ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdANul6Z7QQ3T6Z50bZnGviTSb/uyXID3LDIsap HnIqxz7CwAsEHxYKAH0FgmHz9rQDCwkHCRAkHrN6PpMWeEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcO2rwginSmgZEka8k3ZT6Ix3GJ/ccS oC9/J6HE7P4b7wMVCggCmwECHgEWIQQDbwlW40NrsQ0DDIkkHrN6PpMWeAAAXqYA +we+U0ghYBpjty0b1r/7lnRWkBUcRiw/+EMYqouaELp+AP9LRO4MDHyrS0XPobMa 0qAYTpwJRqm4vPAoE6s61whcCs0SPHUxMDFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQJB6zej6TFnhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnY/Ii6zMCN9a44H9/LVhGhElNsbF01dcP1Wpm/kLEKBsDFQoI ApkBApsBAh4BFiEEA28JVuNDa7ENAwyJJB6zej6TFngAAMEkAP9Hgt1ziVPn9L0z bX78PuceoGezoUOR//YtLFk7Zq0JLQD+OuTsaJxleFEYMQtdDpOXE+rbSNvG7w3K 9r8IVTR/oQfCwAEEEBYKAHMFgmH0COoDhf94CRBOJVOA1fOo1UcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd/CABSSOqdf9WXgcy+iWYSfIGM rROmQQYxCBi36lHCwRYhBK+HrxGD+z6TcNUJzk4lU4DV86jVAADeeAEAhBja5YAK fyXONqIJq2gPZrClWYl+/QENvdPsD8Om4r8A/RrCNysLT9unewpy5yBDEiknTAd1 WJvXYUIBd2M5HycK =1iWt -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u102-priv.pgp000064400000000000000000000015601046102023000222610ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 33C2 7575 7231 2304 682B DD62 C46C 67D0 99B9 2680 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdA/Z7OKbi6PWqA9IoKc85BADZgCYDD6WtNgBWG SpSZOEMAAP4h2UUcxRQqNEC5srlmjMN7hyHdDqtcy3bmJUXagESxPQ/bwsALBB8W CgB9BYJh8/a0AwsJBwkQxGxn0Jm5JoBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnDqQUvXeUT+pObTC/dFNSuiYmwU+XPp0xV79OLKwBAx8D FQoIApsBAh4BFiEEM8J1dXIxIwRoK91ixGxn0Jm5JoAAAIsJAP9pNxXchJy2D1nm g4YtBRYU/Pqw7SsvQyl9T80FH54nIAEAvXVg5g+zpRVxSlaP70u8QzzY1RQJoS6s JCo5GPO2VQrNEjx1MTAyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EMRsZ9CZuSaARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3BLr2mk3tFW2kn/PEh4vz7IWWqJifb0MGuG4+Uf4DZRAxUKCAKZAQKbAQIeARYh BDPCdXVyMSMEaCvdYsRsZ9CZuSaAAABbVwD/bwpX6X6xRtP7u6w2YI1xfHj9qbXW r5oZ6cBux+wG2lQBAMsVxzXes1OA45JPxXuwi3Q3jWLbcYbcHTqppXgGLi8N =c3NH -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u102.pgp000064400000000000000000000017561046102023000213120ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdA/Z7OKbi6PWqA9IoKc85BADZgCYDD6WtNgBWG SpSZOEPCwAsEHxYKAH0FgmHz9rQDCwkHCRDEbGfQmbkmgEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcOpBS9d5RP6k5tML90U1K6JibBT5c+ nTFXv04srAEDHwMVCggCmwECHgEWIQQzwnV1cjEjBGgr3WLEbGfQmbkmgAAAiwkA /2k3FdyEnLYPWeaDhi0FFhT8+rDtKy9DKX1PzQUfnicgAQC9dWDmD7OlFXFKVo/v S7xDPNjVFAmhLqwkKjkY87ZVCs0SPHUxMDJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQxGxn0Jm5JoBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JncEuvaaTe0VbaSf88SHi/PshZaomJ9vQwa4bj5R/gNlEDFQoI ApkBApsBAh4BFiEEM8J1dXIxIwRoK91ixGxn0Jm5JoAAAFtXAP9vClfpfrFG0/u7 rDZgjXF8eP2ptdavmhnpwG7H7AbaVAEAyxXHNd6zU4Djkk/Fe7CLdDeNYttxhtwd OqmleAYuLw3CwAEEEBYKAHMFgmH0COoDhf94CRAkHrN6PpMWeEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeeUGWOS5h206Z0gb5mD5rS/OW6 pIOUrimta3WYwxwtcxYhBANvCVbjQ2uxDQMMiSQes3o+kxZ4AADdJwEApGwU29Z5 sUc8/SJz96J5+yiL58D4C9Pnx093mjBHlS0A/2C4C8gDpF89v38P1RVhPf2eLeqY 78PR9hAN33u7v+AG =iHIB -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u103-priv.pgp000064400000000000000000000015601046102023000222620ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 47A4 58EC E578 4E7A F11C 2286 AA75 FA9B 8401 E257 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAMLrtpdkXVPlPbnuyfnxJPHR0c31sS6ZI2Q7+ 6brxsc8AAPwIyjY2ozuFBZ1AmRXZD0mXpxaz1yjG/vQ17nW/VOg5Eg/6wsALBB8W CgB9BYJh8/a0AwsJBwkQqnX6m4QB4ldHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn1c1ijBa3W9uVLH5DRB/CNc8UouIVqWAPHZfXYL55qlcD FQoIApsBAh4BFiEER6RY7OV4TnrxHCKGqnX6m4QB4lcAAK74AQDCl170gPWqpWk8 psEKagGuBCL5rrBPK72McuYuBRdD/wD/Sm6pGQAQXrYDG+6rxvFYAkWzMcUQPOs3 jO1jxWrnAg7NEjx1MTAzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EKp1+puEAeJXRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZyEyKn3M1MEbcuWZLjBmSpBE/SRa5gim8jB8EN5yKE7sAxUKCAKZAQKbAQIeARYh BEekWOzleE568Rwihqp1+puEAeJXAADS8QD/ZRclTb7lNYPA2vi3+YpiJCv9Q5bV AttuAX/e2KsudYgBALHBrMunWYTK2CqBccgHH+GlNK4EDvMuShTKkY9ibm4D =4kSn -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u103.pgp000064400000000000000000000017561046102023000213130ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAMLrtpdkXVPlPbnuyfnxJPHR0c31sS6ZI2Q7+ 6brxsc/CwAsEHxYKAH0FgmHz9rQDCwkHCRCqdfqbhAHiV0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfVzWKMFrdb25UsfkNEH8I1zxSi4hWp YA8dl9dgvnmqVwMVCggCmwECHgEWIQRHpFjs5XhOevEcIoaqdfqbhAHiVwAArvgB AMKXXvSA9aqlaTymwQpqAa4EIvmusE8rvYxy5i4FF0P/AP9KbqkZABBetgMb7qvG 8VgCRbMxxRA86zeM7WPFaucCDs0SPHUxMDNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQqnX6m4QB4ldHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnITIqfczUwRty5ZkuMGZKkET9JFrmCKbyMHwQ3nIoTuwDFQoI ApkBApsBAh4BFiEER6RY7OV4TnrxHCKGqnX6m4QB4lcAANLxAP9lFyVNvuU1g8Da +Lf5imIkK/1DltUC224Bf97Yqy51iAEAscGsy6dZhMrYKoFxyAcf4aU0rgQO8y5K FMqRj2JubgPCwAEEEBYKAHMFgmH0COoDhf94CRDEbGfQmbkmgEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdifdtkFF35VEGlWWdS4hs4TE3T i7FQNe7uiddXZXK+LxYhBDPCdXVyMSMEaCvdYsRsZ9CZuSaAAADQTwD/RpsO6cos /fGXeQ5t77iVAWIDOL5QKqGTIrbqPjgJmnIBALVFK17OowlJKJnVARE7wa5p3AYe akB6GrWaKW+CvewF =5lFA -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u104-priv.pgp000064400000000000000000000015601046102023000222630ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4395 0C8B 0B46 693E 9E48 6766 37A9 8A31 CF4B 62AD Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAyycoOuMhsTt8gVGu0ccjRg86pz7NvVwpeefL lk+N8pIAAQDzoHxSj9ZdQlPtKfQ7jljfWPxzplLylTp7b+CBF5CqdhFVwsALBB8W CgB9BYJh8/a0AwsJBwkQN6mKMc9LYq1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JngH+JVYIVtXVcdurTYyUfvsdfmgEWK2fVKE3v3jyjCnoD FQoIApsBAh4BFiEEQ5UMiwtGaT6eSGdmN6mKMc9LYq0AAJ2nAQCj4+1lnZHXeYgw IFdffFe/TMwJfkp864Xk1m3Q/jMw3gD+PNPrl2xtl2aSXf1hoezX8a9/kQHNhD6D iQfZCW00BgLNEjx1MTA0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EDepijHPS2KtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zy4xfSlDz+SXfTv1Qddvyef5T8HTEJoinKZWcSit/5dVAxUKCAKZAQKbAQIeARYh BEOVDIsLRmk+nkhnZjepijHPS2KtAADCKAD+Lc2A6dHC8et9/WNTr7iX+5jPxXrR RZpg3h3Hru352h8A/RkF23xMwXJF9P6EE4wQQLbJayUCYlZG4TDIshlTyJwJ =pcc8 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u104.pgp000064400000000000000000000017561046102023000213140ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAyycoOuMhsTt8gVGu0ccjRg86pz7NvVwpeefL lk+N8pLCwAsEHxYKAH0FgmHz9rQDCwkHCRA3qYoxz0tirUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeAf4lVghW1dVx26tNjJR++x1+aARYr Z9UoTe/ePKMKegMVCggCmwECHgEWIQRDlQyLC0ZpPp5IZ2Y3qYoxz0tirQAAnacB AKPj7WWdkdd5iDAgV198V79MzAl+SnzrheTWbdD+MzDeAP480+uXbG2XZpJd/WGh 7Nfxr3+RAc2EPoOJB9kJbTQGAs0SPHUxMDRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQN6mKMc9LYq1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnLjF9KUPP5Jd9O/VB12/J5/lPwdMQmiKcplZxKK3/l1UDFQoI ApkBApsBAh4BFiEEQ5UMiwtGaT6eSGdmN6mKMc9LYq0AAMIoAP4tzYDp0cLx6339 Y1OvuJf7mM/FetFFmmDeHceu7fnaHwD9GQXbfEzBckX0/oQTjBBAtslrJQJiVkbh MMiyGVPInAnCwAEEEBYKAHMFgmH0COoDhf94CRCqdfqbhAHiV0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdn4UwRyxc/OTDZnuYXjdgkzjAb sjyI9fQzptX/F7kqChYhBEekWOzleE568Rwihqp1+puEAeJXAAD27AD+OpMaxIDr afSI+cCqN0EhBfzde/t6zaNz88Ys5WURcJEBAPLuJk9IC72kLv3RKSYksI93GDMg WcaSvD4DkC598AwB =Y+PQ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u105-priv.pgp000064400000000000000000000015601046102023000222640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A881 4110 05DC CA6A F013 3143 8783 D343 2031 442F Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAduHszPEXDHEAK+qx/WB4rmfDp73mUJcksnxF p/6+YVAAAPwJYqVi+tyuRTtdYkptV/c26qnaQyjAr/7GMACrrDayPxElwsALBB8W CgB9BYJh8/a0AwsJBwkQh4PTQyAxRC9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnn5lh75MK6PDcewTdHxIgZtGJwc7g86Rab8wfwZaBNqMD FQoIApsBAh4BFiEEqIFBEAXcymrwEzFDh4PTQyAxRC8AAHD8AQCAEBb8FUuK/PBr fWBlACTYUZYLZiKyVyuJWKrGoOHJSQD+J5UJKwLAQY7mgoa3KNUVSVlI0aCbv0hu +VrEx9U/JA3NEjx1MTA1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EIeD00MgMUQvRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zxcifb9PMKHdiZGQCaQe+lni5AKd6a8DGsAPFI2SqZx5AxUKCAKZAQKbAQIeARYh BKiBQRAF3Mpq8BMxQ4eD00MgMUQvAACvWwEAiwY6wnDEXGSzd6UMhuWUCW2IgKs0 iCpKdatGfEFHbPQBALfzsrcwIuTFsCykcUBT24h+qXu+fNs2jd4LvbHlAsYL =Ucti -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u105.pgp000064400000000000000000000017561046102023000213150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAduHszPEXDHEAK+qx/WB4rmfDp73mUJcksnxF p/6+YVDCwAsEHxYKAH0FgmHz9rQDCwkHCRCHg9NDIDFEL0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmefmWHvkwro8Nx7BN0fEiBm0YnBzuDz pFpvzB/BloE2owMVCggCmwECHgEWIQSogUEQBdzKavATMUOHg9NDIDFELwAAcPwB AIAQFvwVS4r88Gt9YGUAJNhRlgtmIrJXK4lYqsag4clJAP4nlQkrAsBBjuaChrco 1RVJWUjRoJu/SG75WsTH1T8kDc0SPHUxMDVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQh4PTQyAxRC9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnFyJ9v08wod2JkZAJpB76WeLkAp3prwMawA8UjZKpnHkDFQoI ApkBApsBAh4BFiEEqIFBEAXcymrwEzFDh4PTQyAxRC8AAK9bAQCLBjrCcMRcZLN3 pQyG5ZQJbYiAqzSIKkp1q0Z8QUds9AEAt/OytzAi5MWwLKRxQFPbiH6pe7582zaN 3gu9seUCxgvCwAEEEBYKAHMFgmH0COoDhf94CRA3qYoxz0tirUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeur7ul5vI5PSRWz+UgGloCGYJg +oV5wOqTgeOc/NH4YRYhBEOVDIsLRmk+nkhnZjepijHPS2KtAAD2DAEAhfsyAXIo byUtqWxYuH14qJvScvjl/HSQ744hTHEaOrIA/0YDpim9fQ5R5iymCXih6Ez0elWq pCBORxKs3+oB/oUK =F7F/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u106-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: AA96 AB4A 6A98 A839 6766 21E6 6E75 6674 E8DE 55F3 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdA7NDuxo3SNRk/eag85ZowhrHsbWQl+IioUGEK 2E028EEAAQChQGCHvA5EO5FkdRLFebtQHEZa/nTyH4xm7auLAZ0sbQ5iwsALBB8W CgB9BYJh8/a0AwsJBwkQbnVmdOjeVfNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnjQgJd0t5PUCrXaltMR7ex36emF+o2gZ3HBs2LhXETbsD FQoIApsBAh4BFiEEqparSmqYqDlnZiHmbnVmdOjeVfMAAExSAP4vBnrhK4ZsqZuE 6DBDiDX6MkCVRnIxn86H+4s9FiFyVAEAye00FDAOEHdkYjJn4VJPNpc1nuDmYzlw xi7/ai3/pQXNEjx1MTA2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EG51ZnTo3lXzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z0Y9s4xhH/WfvNLgLcynTexU+3AuDilOd5gGM8mDjEW7AxUKCAKZAQKbAQIeARYh BKqWq0pqmKg5Z2Yh5m51ZnTo3lXzAAAjfgD/d1vEwRbmznDI2qVQvlfGoeRMTs4B U5R5e5O3zDdII0IA/0z62rRupDYtBbf60utVzxKjDeUscroFq7+PrSqbxfAM =Fpi1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u106.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdA7NDuxo3SNRk/eag85ZowhrHsbWQl+IioUGEK 2E028EHCwAsEHxYKAH0FgmHz9rQDCwkHCRBudWZ06N5V80cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeNCAl3S3k9QKtdqW0xHt7Hfp6YX6ja BnccGzYuFcRNuwMVCggCmwECHgEWIQSqlqtKapioOWdmIeZudWZ06N5V8wAATFIA /i8GeuErhmypm4ToMEOINfoyQJVGcjGfzof7iz0WIXJUAQDJ7TQUMA4Qd2RiMmfh Uk82lzWe4OZjOXDGLv9qLf+lBc0SPHUxMDZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQbnVmdOjeVfNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnRj2zjGEf9Z+80uAtzKdN7FT7cC4OKU53mAYzyYOMRbsDFQoI ApkBApsBAh4BFiEEqparSmqYqDlnZiHmbnVmdOjeVfMAACN+AP93W8TBFubOcMja pVC+V8ah5ExOzgFTlHl7k7fMN0gjQgD/TPratG6kNi0Ft/rS61XPEqMN5SxyugWr v4+tKpvF8AzCwAEEEBYKAHMFgmH0COsDhf94CRCHg9NDIDFEL0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfUTigirNgtAn2AGHtNBa5K1YLD g60cslATQnoKe4XkqhYhBKiBQRAF3Mpq8BMxQ4eD00MgMUQvAABFfQD9Fp52H5FF MLdM0oNdE1ONqdtD++44awcsh4rCd3cjSqEA/3/DEKpHun01SOWxd7J3+rDTkV/a E2CWFYw6PqEJPesE =88Je -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u107-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6844 B0D8 AB1D 74A5 7663 1115 7F65 2BC1 82F0 875D Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdASevX5Q2NCTZOkjRjnjDqem76iiwvBDm8+P4u TcFNvTIAAP9EWo+GQ8IWbf67lXydZ/ss68hYRU8SI6rDQ7Ke7hntmRGQwsALBB8W CgB9BYJh8/a0AwsJBwkQf2UrwYLwh11HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnWABVwTY6KiiTPVTxHSPafbKs6gOQPV3YIIE+Uz6bkJED FQoIApsBAh4BFiEEaESw2KsddKV2YxEVf2UrwYLwh10AAEl9AP0XK5LBZcqgCHne dTg8ITS6QWHfC1gzA1fwH7EVl2MnDAEA/TCIci0Xz7jKr3ZH3eniVzSdkpAckQ0K UNUiXGOwDwLNEjx1MTA3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EH9lK8GC8IddRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z1L2yV0aB6y1UXlqWl1yIyhobuLuOqoBmFUNb0C5+4eJAxUKCAKZAQKbAQIeARYh BGhEsNirHXSldmMRFX9lK8GC8IddAACvdwD/UQxTPQP+aX/LoTmVE/bF3ax9NZfJ IHsixZuWFSdRzfYBAJNRXl1Mqcn4IH3Bw+QiuQ1NCDeGWoViMwHfFofATIkB =BweP -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u107.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdASevX5Q2NCTZOkjRjnjDqem76iiwvBDm8+P4u TcFNvTLCwAsEHxYKAH0FgmHz9rQDCwkHCRB/ZSvBgvCHXUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdYAFXBNjoqKJM9VPEdI9p9sqzqA5A9 XdgggT5TPpuQkQMVCggCmwECHgEWIQRoRLDYqx10pXZjERV/ZSvBgvCHXQAASX0A /RcrksFlyqAIed51ODwhNLpBYd8LWDMDV/AfsRWXYycMAQD9MIhyLRfPuMqvdkfd 6eJXNJ2SkByRDQpQ1SJcY7APAs0SPHUxMDdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQf2UrwYLwh11HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnUvbJXRoHrLVReWpaXXIjKGhu4u46qgGYVQ1vQLn7h4kDFQoI ApkBApsBAh4BFiEEaESw2KsddKV2YxEVf2UrwYLwh10AAK93AP9RDFM9A/5pf8uh OZUT9sXdrH01l8kgeyLFm5YVJ1HN9gEAk1FeXUypyfggfcHD5CK5DU0IN4ZahWIz Ad8Wh8BMiQHCwAEEEBYKAHMFgmH0COsDhf94CRBudWZ06N5V80cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcqdPErn0OK8uqR8g2WpGN3tMxv fXLeSJXaI2pLnKVHORYhBKqWq0pqmKg5Z2Yh5m51ZnTo3lXzAAAvAwD7BjDAQO0E 6KcIXFk09n/B7bUivimS06DGUz8DrzJLfNkBAPv9ApcTgNilx79qGBP2XUvOrCAy w2Oo1dWyHJYO/zIP =JLbq -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u108-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B6F8 3FFF 8B78 8418 D48C 11FA 084D 0F3A C9A2 AECD Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAppMGivlLIg9SHL6vIefS9NMexIpqvodNIu37 JN+tcTEAAP9T0KSpm5/jnEHovPKvPt9m697WoMgkP6Wb8LVsed5cBBSjwsALBB8W CgB9BYJh8/a0AwsJBwkQCE0POsmirs1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnY53anBuMWdBxBDA76dYC6Eoj9EMQ4bVGXly3O4YDXcsD FQoIApsBAh4BFiEEtvg//4t4hBjUjBH6CE0POsmirs0AANubAQDqIW5C7L1Mf/nu KFVB8TZ1PVAPX7UtUKV2J4P0SX5BPwEAt7kioJMCIOd2gVL1/Y4M33wfbTp8Ev0Z v6RU18vLmQfNEjx1MTA4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EAhNDzrJoq7NRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5g+qkeeaIqWwOZ725dEigbbIvPGeD3kh2DQg8V4u7zkAxUKCAKZAQKbAQIeARYh BLb4P/+LeIQY1IwR+ghNDzrJoq7NAABihgEAlm8c4MgqoDdY/0m6dIP5D1hVwxLZ 47hJox+LpFztIAkA/1l+wf9F1HRQz3IqcFhGbICPPO6aF8bWQXDL+RLrhswO =+jk1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u108.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAppMGivlLIg9SHL6vIefS9NMexIpqvodNIu37 JN+tcTHCwAsEHxYKAH0FgmHz9rQDCwkHCRAITQ86yaKuzUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdjndqcG4xZ0HEEMDvp1gLoSiP0QxDh tUZeXLc7hgNdywMVCggCmwECHgEWIQS2+D//i3iEGNSMEfoITQ86yaKuzQAA25sB AOohbkLsvUx/+e4oVUHxNnU9UA9ftS1QpXYng/RJfkE/AQC3uSKgkwIg53aBUvX9 jgzffB9tOnwS/Rm/pFTXy8uZB80SPHUxMDhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQCE0POsmirs1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnmD6qR55oipbA5nvbl0SKBtsi88Z4PeSHYNCDxXi7vOQDFQoI ApkBApsBAh4BFiEEtvg//4t4hBjUjBH6CE0POsmirs0AAGKGAQCWbxzgyCqgN1j/ Sbp0g/kPWFXDEtnjuEmjH4ukXO0gCQD/WX7B/0XUdFDPcipwWEZsgI887poXxtZB cMv5EuuGzA7CwAEEEBYKAHMFgmH0COsDhf94CRB/ZSvBgvCHXUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcx4G0P6lhbgVSJLqVUA4E1d7Rf OsNrjFGQQuT9k2X2ixYhBGhEsNirHXSldmMRFX9lK8GC8IddAABCnwEA4Az/IDO4 o38WqxFike6MzhAuO4+hWB1QuCsjVhc3QBAA/1IkfnoBdcEZdPLF2Iw7gVDfgocW nLKg1HlpwgmR7bQH =Ue0k -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u109-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 99B2 69CF F458 C780 108B 370C 7A3F 523A 4DD6 2521 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAdzqZ8gLvk5STHfdM3fKLvqDC/2rWq6jr87WF fIWp1egAAQCu0bXMz0UiRjMiIR6dPn4aZAXsYeYrv2xsCaeh+enSPw8mwsALBB8W CgB9BYJh8/a0AwsJBwkQej9SOk3WJSFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJvFeSkX1Vhk5dWoKiSw58Wo650LFyf45a788yNvN5T4D FQoIApsBAh4BFiEEmbJpz/RYx4AQizcMej9SOk3WJSEAAOEbAQD3tuC9K6TDbqex 8xui8CU80P7vmQb1YMOIy77o0U701AD/fdXTeSJf7tXJWT5xx+GEOitvRqhh6plS 87kFpxD/twzNEjx1MTA5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EHo/UjpN1iUhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3fkKonhHde1OBrIrVaUaRhwp1kySCGUAabEJM6HYGSkAxUKCAKZAQKbAQIeARYh BJmyac/0WMeAEIs3DHo/UjpN1iUhAAAkagEA8f+tMyHnvQAEJYOsBTlHqnjbZlLg JkJ0Xks+gkHlm3IA/iEqVXktKmwg2ulrc/n4OzBiX36s4BovJrRF2+zHu38J =QOM1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u109.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAdzqZ8gLvk5STHfdM3fKLvqDC/2rWq6jr87WF fIWp1ejCwAsEHxYKAH0FgmHz9rQDCwkHCRB6P1I6TdYlIUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcm8V5KRfVWGTl1agqJLDnxajrnQsXJ /jlrvzzI283lPgMVCggCmwECHgEWIQSZsmnP9FjHgBCLNwx6P1I6TdYlIQAA4RsB APe24L0rpMNup7HzG6LwJTzQ/u+ZBvVgw4jLvujRTvTUAP991dN5Il/u1clZPnHH 4YQ6K29GqGHqmVLzuQWnEP+3DM0SPHUxMDlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQej9SOk3WJSFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnd+QqieEd17U4GsitVpRpGHCnWTJIIZQBpsQkzodgZKQDFQoI ApkBApsBAh4BFiEEmbJpz/RYx4AQizcMej9SOk3WJSEAACRqAQDx/60zIee9AAQl g6wFOUeqeNtmUuAmQnReSz6CQeWbcgD+ISpVeS0qbCDa6Wtz+fg7MGJffqzgGi8m tEXb7Me7fwnCwAEEEBYKAHMFgmH0COsDhf94CRAITQ86yaKuzUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmddETxSwWpiWdb1eurRsNxRUPHa 6hH8X4aGD32iqUxeKhYhBLb4P/+LeIQY1IwR+ghNDzrJoq7NAAApuQEAt58Vnwon 0rIa/yDYgYYlT/A761qoPVTBgia61pm9rKcA/2h+1bMJSKqp6KlthmbvVo+6Wn6+ VSwoq54ZUYPo7lwB =W3EP -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u11-priv.pgp000064400000000000000000000015571046102023000222060ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 02B1 DB86 B686 9BCF 92C0 F743 12D1 A5F2 2E12 8F18 Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdAfXIwd4cg0VYyOvGMbwDnaO87XWIb3Y76Z2d5 T7M9sbkAAQCTyvPAWhYkhy210EUTi/Z5Hdv0mGx7oSZxkTcrrLKa4RCfwsALBB8W CgB9BYJh8/avAwsJBwkQEtGl8i4SjxhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnAeOI9Y0tg8gldoZYFbjrAbLUVi8qB2YU67jMynq+yZED FQoIApsBAh4BFiEEArHbhraGm8+SwPdDEtGl8i4SjxgAAHKBAP9oP4UVqcFalGnP T3JRwJaqMPNm2yNfV6PkkoHbfVA/xAEAyXWVn4K+D6JdqNjOyo9H+aLjrD74MwRh p7+fyrXRoQPNETx1MTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/avAwsJBwkQ EtGl8i4SjxhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn UxZmzt4HnLjxI+sU9slmW681Ys1PTbWNQcP3Ems1xCIDFQoIApkBApsBAh4BFiEE ArHbhraGm8+SwPdDEtGl8i4SjxgAAOFzAQC6Sa2Mkn7hZpwg7lOQWs1azmmF3A7z Cv+SWcy2bkWEZgD8D/A34FwVFjZdaSda6C3pyME3HXG6SJZ897pfOgnhBA0= =8jhe -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u11.pgp000064400000000000000000000017561046102023000212310ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2rxYJKwYBBAHaRw8BAQdAfXIwd4cg0VYyOvGMbwDnaO87XWIb3Y76Z2d5 T7M9sbnCwAsEHxYKAH0FgmHz9q8DCwkHCRAS0aXyLhKPGEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcB44j1jS2DyCV2hlgVuOsBstRWLyoH ZhTruMzKer7JkQMVCggCmwECHgEWIQQCsduGtoabz5LA90MS0aXyLhKPGAAAcoEA /2g/hRWpwVqUac9PclHAlqow82bbI19Xo+SSgdt9UD/EAQDJdZWfgr4Pol2o2M7K j0f5ouOsPvgzBGGnv5/KtdGhA80RPHUxMUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9q8DCwkHCRAS0aXyLhKPGEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdTFmbO3gecuPEj6xT2yWZbrzVizU9NtY1Bw/cSazXEIgMVCggC mQECmwECHgEWIQQCsduGtoabz5LA90MS0aXyLhKPGAAA4XMBALpJrYySfuFmnCDu U5BazVrOaYXcDvMK/5JZzLZuRYRmAPwP8DfgXBUWNl1pJ1roLenIwTcdcbpIlnz3 ul86CeEEDcLAAQQQFgoAcwWCYfQI5wOF/3gJECstVs8LlDBORxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwyu0fh5TU5o4dT20zp/AY6BiulC PfExc5kGQcrAZwcCFiEEEskmhcoqhnuT/Xl2Ky1WzwuUME4AAOx2APwLZnu7/2VH odCfNlt37aUEF4Svw45sIEkMqnzfdBpoEQD+JwPGqr8zp31TmMv2y84bh4UoGfO4 t+I8U5UlQHtdoAg= =qi9O -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u110-priv.pgp000064400000000000000000000015601046102023000222600ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 48AD BA11 7B6D 3870 3248 D7AE 72FB 58B9 E979 8B7E Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdATUG7eiB3rpJ2ARrxEJU3dkwZRmUd1boyWIwp /zhrMuQAAPwNWHcES6n79f25mS82bCBswhdyqQEKbpwXkcC4x47dURAYwsALBB8W CgB9BYJh8/a0AwsJBwkQcvtYuel5i35HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnqG56SbDvLPZglARBleccsOFrQi8ZbC89G4BbzBaPIPAD FQoIApsBAh4BFiEESK26EXttOHAySNeucvtYuel5i34AAFZnAQCDJpAWapE3WKai AddFX/QCjAKLP9nvz7wlzF1ZkOlJkgEA1MDu6xDGzK0GXoQ8Tr2v9YI+gpQl+53z /TXhfx4JDwvNEjx1MTEwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EHL7WLnpeYt+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z1DlVaHuF3jfyDhQqnn6+X1nADk2mJzRN2b306A6Pd5nAxUKCAKZAQKbAQIeARYh BEituhF7bThwMkjXrnL7WLnpeYt+AABAxQD/VEzktyAsNJN2C0moRsQTNTkslj8Y ah8NYDcppdjLFFsBAJKEsuwbFKaK0Dr5EIbBk0NymmcjMelP/MF6tNV9Zw0O =sDnN -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u110.pgp000064400000000000000000000017561046102023000213110ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdATUG7eiB3rpJ2ARrxEJU3dkwZRmUd1boyWIwp /zhrMuTCwAsEHxYKAH0FgmHz9rQDCwkHCRBy+1i56XmLfkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeobnpJsO8s9mCUBEGV5xyw4WtCLxls Lz0bgFvMFo8g8AMVCggCmwECHgEWIQRIrboRe204cDJI165y+1i56XmLfgAAVmcB AIMmkBZqkTdYpqIB10Vf9AKMAos/2e/PvCXMXVmQ6UmSAQDUwO7rEMbMrQZehDxO va/1gj6ClCX7nfP9NeF/HgkPC80SPHUxMTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQcvtYuel5i35HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnUOVVoe4XeN/IOFCqefr5fWcAOTaYnNE3ZvfToDo93mcDFQoI ApkBApsBAh4BFiEESK26EXttOHAySNeucvtYuel5i34AAEDFAP9UTOS3ICw0k3YL SahGxBM1OSyWPxhqHw1gNyml2MsUWwEAkoSy7BsUporQOvkQhsGTQ3KaZyMx6U/8 wXq01X1nDQ7CwAEEEBYKAHMFgmH0COsDhf94CRB6P1I6TdYlIUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdpbwGiafLQwxA4ClDiXwgCuzmY NCpVVi1unBv+4imgMhYhBJmyac/0WMeAEIs3DHo/UjpN1iUhAACNvQEAnW/A0gPC c4nJOdVzJyFwOIhCuGkPTzVHBrlo8uqKaf4A/RAbshmjTfCTAaz2ZwOeumcM8L5P QQIuwSOIuTxGnfIF =f3xz -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u111-priv.pgp000064400000000000000000000015601046102023000222610ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: FBC5 03FC BE41 43C9 84E8 8358 E700 E23D 4F57 3CCF Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdA49Gc//Q1R/90UTpne/5463HIggwtoVZ5lDph rngVN3kAAQDVw6BzbAKw4LdYDWPEGSGEUk+r9yycfk8i9fLn1vo5MxCvwsALBB8W CgB9BYJh8/a0AwsJBwkQ5wDiPU9XPM9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnCUR+f9MocIc6GJYPwVpvxqmeG9UaOHYJHXE5jX/sE68D FQoIApsBAh4BFiEE+8UD/L5BQ8mE6INY5wDiPU9XPM8AANGXAP9ASJFxABeZ6xJ0 cxuAMsOaQo9tL/BAtnH+oPFqJkUWkgEAzXx+y8Ows0QSl0Qjx1c3ZMlPt8EGeOnG H2DQqLx6WwPNEjx1MTExQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EOcA4j1PVzzPRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2jGlSHjCIR1/H1F2WNOHKcY+ogYfYgRrfzf+696Q7E1AxUKCAKZAQKbAQIeARYh BPvFA/y+QUPJhOiDWOcA4j1PVzzPAAB7+AEAqKe3c8Iqq5xSQNBqpQHxNUSHL2JZ epcN3EZJKvTIPJsA/i2mxAJDRVTlRx6g+mM7GwIpAZffgMTPySp/BiUBGXwB =4MhA -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u111.pgp000064400000000000000000000017561046102023000213120ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdA49Gc//Q1R/90UTpne/5463HIggwtoVZ5lDph rngVN3nCwAsEHxYKAH0FgmHz9rQDCwkHCRDnAOI9T1c8z0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcJRH5/0yhwhzoYlg/BWm/GqZ4b1Ro4 dgkdcTmNf+wTrwMVCggCmwECHgEWIQT7xQP8vkFDyYTog1jnAOI9T1c8zwAA0ZcA /0BIkXEAF5nrEnRzG4Ayw5pCj20v8EC2cf6g8WomRRaSAQDNfH7Lw7CzRBKXRCPH VzdkyU+3wQZ46cYfYNCovHpbA80SPHUxMTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQ5wDiPU9XPM9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnaMaVIeMIhHX8fUXZY04cpxj6iBh9iBGt/N/7r3pDsTUDFQoI ApkBApsBAh4BFiEE+8UD/L5BQ8mE6INY5wDiPU9XPM8AAHv4AQCop7dzwiqrnFJA 0GqlAfE1RIcvYll6lw3cRkkq9Mg8mwD+LabEAkNFVOVHHqD6YzsbAikBl9+AxM/J Kn8GJQEZfAHCwAEEEBYKAHMFgmH0COsDhf94CRBy+1i56XmLfkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfOM5Ho6av56EZ76q+uGfp9Mrvf AdWkUoWFARqv/5TqKBYhBEituhF7bThwMkjXrnL7WLnpeYt+AABBCgEAu5mIY5It +3m0mJ0aubLgk9dXH2pV90Ot1vZEaMLGbHIBAIo5fhzMzHcUPb9cAqbT8wzQQUs3 yBysOr3qIKpduugP =DIxd -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u112-priv.pgp000064400000000000000000000015601046102023000222620ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E249 A634 759A 417A 0406 1573 6E20 0525 AAF6 F629 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdA+xZ9ylgnUiBIpb6Itw7ibIE5Heu21NXkJNny /7OCWnQAAP41Z8231MK+T3nlsbBm3bGHBA1/yQmpqjSc9xxMq4+9zBKiwsALBB8W CgB9BYJh8/a0AwsJBwkQbiAFJar29ilHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnUbNW1N6mz/DY1CsKH7gSPnuDmIFahQMhJ/Bfq7rXlcsD FQoIApsBAh4BFiEE4kmmNHWaQXoEBhVzbiAFJar29ikAAA4hAPsGiccxlPEbBlHY f85EVhf5y9W/9nFdgKV3PlblmSOUVQD9FwqwRrHv2FxIi3r54PTRiDzbpD43lYBO Tck0PHotTwXNEjx1MTEyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EG4gBSWq9vYpRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7UpJl1l/3EVU5iqOFiJZ1CTHlS7XO6yuMHf+0NJy0SMAxUKCAKZAQKbAQIeARYh BOJJpjR1mkF6BAYVc24gBSWq9vYpAAAOMQEAt3bx8h9mTn8NCw7TZ8T72D3foepK vwETNemJV5Rvr9kA/0i0+mtjIGHbgKC+UDVjcP4rqLrbkr8CLxCbdaT0q8cN =/2qE -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u112.pgp000064400000000000000000000017561046102023000213130ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdA+xZ9ylgnUiBIpb6Itw7ibIE5Heu21NXkJNny /7OCWnTCwAsEHxYKAH0FgmHz9rQDCwkHCRBuIAUlqvb2KUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdRs1bU3qbP8NjUKwofuBI+e4OYgVqF AyEn8F+ruteVywMVCggCmwECHgEWIQTiSaY0dZpBegQGFXNuIAUlqvb2KQAADiEA +waJxzGU8RsGUdh/zkRWF/nL1b/2cV2ApXc+VuWZI5RVAP0XCrBGse/YXEiLevng 9NGIPNukPjeVgE5NyTQ8ei1PBc0SPHUxMTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQbiAFJar29ilHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JntSkmXWX/cRVTmKo4WIlnUJMeVLtc7rK4wd/7Q0nLRIwDFQoI ApkBApsBAh4BFiEE4kmmNHWaQXoEBhVzbiAFJar29ikAAA4xAQC3dvHyH2ZOfw0L DtNnxPvYPd+h6kq/ARM16YlXlG+v2QD/SLT6a2MgYduAoL5QNWNw/iuoutuSvwIv EJt1pPSrxw3CwAAEEBYKAHMFgmH0COsDhf94CRDnAOI9T1c8z0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmekDvM8d7iXEeW8rqE1f5BHOQF4 IYAaztogAhCG8xYNWxYhBPvFA/y+QUPJhOiDWOcA4j1PVzzPAAB7DAEA2e4ivq3o 3wK/kQXUCcNoUrXjEfBm3noAMFNP6EOltXgA+LpYl6MM3d1QPcrS+A2AjkXu4nHr jEfE9vl0yQL8hwc= =UTaU -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u113-priv.pgp000064400000000000000000000015601046102023000222630ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BC78 2C43 57D9 E720 75AF 3DBF 2C2F CAB0 9C09 C252 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAfoFqj5VUwWf0mZP+MJkS7vzthl1TN8C5u76K ox0U61wAAQCgplmqyn2hZTtWD5Af5WDen03RPQ8X//EYUVl2k+tEww/WwsALBB8W CgB9BYJh8/a0AwsJBwkQLC/KsJwJwlJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JncivdskBsXG6mOPrwVsfUHNTGUcZDXqBMyAxAGbMaoSsD FQoIApsBAh4BFiEEvHgsQ1fZ5yB1rz2/LC/KsJwJwlIAAGu4AP9Z3XkakSM58m1F /ZNoS+IzqpeHeI3r1btiRSWd3Gf7UgD/b59GSViiFqAuSvTteDiIvbYQLIv7I6Vw qAPYfxKkwATNEjx1MTEzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ ECwvyrCcCcJSRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4Li2NtY11sAJulXnsNdyM34lD5EsPK6371lTbQ79pE7AxUKCAKZAQKbAQIeARYh BLx4LENX2ecgda89vywvyrCcCcJSAAAvqAD/byXlJTT9algcYHUNTq1gDjWxjgzl UEsXTGHT5fzm1+MA/iBDBkIQMShhyb2sbDu1abgcEctDDJpGJYHJcp9qiiwF =zH79 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u113.pgp000064400000000000000000000017561046102023000213140ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAfoFqj5VUwWf0mZP+MJkS7vzthl1TN8C5u76K ox0U61zCwAsEHxYKAH0FgmHz9rQDCwkHCRAsL8qwnAnCUkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdyK92yQGxcbqY4+vBWx9Qc1MZRxkNe oEzIDEAZsxqhKwMVCggCmwECHgEWIQS8eCxDV9nnIHWvPb8sL8qwnAnCUgAAa7gA /1ndeRqRIznybUX9k2hL4jOql4d4jevVu2JFJZ3cZ/tSAP9vn0ZJWKIWoC5K9O14 OIi9thAsi/sjpXCoA9h/EqTABM0SPHUxMTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQLC/KsJwJwlJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnguLY21jXWwAm6Veew13IzfiUPkSw8rrfvWVNtDv2kTsDFQoI ApkBApsBAh4BFiEEvHgsQ1fZ5yB1rz2/LC/KsJwJwlIAAC+oAP9vJeUlNP1qWBxg dQ1OrWAONbGODOVQSxdMYdPl/ObX4wD+IEMGQhAxKGHJvaxsO7VpuBwRy0MMmkYl gclyn2qKLAXCwAEEEBYKAHMFgmH0COsDhf94CRBuIAUlqvb2KUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme5g/V4XJRAqp+n4HUm1ixf2iMw TCT08h3NzTotO3Rg8RYhBOJJpjR1mkF6BAYVc24gBSWq9vYpAACSoAEA5vGKNY5U XSbjjYlJ7nu0H5EN+wAQnZFpm1kXKFCdwtYBAIQc7CZ/Yrdf1S5YFGM6kd3Dngmg uPPxuhhcs1AWmIUD =HCV+ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u114-priv.pgp000064400000000000000000000015601046102023000222640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7B47 E68E FB03 A0C8 346B D80E 4A2F A75B 6488 D6D3 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAFjteBIyoHdOBSE4flb2L959edLRPWCV77y/u k9vlzFgAAQDi6qItlnN+aPBgzgawVv13IFHkvXX7yxRGuJCeIpJqmRFtwsALBB8W CgB9BYJh8/a0AwsJBwkQSi+nW2SI1tNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnH2/60d7L95ySnwEItRD2qam9+TuSQdESPPX8rFA/O4AD FQoIApsBAh4BFiEEe0fmjvsDoMg0a9gOSi+nW2SI1tMAABYtAP0SSTovHTOUqqwv aPZA723edqUconnGpMUTQAzUyL6bpAD+InCpKokUd/jHOcQKQ06TxWQPAn7OgM4W /3UmgZ7J0ALNEjx1MTE0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EEovp1tkiNbTRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZyHudPQ3ex8FNWpen6JF4RFs5SQmx0OTY+9BN5JHX16bAxUKCAKZAQKbAQIeARYh BHtH5o77A6DINGvYDkovp1tkiNbTAAB64QEAnK5F4Riagh4SmgGi0dbdkxgNM90g mlfa21+tBBfDAEsBAN52oN6LSe0yzackz+wRD5IXOoCgZ1efv+wsdL96+pMJ =fgMl -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u114.pgp000064400000000000000000000017561046102023000213150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAFjteBIyoHdOBSE4flb2L959edLRPWCV77y/u k9vlzFjCwAsEHxYKAH0FgmHz9rQDCwkHCRBKL6dbZIjW00cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcfb/rR3sv3nJKfAQi1EPapqb35O5JB 0RI89fysUD87gAMVCggCmwECHgEWIQR7R+aO+wOgyDRr2A5KL6dbZIjW0wAAFi0A /RJJOi8dM5SqrC9o9kDvbd52pRyiecakxRNADNTIvpukAP4icKkqiRR3+Mc5xApD TpPFZA8Cfs6Azhb/dSaBnsnQAs0SPHUxMTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQSi+nW2SI1tNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnIe509Dd7HwU1al6fokXhEWzlJCbHQ5Nj70E3kkdfXpsDFQoI ApkBApsBAh4BFiEEe0fmjvsDoMg0a9gOSi+nW2SI1tMAAHrhAQCcrkXhGJqCHhKa AaLR1t2TGA0z3SCaV9rbX60EF8MASwEA3nag3otJ7TLNpyTP7BEPkhc6gKBnV5+/ 7Cx0v3r6kwnCwAEEEBYKAHMFgmH0COsDhf94CRAsL8qwnAnCUkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcJS96Y+avctxTJqJ0Ot1FjEkt9 S5cCnlXh74YbGZrcCRYhBLx4LENX2ecgda89vywvyrCcCcJSAACbiAD/atDTrY90 XpHHORuSEWlwq7CX5lYX08783MpZ4/QIUdIA/0e0PrW+24d/YMadtNr/8RXq+uhx xpNTIw6GDNstk4sF =DyA3 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u115-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: DC28 07A9 E1CC D83B 797A 1EB2 829D 1F46 41E0 DB9B Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdA9DxqA9TZOdaDeA8VvMgreZLsG/ue5ZN/ZB8Y 3Lr51VgAAQC9W0oHxQfss4SLHt52kwNoUVw4/r57vHGShKaozo7a+hExwsALBB8W CgB9BYJh8/a0AwsJBwkQgp0fRkHg25tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnvArHzPCT8lseu/JkbM9Lp3/8D+3+cNGp8b5PGCV9IuQD FQoIApsBAh4BFiEE3CgHqeHM2Dt5eh6ygp0fRkHg25sAAFeTAQCdgXC5b/35TVvs hAKQcgColKnbmsvRqF8CHIF/Iv4EfwEAroTZfbbQqIsKPhAkCANhflUkR4wIKByG hLJQYuK8wAzNEjx1MTE1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EIKdH0ZB4NubRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7yLn17gJCeOAsbQEpJQ4sSab7yn7WCM5Lyi4u9niH4+AxUKCAKZAQKbAQIeARYh BNwoB6nhzNg7eXoesoKdH0ZB4NubAAD+2wD/QfNkqP+JKJ2R8a3qafxULIpaf4+V /tUyxusaY01Gc4sBAKsIDW1U7AssKT72oZKkOZvNnX2XfLM43JpzObBuE6gD =7EVi -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u115.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdA9DxqA9TZOdaDeA8VvMgreZLsG/ue5ZN/ZB8Y 3Lr51VjCwAsEHxYKAH0FgmHz9rQDCwkHCRCCnR9GQeDbm0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme8CsfM8JPyWx678mRsz0unf/wP7f5w 0anxvk8YJX0i5AMVCggCmwECHgEWIQTcKAep4czYO3l6HrKCnR9GQeDbmwAAV5MB AJ2BcLlv/flNW+yEApByAKiUqduay9GoXwIcgX8i/gR/AQCuhNl9ttCoiwo+ECQI A2F+VSRHjAgoHIaEslBi4rzADM0SPHUxMTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQgp0fRkHg25tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnvIufXuAkJ44CxtASklDixJpvvKftYIzkvKLi72eIfj4DFQoI ApkBApsBAh4BFiEE3CgHqeHM2Dt5eh6ygp0fRkHg25sAAP7bAP9B82So/4konZHx repp/FQsilp/j5X+1TLG6xpjTUZziwEAqwgNbVTsCywpPvahkqQ5m82dfZd8szjc mnM5sG4TqAPCwAEEEBYKAHMFgmH0COsDhf94CRBKL6dbZIjW00cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmft579A40ZIzWtfCeIFTawbMzJC R9HLBn8GhFEPrYzHxhYhBHtH5o77A6DINGvYDkovp1tkiNbTAACmiwD+MC4wEVqi Xvw8UgClXfLe5GCUzBocmzYFb1x7nCQZALYBAM0dAzGwFUzpHCBNbTWyoJ8ySbR6 DQqDZBm+rjytZ5sE =jBpw -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u116-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 33C7 585C 640E 7497 4790 F349 F64B 2668 DF09 DE8E Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAgMkpO6VOZcEf5d87LfA0bq2oFjFUtlbgc24p UEOW1VcAAQDK/IslogSF+GtYbRi69xmoN74DkFWnre6FAtiR6Sg3/hCpwsALBB8W CgB9BYJh8/a0AwsJBwkQ9ksmaN8J3o5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnL6sP09N4Oc8EXVvBZG468aRXIm/yyl7VtamxLpIiFIcD FQoIApsBAh4BFiEEM8dYXGQOdJdHkPNJ9ksmaN8J3o4AACEZAP4jP64Jn9ZnEjtK UyCajxCqHPQb9+IBgX/KCrMQdzkmUwEAuj/m6f7Tq1OXldcHYnJIkcLziX24vIAU NxE908NZ5w3NEjx1MTE2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EPZLJmjfCd6ORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7Fj/p0qzvYqRCP0DjSooCQHLm5V9WQJrFaOrIpumbxjAxUKCAKZAQKbAQIeARYh BDPHWFxkDnSXR5DzSfZLJmjfCd6OAADa/gD/ezBlbpFb9GpCDdcuTVmrtvtmLQgB c6MZHexWIIIQic8BALMAyUGJFtc3Iovcjm5PXFrG8oFYqr1xcrShVQmvX20N =Z85x -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u116.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAgMkpO6VOZcEf5d87LfA0bq2oFjFUtlbgc24p UEOW1VfCwAsEHxYKAH0FgmHz9rQDCwkHCRD2SyZo3wnejkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcvqw/T03g5zwRdW8FkbjrxpFcib/LK XtW1qbEukiIUhwMVCggCmwECHgEWIQQzx1hcZA50l0eQ80n2SyZo3wnejgAAIRkA /iM/rgmf1mcSO0pTIJqPEKoc9Bv34gGBf8oKsxB3OSZTAQC6P+bp/tOrU5eV1wdi ckiRwvOJfbi8gBQ3ET3Tw1nnDc0SPHUxMTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a0AwsJBwkQ9ksmaN8J3o5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnsWP+nSrO9ipEI/QONKigJAcublX1ZAmsVo6sim6ZvGMDFQoI ApkBApsBAh4BFiEEM8dYXGQOdJdHkPNJ9ksmaN8J3o4AANr+AP97MGVukVv0akIN 1y5NWau2+2YtCAFzoxkd7FYgghCJzwEAswDJQYkW1zcii9yObk9cWsbygViqvXFy tKFVCa9fbQ3CwAEEEBYKAHMFgmH0COsDhf94CRCCnR9GQeDbm0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfvRj+184hAOs2jniUsXQZaNYem YsHxtMoOUUIOtQWnphYhBNwoB6nhzNg7eXoesoKdH0ZB4NubAABYawEA8fNY1ZYc tqRwWxutDPxyYF6aMidtC7uHKC1sNkjZfjoA/3hqEiHNXvP/88NkoGAxyre8+vOc +fIcDqPG/xJK4CgE =cjx0 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u117-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: C766 141B A6C7 998C 7EE4 0DE1 16FB 427F 2C57 657F Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAlRCF8W8QTotKVlfQuHmx8WHZFhGZf5rUxFsd 1QWPPMIAAQC+iYI1HJsl267FGbUtDFjKPDa/MrePVKVCfjd6+2uV3Q89wsALBB8W CgB9BYJh8/a1AwsJBwkQFvtCfyxXZX9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnMkCr46LYlP3ercJdTlQSjTwnjLCtfZG9jH3HMJx1pCcD FQoIApsBAh4BFiEEx2YUG6bHmYx+5A3hFvtCfyxXZX8AACMpAQCJ1vH9zW46/HhS /NjMeXKV2z73mC0WKG+faUzaVrEN9gEA9umu7WWyS8YrzDSuZqd9vECn/xwqwuym AIKFV8uZng7NEjx1MTE3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EBb7Qn8sV2V/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4IUVo530xa6h8uAH7FH7r2rhEHLdBM0C9MW9bdFEjI1AxUKCAKZAQKbAQIeARYh BMdmFBumx5mMfuQN4Rb7Qn8sV2V/AADpzAD/W/IJZuVf19pNPIqc7BtSDUBkBGnk MvAeJi0RxAqPsq0A/3HhSyfF3ObGwDU5/ndS8Pht/OCaxtsqnUA87Vzz0r4O =52M9 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u117.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAlRCF8W8QTotKVlfQuHmx8WHZFhGZf5rUxFsd 1QWPPMLCwAsEHxYKAH0FgmHz9rUDCwkHCRAW+0J/LFdlf0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcyQKvjotiU/d6twl1OVBKNPCeMsK19 kb2MfccwnHWkJwMVCggCmwECHgEWIQTHZhQbpseZjH7kDeEW+0J/LFdlfwAAIykB AInW8f3Nbjr8eFL82Mx5cpXbPveYLRYob59pTNpWsQ32AQD26a7tZbJLxivMNK5m p328QKf/HCrC7KYAgoVXy5meDs0SPHUxMTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQFvtCfyxXZX9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnghRWjnfTFrqHy4AfsUfuvauEQct0EzQL0xb1t0USMjUDFQoI ApkBApsBAh4BFiEEx2YUG6bHmYx+5A3hFvtCfyxXZX8AAOnMAP9b8glm5V/X2k08 ipzsG1INQGQEaeQy8B4mLRHECo+yrQD/ceFLJ8Xc5sbANTn+d1Lw+G384JrG2yqd QDztXPPSvg7CwAEEEBYKAHMFgmH0COsDhf94CRD2SyZo3wnejkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdjWxFVOaV21r0H5CMKgMplG1yk c5sG3OFE7QKLxtHvyBYhBDPHWFxkDnSXR5DzSfZLJmjfCd6OAABuvgD/T6TKG1I4 kh4dL2+YuJaCYwHSL3maW0Pm+b2foXREAZMBAL2yoYZdOUV96XZ55fIpdcMoTUND 9/H5FR0iQlNkudQE =jJed -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u118-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D0DF 7D29 3426 D945 1E9E E0FD 03A4 D819 6D10 976D Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdArC2T7kJCWHBzJfalhPbaDnk/WNlq7a7tA4gz Kyt3RAEAAQDFB3TV2p2MdvX1E5//GGYRv/0KHTOI5d3HqmqI8hsfHRDFwsALBB8W CgB9BYJh8/a1AwsJBwkQA6TYGW0Ql21HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnQWbnEhHtwHtax4hodTJO9vse28UChuZhfrNBRQF+wqQD FQoIApsBAh4BFiEE0N99KTQm2UUenuD9A6TYGW0Ql20AAPdxAQC99VZeWELg7ELJ brTRB3P+PnTN/Rt4r17CGwCyRpU3vQD+MyLygF5dwynpafqz6j2YI35V/o1ue2sb /A0LLiERqwnNEjx1MTE4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EAOk2BltEJdtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZyRzWFAZMTiWRHx58E3OrhmcxaFVHvXXI3TdVJOntiz3AxUKCAKZAQKbAQIeARYh BNDffSk0JtlFHp7g/QOk2BltEJdtAAB85QEA2bOHJmtohGxTUv34uYzUApc1xSeS 2OwbPs6F14kFcHsBAIDRQ0QdosfZgYu6yyBemC7c8y0h78yId1Qd9xRUVywL =OG7Y -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u118.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdArC2T7kJCWHBzJfalhPbaDnk/WNlq7a7tA4gz Kyt3RAHCwAsEHxYKAH0FgmHz9rUDCwkHCRADpNgZbRCXbUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdBZucSEe3Ae1rHiGh1Mk72+x7bxQKG 5mF+s0FFAX7CpAMVCggCmwECHgEWIQTQ330pNCbZRR6e4P0DpNgZbRCXbQAA93EB AL31Vl5YQuDsQslutNEHc/4+dM39G3ivXsIbALJGlTe9AP4zIvKAXl3DKelp+rPq PZgjflX+jW57axv8DQsuIRGrCc0SPHUxMThAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQA6TYGW0Ql21HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnJHNYUBkxOJZEfHnwTc6uGZzFoVUe9dcjdN1Uk6e2LPcDFQoI ApkBApsBAh4BFiEE0N99KTQm2UUenuD9A6TYGW0Ql20AAHzlAQDZs4cma2iEbFNS /fi5jNQClzXFJ5LY7Bs+zoXXiQVwewEAgNFDRB2ix9mBi7rLIF6YLtzzLSHvzIh3 VB33FFRXLAvCwAAEEBYKAHMFgmH0COsDhf94CRAW+0J/LFdlf0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcqmFiN6B3RkFbRY40trCZvhSv/ wISPPG+GOKYeMVWcMRYhBMdmFBumx5mMfuQN4Rb7Qn8sV2V/AAARtQD4iKKc+WKx 3ixsZ8e+UBen8r7D3LW7uNrX5otjHD+A/wD/dmAQqhjsrxqJ+qD8+yMuauGSR/1E sedMga2SpLF0kwc= =2IFv -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u119-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D56E 5DB0 1CFA AD99 697B 3316 3B81 D229 170F 58B4 Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAtZ97qdJ6ITy7HjcObD37IC8tHNxBhlZS7p2u QdjQU0IAAP9EDshPveTGQ8H6LgbsOAEGu02Z8l5LDjOP7JXuvkHXTBDJwsALBB8W CgB9BYJh8/a1AwsJBwkQO4HSKRcPWLRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnjAnefxqVKWBUOf9KBSdm5SRtqXObUvALs5O3KanM91MD FQoIApsBAh4BFiEE1W5dsBz6rZlpezMWO4HSKRcPWLQAANOyAP9IrcheKuWB0g+6 0nPETRFXCacCYLoZlxH9yvkwYxosvAD/X36OhxSgBWxbn9kZa0a/BUibiM5I3iGg 0IQ2rzP7JQTNEjx1MTE5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EDuB0ikXD1i0RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+Yw+n8xsb82cDSbZUdD8mmhuzZrzotGimwm088CFmp5AxUKCAKZAQKbAQIeARYh BNVuXbAc+q2ZaXszFjuB0ikXD1i0AABUSQEA08efzcm3LB7Ng7C54WSKZgsk37oa tQLOFSLQR+8md54A/0RZhCeis5binwgZ6agEMw4bVI8PHE2V0ss3rxW9LMkC =IbnQ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u119.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAtZ97qdJ6ITy7HjcObD37IC8tHNxBhlZS7p2u QdjQU0LCwAsEHxYKAH0FgmHz9rUDCwkHCRA7gdIpFw9YtEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeMCd5/GpUpYFQ5/0oFJ2blJG2pc5tS 8Auzk7cpqcz3UwMVCggCmwECHgEWIQTVbl2wHPqtmWl7MxY7gdIpFw9YtAAA07IA /0ityF4q5YHSD7rSc8RNEVcJpwJguhmXEf3K+TBjGiy8AP9ffo6HFKAFbFuf2Rlr Rr8FSJuIzkjeIaDQhDavM/slBM0SPHUxMTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQO4HSKRcPWLRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn5jD6fzGxvzZwNJtlR0PyaaG7NmvOi0aKbCbTzwIWankDFQoI ApkBApsBAh4BFiEE1W5dsBz6rZlpezMWO4HSKRcPWLQAAFRJAQDTx5/NybcsHs2D sLnhZIpmCyTfuhq1As4VItBH7yZ3ngD/RFmEJ6KzluKfCBnpqAQzDhtUjw8cTZXS yzevFb0syQLCwAEEEBYKAHMFgmH0COsDhf94CRADpNgZbRCXbUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeXG8MMsAgI8XwxU0vZZI+TqGBJ 39HTgxMFuwKRQFOTkRYhBNDffSk0JtlFHp7g/QOk2BltEJdtAACgmAEAoUShYRK0 WyjacVAj0yHxi7UBFNankO5S/+AV2ovkvkgBAPIwJgM3B4U56zNEjRE8B37p1r3s 8M/eqD6mQxQXcSoO =dvGG -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u12-priv.pgp000064400000000000000000000015571046102023000222070ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9C82 45F2 DD06 E4A2 FE21 FB16 43A9 663D DF7D F168 Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdAJt5nRqWR82HWJl3dTFqAM4higrhXkfufu1h/ M2yB5X0AAQCfATgekxxAZg9MRiIS0aJADPwgvshRlyDWgh8FEovwLAu/wsALBB8W CgB9BYJh8/avAwsJBwkQQ6lmPd998WhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JneZ6/D5aGsG8OpbcYoQGRhmDDgqprNwknOuLMBfjMAaID FQoIApsBAh4BFiEEnIJF8t0G5KL+IfsWQ6lmPd998WgAAGbKAQDGPSQ/WhOs8WzP 7umo/5hNUZuE3NtHRBnAvE6U4Op18QD/W/7DOt3YKggSZ7UWX8II8kTsunHwdv/M NUayAJJs5QjNETx1MTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/avAwsJBwkQ Q6lmPd998WhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn w1HW9mB3kIit7M8XBHJHJ+4h58sI9pHWyLbqxifB8uADFQoIApkBApsBAh4BFiEE nIJF8t0G5KL+IfsWQ6lmPd998WgAAG8rAP9lmEuLrJKF1lgxfGp6jI+F5c7/cGcB PA0PekI/1h6SbwEAg0QL0UA7ziD0Ce1oExbSWS0iTXpXMLepJGfZqbtREgM= =SMhp -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u12.pgp000064400000000000000000000017561046102023000212320ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2rxYJKwYBBAHaRw8BAQdAJt5nRqWR82HWJl3dTFqAM4higrhXkfufu1h/ M2yB5X3CwAsEHxYKAH0FgmHz9q8DCwkHCRBDqWY9333xaEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd5nr8Ploawbw6ltxihAZGGYMOCqms3 CSc64swF+MwBogMVCggCmwECHgEWIQScgkXy3Qbkov4h+xZDqWY9333xaAAAZsoB AMY9JD9aE6zxbM/u6aj/mE1Rm4Tc20dEGcC8TpTg6nXxAP9b/sM63dgqCBJntRZf wgjyROy6cfB2/8w1RrIAkmzlCM0RPHUxMkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9q8DCwkHCRBDqWY9333xaEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfDUdb2YHeQiK3szxcEckcn7iHnywj2kdbIturGJ8Hy4AMVCggC mQECmwECHgEWIQScgkXy3Qbkov4h+xZDqWY9333xaAAAbysA/2WYS4uskoXWWDF8 anqMj4Xlzv9wZwE8DQ96Qj/WHpJvAQCDRAvRQDvOIPQJ7WgTFtJZLSJNelcwt6kk Z9mpu1ESA8LAAQQQFgoAcwWCYfQI5wOF/3gJEBLRpfIuEo8YRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxN5VrzLTsnXfCcym8O+/4zKGBLU sfaXD+jpgoTyUerdFiEEArHbhraGm8+SwPdDEtGl8i4SjxgAAGbiAQCDlTcEOG3d tRWIj4QrJb4lC7tINF2cEHexlYDiLUdEUgD+JsvBu8xKSabfwKF3ixKL3DH5b3ER OPV6TY8KXZzLeQo= =RV0E -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u120-priv.pgp000064400000000000000000000015601046102023000222610ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 97D5 92FD E619 9E3A 4F6B 437F 40B3 4142 AA67 397B Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAsZZgN8WoKue8kcP4VloytizfrqeebxU3/BK8 /r2GvNUAAQCMnNW7qRKpuWM4Q0vNTc4Hng18HvEGgUUulT938YWTig78wsALBB8W CgB9BYJh8/a1AwsJBwkQQLNBQqpnOXtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnReoDNb2pzIzjeifdosZqfYPJ7Zee5UJ82VfN873AccgD FQoIApsBAh4BFiEEl9WS/eYZnjpPa0N/QLNBQqpnOXsAAKSGAP9E9r6EyzWrI/sS VwtJZzALtPDFPtjJjoYezz0g/m8gSgEAqYNfjQQ2m3SqjViS9GCbWLRCKKNF+Z/n +YEV9V8QhAXNEjx1MTIwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EECzQUKqZzl7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZyafWJ2mYcgbrQDMTpVN+jV/figvCz8NQ6P2dmx0lXdrAxUKCAKZAQKbAQIeARYh BJfVkv3mGZ46T2tDf0CzQUKqZzl7AACxlgEA7It6/4Gjmdh4tRwxj66+BQcMMobq g3CgmX78mEn4BhsA+wU0Lm8cws7WvqQxo/cRlnZp2QaEIQRQOhGFHwyEbo4C =rrpR -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u120.pgp000064400000000000000000000017561046102023000213120ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAsZZgN8WoKue8kcP4VloytizfrqeebxU3/BK8 /r2GvNXCwAsEHxYKAH0FgmHz9rUDCwkHCRBAs0FCqmc5e0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdF6gM1vanMjON6J92ixmp9g8ntl57l QnzZV83zvcBxyAMVCggCmwECHgEWIQSX1ZL95hmeOk9rQ39As0FCqmc5ewAApIYA /0T2voTLNasj+xJXC0lnMAu08MU+2MmOhh7PPSD+byBKAQCpg1+NBDabdKqNWJL0 YJtYtEIoo0X5n+f5gRX1XxCEBc0SPHUxMjBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQQLNBQqpnOXtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnJp9YnaZhyButAMxOlU36NX9+KC8LPw1Do/Z2bHSVd2sDFQoI ApkBApsBAh4BFiEEl9WS/eYZnjpPa0N/QLNBQqpnOXsAALGWAQDsi3r/gaOZ2Hi1 HDGPrr4FBwwyhuqDcKCZfvyYSfgGGwD7BTQubxzCzta+pDGj9xGWdmnZBoQhBFA6 EYUfDIRujgLCwAEEEBYKAHMFgmH0COsDhf94CRA7gdIpFw9YtEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmePqMSbb7jD0LVD8wNnrf/Vloiw RlxbmrpZuYLa6sozQRYhBNVuXbAc+q2ZaXszFjuB0ikXD1i0AACl1QEAtEvcKWVC 0M4n63HhauHpRoREZ8lrS46iEmh0hWinJ70A/jIsd01zu2/srJswNcOxA+dZ6mNW B8ck0LmkgpNNF8cF =HcJU -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u121-priv.pgp000064400000000000000000000015601046102023000222620ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8C19 F12A 8386 D0EF 3FC0 AFD2 8D7F E8D9 0F07 0EFB Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAhPtb6jgTSq/AeiBT3oaOD+SRU9QImjDvgjGq 5sCmqTAAAP9BXklfHpPzshHirTprynX10AcevtyDGKuLZ7FP8qvPwBIIwsALBB8W CgB9BYJh8/a1AwsJBwkQjX/o2Q8HDvtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnySuQ283c1tLhCqrO9PhYFSfD/nwfGo1oz+qu25KJGuAD FQoIApsBAh4BFiEEjBnxKoOG0O8/wK/SjX/o2Q8HDvsAAM9sAP49TWzReAVls3bR WfP591VqndeBN97y7/pHKbN+hE62VgD/Sw66s9yS7tOfrsavyYnJ1Atgzjzbqo0n SNGgv9nz0gXNEjx1MTIxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EI1/6NkPBw77RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z9YEcKvSNoalnZlekzsLk0i8G7SVTe2/UqqEF1H9g0tcAxUKCAKZAQKbAQIeARYh BIwZ8SqDhtDvP8Cv0o1/6NkPBw77AACmOAEAhornERZFIVNFctpW+vWTDxTY/Jbf xa8yv4Wq+lrJ7yQA/RBWM9vH8iSsOUXtPEEYMmUny1GjKUy1rNGNfiS19T4J =akmi -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u121.pgp000064400000000000000000000017561046102023000213130ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAhPtb6jgTSq/AeiBT3oaOD+SRU9QImjDvgjGq 5sCmqTDCwAsEHxYKAH0FgmHz9rUDCwkHCRCNf+jZDwcO+0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfJK5DbzdzW0uEKqs70+FgVJ8P+fB8a jWjP6q7bkoka4AMVCggCmwECHgEWIQSMGfEqg4bQ7z/Ar9KNf+jZDwcO+wAAz2wA /j1NbNF4BWWzdtFZ8/n3VWqd14E33vLv+kcps36ETrZWAP9LDrqz3JLu05+uxq/J icnUC2DOPNuqjSdI0aC/2fPSBc0SPHUxMjFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQjX/o2Q8HDvtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn1gRwq9I2hqWdmV6TOwuTSLwbtJVN7b9SqoQXUf2DS1wDFQoI ApkBApsBAh4BFiEEjBnxKoOG0O8/wK/SjX/o2Q8HDvsAAKY4AQCGiucRFkUhU0Vy 2lb69ZMPFNj8lt/FrzK/har6WsnvJAD9EFYz28fyJKw5Re08QRgyZSfLUaMpTLWs 0Y1+JLX1PgnCwAEEEBYKAHMFgmH0COsDhf94CRBAs0FCqmc5e0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdQwad0yhgl97GTTHAQFQo2r3L5 n57VgEckuONXGOnJUxYhBJfVkv3mGZ46T2tDf0CzQUKqZzl7AAAZ4AEA9K5SDkp4 9bSpT5vEcInIfcsVB5vA4DxY6zDZd42db08A/2YT3E8tfwJUmERBdwbNBJ8UEwVg HcovcNmFJDVQ+z4I =1t8g -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u122-priv.pgp000064400000000000000000000015601046102023000222630ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5B87 566B AA2C 8EC7 8C7D 4459 4F21 D5AB A367 67F2 Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdARnqkzVArtc5Nk7REOmDVdYqYuaycc1S4mmmh LOM5wDcAAP9OStIqJ/38mkPjngtp8LKLNWDXygBaJXIhVZ1314lVQxBbwsALBB8W CgB9BYJh8/a1AwsJBwkQTyHVq6NnZ/JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn8uBB9AruhTWek+xdfQzXoXly1wwVOQ8qCdlqhCjF0LoD FQoIApsBAh4BFiEEW4dWa6osjseMfURZTyHVq6NnZ/IAAIgoAQCsrpEmWpJwhZ7E TcH7TyEas59aRSNdt7CIhRzYWEm9qAEA5Ee1/MJPGbMxn2vZMMg82P7BL+1/Huq6 dKZvf69e2g3NEjx1MTIyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EE8h1aujZ2fyRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2fcXZnTpKDRvr2JClLUvetg/sRetVTNi8akPE6PT1bQAxUKCAKZAQKbAQIeARYh BFuHVmuqLI7HjH1EWU8h1aujZ2fyAAATkAD+KOQs+u1nBriS6MhZF2/T3Zi9NpKr T0e/3CLao6t8P9QA/3ohOo4gLNrW5yirO4xpTBTQgkxy6ZJzFTi87dZPKPAI =Slk5 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u122.pgp000064400000000000000000000017561046102023000213140ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdARnqkzVArtc5Nk7REOmDVdYqYuaycc1S4mmmh LOM5wDfCwAsEHxYKAH0FgmHz9rUDCwkHCRBPIdWro2dn8kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfy4EH0Cu6FNZ6T7F19DNeheXLXDBU5 DyoJ2WqEKMXQugMVCggCmwECHgEWIQRbh1ZrqiyOx4x9RFlPIdWro2dn8gAAiCgB AKyukSZaknCFnsRNwftPIRqzn1pFI123sIiFHNhYSb2oAQDkR7X8wk8ZszGfa9kw yDzY/sEv7X8e6rp0pm9/r17aDc0SPHUxMjJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQTyHVq6NnZ/JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnZ9xdmdOkoNG+vYkKUtS962D+xF61VM2LxqQ8To9PVtADFQoI ApkBApsBAh4BFiEEW4dWa6osjseMfURZTyHVq6NnZ/IAABOQAP4o5Cz67WcGuJLo yFkXb9PdmL02kqtPR7/cItqjq3w/1AD/eiE6jiAs2tbnKKs7jGlMFNCCTHLpknMV OLzt1k8o8AjCwAEEEBYKAHMFgmH0COsDhf94CRCNf+jZDwcO+0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd3heivdGj5eP1r/Cr5fupzVeml SOziBiPAeEaYpytdvRYhBIwZ8SqDhtDvP8Cv0o1/6NkPBw77AAAMmgD9HcsW5v1b 9CzS22PDfmUD3fAQgNpqruAsB3cgwyQdFaIBALuSxwYSE8DvLalhqoShsTW+8Fre U50xS1d44pHjLnsB =GiF5 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u123-priv.pgp000064400000000000000000000015601046102023000222640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 53AB 6BCC E111 1DCD 151E 6662 5F52 509F C67F 4076 Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAqlJEnzUOl5wYn+20F7Fz5UwWJOXW7fMdL2Cm GuXJbHEAAP0VzDRuEGnyRdZugyZA/KMRYDLisIOu/mgP+3Kzoqc8ZxDjwsALBB8W CgB9BYJh8/a1AwsJBwkQX1JQn8Z/QHZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnOdLf3b3ye+SsRxrSdzrlq2tE7jaZ8JdisYT70EweEs0D FQoIApsBAh4BFiEEU6trzOERHc0VHmZiX1JQn8Z/QHYAAC/AAQDE+4OCnERfJ6rw DsO7pNG3jh0h8O4V9qbo5w+El1LZiAD+K2+cE/0E2IpctqXasAu3fIvhjGjoBgx/ 2rz8ZC54mAHNEjx1MTIzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EF9SUJ/Gf0B2RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5WpvkWjiXql1/B3DwIDDPAIbWp0ybeLLQ719qRcnn/uAxUKCAKZAQKbAQIeARYh BFOra8zhER3NFR5mYl9SUJ/Gf0B2AAAFcAD+IVlPXVyyC6dIo0fPem5Z+twAH8Hz HZus1CtHj1rmHcQBAOuwiaBIEGE8+Jnou/G8IpZOlATc0s9T7J8NfdgWUuwP =kiwN -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u123.pgp000064400000000000000000000017561046102023000213150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAqlJEnzUOl5wYn+20F7Fz5UwWJOXW7fMdL2Cm GuXJbHHCwAsEHxYKAH0FgmHz9rUDCwkHCRBfUlCfxn9AdkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc50t/dvfJ75KxHGtJ3OuWra0TuNpnw l2KxhPvQTB4SzQMVCggCmwECHgEWIQRTq2vM4REdzRUeZmJfUlCfxn9AdgAAL8AB AMT7g4KcRF8nqvAOw7uk0beOHSHw7hX2pujnD4SXUtmIAP4rb5wT/QTYily2pdqw C7d8i+GMaOgGDH/avPxkLniYAc0SPHUxMjNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQX1JQn8Z/QHZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnlam+RaOJeqXX8HcPAgMM8AhtanTJt4stDvX2pFyef+4DFQoI ApkBApsBAh4BFiEEU6trzOERHc0VHmZiX1JQn8Z/QHYAAAVwAP4hWU9dXLILp0ij R896bln63AAfwfMdm6zUK0ePWuYdxAEA67CJoEgQYTz4mei78bwilk6UBNzSz1Ps nw192BZS7A/CwAEEEBYKAHMFgmH0COsDhf94CRBPIdWro2dn8kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdzz/CLyr42gVFhHICAkUt60Fe0 Ze8OAy6FiGfgIl8PDhYhBFuHVmuqLI7HjH1EWU8h1aujZ2fyAACmfQEA0mulNYhu CeqlDhn5KDV9tyGSmJSkCljZx8KQWJbLlXUBAMviT0Crnbhi9t5nEfnUuLRd9fVc RuPM08pZNzjrrkwN =fkXI -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u124-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 318D A1A8 A8E9 2698 EAAC 0AB4 6840 6FF3 D0B6 733A Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAbVnSPTl099N7r5nZkDY0sYn1Vpa2e3MmA6kL LvDottEAAPwP+/vz1rE6Bph9AqHLdohpcsVIl44giHgiGjMguadYHw/PwsALBB8W CgB9BYJh8/a1AwsJBwkQaEBv89C2czpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnQZAHKj1RFif64wuQsWTKOzK86QCQsb/TTFNf6pOb4zQD FQoIApsBAh4BFiEEMY2hqKjpJpjqrAq0aEBv89C2czoAALfXAQCqzPOuLHFLv3Dp xH7MRgb2p4RZVW3SJ+0vEbaHd43VLgEAo5wtNwqXg41mPxf12MX1oaCOO45kjWIO 2NMd660l9QjNEjx1MTI0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EGhAb/PQtnM6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6dfxe0o5A1kO5se5kV8UJMGEzwrScNWN7/s3KYILU3pAxUKCAKZAQKbAQIeARYh BDGNoaio6SaY6qwKtGhAb/PQtnM6AADhpgD9GRnR7nEZX2zLUtjMLhmsbAfiRQAb aO07IQy+8U92fjsBAKk5mhehEng0weXP7D/dqFaMsdlZ+5Ffxn2j3BuLjisO =HS8H -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u124.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAbVnSPTl099N7r5nZkDY0sYn1Vpa2e3MmA6kL LvDottHCwAsEHxYKAH0FgmHz9rUDCwkHCRBoQG/z0LZzOkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdBkAcqPVEWJ/rjC5CxZMo7MrzpAJCx v9NMU1/qk5vjNAMVCggCmwECHgEWIQQxjaGoqOkmmOqsCrRoQG/z0LZzOgAAt9cB AKrM864scUu/cOnEfsxGBvanhFlVbdIn7S8Rtod3jdUuAQCjnC03CpeDjWY/F/XY xfWhoI47jmSNYg7Y0x3rrSX1CM0SPHUxMjRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQaEBv89C2czpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnp1/F7SjkDWQ7mx7mRXxQkwYTPCtJw1Y3v+zcpggtTekDFQoI ApkBApsBAh4BFiEEMY2hqKjpJpjqrAq0aEBv89C2czoAAOGmAP0ZGdHucRlfbMtS 2MwuGaxsB+JFABto7TshDL7xT3Z+OwEAqTmaF6ESeDTB5c/sP92oVoyx2Vn7kV/G faPcG4uOKw7CwAEEEBYKAHMFgmH0COsDhf94CRBfUlCfxn9AdkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfqfg7JHoFhH/A/InWLWEaSwoyP v1ii8MuuYthiMzXnqhYhBFOra8zhER3NFR5mYl9SUJ/Gf0B2AADM2wD/dfHG1YrV q5+ayCyXn2U8bP2GXKdKsfmR8mewftCzYI0BAMoEAOMy+Pd4PTwmQ3lWgnJqa0m3 4oxC6eHWpWJN5CEL =X8v0 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u125-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3500 68CC CD29 5D7E B80C 6A97 060F CBD1 5175 ADB2 Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAkuAXYDvY+uyKS2VOA/z5ZSRimPfOlywmRXID xAv0vHsAAQC6434e+AoxUx8iJZ2y41CihWEVl5c9DbABTFzqcVKZLQ2JwsALBB8W CgB9BYJh8/a1AwsJBwkQBg/L0VF1rbJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn93O2hHNt2duPxNGmYMWZBXaOHmmt1Qq3CV+K6Ny/iEMD FQoIApsBAh4BFiEENQBozM0pXX64DGqXBg/L0VF1rbIAABftAP4mJnMoJHlWGOHI 8u5tGOMbh6w2aWPQMMbJ9WaJcoiTYAEAyn+GWi8DooXKfh2G1b2Esmi5DvhXzO1B xW2X/SLgxAjNEjx1MTI1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EAYPy9FRda2yRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zwmn6sGytcPOvsL5HnxCripLVnrm6MfmOGST8UBJ+BxaAxUKCAKZAQKbAQIeARYh BDUAaMzNKV1+uAxqlwYPy9FRda2yAAAIQgEApZrQyzK2ANTjEx9WWXXI1kJHfUj5 wLYaYYIZUfdwNzsBAL0Lkk5xPexDe0PrVEBUmMYNhP1vNqBh97wpCItLv8wB =Kpu1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u125.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAkuAXYDvY+uyKS2VOA/z5ZSRimPfOlywmRXID xAv0vHvCwAsEHxYKAH0FgmHz9rUDCwkHCRAGD8vRUXWtskcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf3c7aEc23Z24/E0aZgxZkFdo4eaa3V CrcJX4ro3L+IQwMVCggCmwECHgEWIQQ1AGjMzSldfrgMapcGD8vRUXWtsgAAF+0A /iYmcygkeVYY4cjy7m0Y4xuHrDZpY9Awxsn1ZolyiJNgAQDKf4ZaLwOihcp+HYbV vYSyaLkO+FfM7UHFbZf9IuDECM0SPHUxMjVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQBg/L0VF1rbJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnCafqwbK1w86+wvkefEKuKktWeubox+Y4ZJPxQEn4HFoDFQoI ApkBApsBAh4BFiEENQBozM0pXX64DGqXBg/L0VF1rbIAAAhCAQClmtDLMrYA1OMT H1ZZdcjWQkd9SPnAthphghlR93A3OwEAvQuSTnE97EN7Q+tUQFSYxg2E/W82oGH3 vCkIi0u/zAHCwAEEEBYKAHMFgmH0COsDhf94CRBoQG/z0LZzOkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme/hTVvnA8azyqbzmM+LC4BXzXg GDNkbTMJtxjX2aTjWxYhBDGNoaio6SaY6qwKtGhAb/PQtnM6AABBnwD/XVHlEUqc xwCTPBfpiGazISE4oW413SCcMcfvf+Sdyw8BANqFa+TI299JJsOzQ9CteBtryMPA RDG4OecShdp95fkA =LXoi -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u126-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3A7D F039 CCCA 3B3C 9286 B016 19D8 EA30 2427 C910 Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAiPEauq30ElhdgGvuHzGOGBuTvPXAkMlUJsC7 /Rd8lJQAAP0T7uw23lQ+28tdmXLCmMgP+tcYl9WXEkyxl2v+f1/zZBL/wsALBB8W CgB9BYJh8/a1AwsJBwkQGdjqMCQnyRBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn5bqoMuSkEnde97jTJrX+BRfZs14+EG7noLsUAhQtcWAD FQoIApsBAh4BFiEEOn3wOczKOzyShrAWGdjqMCQnyRAAAJiJAP9sKfOMpxmCOcMP rOIiqmVtCM0jzV2DbeB3d03yPxCb4QEAtDa3OnPX4KCldAdtwCY2EGgqzgeqtqoT p3xwmLDZWgTNEjx1MTI2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EBnY6jAkJ8kQRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/SCQitnfI4qwn5rNNZUWy+po3/zJSq7c0CdpNyzRPddAxUKCAKZAQKbAQIeARYh BDp98DnMyjs8koawFhnY6jAkJ8kQAACLiwEAkfVn5UAuC2rXiZAXMhR0xbd4Yl6E iqd1fmueX9f4jgsA/RzSpTKeeebuZvPc9dkIdjBw1aSxfXNJNQM7Yf869cIO =9zHq -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u126.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAiPEauq30ElhdgGvuHzGOGBuTvPXAkMlUJsC7 /Rd8lJTCwAsEHxYKAH0FgmHz9rUDCwkHCRAZ2OowJCfJEEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfluqgy5KQSd173uNMmtf4FF9mzXj4Q bueguxQCFC1xYAMVCggCmwECHgEWIQQ6ffA5zMo7PJKGsBYZ2OowJCfJEAAAmIkA /2wp84ynGYI5ww+s4iKqZW0IzSPNXYNt4Hd3TfI/EJvhAQC0Nrc6c9fgoKV0B23A JjYQaCrOB6q2qhOnfHCYsNlaBM0SPHUxMjZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQGdjqMCQnyRBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn9IJCK2d8jirCfms01lRbL6mjf/MlKrtzQJ2k3LNE910DFQoI ApkBApsBAh4BFiEEOn3wOczKOzyShrAWGdjqMCQnyRAAAIuLAQCR9WflQC4LateJ kBcyFHTFt3hiXoSKp3V+a55f1/iOCwD9HNKlMp555u5m89z12Qh2MHDVpLF9c0k1 Azth/zr1wg7CwAEEEBYKAHMFgmH0COsDhf94CRAGD8vRUXWtskcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcJ8NlQ/JsUOEdYjlamA3z0GY7k o3NItFtLx0CwiG+kDhYhBDUAaMzNKV1+uAxqlwYPy9FRda2yAADeSgD/ckOYdpqk Oimxl7eMYREgioRNY4ZkCY5cl6kzSzT3RZkA/2X0eHGQtBKtg86T8UBnDla8U3lZ 0fX19XV47QtpYoMB =DVna -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u127-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3C96 4F3E 9C57 3307 53EE 5923 B49F C019 7440 0307 Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAhZp1VSwAf//ZC3aFIMIioKCcIojZKZpq/4Hi dUOC7/0AAP45qxR3aGGhkBVonPG0EUdJ0QfoJgJ1cna/OXPQSARkmw6RwsALBB8W CgB9BYJh8/a1AwsJBwkQtJ/AGXRAAwdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn+JQQcHxasMU99QRH6aCY2+ubVwoAxiqXoIprsCfdCyMD FQoIApsBAh4BFiEEPJZPPpxXMwdT7lkjtJ/AGXRAAwcAAKklAQDX7qwFcP9LCMdW KLsF3Q34nmHz9leCE/2hboIFjZntVwEAuaHZ8LDNU3+USJHfVm2Jp0kpGgu3pfEf mk2cPk3g7A7NEjx1MTI3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ ELSfwBl0QAMHRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+PEMBrlcOgeZwPYPwdpqbErbeYjjpqFzk1zvB2KAXAmAxUKCAKZAQKbAQIeARYh BDyWTz6cVzMHU+5ZI7SfwBl0QAMHAADXRwD/fs2YZxEB55+wtiB4PsooKP5+eRff crDT11TE3s4ZUbUA/jkz40ldrFOeeCHtLdA+sJoMO4vDYeZW/UvLK2NFpTcO =MNuJ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u127.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAhZp1VSwAf//ZC3aFIMIioKCcIojZKZpq/4Hi dUOC7/3CwAsEHxYKAH0FgmHz9rUDCwkHCRC0n8AZdEADB0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf4lBBwfFqwxT31BEfpoJjb65tXCgDG KpegimuwJ90LIwMVCggCmwECHgEWIQQ8lk8+nFczB1PuWSO0n8AZdEADBwAAqSUB ANfurAVw/0sIx1YouwXdDfieYfP2V4IT/aFuggWNme1XAQC5odnwsM1Tf5RIkd9W bYmnSSkaC7el8R+aTZw+TeDsDs0SPHUxMjdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQtJ/AGXRAAwdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn48QwGuVw6B5nA9g/B2mpsStt5iOOmoXOTXO8HYoBcCYDFQoI ApkBApsBAh4BFiEEPJZPPpxXMwdT7lkjtJ/AGXRAAwcAANdHAP9+zZhnEQHnn7C2 IHg+yigo/n55F99ysNPXVMTezhlRtQD+OTPjSV2sU554Ie0t0D6wmgw7i8Nh5lb9 S8srY0WlNw7CwAEEEBYKAHMFgmH0COsDhf94CRAZ2OowJCfJEEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcDqrlOFoREFBlXxAOBK4sUZ87i TqvOLzIqAufMrwoskBYhBDp98DnMyjs8koawFhnY6jAkJ8kQAADUBgEAz+zQFrVC P67JB49zmYePeukmPPGTKk5wky/noCRzDA0BAIJQgCb2Lq/gC3qW1iYIle1v6pdd bhjqbAf//YBIVE8E =iyBe -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u128-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4E9E 5E2E 1A86 8706 DAAD FD5A 362C 6682 8E5E 4621 Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAIeJ067TAfp1ycNd7xQN+7/8tsKr+FBrc4t4s 59DIkt8AAQDCO18EX/wi39NmLkM1ddczMRf6wxq6gxmeP4AiONrVlg6MwsALBB8W CgB9BYJh8/a1AwsJBwkQNixmgo5eRiFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnWetou8gJMeKfK4zHVnTyq+vH+f0h9lAOws6TT8JGrl4D FQoIApsBAh4BFiEETp5eLhqGhwbarf1aNixmgo5eRiEAAIJsAQDYvhl1s+y0DMlx WtclsxmCJ+HJJyCvMp9Y+v9wwjv3BwEA6y8h18gTCBA21fK6h3QC30U955w2BLlh MihamleMSw/NEjx1MTI4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EDYsZoKOXkYhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3jZNWJKI0B6YJqbZ+95oeiNgBouHz9N/mJhO3ah5HgbAxUKCAKZAQKbAQIeARYh BE6eXi4ahocG2q39WjYsZoKOXkYhAABbHwEAx1fEGYe1PKbf3sNG5fVqCdEZD3VO 7pMpUUD/vEu4WNcA/3qFZ47aLOpXhOjKsAUswnpw1sPWP0sf4Xsw/i/REwYO =FDrR -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u128.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAIeJ067TAfp1ycNd7xQN+7/8tsKr+FBrc4t4s 59DIkt/CwAsEHxYKAH0FgmHz9rUDCwkHCRA2LGaCjl5GIUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdZ62i7yAkx4p8rjMdWdPKr68f5/SH2 UA7CzpNPwkauXgMVCggCmwECHgEWIQROnl4uGoaHBtqt/Vo2LGaCjl5GIQAAgmwB ANi+GXWz7LQMyXFa1yWzGYIn4cknIK8yn1j6/3DCO/cHAQDrLyHXyBMIEDbV8rqH dALfRT3nnDYEuWEyKFqaV4xLD80SPHUxMjhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQNixmgo5eRiFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JneNk1YkojQHpgmptn73mh6I2AGi4fP03+YmE7dqHkeBsDFQoI ApkBApsBAh4BFiEETp5eLhqGhwbarf1aNixmgo5eRiEAAFsfAQDHV8QZh7U8pt/e w0bl9WoJ0RkPdU7ukylRQP+8S7hY1wD/eoVnjtos6leE6MqwBSzCenDWw9Y/Sx/h ezD+L9ETBg7CwAEEEBYKAHMFgmH0COsDhf94CRC0n8AZdEADB0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeIRIpbhOf34rA2Dyf63j/U7h8+ 4TKhZYGP5z2L492GNhYhBDyWTz6cVzMHU+5ZI7SfwBl0QAMHAACBPgEAmA9EEY0Z ShT94v0ubBRviQV2izrVimwLl4xH/22X0BQBAMneZzgcMRYJ6UJ8VTzl4tzDzwjQ Gpj+0y2Bwwc8RHMN =OHmL -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u129-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3632 8DA9 EAC8 5DB4 6843 FA16 8A4A A6C4 B47A DE22 Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAG01R0xEZ08w4Lx9uzPjv2bdpLNQB0NXvzG0s SDPfnSwAAQCehdN6Ux7+IxNwbHqgqdnaby0rdrjjafXmT/Q3hKCt2xGqwsALBB8W CgB9BYJh8/a1AwsJBwkQikqmxLR63iJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnvkJwDcv0IOhlpwqM1hJKxM2qjgIlp2hRR2azhaxFwocD FQoIApsBAh4BFiEENjKNqerIXbRoQ/oWikqmxLR63iIAAIshAPwMpLvLDparmcav RqXIDBpnTKa6Ypz9XItAmWk1jrbiegD/YSNv4gh8kh3HDgJqN6D3C8uzYW4ohwD2 S2HLp0eJbwPNEjx1MTI5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EIpKpsS0et4iRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z97RaOjosX8Spk5qajF8dKikkNeU1fFMet1h3WE1R0ozAxUKCAKZAQKbAQIeARYh BDYyjanqyF20aEP6FopKpsS0et4iAAA/bAD7B3yhrDu2Qwe9bksC/XJhPSrfHM1f 0n1ylZ7YQzQrOdcBAKqFuWv7N0lsHIJ4cE0TConds2VJRihlUH5Hzaa99VgE =mv5Q -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u129.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAG01R0xEZ08w4Lx9uzPjv2bdpLNQB0NXvzG0s SDPfnSzCwAsEHxYKAH0FgmHz9rUDCwkHCRCKSqbEtHreIkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme+QnANy/Qg6GWnCozWEkrEzaqOAiWn aFFHZrOFrEXChwMVCggCmwECHgEWIQQ2Mo2p6shdtGhD+haKSqbEtHreIgAAiyEA /Ayku8sOlquZxq9GpcgMGmdMprpinP1ci0CZaTWOtuJ6AP9hI2/iCHySHccOAmo3 oPcLy7NhbiiHAPZLYcunR4lvA80SPHUxMjlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQikqmxLR63iJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn3tFo6OixfxKmTmpqMXx0qKSQ15TV8Ux63WHdYTVHSjMDFQoI ApkBApsBAh4BFiEENjKNqerIXbRoQ/oWikqmxLR63iIAAD9sAPsHfKGsO7ZDB71u SwL9cmE9Kt8czV/SfXKVnthDNCs51wEAqoW5a/s3SWwcgnhwTRMKid2zZUlGKGVQ fkfNpr31WATCwAEEEBYKAHMFgmH0COsDhf94CRA2LGaCjl5GIUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcE6YqqQMChACJQOOPKeznBdhaL sEz9VqausKcc8Xw6FhYhBE6eXi4ahocG2q39WjYsZoKOXkYhAADCHwD+Ixir06Px 7h7XY8rwZWCHkZh7iaVhymEXhqsD4+k/L8wBAIpmydzUkNFTCf9fFniz2bR0GaMe kAbYbVOHk6WuPbIA =1WKM -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u13-priv.pgp000064400000000000000000000015571046102023000222100ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CB7C 6D3F CBB8 DA0B 3D7F 6EC0 DD19 3A96 5175 79DC Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAjeITIZZQk26OjE41/auIvN3qCUTgD3feXR1U /EDX9s4AAQCCKFlBy/CbxclITW2ZESr4bNripBQUjQ46K7yp8QmM9g/MwsALBB8W CgB9BYJh8/awAwsJBwkQ3Rk6llF1edxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnd2K8F0li1DoTqEChwIa8+jT5VLbl3Qpe3+otwIhq7YgD FQoIApsBAh4BFiEEy3xtP8u42gs9f27A3Rk6llF1edwAALx3AQCieE3Q1SDtW66V 2cAIj2aTkhPCN5AkW2dHrqQpzxXLpgD/QQzAOystke+l9Up56YBFu/xgxWCCdhKt 8uMwNmPZgw/NETx1MTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ 3Rk6llF1edxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn slS1C6DHy5797YR80A3d+idKanOtY+QkzvcMlUwbE5EDFQoIApkBApsBAh4BFiEE y3xtP8u42gs9f27A3Rk6llF1edwAAOlbAPwMBApghTKalZHbQWvyFhZJsvwIM6Av QcMFW1PJeNDdAAD/Y7MgAztNlHFZkDPDSr0ekKDKtRnHm8JKh+MONIdOdwo= =WlIA -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u13.pgp000064400000000000000000000017561046102023000212330ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAjeITIZZQk26OjE41/auIvN3qCUTgD3feXR1U /EDX9s7CwAsEHxYKAH0FgmHz9rADCwkHCRDdGTqWUXV53EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd3YrwXSWLUOhOoQKHAhrz6NPlUtuXd Cl7f6i3AiGrtiAMVCggCmwECHgEWIQTLfG0/y7jaCz1/bsDdGTqWUXV53AAAvHcB AKJ4TdDVIO1brpXZwAiPZpOSE8I3kCRbZ0eupCnPFcumAP9BDMA7Ky2R76X1Snnp gEW7/GDFYIJ2Eq3y4zA2Y9mDD80RPHUxM0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRDdGTqWUXV53EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeyVLULoMfLnv3thHzQDd36J0pqc61j5CTO9wyVTBsTkQMVCggC mQECmwECHgEWIQTLfG0/y7jaCz1/bsDdGTqWUXV53AAA6VsA/AwECmCFMpqVkdtB a/IWFkmy/AgzoC9BwwVbU8l40N0AAP9jsyADO02UcVmQM8NKvR6QoMq1GcebwkqH 4w40h053CsLAAQQQFgoAcwWCYfQI5wOF/3gJEEOpZj3fffFoRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzVg6XivfClpaPbMNaKKEFR9plHm dNh9KArJdULliexDFiEEnIJF8t0G5KL+IfsWQ6lmPd998WgAAPyPAQDVlm9d7C5p QKePNWbKrvFN/FiOCQXaiJnPcvM0OfT+WwD/WHSw4qna2sEPiE6BTu4rRgS2xJ96 tpBWSdsnwbAtqgs= =s83k -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u130-priv.pgp000064400000000000000000000015601046102023000222620ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0AB2 0633 A6D6 36B8 0337 EFE3 4037 02D8 9A3C D852 Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAxDS5amJY+2JrWNCHWSzAbyrkCpPrW8imiQwH DIezjIMAAQCmn9rX0ENa1vEhT4yEu7j7IryCoeDoP4NqRitAdgNb/hGRwsALBB8W CgB9BYJh8/a1AwsJBwkQQDcC2Jo82FJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnf0JtTvyjt3IQd0LH1zDEmSjAdXVsJD2ZL97984GlA5AD FQoIApsBAh4BFiEECrIGM6bWNrgDN+/jQDcC2Jo82FIAAKVBAQCtZ2ixcf/FVB3W gKTZdLAoaL80HgSmkp/YHX6WJLILkwEAyRIvL4692a8VQy1gaTHRV2JgD9ABxwB9 0CgX0lrL+QfNEjx1MTMwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EEA3AtiaPNhSRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z9FCiK9dvpRWr5klx2aEKjrtIhbvqSPlK/aYfD6SgCx0AxUKCAKZAQKbAQIeARYh BAqyBjOm1ja4Azfv40A3AtiaPNhSAABiJQEAzii7lYmZhNk6hwgdTHBdgNhc2Mje HWYeWTXBunNuQrcA/2VLEI3ZWFT9wBlak8ZmAeqtLR2Kgca7uzKmbiHtC+ME =Ksi3 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u130.pgp000064400000000000000000000017561046102023000213130ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAxDS5amJY+2JrWNCHWSzAbyrkCpPrW8imiQwH DIezjIPCwAsEHxYKAH0FgmHz9rUDCwkHCRBANwLYmjzYUkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd/Qm1O/KO3chB3QsfXMMSZKMB1dWwk PZkv3v3zgaUDkAMVCggCmwECHgEWIQQKsgYzptY2uAM37+NANwLYmjzYUgAApUEB AK1naLFx/8VUHdaApNl0sChovzQeBKaSn9gdfpYksguTAQDJEi8vjr3ZrxVDLWBp MdFXYmAP0AHHAH3QKBfSWsv5B80SPHUxMzBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQQDcC2Jo82FJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn0UKIr12+lFavmSXHZoQqOu0iFu+pI+Ur9ph8PpKALHQDFQoI ApkBApsBAh4BFiEECrIGM6bWNrgDN+/jQDcC2Jo82FIAAGIlAQDOKLuViZmE2TqH CB1McF2A2FzYyN4dZh5ZNcG6c25CtwD/ZUsQjdlYVP3AGVqTxmYB6q0tHYqBxru7 MqZuIe0L4wTCwAEEEBYKAHMFgmH0COsDhf94CRCKSqbEtHreIkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdW8irE8kqYWkiodlZhN2y9g88x 8cbOJ2LTba3teUwjlBYhBDYyjanqyF20aEP6FopKpsS0et4iAAChZAEAgBVTVyhQ Fwrx3JKAbCnXRUny+717KFPnj6OIrLXBr+YBAPrMwLKYC2pa5iqlfBZdF3JJaCoX oi/uX3wwhbdC6nsA =tonn -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u131-priv.pgp000064400000000000000000000015601046102023000222630ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8CDF 07D3 CEA5 ED1B 72EC D886 9CA0 A447 943C 1F3B Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAc+hcRv49igmO4BI8fvZjG5ofLYO6c/GqKw7A 5rkWmSYAAQCZl4sQ4RfxmUoqf2sfG5DGkN9N4DhjrEFyDtQ9ewwh+A6RwsALBB8W CgB9BYJh8/a1AwsJBwkQnKCkR5Q8HztHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnx/3+9UKp9yeaulJ1/jSGOWg8VOro+l/RcCXp6VX+BD4D FQoIApsBAh4BFiEEjN8H086l7Rty7NiGnKCkR5Q8HzsAAJK+AQCv2eX+mtHUmvO7 PYhEyuplZ+B19m45o9708qKkTYBp9gD/RrHP8BGmVzj1ZNcqoZITCZF6DNQLZ84P bVbmM8fdiATNEjx1MTMxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EJygpEeUPB87RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2U0CWJ94xqbv+qJJC3PEz1EezF7JCAgR81sGGV3hEHvAxUKCAKZAQKbAQIeARYh BIzfB9POpe0bcuzYhpygpEeUPB87AACP1gEAvOWro++yRl1qbSD6GKRTxYZf+CRW 8GmzgM6o4EpL/vAA/0dkNQFHJFcXxdEcw6R3+ZGMqI1Gd4El2qHEX3waRIoI =xYwK -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u131.pgp000064400000000000000000000017561046102023000213140ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAc+hcRv49igmO4BI8fvZjG5ofLYO6c/GqKw7A 5rkWmSbCwAsEHxYKAH0FgmHz9rUDCwkHCRCcoKRHlDwfO0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfH/f71Qqn3J5q6UnX+NIY5aDxU6uj6 X9FwJenpVf4EPgMVCggCmwECHgEWIQSM3wfTzqXtG3Ls2IacoKRHlDwfOwAAkr4B AK/Z5f6a0dSa87s9iETK6mVn4HX2bjmj3vTyoqRNgGn2AP9Gsc/wEaZXOPVk1yqh khMJkXoM1Atnzg9tVuYzx92IBM0SPHUxMzFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQnKCkR5Q8HztHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnZTQJYn3jGpu/6okkLc8TPUR7MXskICBHzWwYZXeEQe8DFQoI ApkBApsBAh4BFiEEjN8H086l7Rty7NiGnKCkR5Q8HzsAAI/WAQC85auj77JGXWpt IPoYpFPFhl/4JFbwabOAzqjgSkv+8AD/R2Q1AUckVxfF0RzDpHf5kYyojUZ3gSXa ocRffBpEigjCwAEEEBYKAHMFgmH0COsDhf94CRBANwLYmjzYUkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmciacZfZOvXL+Fk6P2lgkrygREz E+X0Rz5DmHymnWMePRYhBAqyBjOm1ja4Azfv40A3AtiaPNhSAABg+AD/cBoDWebe /Zco7LjIewi5xf6LisF1miFpSAZCqSaU65MBAM1OJ8BIlZf8XQc0jmtpxJ3/Yhp2 p9MKJPt6FTlUAxED =Eze9 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u132-priv.pgp000064400000000000000000000015601046102023000222640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E052 363B DCA7 BB37 4570 774F 9EE1 EA2E 8BF8 8026 Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdAvI07wkiWbhPydpOECO6PzrELhSBVPxvizD5F 2TQdxqYAAP9bV7dcW2DyPBguhJNMA8acaJ4TbEDsoho78CznMHdUQQ6iwsALBB8W CgB9BYJh8/a1AwsJBwkQnuHqLov4gCZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnbnFtlf6OlqASwQNwYhYIDeP7C6HpGhOJ89mdM+0RIw8D FQoIApsBAh4BFiEE4FI2O9ynuzdFcHdPnuHqLov4gCYAAE0XAQC7365HN/0L2Ve8 wxpW+DdBxS1UTv/cPwHCKqtLOuS3ugEApx7txjy4vSujoAWADsbOff1me9ZQJ7+3 NCQ39GiKCw/NEjx1MTMyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EJ7h6i6L+IAmRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4JjvJFrUOAbhzPXQfrWop2r54hRtr0Snvi5mZCGdrXzAxUKCAKZAQKbAQIeARYh BOBSNjvcp7s3RXB3T57h6i6L+IAmAAA3ZAD/QFnE4Tx8804JgPRvQvRyNRBvgdDN MR1NiwwrFL0WbQEA/3Jhp3rhFIA7a9gs63yHaOwbGYyLGXKQTRP3yME0MgsM =MJVB -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u132.pgp000064400000000000000000000017561046102023000213150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdAvI07wkiWbhPydpOECO6PzrELhSBVPxvizD5F 2TQdxqbCwAsEHxYKAH0FgmHz9rUDCwkHCRCe4eoui/iAJkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmducW2V/o6WoBLBA3BiFggN4/sLoeka E4nz2Z0z7REjDwMVCggCmwECHgEWIQTgUjY73Ke7N0Vwd0+e4eoui/iAJgAATRcB ALvfrkc3/QvZV7zDGlb4N0HFLVRO/9w/AcIqq0s65Le6AQCnHu3GPLi9K6OgBYAO xs59/WZ71lAnv7c0JDf0aIoLD80SPHUxMzJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQnuHqLov4gCZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JngmO8kWtQ4BuHM9dB+tainavniFG2vRKe+LmZkIZ2tfMDFQoI ApkBApsBAh4BFiEE4FI2O9ynuzdFcHdPnuHqLov4gCYAADdkAP9AWcThPHzzTgmA 9G9C9HI1EG+B0M0xHU2LDCsUvRZtAQD/cmGneuEUgDtr2CzrfIdo7BsZjIsZcpBN E/fIwTQyCwzCwAEEEBYKAHMFgmH0COwDhf94CRCcoKRHlDwfO0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd0wSGELArS+sG04o3s6SYkFMmq 2g4C0CSLkVPL+WAp6xYhBIzfB9POpe0bcuzYhpygpEeUPB87AAAxmQEA+D4zbest IPT8Wt1NcYAbADftYqHqsghtUqk+NHRYDE8A/2Z4hg3sUBfavmIkI+xBvzNz1/Vf UF31dWCzEH7YNsEO =TZyn -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u133-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6603 EA82 3BC6 41A4 65D8 E5C4 5EDA D323 60ED FC6A Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdA/tU0+4pWDIU1yK1VVbK6N6llZLIp8pRyzEr4 fyM61fEAAQCA0Q1DEFwWuGbj0AW+Y9EoMq0DQ68G6VW0LbaZ+UiwHg5rwsALBB8W CgB9BYJh8/a1AwsJBwkQXtrTI2Dt/GpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnEbr8Je2vQzeSRBVp7xGP831b0k5kmV7XKhAw8BJ6eqwD FQoIApsBAh4BFiEEZgPqgjvGQaRl2OXEXtrTI2Dt/GoAAOjIAQCOmqPf6xBpMd88 1iTap+iv33UWcIP1p+bbYLnfmzMJLgEAr5c5wuKOaokYgLQ6YeQMmkEjTA3AdO2+ IXwACa+LygLNEjx1MTMzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EF7a0yNg7fxqRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/jfCzJLlwrveody9exbAhog+aOTgiTMahpudwz/rlSaAxUKCAKZAQKbAQIeARYh BGYD6oI7xkGkZdjlxF7a0yNg7fxqAADD5AEAgAR5NoYLFHjZKTHaGZHx88ITtC1l yV10Qj4TKqIl26YBAO7Wxc7vSmw8RvGNCVsFxD5XAVYyv3LBgM+qLkqTde0O =4/HA -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u133.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdA/tU0+4pWDIU1yK1VVbK6N6llZLIp8pRyzEr4 fyM61fHCwAsEHxYKAH0FgmHz9rUDCwkHCRBe2tMjYO38akcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcRuvwl7a9DN5JEFWnvEY/zfVvSTmSZ XtcqEDDwEnp6rAMVCggCmwECHgEWIQRmA+qCO8ZBpGXY5cRe2tMjYO38agAA6MgB AI6ao9/rEGkx3zzWJNqn6K/fdRZwg/Wn5ttgud+bMwkuAQCvlznC4o5qiRiAtDph 5AyaQSNMDcB07b4hfAAJr4vKAs0SPHUxMzNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQXtrTI2Dt/GpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn+N8LMkuXCu96h3L17FsCGiD5o5OCJMxqGm53DP+uVJoDFQoI ApkBApsBAh4BFiEEZgPqgjvGQaRl2OXEXtrTI2Dt/GoAAMPkAQCABHk2hgsUeNkp MdoZkfHzwhO0LWXJXXRCPhMqoiXbpgEA7tbFzu9KbDxG8Y0JWwXEPlcBVjK/csGA z6ouSpN17Q7CwAEEEBYKAHMFgmH0COwDhf94CRCe4eoui/iAJkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc9t7RBaQrpCupdoCw5Z3cHObW7 PiDf4r2Gzt0a4VHjuhYhBOBSNjvcp7s3RXB3T57h6i6L+IAmAABElQEAlXqCOkKN 4CGzle07UI86TdD9eflEvsGqfgsMq8MybqUA/1j67PdZrd97TwgT/CkKm1ve4Ilm ReOFaFQgRrbZVDMD =TpbT -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u134-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7D2E 0E09 E14B 5BAB 084A 2687 86B0 C635 7215 757B Comment: xVgEYfP2tRYJKwYBBAHaRw8BAQdA1RD1+fll4koNzyJf504KJiKMsyk95dCzX8Bb PuZuU3YAAQCfRgy/k0ySv4OpCZ8aK2l58lPQIFuFLvuUwaSVUdpIVQ9wwsALBB8W CgB9BYJh8/a1AwsJBwkQhrDGNXIVdXtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnAeZL3lhi0Yo0384zsQFLndWI+OsbEbmS/b+jSTjammQD FQoIApsBAh4BFiEEfS4OCeFLW6sISiaHhrDGNXIVdXsAAEKKAQCMiJfSnAPxR5p1 2HfNNTR1mPnS6xqx6K9zZCfCt7nbYQEA6Qgxb7dn9nKsv1IcH5EMJDH8Sawswi6g x+3gcL0vWAXNEjx1MTM0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJ EIawxjVyFXV7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+QnbNogH2Fyh9NEDa3re7FMI5wpt5yac1OqL2thJMI4AxUKCAKZAQKbAQIeARYh BH0uDgnhS1urCEomh4awxjVyFXV7AAAQCgEA+818fXN6I3VbzeOuRTIxwWLlxgGq t/KkzW9xAamLzKUA/0WJPx1l/UwqNG977RqVjMEl1TuLv1Qrs4HPXgiXab8A =ykF0 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u134.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tRYJKwYBBAHaRw8BAQdA1RD1+fll4koNzyJf504KJiKMsyk95dCzX8Bb PuZuU3bCwAsEHxYKAH0FgmHz9rUDCwkHCRCGsMY1chV1e0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcB5kveWGLRijTfzjOxAUud1Yj46xsR uZL9v6NJONqaZAMVCggCmwECHgEWIQR9Lg4J4UtbqwhKJoeGsMY1chV1ewAAQooB AIyIl9KcA/FHmnXYd801NHWY+dLrGrHor3NkJ8K3udthAQDpCDFvt2f2cqy/Uhwf kQwkMfxJrCzCLqDH7eBwvS9YBc0SPHUxMzRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQhrDGNXIVdXtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn5Cds2iAfYXKH00QNret7sUwjnCm3nJpzU6ova2EkwjgDFQoI ApkBApsBAh4BFiEEfS4OCeFLW6sISiaHhrDGNXIVdXsAABAKAQD7zXx9c3ojdVvN 465FMjHBYuXGAaq38qTNb3EBqYvMpQD/RYk/HWX9TCo0b3vtGpWMwSXVO4u/VCuz gc9eCJdpvwDCwAEEEBYKAHMFgmH0COwDhf94CRBe2tMjYO38akcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfhVqmbEJoFIN6KHrgyOtlwMMi2 zPwHWArlzrKqunVIgRYhBGYD6oI7xkGkZdjlxF7a0yNg7fxqAABgBwEA6E28pQ/S VDMejCy9btCBSe6skuwE0nH9GnJmJeBNYJwBAPMAf946Oev6G1EkmvMAh6hGDcC7 noE6Ic5Fk9B0h0oB =peRt -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u135-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 44F5 446D BE64 118D 55D0 0745 3C6E F484 0B47 CD82 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAxIqIIUXT1Ud7ea3qS72UA/4KNng49X8sJ4KW jq9pccsAAPwJMkJdo83Tw0Fylw2LdZS89eZhOOGWt2hmy8B5n9b3wRMkwsALBB8W CgB9BYJh8/a2AwsJBwkQPG70hAtHzYJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnIgw5AvBSzmxgjVauSUUSnRjxQPCyE9KIw+q1Fu0zhZYD FQoIApsBAh4BFiEERPVEbb5kEY1V0AdFPG70hAtHzYIAAGi5AP9gtSE0rtJCPLr9 b3OzHyq6Zygo8mqWAZUQ4RR0V8j+6wEA7SNPgFHpi8bGcH70KiFjORaRseLzodSY ElwhEElMtg3NEjx1MTM1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EDxu9IQLR82CRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z0rG++vHEKJi1YBfn1LIqdtSape8f4lR+qBKYrDKQqdnAxUKCAKZAQKbAQIeARYh BET1RG2+ZBGNVdAHRTxu9IQLR82CAAAemgD/Q/zjjtAY/gQNgzhXwAh0vW6ejSgI QJCA4Yiq3hYrsAoA/REyzAIXS88hW8JaSAQydHUiMUj1sWCnJTrmyg2sMsQH =NDcZ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u135.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAxIqIIUXT1Ud7ea3qS72UA/4KNng49X8sJ4KW jq9pccvCwAsEHxYKAH0FgmHz9rYDCwkHCRA8bvSEC0fNgkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmciDDkC8FLObGCNVq5JRRKdGPFA8LIT 0ojD6rUW7TOFlgMVCggCmwECHgEWIQRE9URtvmQRjVXQB0U8bvSEC0fNggAAaLkA /2C1ITSu0kI8uv1vc7MfKrpnKCjyapYBlRDhFHRXyP7rAQDtI0+AUemLxsZwfvQq IWM5FpGx4vOh1JgSXCEQSUy2Dc0SPHUxMzVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQPG70hAtHzYJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnSsb768cQomLVgF+fUsip21Jql7x/iVH6oEpisMpCp2cDFQoI ApkBApsBAh4BFiEERPVEbb5kEY1V0AdFPG70hAtHzYIAAB6aAP9D/OOO0Bj+BA2D OFfACHS9bp6NKAhAkIDhiKreFiuwCgD9ETLMAhdLzyFbwlpIBDJ0dSIxSPWxYKcl OubKDawyxAfCwAEEEBYKAHMFgmH0COwDhf94CRCGsMY1chV1e0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfMpW5HsRCWxKSDg9MySEa0A1Mn 1pLIjJNV0xVFTzBmQBYhBH0uDgnhS1urCEomh4awxjVyFXV7AABBjwD+IcPLqr4J +aNabAK+PJVM8B5QkEgkrq1ficKw89FEyoMBALC0Ewpt4AxlGpDTDldJwBr6xFTQ vny13eVbYu7f2vUH =moFd -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u136-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 419F A3D7 4A91 7B54 F53A F215 7B81 A4A6 7CBA 27F0 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAUmzZR3eC8aTY/0Q0eQVPGrLb9UreGuBfaVwQ /0wQ60oAAP4g52MS/5wVKzq3bJrRGC3baATT+UN3wXC7ciNxD/EPag+awsALBB8W CgB9BYJh8/a2AwsJBwkQe4Gkpny6J/BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnN4MDKblnen/e/An8c1/S/Q2Egd5aTQRlFqscrTdBH/QD FQoIApsBAh4BFiEEQZ+j10qRe1T1OvIVe4Gkpny6J/AAAPvfAQC5Z+4P39kfZLx0 hNvtwFqRElJv/lawovyV/lelWfxpAQEAm5XWKVhoKwRa37qe1pTbv3WIcoKNS+KC grEcQmnLAgnNEjx1MTM2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EHuBpKZ8uifwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/+yqTNDhqf+ZD9oCyrZXWj8xiG/kURFTOXFepNVR3XLAxUKCAKZAQKbAQIeARYh BEGfo9dKkXtU9TryFXuBpKZ8uifwAABJ1gEA624ScEwVudhfHMbHwZFdTMVnUJZp yNBTmqYe++29/u0A/1lPxF5e4Kzq6cyrNwYpFItAqRdGed1geQTafTMDHHgA =7q9Y -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u136.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAUmzZR3eC8aTY/0Q0eQVPGrLb9UreGuBfaVwQ /0wQ60rCwAsEHxYKAH0FgmHz9rYDCwkHCRB7gaSmfLon8EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc3gwMpuWd6f978CfxzX9L9DYSB3lpN BGUWqxytN0Ef9AMVCggCmwECHgEWIQRBn6PXSpF7VPU68hV7gaSmfLon8AAA+98B ALln7g/f2R9kvHSE2+3AWpESUm/+VrCi/JX+V6VZ/GkBAQCbldYpWGgrBFrfup7W lNu/dYhygo1L4oKCsRxCacsCCc0SPHUxMzZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQe4Gkpny6J/BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn/7KpM0OGp/5kP2gLKtldaPzGIb+RREVM5cV6k1VHdcsDFQoI ApkBApsBAh4BFiEEQZ+j10qRe1T1OvIVe4Gkpny6J/AAAEnWAQDrbhJwTBW52F8c xsfBkV1MxWdQlmnI0FOaph777b3+7QD/WU/EXl7grOrpzKs3BikUi0CpF0Z53WB5 BNp9MwMceADCwAEEEBYKAHMFgmH0COwDhf94CRA8bvSEC0fNgkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfRaSlseMfSSCGBVTXFqaZo9VOu 4l67uJMtXnZMdWJbLRYhBET1RG2+ZBGNVdAHRTxu9IQLR82CAAAc1QD/SHMqcXE0 ARfRtLLzmcnHef7ReN1icW9T1J19UFjaoj4BAPdwyJl/G8zFMn0uIYj5lO2F2ztl WE+qeormLVGa0+YJ =z/Fh -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u137-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 36EB 37E1 5981 7A86 D0D4 F506 A3DD F317 DFED F32F Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAfZVMdLthX+o3a1rP4smbMnYICnNOpBqngqOb 3LtvLr4AAQDpLDWZt2uJJUpC22cbVWavmYQchlkV8JoykrbODg7s9A8CwsALBB8W CgB9BYJh8/a2AwsJBwkQo93zF9/t8y9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnKxfeEJBNhIYlgtzKqJ7SRW7taJNPLsxNDbwxBr8xGQAD FQoIApsBAh4BFiEENus34VmBeobQ1PUGo93zF9/t8y8AAIsFAQC4uyFmsN8znOTV g9Qd0oWabI+/8RRUpU/Ga1rLoc8i9wD/SLylksyS87dPHcG1UPGpMok3O2kaKLYB R2yfx6uHTgLNEjx1MTM3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EKPd8xff7fMvRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/R4QjbaLknydEJi/vH4XUBTqtG0/yxUhaCxbjZ2Qv4HAxUKCAKZAQKbAQIeARYh BDbrN+FZgXqG0NT1BqPd8xff7fMvAAB18gEAq6MdAajoe85b4xCy2ahsaYFcMqED U7x/S27Cx1HMZ+EBAOG0tznmV6j5oaJrsxBOCZiyg0NQFcGvtd4J8X5aDpgL =mqK8 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u137.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAfZVMdLthX+o3a1rP4smbMnYICnNOpBqngqOb 3LtvLr7CwAsEHxYKAH0FgmHz9rYDCwkHCRCj3fMX3+3zL0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcrF94QkE2EhiWC3MqontJFbu1ok08u zE0NvDEGvzEZAAMVCggCmwECHgEWIQQ26zfhWYF6htDU9Qaj3fMX3+3zLwAAiwUB ALi7IWaw3zOc5NWD1B3ShZpsj7/xFFSlT8ZrWsuhzyL3AP9IvKWSzJLzt08dwbVQ 8akyiTc7aRootgFHbJ/Hq4dOAs0SPHUxMzdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQo93zF9/t8y9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn9HhCNtouSfJ0QmL+8fhdQFOq0bT/LFSFoLFuNnZC/gcDFQoI ApkBApsBAh4BFiEENus34VmBeobQ1PUGo93zF9/t8y8AAHXyAQCrox0BqOh7zlvj ELLZqGxpgVwyoQNTvH9LbsLHUcxn4QEA4bS3OeZXqPmhomuzEE4JmLKDQ1AVwa+1 3gnxfloOmAvCwAEEEBYKAHMFgmH0COwDhf94CRB7gaSmfLon8EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdGgZ61ILaMC3KxS2tHZSA5JCYh LlhfLsmosvcAcBoL0xYhBEGfo9dKkXtU9TryFXuBpKZ8uifwAADdqQD9Fsrg+W/J JPSqFD0/I8avUwCld/XiXAEC6DwQFHj/vasBAOQ9Yg//gEHS80zladOugJIPruLG CZfpc7C+YvVatsMH =DUp9 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u138-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9F59 18BE 6A78 9867 0283 859B 0528 0E0D DA09 EC95 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAjKkvVWyTOcip0L1Tgto4NMSrE2bGXm8Zoouv kOPORKEAAQDNJAXIpaVfHcmdbzmnyvAz8qBmKY+qCyxmdOnpeukYRxAmwsALBB8W CgB9BYJh8/a2AwsJBwkQBSgODdoJ7JVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnlHkNX6/g4HJgnL9go0eIzrzKTBCLdjO8Vx4vMHM2DScD FQoIApsBAh4BFiEEn1kYvmp4mGcCg4WbBSgODdoJ7JUAAOTNAP9P8ocnX3Qtpg24 o2EDB5OJ/CmvAxCr6yJWmqYNNmgv8QD/b5NPd0QyQPNgjqf3ug1z5OCUqHRo+lXE rxSFZAkrkQrNEjx1MTM4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EAUoDg3aCeyVRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5QKljHXdPiXwN0rW/LqpXKX4VAlRXXrlGqY56keCmGuAxUKCAKZAQKbAQIeARYh BJ9ZGL5qeJhnAoOFmwUoDg3aCeyVAACyBAD9EQnLydhzd0EMAdAyqZIfCHkNKPQ5 6qaCd3i1zbS0ESoA/jgKOWqtU4Af+Era99NmyvBQbSEHYnQb635VhtRwcM4E =3+lO -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u138.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAjKkvVWyTOcip0L1Tgto4NMSrE2bGXm8Zoouv kOPORKHCwAsEHxYKAH0FgmHz9rYDCwkHCRAFKA4N2gnslUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeUeQ1fr+DgcmCcv2CjR4jOvMpMEIt2 M7xXHi8wczYNJwMVCggCmwECHgEWIQSfWRi+aniYZwKDhZsFKA4N2gnslQAA5M0A /0/yhydfdC2mDbijYQMHk4n8Ka8DEKvrIlaapg02aC/xAP9vk093RDJA82COp/e6 DXPk4JSodGj6VcSvFIVkCSuRCs0SPHUxMzhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQBSgODdoJ7JVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnlAqWMdd0+JfA3Stb8uqlcpfhUCVFdeuUapjnqR4KYa4DFQoI ApkBApsBAh4BFiEEn1kYvmp4mGcCg4WbBSgODdoJ7JUAALIEAP0RCcvJ2HN3QQwB 0DKpkh8IeQ0o9DnqpoJ3eLXNtLQRKgD+OAo5aq1TgB/4Str302bK8FBtIQdidBvr flWG1HBwzgTCwAEEEBYKAHMFgmH0COwDhf94CRCj3fMX3+3zL0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdLIQnSb0dI7wL3sEvaeqCsQok/ 80Hzh1kaCA+a2PnV7RYhBDbrN+FZgXqG0NT1BqPd8xff7fMvAADY4gEAmpqPN+0Y MNs/OCTOjJI4Wgo/AbIML+7xx3mnBLMLm70A/0AYnvrXsKJaao1NxPsvtE58GIZu ZO1+BhvYOsQl5c4H =7h+K -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u139-priv.pgp000064400000000000000000000015601046102023000222730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 24EF DB22 5331 8E11 B73B 617C 6A7C 5DC8 792A 2A55 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAC+AeFcVgP2WIHtRFw49/HR1JgMUwE+eZ7QD+ G4GWX+sAAP9d278RsvmMFQiv+uxjEFF08j8c9Un70yxg5WQj2v88OBHGwsALBB8W CgB9BYJh8/a2AwsJBwkQanxdyHkqKlVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jno8efqoSngrwcCJrhxj0OAA+KC3EJzjLZ0FgUuyDdkLsD FQoIApsBAh4BFiEEJO/bIlMxjhG3O2F8anxdyHkqKlUAABlxAQChVrsWMJ+XKawC VF3Cy7TPqtxvHQKQ3ThvbCdPk1SQ7QD+NcFonYjJkYfmvTDgBlwCRZnZmuEu8LMs Ae9GlNKORAjNEjx1MTM5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EGp8Xch5KipVRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z1pBP4tOh1Tfisw6CATumOPdeFxgBmC9qO6Gx6V1onPPAxUKCAKZAQKbAQIeARYh BCTv2yJTMY4RtzthfGp8Xch5KipVAADNBgEAvXNUsLrn1QqKkVO2fLnjXPEfUodv nDNJUvo1CuAaPRABAJLmaPyEA6igwa6sYc0+l5/P4ihtfwEG6Zx9kFGIjOEE =s4Tn -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u139.pgp000064400000000000000000000017561046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAC+AeFcVgP2WIHtRFw49/HR1JgMUwE+eZ7QD+ G4GWX+vCwAsEHxYKAH0FgmHz9rYDCwkHCRBqfF3IeSoqVUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmejx5+qhKeCvBwImuHGPQ4AD4oLcQnO MtnQWBS7IN2QuwMVCggCmwECHgEWIQQk79siUzGOEbc7YXxqfF3IeSoqVQAAGXEB AKFWuxYwn5cprAJUXcLLtM+q3G8dApDdOG9sJ0+TVJDtAP41wWidiMmRh+a9MOAG XAJFmdma4S7wsywB70aU0o5ECM0SPHUxMzlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQanxdyHkqKlVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnWkE/i06HVN+KzDoIBO6Y4914XGAGYL2o7obHpXWic88DFQoI ApkBApsBAh4BFiEEJO/bIlMxjhG3O2F8anxdyHkqKlUAAM0GAQC9c1SwuufVCoqR U7Z8ueNc8R9Sh2+cM0lS+jUK4Bo9EAEAkuZo/IQDqKDBrqxhzT6Xn8/iKG1/AQbp nH2QUYiM4QTCwAEEEBYKAHMFgmH0COwDhf94CRAFKA4N2gnslUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmen9B+jqy4b5ZiqgZHbuK/Cpwie W54/ICZ+6rJNqsz1QRYhBJ9ZGL5qeJhnAoOFmwUoDg3aCeyVAADIQAEAhlnJrT2z jG7DaBF1mwML4NZwSyk/zbzpb07n5crxFukA/jwToWsKxEL/JFv0dy+iacD9x5uJ dZQZ7TBybm/AoI8O =aAUd -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u14-priv.pgp000064400000000000000000000015571046102023000222110ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 66D0 F953 25D4 A02A 36C1 4265 FD24 7584 CCA3 C8BA Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAg3eIm3qEl/XhNM4yf+I6/Icoy33tvdhOaQKS VGz5/G0AAQCOj6tBesuf8j1nGtQaUXJlaP0TcNAk3+H56IDKMe9nRRFHwsALBB8W CgB9BYJh8/awAwsJBwkQ/SR1hMyjyLpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnSDLLudF3qpneU9q42TuWBNyzQ8Y4KbKdiHz24slQmnED FQoIApsBAh4BFiEEZtD5UyXUoCo2wUJl/SR1hMyjyLoAAF0wAQC3MEh7GSFC5UVy 3DbrlKBZGLYeyDYFOxiVRF1fVy90TgEA7trtVu/TmUNcsZ+jezUTNk9pLpf/LjGB Jn8vwmjkKw/NETx1MTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ /SR1hMyjyLpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 0Pl2ELK7CjBmuOLEgnGvwTBpI5z/u7+ZBl8dk3s/X/YDFQoIApkBApsBAh4BFiEE ZtD5UyXUoCo2wUJl/SR1hMyjyLoAAI8sAP9fxExxlIgIpX1JC6LuobyxRkIiYrwU lqqcv4B6rh7VBwD8CQciJH4r4gNi5B6Y00lJgnn+Y3VfMmyPkkZPeVWoKwY= =/sD8 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u14.pgp000064400000000000000000000017561046102023000212340ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAg3eIm3qEl/XhNM4yf+I6/Icoy33tvdhOaQKS VGz5/G3CwAsEHxYKAH0FgmHz9rADCwkHCRD9JHWEzKPIukcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdIMsu50Xeqmd5T2rjZO5YE3LNDxjgp sp2IfPbiyVCacQMVCggCmwECHgEWIQRm0PlTJdSgKjbBQmX9JHWEzKPIugAAXTAB ALcwSHsZIULlRXLcNuuUoFkYth7INgU7GJVEXV9XL3ROAQDu2u1W79OZQ1yxn6N7 NRM2T2kul/8uMYEmfy/CaOQrD80RPHUxNEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRD9JHWEzKPIukcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfQ+XYQsrsKMGa44sSCca/BMGkjnP+7v5kGXx2Tez9f9gMVCggC mQECmwECHgEWIQRm0PlTJdSgKjbBQmX9JHWEzKPIugAAjywA/1/ETHGUiAilfUkL ou6hvLFGQiJivBSWqpy/gHquHtUHAPwJByIkfiviA2LkHpjTSUmCef5jdV8ybI+S Rk95VagrBsLAAQQQFgoAcwWCYfQI5wOF/3gJEN0ZOpZRdXncRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6ocUo12Q5JB9x/0Hpes3X2Rhhw+ uh8BpHU9BtKj4uNHFiEEy3xtP8u42gs9f27A3Rk6llF1edwAAHLJAQDuusFHk+od TdMBnjVbrQwcvYJqcCeqaVs3kK7m4Y1d3gD/SSKz3EKg2CMbsB6WSa36RieWx4SG z4ZiMG2eeP0PFg8= =O3+8 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u140-priv.pgp000064400000000000000000000015601046102023000222630ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4AF8 32B3 208D B3DD 126C 21E3 CAF4 AA31 2615 6F8B Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAFazvx/NBT/PS32IAehSet0c+kBEB5567QwYL sO05eckAAP9vdZZ8dNYHvHerAxCky4j6BKzqvf0ZvyDoSPgmr3wf0BHcwsALBB8W CgB9BYJh8/a2AwsJBwkQyvSqMSYVb4tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnoNxsKk6jL6gDV+tLLAgzdtneqA5q3KSAPilY2CFcz9oD FQoIApsBAh4BFiEESvgysyCNs90SbCHjyvSqMSYVb4sAAMd7AP91HahgLKQDsYga 9MOli5JX/2Ao5qWdyylRVhdd8c3WywD/Sgj+z3QdCCFNwYL23aqIfLLwu594qWTM dDqXaLWaYwzNEjx1MTQwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EMr0qjEmFW+LRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+2KJbUWnm15BfRuZB7XqbQBqmh4gO7NIBYjbI26eMu4AxUKCAKZAQKbAQIeARYh BEr4MrMgjbPdEmwh48r0qjEmFW+LAACFMwEA1Z4+qoeSYmVgHIoH7EhYZiIqWNos 0VXV1bceFkS8qVkBAKkuUFtBHvZvWywtfPu9Tw7xBhuL1ssOxmdN9tx92oQB =aoco -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u140.pgp000064400000000000000000000017561046102023000213140ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAFazvx/NBT/PS32IAehSet0c+kBEB5567QwYL sO05ecnCwAsEHxYKAH0FgmHz9rYDCwkHCRDK9KoxJhVvi0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeg3GwqTqMvqANX60ssCDN22d6oDmrc pIA+KVjYIVzP2gMVCggCmwECHgEWIQRK+DKzII2z3RJsIePK9KoxJhVviwAAx3sA /3UdqGAspAOxiBr0w6WLklf/YCjmpZ3LKVFWF13xzdbLAP9KCP7PdB0IIU3Bgvbd qoh8svC7n3ipZMx0OpdotZpjDM0SPHUxNDBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQyvSqMSYVb4tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn7YoltRaebXkF9G5kHteptAGqaHiA7s0gFiNsjbp4y7gDFQoI ApkBApsBAh4BFiEESvgysyCNs90SbCHjyvSqMSYVb4sAAIUzAQDVnj6qh5JiZWAc igfsSFhmIipY2izRVdXVtx4WRLypWQEAqS5QW0Ee9m9bLC18+71PDvEGG4vWyw7G Z0323H3ahAHCwAEEEBYKAHMFgmH0COwDhf94CRBqfF3IeSoqVUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme5UM2cn7VWlxtPPN3yol9Gth1g gEq+gMObK8jo1JBT0BYhBCTv2yJTMY4RtzthfGp8Xch5KipVAAAJfgD/SYKYvzbj CEDoCD2rv4JbqDOYKlqtbft3Xb5K07Y3KHEBALz7+CE7gwtW+5Ux8/twn3m+HM6l J1wNQSWKytq1mTQP =4uG5 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u141-priv.pgp000064400000000000000000000015601046102023000222640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E00E E6E5 D079 CA81 E37F 964E AD79 9F4D 5973 8D54 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAQOyFWzpsxlKvGeuxFqsv/YkriEfiqP1zvs+x juDsS4AAAQCYdU/id3KN23wYzYB91plCzwFgvEFgoykvDVBbgMitig9ewsALBB8W CgB9BYJh8/a2AwsJBwkQrXmfTVlzjVRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnNZVNzeFcLZjr+nc3rBREndaDoY3usJ3x/s5p+9qeahsD FQoIApsBAh4BFiEE4A7m5dB5yoHjf5ZOrXmfTVlzjVQAAKl0AQDu617A4vKt5nwF hDDOm43WD9kRhy8/57Z1EqZURHtAJwEAxjWinGBO5QKkbm2a9/StiUkSRzxllEKi 0yBUZxbTpQHNEjx1MTQxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EK15n01Zc41URxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZxeFhgbr4GQ+s/ti7MWo5A6HLCF2yZ4twxnsPj2tuKNdAxUKCAKZAQKbAQIeARYh BOAO5uXQecqB43+WTq15n01Zc41UAAA+hAEAypZOgk7UHU+jZ+Qba1nm3NGmG2WR vQSQPH5dmlo0gXgBAP3ahWrBoggO0x2Y/xt++4xGUqYd1DW0kIkBqDp75+IP =Uy+S -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u141.pgp000064400000000000000000000017561046102023000213150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAQOyFWzpsxlKvGeuxFqsv/YkriEfiqP1zvs+x juDsS4DCwAsEHxYKAH0FgmHz9rYDCwkHCRCteZ9NWXONVEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc1lU3N4VwtmOv6dzesFESd1oOhje6w nfH+zmn72p5qGwMVCggCmwECHgEWIQTgDubl0HnKgeN/lk6teZ9NWXONVAAAqXQB AO7rXsDi8q3mfAWEMM6bjdYP2RGHLz/ntnUSplREe0AnAQDGNaKcYE7lAqRubZr3 9K2JSRJHPGWUQqLTIFRnFtOlAc0SPHUxNDFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQrXmfTVlzjVRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnF4WGBuvgZD6z+2LsxajkDocsIXbJni3DGew+Pa24o10DFQoI ApkBApsBAh4BFiEE4A7m5dB5yoHjf5ZOrXmfTVlzjVQAAD6EAQDKlk6CTtQdT6Nn 5BtrWebc0aYbZZG9BJA8fl2aWjSBeAEA/dqFasGiCA7THZj/G377jEZSph3UNbSQ iQGoOnvn4g/CwAEEEBYKAHMFgmH0COwDhf94CRDK9KoxJhVvi0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcI96SyQKGQSr1pESluDNcUFDPa xepOUG3VOqZjKWZzLBYhBEr4MrMgjbPdEmwh48r0qjEmFW+LAACt+gD/VTZSQSUb S8wvjmxRD64nTyq1xYPId7W0TAHCf7kBTB4A/RbCvCsiLgSj5a7TggwMBXZI4Wtw H80/t0QMtN8h6F4G =mYgf -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u142-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5A96 2B09 EF64 9F42 67DF DAE0 46B2 F28E 5134 573F Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdA/vgmhLIh9Qga+XqnwW/Wi+6iwjkRZqo6g3Jp EvYkGjIAAPsEqm1TCN/QRapxatL5eeXq7x2Wtaa5SuSNZlVW2eanixNwwsALBB8W CgB9BYJh8/a2AwsJBwkQRrLyjlE0Vz9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnkNLQQ21LEV/acTdY0PLFziLkS2fxwCQZxUCk124nnhwD FQoIApsBAh4BFiEEWpYrCe9kn0Jn39rgRrLyjlE0Vz8AANo0AQCMVLTPmne0E0TS N60sSydlvNMrhbSZuqjJxoM9DDB8LQEAkiOtML7RJA48NfyCasctFKfNs8Vldu1R isrc0qzUXQ3NEjx1MTQyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EEay8o5RNFc/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZxbUialmf0WDfVZZkm8mCRZDeqka7S9vJgS0GssE+mRxAxUKCAKZAQKbAQIeARYh BFqWKwnvZJ9CZ9/a4Eay8o5RNFc/AADSSgEA6+uMbpW3V1i2j4lvPFkRB0smTjia z3htYrCt1iWk4LUA/293ArIoqS47b8A/aDlBvo7dE/t28Vrzacc2lP/SdDoJ =+6pm -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u142.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdA/vgmhLIh9Qga+XqnwW/Wi+6iwjkRZqo6g3Jp EvYkGjLCwAsEHxYKAH0FgmHz9rYDCwkHCRBGsvKOUTRXP0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeQ0tBDbUsRX9pxN1jQ8sXOIuRLZ/HA JBnFQKTXbieeHAMVCggCmwECHgEWIQRalisJ72SfQmff2uBGsvKOUTRXPwAA2jQB AIxUtM+ad7QTRNI3rSxLJ2W80yuFtJm6qMnGgz0MMHwtAQCSI60wvtEkDjw1/IJq xy0Up82zxWV27VGKytzSrNRdDc0SPHUxNDJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQRrLyjlE0Vz9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnFtSJqWZ/RYN9VlmSbyYJFkN6qRrtL28mBLQaywT6ZHEDFQoI ApkBApsBAh4BFiEEWpYrCe9kn0Jn39rgRrLyjlE0Vz8AANJKAQDr64xulbdXWLaP iW88WREHSyZOOJrPeG1isK3WJaTgtQD/b3cCsiipLjtvwD9oOUG+jt0T+3bxWvNp xzaU/9J0OgnCwAEEEBYKAHMFgmH0COwDhf94CRCteZ9NWXONVEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcDg0raaqOyTtO1H9yF2S6lOd6V 0F4o6RpXM3wC/0hvLBYhBOAO5uXQecqB43+WTq15n01Zc41UAAAsLwEA75KhOr2j hAjchuTipidMcQQTCWcPi9UMMUBw+JcWT7kBAM3acnmLpPDU/lFh76o8LNVT6YgH HPlw6iQENOqK3uUK =InY4 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u143-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BAB9 FB2E C409 E681 65AE F78D 58BB 96EB 511C 41B2 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAmEpR9Z8FfH4Crsp7PYxrSpZ7Zn9Wo0TGmqaD ZaMCyOUAAQCIPZQ/ucxM17s6A1EXTm5vMvC1j6Vs+Cz4RqlXAjv09w/NwsALBB8W CgB9BYJh8/a2AwsJBwkQWLuW61EcQbJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn1/TmDZUoIaH7+hEG6kbiDpeQzicO8EuXFpV1tDkH8qQD FQoIApsBAh4BFiEEurn7LsQJ5oFlrveNWLuW61EcQbIAAOPxAQCPjv3b6NJIvy4L 2kBaO7NzjuxofaY6sjHBo6fEsTXugQD7BFntoHPJ/40t+l9wN4uzejk2zfH7C/Sb 5lIE+GVBUgjNEjx1MTQzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EFi7lutRHEGyRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z9ISLovkPfLE47pSkA060B4wcMDNG+8Kq7OsDoma7eVgAxUKCAKZAQKbAQIeARYh BLq5+y7ECeaBZa73jVi7lutRHEGyAAD8xgEAr13WIwN+dPC4jxqFzVcAARgRM553 kTzJIJJwr26PBvAA/Rx3SQMJxyWepULc1H1NHfUkjgkA4SFikyC3XGF223oL =8rEz -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u143.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAmEpR9Z8FfH4Crsp7PYxrSpZ7Zn9Wo0TGmqaD ZaMCyOXCwAsEHxYKAH0FgmHz9rYDCwkHCRBYu5brURxBskcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfX9OYNlSghofv6EQbqRuIOl5DOJw7w S5cWlXW0OQfypAMVCggCmwECHgEWIQS6ufsuxAnmgWWu941Yu5brURxBsgAA4/EB AI+O/dvo0ki/LgvaQFo7s3OO7Gh9pjqyMcGjp8SxNe6BAPsEWe2gc8n/jS36X3A3 i7N6OTbN8fsL9JvmUgT4ZUFSCM0SPHUxNDNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQWLuW61EcQbJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn0hIui+Q98sTjulKQDTrQHjBwwM0b7wqrs6wOiZrt5WADFQoI ApkBApsBAh4BFiEEurn7LsQJ5oFlrveNWLuW61EcQbIAAPzGAQCvXdYjA3508LiP GoXNVwABGBEznneRPMkgknCvbo8G8AD9HHdJAwnHJZ6lQtzUfU0d9SSOCQDhIWKT ILdcYXbbegvCwAEEEBYKAHMFgmH0COwDhf94CRBGsvKOUTRXP0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcmweWaWfXrCKrd4ZwucV/Gd5oU MTtbsqdA2rJViqvInRYhBFqWKwnvZJ9CZ9/a4Eay8o5RNFc/AACbbAEAnZ8SilGi XZZeMARQpF7KZhRX4e+mMhMFoJQVqht1T64BALcevLXwxJqnczCdLPlP0L/wV6Ch sGQW6qOGWdbhO3EA =3YCv -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u144-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: ADD6 E345 227F 2748 9E1E 8AA7 E0CD 7884 37CC 47BF Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAhZbpxIP3oHiReDtGH3lEjMSX6gb6j7ugjadV I6TuGy0AAQDgqsQYW99vNGP7aneEf14Vmlf4ghX1ozpCgoMeLZfRDA9RwsALBB8W CgB9BYJh8/a2AwsJBwkQ4M14hDfMR79HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnMNcbg76jfuBIK4is4VhWHt2sW5FBLCzS1WBaWpX9MY0D FQoIApsBAh4BFiEErdbjRSJ/J0ieHoqn4M14hDfMR78AAHx0AP4lIbLwym4tQ/JA YqoJfVt3vUlw6J3bDaj9e224RMUNDAD/Rn6FE3Mo+ZEMnEltjw9tjd7WLCJj93VI GoyT+pTFEA3NEjx1MTQ0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EODNeIQ3zEe/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z80kHgVNrBB+S8tBAwpA490/+ik1e7q8gesrVGgbYlnJAxUKCAKZAQKbAQIeARYh BK3W40UifydInh6Kp+DNeIQ3zEe/AADhWAEAsElrzCNjcLUmg6Lr/rmwj+BYgq2S pA5LvZl0GTW4LsQBAI0wH+dwFMbpJCjNtWaUjTlg02dtgqB98hHcRvJjiMsD =mCT8 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u144.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAhZbpxIP3oHiReDtGH3lEjMSX6gb6j7ugjadV I6TuGy3CwAsEHxYKAH0FgmHz9rYDCwkHCRDgzXiEN8xHv0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcw1xuDvqN+4EgriKzhWFYe3axbkUEs LNLVYFpalf0xjQMVCggCmwECHgEWIQSt1uNFIn8nSJ4eiqfgzXiEN8xHvwAAfHQA /iUhsvDKbi1D8kBiqgl9W3e9SXDondsNqP17bbhExQ0MAP9GfoUTcyj5kQycSW2P D22N3tYsImP3dUgajJP6lMUQDc0SPHUxNDRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQ4M14hDfMR79HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnzSQeBU2sEH5Ly0EDCkDj3T/6KTV7uryB6ytUaBtiWckDFQoI ApkBApsBAh4BFiEErdbjRSJ/J0ieHoqn4M14hDfMR78AAOFYAQCwSWvMI2NwtSaD ouv+ubCP4FiCrZKkDku9mXQZNbguxAEAjTAf53AUxukkKM21ZpSNOWDTZ22CoH3y EdxG8mOIywPCwAEEEBYKAHMFgmH0COwDhf94CRBYu5brURxBskcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeKUECGzQCQ/mqDlusSVyUABcSn 3ZBUn4JZsvw6q263IxYhBLq5+y7ECeaBZa73jVi7lutRHEGyAAACcAEA8jTYx+Y0 fl0tWLBndJLt+hdnXUoKHgpcwz+ZnHiswgcBALQZRdZ96n7MuUNVPiy+GPmG05gB om9ULT6+X+lQ/UEI =MfjQ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u145-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BCD1 FB9A 7524 E6B2 D1AD B920 653E 8120 4C30 A119 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAXeZA/nYcM3GAB/sxiR7FBWKpxcDHi5kkCAYv TV1RCF8AAQCAs6uQZ3i0rQ071PpYPDaOA6ZiE1xzpci6VJKLUFt4cw84wsALBB8W CgB9BYJh8/a2AwsJBwkQZT6BIEwwoRlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnVklN97OyYCRwuOE6ddhDztFM5/RdPSloH/PU8ifLTzMD FQoIApsBAh4BFiEEvNH7mnUk5rLRrbkgZT6BIEwwoRkAAOE/AP9EoxSosBGeRQoV gqH97dTA5AG1FxONEATjGchmaf8IkgEAn/DrX8znET1Xbq8yKmbj9i3kvp+daFyf lxz6QFZu7gbNEjx1MTQ1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EGU+gSBMMKEZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6qgFa9mGJXml6sQ9hBhQQ/VLc8k2BdDPquGtfk6py0WAxUKCAKZAQKbAQIeARYh BLzR+5p1JOay0a25IGU+gSBMMKEZAABjAAEA8GvSJZFvcHjwI2oDo5Pt+hQtrCG6 yANjyJnQ+nhwKiQBAKHk2YOVsD9h7ejEEsAdD/YzLHq3gzgWkVIlZ2YV5C4O =DO1z -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u145.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAXeZA/nYcM3GAB/sxiR7FBWKpxcDHi5kkCAYv TV1RCF/CwAsEHxYKAH0FgmHz9rYDCwkHCRBlPoEgTDChGUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdWSU33s7JgJHC44Tp12EPO0Uzn9F09 KWgf89TyJ8tPMwMVCggCmwECHgEWIQS80fuadSTmstGtuSBlPoEgTDChGQAA4T8A /0SjFKiwEZ5FChWCof3t1MDkAbUXE40QBOMZyGZp/wiSAQCf8OtfzOcRPVdurzIq ZuP2LeS+n51oXJ+XHPpAVm7uBs0SPHUxNDVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQZT6BIEwwoRlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnqqAVr2YYleaXqxD2EGFBD9UtzyTYF0M+q4a1+TqnLRYDFQoI ApkBApsBAh4BFiEEvNH7mnUk5rLRrbkgZT6BIEwwoRkAAGMAAQDwa9IlkW9wePAj agOjk+36FC2sIbrIA2PImdD6eHAqJAEAoeTZg5WwP2Ht6MQSwB0P9jMsereDOBaR UiVnZhXkLg7CwAEEEBYKAHMFgmH0COwDhf94CRDgzXiEN8xHv0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeDxlCoKKuiRyXAjFgKRndPG+eY 57WaR6tldBIDxd4NDBYhBK3W40UifydInh6Kp+DNeIQ3zEe/AAAlGwEA0QebzATj EQT4MBKH/2enI4wWmyzkTXPf9SdAS58rn3gA/0JPPFEsOizBRjmQARPR8wn7JcMj HjHWxO4ulxcfhYQH =oBwo -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u146-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 17DE 4392 A165 DC82 CF50 E879 B5CB 17B5 50CC 0DE2 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdA/iTfAbvjUxi44GWAigiKlZXJjsOAHQWVKec0 ngzsJSEAAQCwxSD9ubuKNGdWRyGfZXlOMwU8o5KzA5S30IsE/8NSPQ8PwsALBB8W CgB9BYJh8/a2AwsJBwkQtcsXtVDMDeJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JntdTsnLohNs6epH+42ro3Lvf5dSlZdLn4TEd7il2RK1ED FQoIApsBAh4BFiEEF95DkqFl3ILPUOh5tcsXtVDMDeIAAJ7DAP9OeFmGuu9Ckppm SfSiYA7hSYCh30mHuZdiY5I0FMvAewEAlBcoC4rU5NFm2x6LdtakgSRcn7B4OuDy v0WTnm0LZgrNEjx1MTQ2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ ELXLF7VQzA3iRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+Yb5b0LjdcIqMVuAHSyU3arv82n2FqFapUKYn9CLzNqAxUKCAKZAQKbAQIeARYh BBfeQ5KhZdyCz1DoebXLF7VQzA3iAAA2qwEA16ibJJEB4xKBz3J0BC1wa3X1+rjc Wxhusdx4okn054oA/jPyGniN65hoN8JMBgXvc2Yjouw8aC8oCiURwJJQAboH =mDLK -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u146.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdA/iTfAbvjUxi44GWAigiKlZXJjsOAHQWVKec0 ngzsJSHCwAsEHxYKAH0FgmHz9rYDCwkHCRC1yxe1UMwN4kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme11OycuiE2zp6kf7jaujcu9/l1KVl0 ufhMR3uKXZErUQMVCggCmwECHgEWIQQX3kOSoWXcgs9Q6Hm1yxe1UMwN4gAAnsMA /054WYa670KSmmZJ9KJgDuFJgKHfSYe5l2JjkjQUy8B7AQCUFygLitTk0WbbHot2 1qSBJFyfsHg64PK/RZOebQtmCs0SPHUxNDZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQtcsXtVDMDeJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn5hvlvQuN1wioxW4AdLJTdqu/zafYWoVqlQpif0IvM2oDFQoI ApkBApsBAh4BFiEEF95DkqFl3ILPUOh5tcsXtVDMDeIAADarAQDXqJskkQHjEoHP cnQELXBrdfX6uNxbGG6x3HiiSfTnigD+M/IaeI3rmGg3wkwGBe9zZiOi7DxoLygK JRHAklABugfCwAEEEBYKAHMFgmH0COwDhf94CRBlPoEgTDChGUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfR/f5N2O729jvg75W9aDUHcmje Yy3yhSACfk3hc6hppBYhBLzR+5p1JOay0a25IGU+gSBMMKEZAAAMOQD/QBWn3WSl nbVoyKb98rgwlPXYvEbdtOXOvoVtWODzJa8BANTki728q/RT0lG9JTuD22ux/yqr mAmxqTbUrSO4wcEE =e0ub -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u147-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5E9C 1282 59B9 5B3C 90C6 51E3 E106 A327 6D83 FFD1 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAwQc0EGdvwG0gAbYTQbkzkt0mPTAIC5rgSf0D HrCTXAkAAP9inxn1ySupJMNnY4eqg8j+40U+q0Hnd/2NtSgg7o3XeBLXwsALBB8W CgB9BYJh8/a2AwsJBwkQ4QajJ22D/9FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnyfL0OurePOSz5GNreLyQU2ILPGwWXBflb3KHNRmjeioD FQoIApsBAh4BFiEEXpwSglm5WzyQxlHj4QajJ22D/9EAADwjAP9sYEmuRO7F+rXt 6WQn3kYOWGiqC6p7OkHHHreud+jCBAEAmZ/t1k7ldziYcxrfKZxrW9DjlGKYlVZP Xo96fixgRQTNEjx1MTQ3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EOEGoydtg//RRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6XTgIuLEZVZZltxtW6Dyqi3tzGk7/zXsuKWYDA7PW61AxUKCAKZAQKbAQIeARYh BF6cEoJZuVs8kMZR4+EGoydtg//RAAAgXwD/XSix05y4RSzUeKA0Xzphspb6eMob pitQ+MzvkDKVxngA/A7WaLMgP7cll4F2y0o7njDxyVOxhiGWYDZuWG+kO+UJ =339q -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u147.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAwQc0EGdvwG0gAbYTQbkzkt0mPTAIC5rgSf0D HrCTXAnCwAsEHxYKAH0FgmHz9rYDCwkHCRDhBqMnbYP/0UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfJ8vQ66t485LPkY2t4vJBTYgs8bBZc F+Vvcoc1GaN6KgMVCggCmwECHgEWIQRenBKCWblbPJDGUePhBqMnbYP/0QAAPCMA /2xgSa5E7sX6te3pZCfeRg5YaKoLqns6Qccet6536MIEAQCZn+3WTuV3OJhzGt8p nGtb0OOUYpiVVk9ej3p+LGBFBM0SPHUxNDdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQ4QajJ22D/9FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnpdOAi4sRlVlmW3G1boPKqLe3MaTv/Ney4pZgMDs9brUDFQoI ApkBApsBAh4BFiEEXpwSglm5WzyQxlHj4QajJ22D/9EAACBfAP9dKLHTnLhFLNR4 oDRfOmGylvp4yhumK1D4zO+QMpXGeAD8DtZosyA/tyWXgXbLSjueMPHJU7GGIZZg Nm5Yb6Q75QnCwAEEEBYKAHMFgmH0COwDhf94CRC1yxe1UMwN4kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfGR5GOQdUNhWqI2NIvb6KCXpgu 520deBxYRU4SkMAnwxYhBBfeQ5KhZdyCz1DoebXLF7VQzA3iAADf/QEAlE1/p2Yy I6xGXk6YGyFJUuGw6rgRPE9GfwP/aARJK9gA/0P8llD6lDZJ5sz0IU7Ns2V0rzTE mk2xpfxg63C+kg8M =QpU5 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u148-priv.pgp000064400000000000000000000015601046102023000222730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 837B 524C 48C8 21FB 23C4 331A 7640 76A4 958D 02E6 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAQg9HLsgXBsdtgZheKJYDLZYDjw6VWuSnY0Vu 7MyRO/sAAP9gettmnTQNUlczAYCS6iAzecQT0+dcTiT/da/LisCZWBAlwsALBB8W CgB9BYJh8/a2AwsJBwkQdkB2pJWNAuZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnCHNY4P99yMeb0Xw4lOTo2WOtbswPmFSJtcymj7N6TiAD FQoIApsBAh4BFiEEg3tSTEjIIfsjxDMadkB2pJWNAuYAAFDJAQC68hZEbmsXknFl 4kBQZsNBa1jZ231rs7Pnb92bywRM3wD+JJokcCxeufkePiXsn87RoltFp0LxxS0h V2Fazlaxjg/NEjx1MTQ4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EHZAdqSVjQLmRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z38pMoSlnmbrr3q1Yl97/ELs6dCfPG/3ya7ZYip78hfmAxUKCAKZAQKbAQIeARYh BIN7UkxIyCH7I8QzGnZAdqSVjQLmAADcIgEAyWP4LyMmKuaMmjAm7/ETheGFUIbj rLy8qwD2vXXVcQEA/06fycJ5dyY28IBCPr1Q4qVTFcEu8+HwXQQX3WLKrQIB =+kUx -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u148.pgp000064400000000000000000000017561046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAQg9HLsgXBsdtgZheKJYDLZYDjw6VWuSnY0Vu 7MyRO/vCwAsEHxYKAH0FgmHz9rYDCwkHCRB2QHaklY0C5kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcIc1jg/33Ix5vRfDiU5OjZY61uzA+Y VIm1zKaPs3pOIAMVCggCmwECHgEWIQSDe1JMSMgh+yPEMxp2QHaklY0C5gAAUMkB ALryFkRuaxeScWXiQFBmw0FrWNnbfWuzs+dv3ZvLBEzfAP4kmiRwLF65+R4+Jeyf ztGiW0WnQvHFLSFXYVrOVrGOD80SPHUxNDhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQdkB2pJWNAuZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnfykyhKWeZuuverViX3v8Quzp0J88b/fJrtliKnvyF+YDFQoI ApkBApsBAh4BFiEEg3tSTEjIIfsjxDMadkB2pJWNAuYAANwiAQDJY/gvIyYq5oya MCbv8ROF4YVQhuOsvLyrAPa9ddVxAQD/Tp/Jwnl3JjbwgEI+vVDipVMVwS7z4fBd BBfdYsqtAgHCwAEEEBYKAHMFgmH0COwDhf94CRDhBqMnbYP/0UcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeBU+NXtF/p8f6/q5XfgY8bQovY GIgXaYS9fz1xCs8LZBYhBF6cEoJZuVs8kMZR4+EGoydtg//RAACi5wD+MEEY/3+E /LkoWFVT8xIkv29Z+H8wwhM9CNeZU32H2pIA/AkYrmEN/THOt5srzcrikBYWcLj1 XbjqSJmg5kr9d7kM =Rk7f -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u149-priv.pgp000064400000000000000000000015601046102023000222740ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 1DBF A683 F274 4FCC FCF4 6D35 9895 19FE B16F B4B1 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAKz60uWo99ti5vCDRpc8HOB2O/ClljXfSXgXY RiOkVpQAAQDCbQSpTY44+k1lOV4thiuJVg7TSN5hMpXdzRb9z/BpVw9bwsALBB8W CgB9BYJh8/a2AwsJBwkQmJUZ/rFvtLFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnrq/GIqqF4THpUR5XlBLBpRJxvPl9ihOehwjcg3ILaHsD FQoIApsBAh4BFiEEHb+mg/J0T8z89G01mJUZ/rFvtLEAACmxAQDVP3CLDr2gpY+l eBfsJYtoGoLJt8pFI8Id07urnk+qdgEA9ZFEVo/vwZvypBXfL/kgBtJwAytHgqs1 1Eprq9WDsw3NEjx1MTQ5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EJiVGf6xb7SxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z1SXX0BnHqmF6YYd+4VEa/sAnygT2M9WAGz3Xh8Hk07VAxUKCAKZAQKbAQIeARYh BB2/poPydE/M/PRtNZiVGf6xb7SxAADCSwEAmGTdDdIS1ozy3R5E/JE9bimULvUi 4ofPnL7NjO8DgQ8A/jS0g934sgb13XACPfp154rQoRsm02CkE+04aJU2U0kP =zV0w -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u149.pgp000064400000000000000000000017561046102023000213250ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAKz60uWo99ti5vCDRpc8HOB2O/ClljXfSXgXY RiOkVpTCwAsEHxYKAH0FgmHz9rYDCwkHCRCYlRn+sW+0sUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeur8YiqoXhMelRHleUEsGlEnG8+X2K E56HCNyDcgtoewMVCggCmwECHgEWIQQdv6aD8nRPzPz0bTWYlRn+sW+0sQAAKbEB ANU/cIsOvaClj6V4F+wli2gagsm3ykUjwh3Tu6ueT6p2AQD1kURWj+/Bm/KkFd8v +SAG0nADK0eCqzXUSmur1YOzDc0SPHUxNDlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQmJUZ/rFvtLFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnVJdfQGceqYXphh37hURr+wCfKBPYz1YAbPdeHweTTtUDFQoI ApkBApsBAh4BFiEEHb+mg/J0T8z89G01mJUZ/rFvtLEAAMJLAQCYZN0N0hLWjPLd HkT8kT1uKZQu9SLih8+cvs2M7wOBDwD+NLSD3fiyBvXdcAI9+nXnitChGybTYKQT 7TholTZTSQ/CwAEEEBYKAHMFgmH0COwDhf94CRB2QHaklY0C5kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme9YueFGDg5azumZcL6473744N8 +usCoYrYGfsSAFtvBRYhBIN7UkxIyCH7I8QzGnZAdqSVjQLmAABI+wD/Yvp35gwh SD8mzmY9505whHUaQWuRIS1LG5OosuJ9MH8A+gK/jaubgf/4HD2WHwNpBPHCchK9 Gz/4mG/5qBtzn5cG =o3OZ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u15-priv.pgp000064400000000000000000000015571046102023000222120ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 291A BB75 D735 BC5B 625E 221B 0211 52DF 0CA1 F86A Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdA/YclIg2u3Wdm1BXls2vhnqupaRijzuPkxZuG 6jfcWKkAAP9IBDx3mdAVaUYM4cYg8H6MW00LF3JkVpYdfUcO0YA9QA1BwsALBB8W CgB9BYJh8/awAwsJBwkQAhFS3wyh+GpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnVAfqTXEjAiGR3x2136ZJ7+QG4ncdVQbJitcV8ys6qS4D FQoIApsBAh4BFiEEKRq7ddc1vFtiXiIbAhFS3wyh+GoAAG0SAPkB4G6bl1nD3Qs9 1/qBcmldWbx8wdmFl9OAcDOiQHtl4AEAgvjlPRwtA7cHRj+MezuoQbGnaFsgWZVn m2aOxlGPmQ/NETx1MTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ AhFS3wyh+GpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 887fbLVIju+zF4Vr5EP0I4H+UiNTod12dmPCQI5En4sDFQoIApkBApsBAh4BFiEE KRq7ddc1vFtiXiIbAhFS3wyh+GoAAAXQAP4hskg5/QqdqWj0ISqGPFv/vHWtEJKC vCz0ji9rxoDUMgD/dT/fOQnBvLznkRAG9lBAMjneOo1QJVDi2m2JX3cbkAA= =1BoO -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u15.pgp000064400000000000000000000017561046102023000212350ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdA/YclIg2u3Wdm1BXls2vhnqupaRijzuPkxZuG 6jfcWKnCwAsEHxYKAH0FgmHz9rADCwkHCRACEVLfDKH4akcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdUB+pNcSMCIZHfHbXfpknv5Abidx1V BsmK1xXzKzqpLgMVCggCmwECHgEWIQQpGrt11zW8W2JeIhsCEVLfDKH4agAAbRIA +QHgbpuXWcPdCz3X+oFyaV1ZvHzB2YWX04BwM6JAe2XgAQCC+OU9HC0DtwdGP4x7 O6hBsadoWyBZlWebZo7GUY+ZD80RPHUxNUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRACEVLfDKH4akcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfzzt9stUiO77MXhWvkQ/Qjgf5SI1Oh3XZ2Y8JAjkSfiwMVCggC mQECmwECHgEWIQQpGrt11zW8W2JeIhsCEVLfDKH4agAABdAA/iGySDn9Cp2paPQh KoY8W/+8da0QkoK8LPSOL2vGgNQyAP91P985CcG8vOeREAb2UEAyOd46jVAlUOLa bYlfdxuQAMLAAQQQFgoAcwWCYfQI5wOF/3gJEP0kdYTMo8i6RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8wCLxD9ZB9YhPCTGQgoIAcrSatM CdkVj3gXzHCaxgN/FiEEZtD5UyXUoCo2wUJl/SR1hMyjyLoAAAWYAPwNiGfYVuol 8I2041XeE0TABC6MAGP1O5xbNF4jF3uPNAEA80G0byOP5PAm9keISidXO7Ww6znd Wd2nCyC62MPwCQ4= =WNVl -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u150-priv.pgp000064400000000000000000000015601046102023000222640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 1656 1C85 0378 BDB3 87F6 E620 B261 4655 12DF 841D Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAZeRt2kChtnLBX/NWttFEl7LLPiofhLzU/btK wREUKYEAAP0Qw4edaS+isMvZXERYWNAYtyiUl+nZFiXqLaazY7y0RxFLwsALBB8W CgB9BYJh8/a2AwsJBwkQsmFGVRLfhB1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnqzqNNmlA+Igu4Q4SVxHj1fxq/zORpDdSN4w0Od/xbGcD FQoIApsBAh4BFiEEFlYchQN4vbOH9uYgsmFGVRLfhB0AAEu+AP93xrmnwGsfQkCA Iv0JPEmsEcdNvDLMRCoWOZXJY7oEHwD/dJj8fINpmX9zFC/X5T/9qQyIuymiwnjJ mYCm1pQnqwbNEjx1MTUwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ ELJhRlUS34QdRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5zq9vY/FFF2i/95NEcCi3bbbPfyrmXhPNjlsU4mCNR0AxUKCAKZAQKbAQIeARYh BBZWHIUDeL2zh/bmILJhRlUS34QdAACeZQD+LNsURXfBCntpRGFRKfPXaK8W8qMf thNwzT/0i/alcJEBAIho14J/+aMGbgfWVGvjN7o3L+ge3FjlkRLrV+qJ17kL =DpFl -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u150.pgp000064400000000000000000000017561046102023000213150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAZeRt2kChtnLBX/NWttFEl7LLPiofhLzU/btK wREUKYHCwAsEHxYKAH0FgmHz9rYDCwkHCRCyYUZVEt+EHUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmerOo02aUD4iC7hDhJXEePV/Gr/M5Gk N1I3jDQ53/FsZwMVCggCmwECHgEWIQQWVhyFA3i9s4f25iCyYUZVEt+EHQAAS74A /3fGuafAax9CQIAi/Qk8SawRx028MsxEKhY5lcljugQfAP90mPx8g2mZf3MUL9fl P/2pDIi7KaLCeMmZgKbWlCerBs0SPHUxNTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQsmFGVRLfhB1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnnOr29j8UUXaL/3k0RwKLdtts9/KuZeE82OWxTiYI1HQDFQoI ApkBApsBAh4BFiEEFlYchQN4vbOH9uYgsmFGVRLfhB0AAJ5lAP4s2xRFd8EKe2lE YVEp89dorxbyox+2E3DNP/SL9qVwkQEAiGjXgn/5owZuB9ZUa+M3ujcv6B7cWOWR EutX6onXuQvCwAEEEBYKAHMFgmH0COwDhf94CRCYlRn+sW+0sUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd8hATDEj4RNahBKlh+2QH6dwWT 7Mqq9bFc7TFo38G2MBYhBB2/poPydE/M/PRtNZiVGf6xb7SxAAAEPAEA6x5J0hFq FDJQ9/+7lP+d7Bs9CTZ/PtoKtoDzR6A6lsQA+wbOsxjJvGZ3SmLUOUmnZFc3OUhU Gsiin8oqMviJ0TwI =2MHA -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u151-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4090 3D90 3860 4F9F 0325 F4F5 9573 5AB9 651D 3899 Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAV+UZBsDXwSzmyvBdFux1yFsJf9XiVynOEzDo Ss7/VtIAAP9pOEIAvGw1ne1X7A0xYPxiRvZZFzfVIx8rxEKyoD1S1Q7pwsALBB8W CgB9BYJh8/a2AwsJBwkQlXNauWUdOJlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnCjUysRfZ0EXpUjLPI+qyDKuhca5ZmvHL578BJGLrUtkD FQoIApsBAh4BFiEEQJA9kDhgT58DJfT1lXNauWUdOJkAAOfuAP0bFVyu8sQ+sZ4a S91eIsdE+yLnHx1u9fZmqbIAGqX3BgEAty26tLn4tdvz24HFpwOogc6+zE6BtQXm sXbFZhxQIgDNEjx1MTUxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EJVzWrllHTiZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7sOvwFur4XYblnbLxXbTj3rtWyLfQUHfJu/idt7Tnt0AxUKCAKZAQKbAQIeARYh BECQPZA4YE+fAyX09ZVzWrllHTiZAACqSAD/d+DZ69lw/OTudjiszh6ZKzcb2g2u d6UoGOZzd6jCv6MA/1mfh+XspdwxqqZ3u+zj9am0c6SPb0hWPtqnCHFRg/MB =wnPY -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u151.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAV+UZBsDXwSzmyvBdFux1yFsJf9XiVynOEzDo Ss7/VtLCwAsEHxYKAH0FgmHz9rYDCwkHCRCVc1q5ZR04mUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcKNTKxF9nQRelSMs8j6rIMq6Fxrlma 8cvnvwEkYutS2QMVCggCmwECHgEWIQRAkD2QOGBPnwMl9PWVc1q5ZR04mQAA5+4A /RsVXK7yxD6xnhpL3V4ix0T7IucfHW719mapsgAapfcGAQC3Lbq0ufi12/PbgcWn A6iBzr7MToG1BeaxdsVmHFAiAM0SPHUxNTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQlXNauWUdOJlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnuw6/AW6vhdhuWdsvFdtOPeu1bIt9BQd8m7+J23tOe3QDFQoI ApkBApsBAh4BFiEEQJA9kDhgT58DJfT1lXNauWUdOJkAAKpIAP934Nnr2XD85O52 OKzOHpkrNxvaDa53pSgY5nN3qMK/owD/WZ+H5eyl3DGqpne77OP1qbRzpI9vSFY+ 2qcIcVGD8wHCwAEEEBYKAHMFgmH0COwDhf94CRCyYUZVEt+EHUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme5P/vLLkFNEaptgXdxdENhjqe6 x2Co6F+QIUE5MmF0tBYhBBZWHIUDeL2zh/bmILJhRlUS34QdAACdlAEA09H1qSFg +iI9bqK3o0GA7TPBTZ+ZiDIXIQChOlb+lX4BALvk+zAwv1cnGR+tXhcy0FEOd17v vKxQZjV1VAodBWoC =cv1E -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u152-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 542C E462 E1A6 6CEE CDE4 A15E 3B61 4535 DCA7 1EEF Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAKIAYvLOxKhPPZ4Hh/2OIFfuZ1DDTJPllyp1L NWHnjE8AAQDZz90jd412HBaUy5AjNzHWo9/Q2UoAk6pjhBhRUrCM1BAJwsALBB8W CgB9BYJh8/a2AwsJBwkQO2FFNdynHu9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn5cPfUzSaS+ngg19wkc8LafdHVUEcTnicffFcmn2SX+ID FQoIApsBAh4BFiEEVCzkYuGmbO7N5KFeO2FFNdynHu8AAELdAP9UOCtvy4r782HU H5WE21dBJWqH+dHXJ0PZYMuPozkECQD/UdhazS7KUyWJ1Y72ky/Gr6WD9j0oRnPb MF3VMlNy/ArNEjx1MTUyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EDthRTXcpx7vRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3xTXsQiBUhCzhgROETrInsjz1BgkSSF77AVE8Fx+Hp1AxUKCAKZAQKbAQIeARYh BFQs5GLhpmzuzeShXjthRTXcpx7vAAAmLQD9FpbhSPzoCR0ZcguMtoDwc3PG1SEP IG9BV+p8yukITM4BAL3QUDlY8iO2I6rcln18ymkALkFP+gz4gDGMwpmyfSMN =826r -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u152.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAKIAYvLOxKhPPZ4Hh/2OIFfuZ1DDTJPllyp1L NWHnjE/CwAsEHxYKAH0FgmHz9rYDCwkHCRA7YUU13Kce70cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmflw99TNJpL6eCDX3CRzwtp90dVQRxO eJx98VyafZJf4gMVCggCmwECHgEWIQRULORi4aZs7s3koV47YUU13Kce7wAAQt0A /1Q4K2/LivvzYdQflYTbV0Elaof50dcnQ9lgy4+jOQQJAP9R2FrNLspTJYnVjvaT L8avpYP2PShGc9swXdUyU3L8Cs0SPHUxNTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQO2FFNdynHu9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnfFNexCIFSELOGBE4ROsieyPPUGCRJIXvsBUTwXH4enUDFQoI ApkBApsBAh4BFiEEVCzkYuGmbO7N5KFeO2FFNdynHu8AACYtAP0WluFI/OgJHRly C4y2gPBzc8bVIQ8gb0FX6nzK6QhMzgEAvdBQOVjyI7YjqtyWfXzKaQAuQU/6DPiA MYzCmbJ9Iw3CwAEEEBYKAHMFgmH0COwDhf94CRCVc1q5ZR04mUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfhuqTF172rrw4eDGoxT+hpUffM CU2N0MyWFUYNw9kS1hYhBECQPZA4YE+fAyX09ZVzWrllHTiZAAD6QwD/ZQDAFsYf Svxb5qKFozmR8wVIDJbxpF1SBMiZm8WTVskA/RVzvddv41549gqqENJ9983FfYSp vtgz/QPpYXUvyfcB =lEjO -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u153-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 91FE 56BE 25CC B3CF 5439 DFAA C42E 3BAD AAFA 919A Comment: xVgEYfP2thYJKwYBBAHaRw8BAQdAV3xklA/L4CVyhvV76BFCJLbjb+nzRNffXOMx SkjnoOgAAP4rASdm+A1Pt8LbU4+dgK9hzahrtxFH94/t3DU7Nv1VGBC8wsALBB8W CgB9BYJh8/a2AwsJBwkQxC47rar6kZpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn6GPlwoCO9Q7Lleso2fM7nU+fS2PqRDk0YEDKgaLkOo8D FQoIApsBAh4BFiEEkf5WviXMs89UOd+qxC47rar6kZoAANizAQCON+AW/Y3Cvr+g se0U2l0zofStfdJc/UrbUQgZDSUkgwD/dOJJwzBDl7B9kJcciIsbGHDsmXBKc3N5 aT41Kyz7Bg7NEjx1MTUzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJ EMQuO62q+pGaRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5PM/poYNYELhLM6t5JtFMt5/O8cAf0GwdDAJjQMRcs9AxUKCAKZAQKbAQIeARYh BJH+Vr4lzLPPVDnfqsQuO62q+pGaAACfswD+I5Xbb3sPucMwooZUfS35Pd547Zvy GFQ5u3PO9lIxTgoBANLbrYmVkSGx8nnwqXJ/QeW9x4vajWuMwNHfS2tAH3oO =rP5B -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u153.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2thYJKwYBBAHaRw8BAQdAV3xklA/L4CVyhvV76BFCJLbjb+nzRNffXOMx SkjnoOjCwAsEHxYKAH0FgmHz9rYDCwkHCRDELjutqvqRmkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfoY+XCgI71DsuV6yjZ8zudT59LY+pE OTRgQMqBouQ6jwMVCggCmwECHgEWIQSR/la+Jcyzz1Q536rELjutqvqRmgAA2LMB AI434Bb9jcK+v6Cx7RTaXTOh9K190lz9SttRCBkNJSSDAP904knDMEOXsH2QlxyI ixsYcOyZcEpzc3lpPjUrLPsGDs0SPHUxNTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQxC47rar6kZpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnk8z+mhg1gQuEszq3km0Uy3n87xwB/QbB0MAmNAxFyz0DFQoI ApkBApsBAh4BFiEEkf5WviXMs89UOd+qxC47rar6kZoAAJ+zAP4jldtvew+5wzCi hlR9Lfk93njtm/IYVDm7c872UjFOCgEA0tutiZWRIbHyefCpcn9B5b3Hi9qNa4zA 0d9La0Afeg7CwAEEEBYKAHMFgmH0COwDhf94CRA7YUU13Kce70cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmczEjeO0irgZhSp1qgL24y5ftXi WibBJWkoYt+kbd6aihYhBFQs5GLhpmzuzeShXjthRTXcpx7vAABEkQD8Cs1ogaNa 505wvc8VG47OsUcQ/8CnHin8nGolGOq6qn4A/RkpT/WnCNEIW7YEqlsPAcDqfkCp R6gdY+NsdM5c6F0N =1Obz -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u154-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0EBD 96F4 1958 B13F 8F69 B5FF D95B 3708 20AE 2176 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdAnNHN3XUgm8rA54pXg0RtSuruLpx1iVetyPTA D+VlWFgAAQDo+oXxMYaofupW/MmBTYw1nTfsJNb1cdWbF065szQICxFywsALBB8W CgB9BYJh8/a3AwsJBwkQ2Vs3CCCuIXZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnIhDeVETLyRNAX3GynPGitpwT6NJd6t3I7kn4quhTz+8D FQoIApsBAh4BFiEEDr2W9BlYsT+PabX/2Vs3CCCuIXYAAISJAP9HXo9ydfEUdYEp NENX5imJLHI+eUJkHJGbX+lfR77T4AD9GUT6tGr6rbi2JQB1wmmAJd+SZ/pvCqf3 qllgM9FykAPNEjx1MTU0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ ENlbNwggriF2RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZygeqkDgIk7Bi6i9PTUMaz6kP+YIbmgs2gdQUAy5DV/OAxUKCAKZAQKbAQIeARYh BA69lvQZWLE/j2m1/9lbNwggriF2AABo5gEA0rRvPjqaoBWif3V/63eY4v1pKERO uJq/yjY/moWRvE4A/2ZwAncIh8wfNODi3u36gevUa4hIjKLorOrc3TU35PcK =9wH9 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u154.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdAnNHN3XUgm8rA54pXg0RtSuruLpx1iVetyPTA D+VlWFjCwAsEHxYKAH0FgmHz9rcDCwkHCRDZWzcIIK4hdkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmciEN5URMvJE0BfcbKc8aK2nBPo0l3q 3cjuSfiq6FPP7wMVCggCmwECHgEWIQQOvZb0GVixP49ptf/ZWzcIIK4hdgAAhIkA /0dej3J18RR1gSk0Q1fmKYkscj55QmQckZtf6V9HvtPgAP0ZRPq0avqtuLYlAHXC aYAl35Jn+m8Kp/eqWWAz0XKQA80SPHUxNTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQ2Vs3CCCuIXZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnKB6qQOAiTsGLqL09NQxrPqQ/5ghuaCzaB1BQDLkNX84DFQoI ApkBApsBAh4BFiEEDr2W9BlYsT+PabX/2Vs3CCCuIXYAAGjmAQDStG8+OpqgFaJ/ dX/rd5ji/WkoRE64mr/KNj+ahZG8TgD/ZnACdwiHzB804OLe7fqB69RriEiMouis 6tzdNTfk9wrCwAEEEBYKAHMFgmH0COwDhf94CRDELjutqvqRmkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeB7Z3+jHp4Z2IR2k/og4R7NhRz k4XtjMsnY2HA+WQXsxYhBJH+Vr4lzLPPVDnfqsQuO62q+pGaAABCrAEAwa4xZ6Kd YP2WIzokrI5338LmhbRvwR6CJvB3RQFb584BAP0aRtekyt7tF5o3jNTEcVDpo8f6 0fcyeLejweSQlscC =usSI -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u155-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: FE65 00EC 3768 6982 38FA 02AE 836F E567 5367 B4F9 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdA/1GfT1hsldkuny7vN1u6fHMqMSg+holDkFFu j6wIhmgAAQDbvJ/fy2vDzTAVM9ENJn9zlq7s5V3tBA6BdbcvaxAPLQ9OwsALBB8W CgB9BYJh8/a3AwsJBwkQg2/lZ1NntPlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnOgtZZ6cFjIzn8EV+T9kRjSvWfOXsqcUWjNsnpNypmqcD FQoIApsBAh4BFiEE/mUA7DdoaYI4+gKug2/lZ1NntPkAAJhqAPwOAq+25BtoV1br Lmkl6VAkumZIx5kZgCGSqz+SVapjqgEA8IWuHMfuqwq0W4knGD4YuwaVgAUxYYSL hJ09aPoNtAvNEjx1MTU1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EINv5WdTZ7T5RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z9l4cCPgsDOoAvZxvU6hr5P04ZQl5VSLqcDR4Enyht2NAxUKCAKZAQKbAQIeARYh BP5lAOw3aGmCOPoCroNv5WdTZ7T5AAB8CAEAh19KseyTkUx3dzp8FROr/7GvNh/Y fdignNYHxyk09isA/1kJEJZAIFamtbaOFpDbyVD22o2ZDcqORcgatbT3Ky4B =oVyi -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u155.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdA/1GfT1hsldkuny7vN1u6fHMqMSg+holDkFFu j6wIhmjCwAsEHxYKAH0FgmHz9rcDCwkHCRCDb+VnU2e0+UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc6C1lnpwWMjOfwRX5P2RGNK9Z85eyp xRaM2yek3KmapwMVCggCmwECHgEWIQT+ZQDsN2hpgjj6Aq6Db+VnU2e0+QAAmGoA /A4Cr7bkG2hXVusuaSXpUCS6ZkjHmRmAIZKrP5JVqmOqAQDwha4cx+6rCrRbiScY Phi7BpWABTFhhIuEnT1o+g20C80SPHUxNTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQg2/lZ1NntPlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn2XhwI+CwM6gC9nG9TqGvk/ThlCXlVIupwNHgSfKG3Y0DFQoI ApkBApsBAh4BFiEE/mUA7DdoaYI4+gKug2/lZ1NntPkAAHwIAQCHX0qx7JORTHd3 OnwVE6v/sa82H9h92KCc1gfHKTT2KwD/WQkQlkAgVqa1to4WkNvJUPbajZkNyo5F yBq1tPcrLgHCwAEEEBYKAHMFgmH0COwDhf94CRDZWzcIIK4hdkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfGr5w2Z/KzcaVK4wryDDmQKOPD lspsvi5wUh2PGoH+aRYhBA69lvQZWLE/j2m1/9lbNwggriF2AABj3AD/a7p0zRMn A5c37p96RaMIqPz5icRvyBwpPIHu41np13MA/jwi/FuJ4hN03NJDAWnwGxd2lzeF HfkC7VDsCfh3qfkP =UfgD -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u156-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 34E9 6CA4 6093 CDFC 25AC E6A3 A2FE 701D 926F 093A Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdA5y0rbZzv1sNgP0xIlyF2nBSc/hgcm4RwB443 bdhELOAAAPwJmcz4zz06i30KyJE76sySrWCea94Go0pqZrSdQEXRvBGwwsALBB8W CgB9BYJh8/a3AwsJBwkQov5wHZJvCTpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn8UsIfPeoFza8WMaHgZ8PHTi7KqjWhppl6N8srOeFtHQD FQoIApsBAh4BFiEENOlspGCTzfwlrOajov5wHZJvCToAAL45AQDLtcThTX73rMwN djholDn28YGLmJT+tGh2ewt6l45IuwEA2WgTZvvOG8/Q5VcrQ6XYTRdbv77+2DCb d5rxt/vqHw/NEjx1MTU2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EKL+cB2Sbwk6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6mqA48SJLEClctIcOIABsYB/b9OGBcTm05A7JVsJLVBAxUKCAKZAQKbAQIeARYh BDTpbKRgk838Jazmo6L+cB2Sbwk6AAAnGAEA+kigqHOEhqLoARdZjNUqdpzoSUhp /dOEZ5w0mHFKcgQBAM2OAwdhNIelo9NDTzk4eWMmELRLfiqWN/fX5Y95yGMC =5ygg -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u156.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdA5y0rbZzv1sNgP0xIlyF2nBSc/hgcm4RwB443 bdhELODCwAsEHxYKAH0FgmHz9rcDCwkHCRCi/nAdkm8JOkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfxSwh896gXNrxYxoeBnw8dOLsqqNaG mmXo3yys54W0dAMVCggCmwECHgEWIQQ06WykYJPN/CWs5qOi/nAdkm8JOgAAvjkB AMu1xOFNfveszA12OGiUOfbxgYuYlP60aHZ7C3qXjki7AQDZaBNm+84bz9DlVytD pdhNF1u/vv7YMJt3mvG3++ofD80SPHUxNTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQov5wHZJvCTpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnqaoDjxIksQKVy0hw4gAGxgH9v04YFxObTkDslWwktUEDFQoI ApkBApsBAh4BFiEENOlspGCTzfwlrOajov5wHZJvCToAACcYAQD6SKCoc4SGougB F1mM1Sp2nOhJSGn904RnnDSYcUpyBAEAzY4DB2E0h6Wj00NPOTh5YyYQtEt+KpY3 99flj3nIYwLCwAEEEBYKAHMFgmH0COwDhf94CRCDb+VnU2e0+UcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdGIB3iTQdR2WW6uoRu8uC5rTJp W8iK+VRK53t6pts6lxYhBP5lAOw3aGmCOPoCroNv5WdTZ7T5AAAREgD9HgrvjfJz 5ZxzLGnHd4swZqgTrggtL4o9DmZ2OnkU8IkA+wbqFqxaLxR4lMSnuTbdIMq+2sb8 j3ySn/xtd18jtvEL =klYP -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u157-priv.pgp000064400000000000000000000015601046102023000222730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4504 6E98 9B2E 1B90 A1DA EB5A DB75 80D1 B78D 3BC6 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdAXVrE29VvRxz9oOJHseuP5yESfOmLeea5Xr8j Sfii4JQAAQC9xysfOtF72bsfIi26CNgnkWSOPieWkurm/T5pgClVPQ7XwsALBB8W CgB9BYJh8/a3AwsJBwkQ23WA0beNO8ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn0j8ueDWU/aIo8wdZwxuz2uX+8hryFCH7gIfEmYqSLY4D FQoIApsBAh4BFiEERQRumJsuG5Ch2uta23WA0beNO8YAAPoxAQDqZTfmYT0uR5VN xYENxVl5YSDQrHJLya+4/aiO7Q48jAEAyR4Vvb6DiQ0uU0JwzNAGv8mhLOWNu7MX eVBgItkaMAzNEjx1MTU3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ ENt1gNG3jTvGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z71C48bX2lwTTP1ePX1aURnY3rLJNbdi2UwAXmhA1p3EAxUKCAKZAQKbAQIeARYh BEUEbpibLhuQodrrWtt1gNG3jTvGAAAK7wEArIoaSVXgGq/YkmGN+VJNLvJzcn8V Qpzfp74mEgrbUwcBAIxSRUgcStoALFR7g74ZAiPUvEWIt0Y4GoV2FipKc6UO =XCjQ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u157.pgp000064400000000000000000000017561046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdAXVrE29VvRxz9oOJHseuP5yESfOmLeea5Xr8j Sfii4JTCwAsEHxYKAH0FgmHz9rcDCwkHCRDbdYDRt407xkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfSPy54NZT9oijzB1nDG7Pa5f7yGvIU IfuAh8SZipItjgMVCggCmwECHgEWIQRFBG6Ymy4bkKHa61rbdYDRt407xgAA+jEB AOplN+ZhPS5HlU3FgQ3FWXlhINCsckvJr7j9qI7tDjyMAQDJHhW9voOJDS5TQnDM 0Aa/yaEs5Y27sxd5UGAi2RowDM0SPHUxNTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQ23WA0beNO8ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnvULjxtfaXBNM/V49fVpRGdjessk1t2LZTABeaEDWncQDFQoI ApkBApsBAh4BFiEERQRumJsuG5Ch2uta23WA0beNO8YAAArvAQCsihpJVeAar9iS YY35Uk0u8nNyfxVCnN+nviYSCttTBwEAjFJFSBxK2gAsVHuDvhkCI9S8RYi3Rjga hXYWKkpzpQ7CwAEEEBYKAHMFgmH0COwDhf94CRCi/nAdkm8JOkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeUrmqhzCB3e4dfEOvRO3OBQ3ai O1WrvMFYebWJRTd4xxYhBDTpbKRgk838Jazmo6L+cB2Sbwk6AADFOgEArKZNTYT5 7sa18ibAmoWzbyvVtF4M99w2jA5Y21ltc/0BAJACPJsGk3RlQSy7Ma4q2RPVMayE kDZTJ7f5o81X1w0I =DTZR -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u158-priv.pgp000064400000000000000000000015601046102023000222740ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 64A9 8593 44F5 073B 183B D5C8 AA60 941E 6319 9D9D Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdA9r9Nha4Ky1t2HBL4lSFDPQ+QSJ8WGzzPvyzA fgOAQiQAAP9Y3/aXFoDkHaDIwPliP0M5AWlwcJiRDRa5JbIbPb9lpg/gwsALBB8W CgB9BYJh8/a3AwsJBwkQqmCUHmMZnZ1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnRLHuMVkRPtAkcg5UaSZOgGtDlyPlxY3afbLlASa0oFgD FQoIApsBAh4BFiEEZKmFk0T1BzsYO9XIqmCUHmMZnZ0AADoeAQD7ZYaZQ9VhhW9V bWzFL2FI24AY8Sl/RHQvdohdT5yzXQEA+Emc1JQzWSktR3Yq/d2EDT/SZAz+b1Ry WRfrx5Jy1w3NEjx1MTU4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EKpglB5jGZ2dRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZyY1+0lpf5Oouhh8/7+7AvSfl/OMW0DVAPFqB9ibGV8jAxUKCAKZAQKbAQIeARYh BGSphZNE9Qc7GDvVyKpglB5jGZ2dAACL3QD+L85u0LynTZPY8hLTjsXVvo0VRWw8 O94fMICUfWpnsQ0BANg6fzesq5n+yk320l6LJddYFowRjDszLflNx5/cp6UP =xDl2 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u158.pgp000064400000000000000000000017561046102023000213250ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdA9r9Nha4Ky1t2HBL4lSFDPQ+QSJ8WGzzPvyzA fgOAQiTCwAsEHxYKAH0FgmHz9rcDCwkHCRCqYJQeYxmdnUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdEse4xWRE+0CRyDlRpJk6Aa0OXI+XF jdp9suUBJrSgWAMVCggCmwECHgEWIQRkqYWTRPUHOxg71ciqYJQeYxmdnQAAOh4B APtlhplD1WGFb1VtbMUvYUjbgBjxKX9EdC92iF1PnLNdAQD4SZzUlDNZKS1Hdir9 3YQNP9JkDP5vVHJZF+vHknLXDc0SPHUxNThAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQqmCUHmMZnZ1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnJjX7SWl/k6i6GHz/v7sC9J+X84xbQNUA8WoH2JsZXyMDFQoI ApkBApsBAh4BFiEEZKmFk0T1BzsYO9XIqmCUHmMZnZ0AAIvdAP4vzm7QvKdNk9jy EtOOxdW+jRVFbDw73h8wgJR9amexDQEA2Dp/N6yrmf7KTfbSXosl11gWjBGMOzMt +U3Hn9ynpQ/CwAEEEBYKAHMFgmH0COwDhf94CRDbdYDRt407xkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmelzkay5dSAks5eIrEipYRD8kfD jfXKIk7bOAB1aD58+hYhBEUEbpibLhuQodrrWtt1gNG3jTvGAADvaQD+NaEgIwYi ay+ig1XxMsvtYjfiMRYimk4H3sRanmr/EZMA/RyAFESSk2uF7L7PFGcSzDdhQdHt GJp/99v93GwIW1IJ =jQH8 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u159-priv.pgp000064400000000000000000000015601046102023000222750ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 729E DA4A 2A63 4E77 6780 E184 7CA2 4E95 50F7 D0A7 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdAhUkn+V2zO1EgZkobCDRLhT54oAtWzUsNf7o1 TtSIlj4AAPoDkBcu/7070fHaTdyz2bgvBHGCeo1aKFUzaY25uRHorxEZwsALBB8W CgB9BYJh8/a3AwsJBwkQfKJOlVD30KdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnqhG5HQeWEI03CUKQOKSOCUoR1/wkyUNbp5YkU+CF0SYD FQoIApsBAh4BFiEEcp7aSipjTndngOGEfKJOlVD30KcAANeYAP0d5LDnOQKQSiWn eKlyd1mIi45WGLnES0pd52pnKfwikgEAph4+OL4hWURLJajtgt+DGDmU7k6QBBCt 97hbImH/AgDNEjx1MTU5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EHyiTpVQ99CnRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZzNKMXC7ZIexAvH1JQ3KJnKu0N0Eb9u42OaPZbw3ZMheAxUKCAKZAQKbAQIeARYh BHKe2koqY053Z4DhhHyiTpVQ99CnAACucAD/ZHiQh5Ug7ZoIUgV2ezqFltdx7i0k mAyWS0fUNiCjHjoBANyekfJmcF54VMGN/2hkHdVnSUN7vsHFcHSW1RZvlrYO =n/rt -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u159.pgp000064400000000000000000000017561046102023000213260ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdAhUkn+V2zO1EgZkobCDRLhT54oAtWzUsNf7o1 TtSIlj7CwAsEHxYKAH0FgmHz9rcDCwkHCRB8ok6VUPfQp0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeqEbkdB5YQjTcJQpA4pI4JShHX/CTJ Q1unliRT4IXRJgMVCggCmwECHgEWIQRyntpKKmNOd2eA4YR8ok6VUPfQpwAA15gA /R3ksOc5ApBKJad4qXJ3WYiLjlYYucRLSl3namcp/CKSAQCmHj44viFZREslqO2C 34MYOZTuTpAEEK33uFsiYf8CAM0SPHUxNTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQfKJOlVD30KdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnM0oxcLtkh7EC8fUlDcomcq7Q3QRv27jY5o9lvDdkyF4DFQoI ApkBApsBAh4BFiEEcp7aSipjTndngOGEfKJOlVD30KcAAK5wAP9keJCHlSDtmghS BXZ7OoWW13HuLSSYDJZLR9Q2IKMeOgEA3J6R8mZwXnhUwY3/aGQd1WdJQ3u+wcVw dJbVFm+Wtg7CwAEEEBYKAHMFgmH0COwDhf94CRCqYJQeYxmdnUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeby27iVo7l/glvZrr9hLoWVRcy nUL34My+VNlxBvMkaRYhBGSphZNE9Qc7GDvVyKpglB5jGZ2dAADjPwD+LhgP6lqM a89IiuBL1GJDtqZTSKckPt0aqiCxaKZUwrUA/3O8UKCpmuZK6BjJ5jLmop3iP2zs 2Rl1VuH+5P4kwL8B =PiFO -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u16-priv.pgp000064400000000000000000000015571046102023000222130ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 27DF 659A EE57 3E30 D3A6 5B6E 4347 4D9A 4CA6 4DE3 Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAyT1LxjsYA+MW1j/eqkZmhoT+cKrorT9rv93D 3rq24kAAAQDCs90hHRp0Nj7r0RRmEUBZur8RLbfDnmPZs7G76/gHAQ+IwsALBB8W CgB9BYJh8/awAwsJBwkQQ0dNmkymTeNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jng86E2NZzGHSiyF4ELAcUFnnHRbflae0fdQ4X8y1i1ekD FQoIApsBAh4BFiEEJ99lmu5XPjDTpltuQ0dNmkymTeMAAKY/AP9JV2bWhQIUT3IV jpgq81GgDk/m4nEv/50n+NfCLIUlGwD/cPLaTPM5pVhdb7QWERSCYPESuhCv0Hzs RGBihcSPWQTNETx1MTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ Q0dNmkymTeNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn DMZX0q0tEXEUmNCgKpeYFlciZW726hg7S2ncR/kDyX0DFQoIApkBApsBAh4BFiEE J99lmu5XPjDTpltuQ0dNmkymTeMAAO/WAP4vXAkG1KwuMvkcnaYEU+CIKu/emxPO mAit7nBQu+zaQgEAv8osF09JVpDxhO3zXA5wCxuu5OZvJ13r7xziOmqCPwU= =lfw2 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u16.pgp000064400000000000000000000017561046102023000212360ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAyT1LxjsYA+MW1j/eqkZmhoT+cKrorT9rv93D 3rq24kDCwAsEHxYKAH0FgmHz9rADCwkHCRBDR02aTKZN40cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeDzoTY1nMYdKLIXgQsBxQWecdFt+Vp 7R91DhfzLWLV6QMVCggCmwECHgEWIQQn32Wa7lc+MNOmW25DR02aTKZN4wAApj8A /0lXZtaFAhRPchWOmCrzUaAOT+bicS//nSf418IshSUbAP9w8tpM8zmlWF1vtBYR FIJg8RK6EK/QfOxEYGKFxI9ZBM0RPHUxNkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRBDR02aTKZN40cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcMxlfSrS0RcRSY0KAql5gWVyJlbvbqGDtLadxH+QPJfQMVCggC mQECmwECHgEWIQQn32Wa7lc+MNOmW25DR02aTKZN4wAA79YA/i9cCQbUrC4y+Ryd pgRT4Igq796bE86YCK3ucFC77NpCAQC/yiwXT0lWkPGE7fNcDnALG67k5m8nXevv HOI6aoI/BcLAAQQQFgoAcwWCYfQI5wOF/3gJEAIRUt8MofhqRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3RCYSOGwWXWM+Pdyl7PiOKKT/ed YJlEyz8gslPaFw6fFiEEKRq7ddc1vFtiXiIbAhFS3wyh+GoAAB/KAQCndg29g/Ce U120YCp/uyuyAY6pVTum2DOFUSa7OKRnBgEAqZ90gz1LAmYqAv8VHjJy8hKlhrSo 82SBuvbwOrjy+QU= =3B/j -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u160-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8844 DCA4 93E8 F201 07CB 4471 91FE A3BD 4C01 890B Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdAmcJpeMJi8rjeH8kqO/waDmPEwKxmWg2+iZwD eKjBML4AAQCxhpLUwPu4umNWBQPmXkezc23P0mWzLgktWjXCv7L1/hF8wsALBB8W CgB9BYJh8/a3AwsJBwkQkf6jvUwBiQtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnWWAyh/WLQfEE8CeEt0o0VqiC4mTtnYU/PSIf90LWrAYD FQoIApsBAh4BFiEEiETcpJPo8gEHy0Rxkf6jvUwBiQsAAJMIAP9raaeE/4iTg03I gSthlV5C0ZIfQ3nu3xl/iGPi+WAnvwEAt4BJhDjrd68/e88k6EfOd89RptWFQMj2 ytBja8i0sA7NEjx1MTYwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EJH+o71MAYkLRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5BLUtx0WGEWxhq8FFbMbz/uDJra98yR6uhHcL+PlLMpAxUKCAKZAQKbAQIeARYh BIhE3KST6PIBB8tEcZH+o71MAYkLAAAPqAEA/Olf3sEuqNTXogIsYJsvX1oxz3+a SCcBzoQ0hpIhUG0A/iBWNmk6hMggunLAUtRNwd8etl+jHlhnEgvY02443qsA =L+W5 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u160.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdAmcJpeMJi8rjeH8kqO/waDmPEwKxmWg2+iZwD eKjBML7CwAsEHxYKAH0FgmHz9rcDCwkHCRCR/qO9TAGJC0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdZYDKH9YtB8QTwJ4S3SjRWqILiZO2d hT89Ih/3QtasBgMVCggCmwECHgEWIQSIRNykk+jyAQfLRHGR/qO9TAGJCwAAkwgA /2tpp4T/iJODTciBK2GVXkLRkh9Dee7fGX+IY+L5YCe/AQC3gEmEOOt3rz97zyTo R853z1Gm1YVAyPbK0GNryLSwDs0SPHUxNjBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQkf6jvUwBiQtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnkEtS3HRYYRbGGrwUVsxvP+4Mmtr3zJHq6Edwv4+UsykDFQoI ApkBApsBAh4BFiEEiETcpJPo8gEHy0Rxkf6jvUwBiQsAAA+oAQD86V/ewS6o1Nei Aixgmy9fWjHPf5pIJwHOhDSGkiFQbQD+IFY2aTqEyCC6csBS1E3B3x62X6MeWGcS C9jTbjjeqwDCwAEEEBYKAHMFgmH0CO0Dhf94CRB8ok6VUPfQp0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmftdRgrmXh6t4scXGaXzQpfPAzx bjt/tHrt5ocV/uLcPxYhBHKe2koqY053Z4DhhHyiTpVQ99CnAABLvwD/SIEExFHI CCde02EBm3HKjvImKIU0o7XwmDF4OE2tGpoA/3l/8lcaa2DPPvExjpwChcc96//J LDwszZ1hUgOgkjUO =OP9m -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u161-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: F965 044B E1E7 300C 7B67 16E2 93C3 96B4 FA94 CD92 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdAXkL3Sq3PfyEPMWZpS+AKqrzyGwkVjcmxcGCi deyWYVMAAP9/XzeY6uaCkFFDHdOpM3ndw7hDvl0HEVSuejqigroWdBBTwsALBB8W CgB9BYJh8/a3AwsJBwkQk8OWtPqUzZJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnv/82Um37ElT8OXpIiXZsDSoHBNF7Gl9ocnoSSlWN5pED FQoIApsBAh4BFiEE+WUES+HnMAx7Zxbik8OWtPqUzZIAAIA5AP9VkPsX+8kOEQKk CPe4EevPZiY+6THLEXnQIxJNG8mR2QD/eSVs/cX+9gcyhjZZ6c93xlGUGWVjIdC9 X3KTq8ThAQfNEjx1MTYxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EJPDlrT6lM2SRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZxLeh5Z8u5zxLRrbKJIQspKspkFqpaY/BPHLnkXWkc6PAxUKCAKZAQKbAQIeARYh BPllBEvh5zAMe2cW4pPDlrT6lM2SAACfbgEAiANX77tPiFbuK08ti6qUkEzoJi7z FEnB503Th+SNel0A/ixQHQDoI3yAwFPQYkFX1drYL6F2iugjzG9IFYUrPlgE =EtMa -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u161.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdAXkL3Sq3PfyEPMWZpS+AKqrzyGwkVjcmxcGCi deyWYVPCwAsEHxYKAH0FgmHz9rcDCwkHCRCTw5a0+pTNkkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme//zZSbfsSVPw5ekiJdmwNKgcE0Xsa X2hyehJKVY3mkQMVCggCmwECHgEWIQT5ZQRL4ecwDHtnFuKTw5a0+pTNkgAAgDkA /1WQ+xf7yQ4RAqQI97gR689mJj7pMcsRedAjEk0byZHZAP95JWz9xf72BzKGNlnp z3fGUZQZZWMh0L1fcpOrxOEBB80SPHUxNjFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQk8OWtPqUzZJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnEt6Hlny7nPEtGtsokhCykqymQWqlpj8E8cueRdaRzo8DFQoI ApkBApsBAh4BFiEE+WUES+HnMAx7Zxbik8OWtPqUzZIAAJ9uAQCIA1fvu0+IVu4r Ty2LqpSQTOgmLvMUScHnTdOH5I16XQD+LFAdAOgjfIDAU9BiQVfV2tgvoXaK6CPM b0gVhSs+WATCwAEEEBYKAHMFgmH0CO0Dhf94CRCR/qO9TAGJC0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfqWs+5kvDtEQTCVG/Z2dVBaDGK whL9o+ok0JNSGxTk8hYhBIhE3KST6PIBB8tEcZH+o71MAYkLAAB8pQEAurRfPDT9 7+Z/+xWXyFLpsGSyjCyBK1A+IQKIIoENCooBAKJRxYvBZjGZ7aZ0AtFiea73fGGa DqpcQ2RzEKOsZNYK =8ay9 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u162-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BC00 7EC1 9B0B C8DD E598 47B0 9EA7 0EB3 222D 9E51 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdA9VxbTbciMI1C5GQaZOvrqgWaAD+0PEbPSAgy BcD9A0MAAP4gxjGrmJauT4bfcx8IxmDT80KYQE2czUwyht56v9lrSRFOwsALBB8W CgB9BYJh8/a3AwsJBwkQnqcOsyItnlFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnNMqeo4DX+AJGFOxcXcX88lK8HDgHgG/Qb4gN7q/xLfMD FQoIApsBAh4BFiEEvAB+wZsLyN3lmEewnqcOsyItnlEAAPW6AQDn+Dh8B1xgiz7e MweNMFAmOGGyf76yI23gHpRJGL1U1AD+PRbJICctLN1ia+Y6Keg8vo++ZBWCcoia dVvok/DUPwrNEjx1MTYyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EJ6nDrMiLZ5RRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZyJEQ9m3KNPrV1Fo7Qo3kSinUJrYOgmphHMyXJcMthoHAxUKCAKZAQKbAQIeARYh BLwAfsGbC8jd5ZhHsJ6nDrMiLZ5RAAB0gAD/cLg2dT8+t0tcFjS1aqIeS+nVE7w+ TrD0SOkgiVov3w0A/1SuVFTA+N0UBbGliEXpPTaCUzpS6IoJCy1N7KOJ8+0O =rqLD -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u162.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdA9VxbTbciMI1C5GQaZOvrqgWaAD+0PEbPSAgy BcD9A0PCwAsEHxYKAH0FgmHz9rcDCwkHCRCepw6zIi2eUUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc0yp6jgNf4AkYU7FxdxfzyUrwcOAeA b9BviA3ur/Et8wMVCggCmwECHgEWIQS8AH7BmwvI3eWYR7Cepw6zIi2eUQAA9boB AOf4OHwHXGCLPt4zB40wUCY4YbJ/vrIjbeAelEkYvVTUAP49FskgJy0s3WJr5jop 6Dy+j75kFYJyiJp1W+iT8NQ/Cs0SPHUxNjJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQnqcOsyItnlFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnIkRD2bco0+tXUWjtCjeRKKdQmtg6CamEczJclwy2GgcDFQoI ApkBApsBAh4BFiEEvAB+wZsLyN3lmEewnqcOsyItnlEAAHSAAP9wuDZ1Pz63S1wW NLVqoh5L6dUTvD5OsPRI6SCJWi/fDQD/VK5UVMD43RQFsaWIRek9NoJTOlLoigkL LU3so4nz7Q7CwAEEEBYKAHMFgmH0CO0Dhf94CRCTw5a0+pTNkkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfl7Ci6zqNgsYz1/2APUxg+rWT/ mBJkrZ1hSAgZg6p9DRYhBPllBEvh5zAMe2cW4pPDlrT6lM2SAADjxQEAhFfH3kB/ KqG4zilxRq3FSzF/Sgd34iRPxlD+N55GGRIA/1R9wLhxTUbLjGgdvWcSMh+zP83O 5DyvKF4wGCM8oYoK =ehAA -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u163-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B333 A058 F720 9C46 F2D0 27BB 0373 8EAA C507 01ED Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdAxa/SXtGOExQTv1WLNxL/NQZP1V+90WLmEDJA HHRnjboAAQD6Dhiva4wPxH80jsddkPZtfQGtwo10b5FMRZs0II3U9g+3wsALBB8W CgB9BYJh8/a3AwsJBwkQA3OOqsUHAe1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn8+6LkKOWStP6Y8a1SD3AN67QQ1g0J/lMzELmb6lGi+kD FQoIApsBAh4BFiEEszOgWPcgnEby0Ce7A3OOqsUHAe0AAPdUAQCAeXJJ3sFjgyuA m4YxrtrYht1ezHeaQ2YGFseM+lWiogD8C1NVIURHply8xRkIQF83/G6dI773Wsw6 BlsGTOqfNQTNEjx1MTYzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EANzjqrFBwHtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z8NEraf3gS1+nml3usEooXsc52YyDxBuoDx3md8VlEFXAxUKCAKZAQKbAQIeARYh BLMzoFj3IJxG8tAnuwNzjqrFBwHtAACCXQEA4xDhbV4cxbbKjCcbN+XnHHR36gT6 r/ZAfxDlO4ddK50BAPYrwEuxCqwquOA6PZcKCwXd1uC1GyZ72lSqKp3b0OEG =X9Om -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u163.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdAxa/SXtGOExQTv1WLNxL/NQZP1V+90WLmEDJA HHRnjbrCwAsEHxYKAH0FgmHz9rcDCwkHCRADc46qxQcB7UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfz7ouQo5ZK0/pjxrVIPcA3rtBDWDQn +UzMQuZvqUaL6QMVCggCmwECHgEWIQSzM6BY9yCcRvLQJ7sDc46qxQcB7QAA91QB AIB5cknewWODK4CbhjGu2tiG3V7Md5pDZgYWx4z6VaKiAPwLU1UhREemXLzFGQhA Xzf8bp0jvvdazDoGWwZM6p81BM0SPHUxNjNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQA3OOqsUHAe1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnw0Stp/eBLX6eaXe6wSihexznZjIPEG6gPHeZ3xWUQVcDFQoI ApkBApsBAh4BFiEEszOgWPcgnEby0Ce7A3OOqsUHAe0AAIJdAQDjEOFtXhzFtsqM Jxs35eccdHfqBPqv9kB/EOU7h10rnQEA9ivAS7EKrCq44Do9lwoLBd3W4LUbJnva VKoqndvQ4QbCwAEEEBYKAHMFgmH0CO0Dhf94CRCepw6zIi2eUUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf4g1NJTMmztsWhQFZGdoVYDvUd 9nAVHi1szu+g0nVT2xYhBLwAfsGbC8jd5ZhHsJ6nDrMiLZ5RAACLPgEAiaU6ZUbF 1dM4zrKy1HuQoroVt3TDxK7rxnsNcx3L6LsA/il8jYmEMDbmoSUqmmy6SU6Ua6No TnGndLsVToCM6UAO =1z1L -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u164-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A9A1 A3B0 F122 33D6 1208 09D6 F8F0 C11D 9615 2693 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdA4prBvLnDId3AfNS3SLv1A7eSTMqq9xcuV9LK EYYbW0cAAQC6WXXdTT3wuhHzms5W6Fw9EIltXDt1eWmO6mEx1Vq+xRCNwsALBB8W CgB9BYJh8/a3AwsJBwkQ+PDBHZYVJpNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnHA9yjTCzHQUqGsnuJ6PxPR3+bKq8HLKn44ujEZiVIo8D FQoIApsBAh4BFiEEqaGjsPEiM9YSCAnW+PDBHZYVJpMAADJ/AP9qEWVrkJWn0Bng tYhgYFDgkP3XefPvv7oq8F84stxxywD/fgCSdVqZSd/Gev5jZyi41xRhcXhRAJeE KbL6y7PjfQPNEjx1MTY0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EPjwwR2WFSaTRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2koRMarUBdbhEIraHB33r4ZA2FJJvj0MjUp805t+R4lAxUKCAKZAQKbAQIeARYh BKmho7DxIjPWEggJ1vjwwR2WFSaTAABEbwD/duPsQklB7iGXCRlsertDSgB6cvCb jsqTL3o9S+en8NoBAM43MrpPNY7ofXA5PXcWuVWk1xl3VJsvaW9P/tXFayQP =ynmp -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u164.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdA4prBvLnDId3AfNS3SLv1A7eSTMqq9xcuV9LK EYYbW0fCwAsEHxYKAH0FgmHz9rcDCwkHCRD48MEdlhUmk0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmccD3KNMLMdBSoaye4no/E9Hf5sqrwc sqfji6MRmJUijwMVCggCmwECHgEWIQSpoaOw8SIz1hIICdb48MEdlhUmkwAAMn8A /2oRZWuQlafQGeC1iGBgUOCQ/dd58++/uirwXziy3HHLAP9+AJJ1WplJ38Z6/mNn KLjXFGFxeFEAl4QpsvrLs+N9A80SPHUxNjRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQ+PDBHZYVJpNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnaShExqtQF1uEQitocHfevhkDYUkm+PQyNSnzTm35HiUDFQoI ApkBApsBAh4BFiEEqaGjsPEiM9YSCAnW+PDBHZYVJpMAAERvAP924+xCSUHuIZcJ GWx6u0NKAHpy8JuOypMvej1L56fw2gEAzjcyuk81juh9cDk9dxa5VaTXGXdUmy9p b0/+1cVrJA/CwAEEEBYKAHMFgmH0CO0Dhf94CRADc46qxQcB7UcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmctKe2Hl7DLN+GdRi/CNWeUqacS BYe6nVxMjNcZvrdCHxYhBLMzoFj3IJxG8tAnuwNzjqrFBwHtAACDTAEAh0xGJoYo ZLPMfMQSw1u4S322nPmBDFhPqcBSFe68UTcA/1xeEUmttPE7MwbAcGhTxSQFqH0+ BVcjCSyoKe2LpK8P =8aC6 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u165-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2BFE 10D7 FEE9 E5DF 5833 B6F6 1B58 4BAB 2FD8 6575 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdAvpATSuWs31LkTuofgl8IpPMpBb+0QxStnmSs rU7tH6wAAP9p9ph1qehCQoYy0+JBapu577lUS7L0DdbP2YFvckdJjRLjwsALBB8W CgB9BYJh8/a3AwsJBwkQG1hLqy/YZXVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnBPFsdePQUBng7G3U3Pmcfk7r99v7yiJyxMYA+PdTxGED FQoIApsBAh4BFiEEK/4Q1/7p5d9YM7b2G1hLqy/YZXUAABanAQDP/CJPaTjfJTDj M8XDqX4/zvLwzEUVmUk9ctpEnu4wMwEAuQ9UB8H+RGzvt9rOloopc2/2eppZkPV5 WuLx4trqcA/NEjx1MTY1QGV4YW1wbGUub3JnPsLADQQTFgoAgAWCYfP2twMLCQcJ EBtYS6sv2GV1RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+NmNleHkF+On2KQw041S/bEF9tBHD90koyzR7JJA6gDAxUKCAKZAQKbAQIeARYh BCv+ENf+6eXfWDO29htYS6sv2GV1AAD8nwEAwbUwy1GETSU/k7M1wB9gvYJtdO3B mVVT2EwDK7SWav4A916l6uWtPzvg+uQn3Ud4V19Ty8L/PEwbu3h1M6BTzQo= =F4qW -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u165.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdAvpATSuWs31LkTuofgl8IpPMpBb+0QxStnmSs rU7tH6zCwAsEHxYKAH0FgmHz9rcDCwkHCRAbWEurL9hldUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcE8Wx149BQGeDsbdTc+Zx+Tuv32/vK InLExgD491PEYQMVCggCmwECHgEWIQQr/hDX/unl31gztvYbWEurL9hldQAAFqcB AM/8Ik9pON8lMOMzxcOpfj/O8vDMRRWZST1y2kSe7jAzAQC5D1QHwf5EbO+32s6W iilzb/Z6mlmQ9Xla4vHi2upwD80SPHUxNjVAZXhhbXBsZS5vcmc+wsANBBMWCgCA BYJh8/a3AwsJBwkQG1hLqy/YZXVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn42Y2V4eQX46fYpDDTjVL9sQX20EcP3SSjLNHskkDqAMDFQoI ApkBApsBAh4BFiEEK/4Q1/7p5d9YM7b2G1hLqy/YZXUAAPyfAQDBtTDLUYRNJT+T szXAH2C9gm107cGZVVPYTAMrtJZq/gD3XqXq5a0/O+D65CfdR3hXX1PLwv88TBu7 eHUzoFPNCsLAAQQQFgoAcwWCYfQI7QOF/3gJEPjwwR2WFSaTRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3g383H+brjSQVU7+h4EEb3353G4 Ng1xqjiWbxP/5dCsFiEEqaGjsPEiM9YSCAnW+PDBHZYVJpMAAPybAQD+Qf5QMnma QsrwLIsjbOIWiyz1RrnTEwcVMdTNvKAAiQEA2JQx6K/3SbbRoFsZWQp16ZE+rjSN ksssdBC0KY4jtwg= =viqG -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u166-priv.pgp000064400000000000000000000015601046102023000222730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E5F3 B17D 5455 21F9 B539 5B10 E920 20FD B3E8 109E Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdA7DeJx8JE2W6dQM3SHtfhXRjKsiv/alxpFDGC xGykdRMAAQCUKApu8KNRIKBAaF9QxaRW4Bg8MHFDrFAMNvlpuYtWhg3HwsALBB8W CgB9BYJh8/a3AwsJBwkQ6SAg/bPoEJ5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnlJnX32RH6dZxM8PFbvWAPIeUDiFV9mcpDOuEuCAWRKYD FQoIApsBAh4BFiEE5fOxfVRVIfm1OVsQ6SAg/bPoEJ4AACrgAP91lqKlcuebW7yS DcXu1k3hZ5q2oCgak5a9NSekMutLWAD8DSZMoaj1JTc8cbobHyMTL6AqK77UjJ2u xwuJJtFltQDNEjx1MTY2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EOkgIP2z6BCeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z0/7GmlrLAN8j3PKhl0/EHJKN+RzqRk/zKZ2vvIY5dd+AxUKCAKZAQKbAQIeARYh BOXzsX1UVSH5tTlbEOkgIP2z6BCeAAArkAEAnKeEpUUf3UQJI7Kaq/vkbhDZTcG1 x2mVBKE4gh/VLz0A/2VgQh4WVK0dODVYxcYnpEYeqKwc9dh0jVeLoInuR14N =G1bq -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u166.pgp000064400000000000000000000017561046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdA7DeJx8JE2W6dQM3SHtfhXRjKsiv/alxpFDGC xGykdRPCwAsEHxYKAH0FgmHz9rcDCwkHCRDpICD9s+gQnkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeUmdffZEfp1nEzw8Vu9YA8h5QOIVX2 ZykM64S4IBZEpgMVCggCmwECHgEWIQTl87F9VFUh+bU5WxDpICD9s+gQngAAKuAA /3WWoqVy55tbvJINxe7WTeFnmragKBqTlr01J6Qy60tYAPwNJkyhqPUlNzxxuhsf IxMvoCorvtSMna7HC4km0WW1AM0SPHUxNjZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQ6SAg/bPoEJ5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnT/saaWssA3yPc8qGXT8Qcko35HOpGT/Mpna+8hjl134DFQoI ApkBApsBAh4BFiEE5fOxfVRVIfm1OVsQ6SAg/bPoEJ4AACuQAQCcp4SlRR/dRAkj spqr++RuENlNwbXHaZUEoTiCH9UvPQD/ZWBCHhZUrR04NVjFxiekRh6orBz12HSN V4ugie5HXg3CwAEEEBYKAHMFgmH0CO0Dhf94CRAbWEurL9hldUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdmulCFdWsiJh1Zd26LNMNMpIg9 hIAkWi1OUthjqafuKRYhBCv+ENf+6eXfWDO29htYS6sv2GV1AACXLAD8C+q46tB6 4YLrsApCbE+b84d+nlAY7WTId2rgO3QPhcgBAODcT1C4joEDm/2baKni9oZzu0zQ sBkf20XLHIhar8AF =hFNe -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u167-priv.pgp000064400000000000000000000015601046102023000222740ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5803 5C57 B66B 0EBF B069 F9B7 F3C6 23A5 C52A 3B92 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdAUsg6O/sDQhEn5gbVrXGSv8EdXTHOY14cCsog 7J9PLLAAAP9LXQvmS/H3Nuis4WA/pnHjnNXMSID0j6hcBRgjJLBzYhGEwsAKBB8W CgB9BYJh8/a3AwsJBwkQ88YjpcUqO5JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn7Oo2OqxlXuTSP6KCcnhzRx1oSimd4XZ50wMPur9buuED FQoIApsBAh4BFiEEWANcV7ZrDr+wafm388YjpcUqO5IAAB6vAQCcnUYsWd+O1J1L ChK96DTW5mwlzEWfvJPUKb386TlqJAD44Y12XWAolmrV2wO7u6wjVvt1P0OfYhg7 w5CK8z5/A80SPHUxNjdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a3AwsJBwkQ 88YjpcUqO5JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn XTt9qxk2oxb46LEBmqvG869aytJ9Q+8rgV6KA4156vcDFQoIApkBApsBAh4BFiEE WANcV7ZrDr+wafm388YjpcUqO5IAAAp/AQC4Cj/u6qpmycdv3LxIO0GKCCCWRiFB 3vH28fX6ELPIfwD/QGC6z+FJiWxJc3mfSSJsDlioAt9nDzMC+Xk7/KZ5Mws= =dUt9 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u167.pgp000064400000000000000000000017561046102023000213250ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdAUsg6O/sDQhEn5gbVrXGSv8EdXTHOY14cCsog 7J9PLLDCwAoEHxYKAH0FgmHz9rcDCwkHCRDzxiOlxSo7kkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfs6jY6rGVe5NI/ooJyeHNHHWhKKZ3h dnnTAw+6v1u64QMVCggCmwECHgEWIQRYA1xXtmsOv7Bp+bfzxiOlxSo7kgAAHq8B AJydRixZ347UnUsKEr3oNNbmbCXMRZ+8k9QpvfzpOWokAPjhjXZdYCiWatXbA7u7 rCNW+3U/Q59iGDvDkIrzPn8DzRI8dTE2N0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rcDCwkHCRDzxiOlxSo7kkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmddO32rGTajFvjosQGaq8bzr1rK0n1D7yuBXooDjXnq9wMVCggC mQECmwECHgEWIQRYA1xXtmsOv7Bp+bfzxiOlxSo7kgAACn8BALgKP+7qqmbJx2/c vEg7QYoIIJZGIUHe8fbx9foQs8h/AP9AYLrP4UmJbElzeZ9JImwOWKgC32cPMwL5 eTv8pnkzC8LAAQQQFgoAcwWCYfQI7QOF/3gJEOkgIP2z6BCeRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0CYT+aJ4kK3uNuMze7WN7qLQq8W XlZPTkgWMhR+J4dPFiEE5fOxfVRVIfm1OVsQ6SAg/bPoEJ4AANwCAP4huxyQkVu4 mSUrubK/NrCove1UYtAgNp/XAQ5sqqshlwEAobfAv6QdCW8ev+CwOgOjQA1jA7nl kT5+e2vG7UOFlAg= =00XH -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u168-priv.pgp000064400000000000000000000015601046102023000222750ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 003E 9C5A 9DAB 8626 FD16 94AA C2C4 3642 A20E 1496 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdASOOO4mB8f/pan8Sk5gO0h92UVFjA5mduLFUS tq44k48AAP0XzCSgZzsqsna+EcJEgn93WLedkeOyiU5b++4i2PVyKhFdwsALBB8W CgB9BYJh8/a3AwsJBwkQwsQ2QqIOFJZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnreQIUrivccX0676c7BQ7aUjvM6QEkBSpdJs8eWqyc2sD FQoIApsBAh4BFiEEAD6cWp2rhib9FpSqwsQ2QqIOFJYAAKDGAQCep4ynO5YKDANC 6NpHd6j+NhEICFhaWxoj38VOfxcwnAEAnHJBWbb92KuI1WiV9L6YWmxBSUSFkcoG 4a4atYNm6QjNEjx1MTY4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EMLENkKiDhSWRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z1VzrmZTK6VntkQnQR+fWDStVQMNeCNRq9ic47fSLrQdAxUKCAKZAQKbAQIeARYh BAA+nFqdq4Ym/RaUqsLENkKiDhSWAAB6wQD+LO4Yz9d3TVf5varuerl0MrHDsKuc j6qKbofsnX149ToA/RxNS5HG5UdGYI3ipufTwilV5tg3aRVL1L3DgCyp4HkC =sbVZ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u168.pgp000064400000000000000000000017561046102023000213260ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdASOOO4mB8f/pan8Sk5gO0h92UVFjA5mduLFUS tq44k4/CwAsEHxYKAH0FgmHz9rcDCwkHCRDCxDZCog4UlkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmet5AhSuK9xxfTrvpzsFDtpSO8zpASQ FKl0mzx5arJzawMVCggCmwECHgEWIQQAPpxanauGJv0WlKrCxDZCog4UlgAAoMYB AJ6njKc7lgoMA0Lo2kd3qP42EQgIWFpbGiPfxU5/FzCcAQCcckFZtv3Yq4jVaJX0 vphabEFJRIWRygbhrhq1g2bpCM0SPHUxNjhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQwsQ2QqIOFJZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnVXOuZlMrpWe2RCdBH59YNK1VAw14I1Gr2Jzjt9IutB0DFQoI ApkBApsBAh4BFiEEAD6cWp2rhib9FpSqwsQ2QqIOFJYAAHrBAP4s7hjP13dNV/m9 qu56uXQyscOwq5yPqopuh+ydfXj1OgD9HE1LkcblR0ZgjeKm59PCKVXm2DdpFUvU vcOALKngeQLCwAEEEBYKAHMFgmH0CO0Dhf94CRDzxiOlxSo7kkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfaH9eaI5BtpCZ3r8Xsa0e+Cjha 5uSP5QbE13fIWR3FRRYhBFgDXFe2aw6/sGn5t/PGI6XFKjuSAABg5QEA86xtynCf ou0zUm7eILPAOuSH4nuUCoh+gxcMXhMKrUcBAPokPl8gVyihLukR7f6fUhqWL97G zjmD/HBBZ7GDk9QH =bUS/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u169-priv.pgp000064400000000000000000000015601046102023000222760ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E794 7E38 2B12 FE62 8BDA 1302 01EF C9D9 00B5 540C Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdAIh5nkzdO26dtFcvxJGDDQ65r/8v+0o3BfpLt 2K47gtEAAPsE2egEJcXFnQpWnqKKVQQAaRInWrEuHdSYSg5zu6doLA24wsALBB8W CgB9BYJh8/a3AwsJBwkQAe/J2QC1VAxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnxfj4qeN2QhbCdOjC2K24drM5ZYRoQUOl2aWNCn5fJe0D FQoIApsBAh4BFiEE55R+OCsS/mKL2hMCAe/J2QC1VAwAAEfcAQD8RMua1VzTfACM IeGztr3JiVV8QbI8wVEkq6+quDUSuQD/aPHfS9j8rncihlnvXzYKUsAuX12XZ8Dx tpPTaIYAZgjNEjx1MTY5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EAHvydkAtVQMRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z8ypdG7HKcTNKD2Rcj8CBPh0aWvj8DNUxMJ5u6y4X7zHAxUKCAKZAQKbAQIeARYh BOeUfjgrEv5ii9oTAgHvydkAtVQMAADQuAD/RQRKs9bdzHbGgKYo8yDioHiKujRS AK5n2T9Yca3fXNAA/1V+D12+Ege5fg7ExeZ9xRc8LmG3qV/kifYELPHNl78L =KW7n -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u169.pgp000064400000000000000000000017561046102023000213270ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdAIh5nkzdO26dtFcvxJGDDQ65r/8v+0o3BfpLt 2K47gtHCwAsEHxYKAH0FgmHz9rcDCwkHCRAB78nZALVUDEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfF+Pip43ZCFsJ06MLYrbh2szllhGhB Q6XZpY0Kfl8l7QMVCggCmwECHgEWIQTnlH44KxL+YovaEwIB78nZALVUDAAAR9wB APxEy5rVXNN8AIwh4bO2vcmJVXxBsjzBUSSrr6q4NRK5AP9o8d9L2PyudyKGWe9f NgpSwC5fXZdnwPG2k9NohgBmCM0SPHUxNjlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQAe/J2QC1VAxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnzKl0bscpxM0oPZFyPwIE+HRpa+PwM1TEwnm7rLhfvMcDFQoI ApkBApsBAh4BFiEE55R+OCsS/mKL2hMCAe/J2QC1VAwAANC4AP9FBEqz1t3MdsaA pijzIOKgeIq6NFIArmfZP1hxrd9c0AD/VX4PXb4SB7l+DsTF5n3FFzwuYbepX+SJ 9gQs8c2XvwvCwAEEEBYKAHMFgmH0CO0Dhf94CRDCxDZCog4UlkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc3L0WSOwzMjYq4zgHP7FpSAv2b Wq0ObdLsVvji6kqbfBYhBAA+nFqdq4Ym/RaUqsLENkKiDhSWAACvygD+M3hkftmO Fn+Ewk0AJuOCwB7ueMYGEsauSdeAFPHtKukA/RI/l3TkopEXoAeZ0RyyoxsMAZv7 Ieon4Z/1gb+kn1MF =onvS -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u17-priv.pgp000064400000000000000000000015571046102023000222140ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5914 92CA F51C 0651 6278 723E AFB9 AF26 43B8 9A3A Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAMMVPm0poFyWkzUNdpJMgjilPFdHU8ML9sQHx EuF6UGcAAQDM8xRSKm2Z8InDjB8oRJkb3EjMF3Pg8s9pq5NsUGA0Yw/SwsALBB8W CgB9BYJh8/awAwsJBwkQr7mvJkO4mjpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn8dr35UP9Oreq4I9mNCPgBeRUKtu7fvscYN5f69wO+P0D FQoIApsBAh4BFiEEWRSSyvUcBlFieHI+r7mvJkO4mjoAALZaAQD0Rj6GaNK5RYfJ ed9OBlzX7dHEfqOXIwz/sRXjN+5EigEAuG6AzvPKQLYAQTyMtwm4X4wsk8eZ0wbs Jp2ZZ7kvcgHNETx1MTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ r7mvJkO4mjpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn nz3/9h6JyYsgRycoMJxPv2xG+HlnOva5TqGKgCuGy/kDFQoIApkBApsBAh4BFiEE WRSSyvUcBlFieHI+r7mvJkO4mjoAAKmbAP9wLS5y0dMyCJF8ijVD2l3MFoQZxZQw Ovr7Ovi9B3XD2wEA+U/56RCzb1ZTzrYbf8VGs5isSDOAuFlybQ/0xbv6eQE= =bEMK -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u17.pgp000064400000000000000000000017561046102023000212370ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAMMVPm0poFyWkzUNdpJMgjilPFdHU8ML9sQHx EuF6UGfCwAsEHxYKAH0FgmHz9rADCwkHCRCvua8mQ7iaOkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfx2vflQ/06t6rgj2Y0I+AF5FQq27t+ +xxg3l/r3A74/QMVCggCmwECHgEWIQRZFJLK9RwGUWJ4cj6vua8mQ7iaOgAAtloB APRGPoZo0rlFh8l5304GXNft0cR+o5cjDP+xFeM37kSKAQC4boDO88pAtgBBPIy3 CbhfjCyTx5nTBuwmnZlnuS9yAc0RPHUxN0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRCvua8mQ7iaOkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmefPf/2HonJiyBHJygwnE+/bEb4eWc69rlOoYqAK4bL+QMVCggC mQECmwECHgEWIQRZFJLK9RwGUWJ4cj6vua8mQ7iaOgAAqZsA/3AtLnLR0zIIkXyK NUPaXcwWhBnFlDA6+vs6+L0HdcPbAQD5T/npELNvVlPOtht/xUazmKxIM4C4WXJt D/TFu/p5AcLAAQQQFgoAcwWCYfQI5wOF/3gJEENHTZpMpk3jRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5346oIT5vfGLBwNnxe4r9m/V+eX FwmsbuvRY0VCxqU/FiEEJ99lmu5XPjDTpltuQ0dNmkymTeMAAIKFAP0S4JYPxI+L iwewdreAoZ3dzXsdibzEvAmTAfplqH3TcwEA0d/YCKAXc4YslZZkAoInxj+BSmEI AhNOf3SN6QQWJgE= =hVmE -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u170-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 17B5 5B10 78D2 82C7 3FA2 E762 87FA B537 AEAF E66C Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdA9wFVfGyLdPqg8u0ut44xNKYwgzk1pE5Bi10B UCD5p8YAAPoDgXwqzLehVousUSHnx1PsJo8msEmA0GnFqJnlXBSKoxFJwsALBB8W CgB9BYJh8/a3AwsJBwkQh/q1N66v5mxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnH3D5NH1EexkDJOLH3/1IVO3Iw5cHE9tDLw+c0gCFNHwD FQoIApsBAh4BFiEEF7VbEHjSgsc/oudih/q1N66v5mwAAFL9AQCgyZ6+mkKKS/+0 o/jroiwAm7SChPzc+TGffDa4kD8/owD/S5bffLJHFWYiqSS8g0UEPGELOu9N29va LYQNP5yi9wPNEjx1MTcwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EIf6tTeur+ZsRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+dC42FP+GoheTRDiwyxvR93ohJkNkrKtn7LrOFxvam7AxUKCAKZAQKbAQIeARYh BBe1WxB40oLHP6LnYof6tTeur+ZsAABVZwEAuRaNbdIOv2KMvAUrf9ZyaKMNeika W4HCavvCX9alWhwA/0tcjbxNQv3uk18C8sykGw2wS9eVup9Pzl0m04457BsO =kNsd -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u170.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdA9wFVfGyLdPqg8u0ut44xNKYwgzk1pE5Bi10B UCD5p8bCwAsEHxYKAH0FgmHz9rcDCwkHCRCH+rU3rq/mbEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcfcPk0fUR7GQMk4sff/UhU7cjDlwcT 20MvD5zSAIU0fAMVCggCmwECHgEWIQQXtVsQeNKCxz+i52KH+rU3rq/mbAAAUv0B AKDJnr6aQopL/7Sj+OuiLACbtIKE/Nz5MZ98NriQPz+jAP9Llt98skcVZiKpJLyD RQQ8YQs6703b29othA0/nKL3A80SPHUxNzBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQh/q1N66v5mxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn50LjYU/4aiF5NEOLDLG9H3eiEmQ2Ssq2fsus4XG9qbsDFQoI ApkBApsBAh4BFiEEF7VbEHjSgsc/oudih/q1N66v5mwAAFVnAQC5Fo1t0g6/Yoy8 BSt/1nJoow16KRpbgcJq+8Jf1qVaHAD/S1yNvE1C/e6TXwLyzKQbDbBL15W6n0/O XSbTjjnsGw7CwAEEEBYKAHMFgmH0CO0Dhf94CRAB78nZALVUDEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmenW++SuXLQcw0RL6n8xmWowM8Q 8BfaXVtIVA1OvbdWaxYhBOeUfjgrEv5ii9oTAgHvydkAtVQMAAB31AEA7P8xr/Xz tXpRCUZOxFwiYbULgm3MfKWuBFnrc64NisEBAPFfO7tK7b9xQHPZl1RMP272ROk0 v6QQBvUpcMCfiC0B =hfMs -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u171-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 27CE 83D6 8C66 9FE4 F1B8 C938 D4A9 19E6 F59E 4D0B Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdAKEk7DZBlHyr8rqvtDbLtIWyZajEFmUE1Boh/ LhMS8m8AAP9Jw9cSwLqSJVVglR8Du4PWIylB5B6+pBXCYNHvTxaI8xBtwsALBB8W CgB9BYJh8/a3AwsJBwkQ1KkZ5vWeTQtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnADRzasAUVfgBOtsrSGYZTmSj4vLbpeuQYQx0vcaUCeQD FQoIApsBAh4BFiEEJ86D1oxmn+TxuMk41KkZ5vWeTQsAADGcAP9zXdUxeX/PxSLQ TmuoP7F4nv8wGPBwIqUAMtu3umKc0gEAyp91YaaJexlSfe1y6FKk0acNg/eAAW7r nbmtEuZeigvNEjx1MTcxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ ENSpGeb1nk0LRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z9u47tvYj6d97SFs6m+FFbtihUhGamvLOwt5938EYE22AxUKCAKZAQKbAQIeARYh BCfOg9aMZp/k8bjJONSpGeb1nk0LAADnXAEApa45tnAWmGBDQ0Q7ZfivaPDdloOG 5l0xiVER9kFBPFQBAOk6ewrwt9+ivQyNY+Ei4hhv/RfBh0iXH3tgOgIUinkP =4BX/ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u171.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdAKEk7DZBlHyr8rqvtDbLtIWyZajEFmUE1Boh/ LhMS8m/CwAsEHxYKAH0FgmHz9rcDCwkHCRDUqRnm9Z5NC0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcANHNqwBRV+AE62ytIZhlOZKPi8tul 65BhDHS9xpQJ5AMVCggCmwECHgEWIQQnzoPWjGaf5PG4yTjUqRnm9Z5NCwAAMZwA /3Nd1TF5f8/FItBOa6g/sXie/zAY8HAipQAy27e6YpzSAQDKn3Vhpol7GVJ97XLo UqTRpw2D94ABbuudua0S5l6KC80SPHUxNzFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQ1KkZ5vWeTQtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn27ju29iPp33tIWzqb4UVu2KFSEZqa8s7C3n3fwRgTbYDFQoI ApkBApsBAh4BFiEEJ86D1oxmn+TxuMk41KkZ5vWeTQsAAOdcAQClrjm2cBaYYEND RDtl+K9o8N2Wg4bmXTGJURH2QUE8VAEA6Tp7CvC336K9DI1j4SLiGG/9F8GHSJcf e2A6AhSKeQ/CwAEEEBYKAHMFgmH0CO0Dhf94CRCH+rU3rq/mbEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnERbFMvhqkp8/wXb3fkP/L1Pp XW0ulb+n5LcL5Ksg8hYhBBe1WxB40oLHP6LnYof6tTeur+ZsAACKyAD9HlhW8o8T dTdlZUwtJ6nJf5pSHNw8bkcLL2bJFvXNpF8BAO3Gloxj8otiTXHsu1lU8NSZD79M A97r/ceGU8BL+20F =TosV -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u172-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 86B1 E986 92F4 CA34 1220 12C1 524B 4079 CF57 E850 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdAi08wnjcJyhgfMw5e+z5ZkUAikupD37div4OV fdvfmMwAAP9E4oMFXG0cELeoU8OS8qVV49SAbUg9fK93Cg2Gk0n9RBAawsALBB8W CgB9BYJh8/a3AwsJBwkQUktAec9X6FBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnLaAZ5n9Q1o2dodT2wpgKgEHDu+btqSrZwg9qup2gTHcD FQoIApsBAh4BFiEEhrHphpL0yjQSIBLBUktAec9X6FAAAMb7APoDtoo0COkBnJwE vxJxQt6EqgsGn9EmiBPmLuPYJHOUmAD/Xr7ma2NX5MvYJjtwwto09jN1offRiFK7 lhoHJ19R8QXNEjx1MTcyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EFJLQHnPV+hQRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/lwqxeZkwB/bx6/diY4jksDbwJN1fRiPO/x1+kCkDmFAxUKCAKZAQKbAQIeARYh BIax6YaS9Mo0EiASwVJLQHnPV+hQAACbkwEA1SFVIId0KcZ+lNRbVgpm274eIaYn cXsjmpqYJFfcZb0A/2/NDTH6NSIr7qHHWgVEng+/+cejOrddkvMnUU8f5LMM =/c7K -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u172.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdAi08wnjcJyhgfMw5e+z5ZkUAikupD37div4OV fdvfmMzCwAsEHxYKAH0FgmHz9rcDCwkHCRBSS0B5z1foUEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmctoBnmf1DWjZ2h1PbCmAqAQcO75u2p KtnCD2q6naBMdwMVCggCmwECHgEWIQSGsemGkvTKNBIgEsFSS0B5z1foUAAAxvsA +gO2ijQI6QGcnAS/EnFC3oSqCwaf0SaIE+Yu49gkc5SYAP9evuZrY1fky9gmO3DC 2jT2M3Wh99GIUruWGgcnX1HxBc0SPHUxNzJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQUktAec9X6FBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn+XCrF5mTAH9vHr92JjiOSwNvAk3V9GI87/HX6QKQOYUDFQoI ApkBApsBAh4BFiEEhrHphpL0yjQSIBLBUktAec9X6FAAAJuTAQDVIVUgh3Qpxn6U 1FtWCmbbvh4hpidxeyOampgkV9xlvQD/b80NMfo1IivuocdaBUSeD7/5x6M6t12S 8ydRTx/kswzCwAEEEBYKAHMFgmH0CO0Dhf94CRDUqRnm9Z5NC0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfBJCCg9F/EJPYjeaS7ykBDaQk1 iH2CnlWiCKpX/gbdsRYhBCfOg9aMZp/k8bjJONSpGeb1nk0LAADGYAEAir2csDMm MhD7QAuRMWrl005a7/88aF0eEH1aq0jGYwYBALByKiLprBQiS0NvW8LSHrQ5ihXC 5L9BHBQvWakcftwJ =+K/4 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u173-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5B8A 8AC5 2130 64AE 84C9 7DE4 1ED4 BF23 9D9C 10F2 Comment: xVgEYfP2txYJKwYBBAHaRw8BAQdA4sWI11vKb6Iklr7bn5ft3mDd08HhcqUCWb02 Hp94HXYAAQDjStQM58j7eYPSYOfxbweXu9lX/Nq75M8KcQY5THLnoxL8wsALBB8W CgB9BYJh8/a3AwsJBwkQHtS/I52cEPJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnCnKpVitoybsBhV/84D2v0wbtd6ZafLLdIFKj73QAS/8D FQoIApsBAh4BFiEEW4qKxSEwZK6EyX3kHtS/I52cEPIAAEj+AP0Vp1KH09TxEl4P OvmFG08cCS9MFC0/ebBFS4fD9zmjVwD/bOjSW68pdQo9fr0B7tGK/ujiqupETLIu A2ntCHOm4A/NEjx1MTczQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EB7UvyOdnBDyRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2ks4SIMPO/rSNyxAZl75DjwB/af3JyJO9wlstuL4UC8AxUKCAKZAQKbAQIeARYh BFuKisUhMGSuhMl95B7UvyOdnBDyAABXOQEAsUJByw45X4D0lXozTIjqRKn+fJo0 dTCb3niYlEwMj7QBAOOClKpwOXK9gvFW8KTsBFoq56oqCPEDC/eWovwh67IL =W92I -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u173.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdA4sWI11vKb6Iklr7bn5ft3mDd08HhcqUCWb02 Hp94HXbCwAsEHxYKAH0FgmHz9rcDCwkHCRAe1L8jnZwQ8kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcKcqlWK2jJuwGFX/zgPa/TBu13plp8 st0gUqPvdABL/wMVCggCmwECHgEWIQRbiorFITBkroTJfeQe1L8jnZwQ8gAASP4A /RWnUofT1PESXg86+YUbTxwJL0wULT95sEVLh8P3OaNXAP9s6NJbryl1Cj1+vQHu 0Yr+6OKq6kRMsi4Dae0Ic6bgD80SPHUxNzNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQHtS/I52cEPJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnaSzhIgw87+tI3LEBmXvkOPAH9p/cnIk73CWy24vhQLwDFQoI ApkBApsBAh4BFiEEW4qKxSEwZK6EyX3kHtS/I52cEPIAAFc5AQCxQkHLDjlfgPSV ejNMiOpEqf58mjR1MJveeJiUTAyPtAEA44KUqnA5cr2C8VbwpOwEWirnqioI8QML 95ai/CHrsgvCwAEEEBYKAHMFgmH0CO0Dhf94CRBSS0B5z1foUEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeXQcQ22a55LxbzR7OLbsLJVVkJ PCG3HrqKivuZTfA8bxYhBIax6YaS9Mo0EiASwVJLQHnPV+hQAAA4PAEA9DFPoj1S EHLylV42oz15adMzks8Bmqxu5OwP/U67EG4BAOaZSHdioalHH3LbvK/jMa93kD21 G//JSn9WjRUGyPAF =HPhK -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u174-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3FEA B08F C638 29C0 8041 2CBF C6D3 836C 6E81 7789 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdACXS9C6ixipTwDMtzQ3mFzvagtSr3F+Qopb1+ nulDi1MAAP9dpeYWH8G8dK8mirIGDjDCPhHDYYb02VBjheLdcmrM8xF8wsALBB8W CgB9BYJh8/a4AwsJBwkQxtODbG6Bd4lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JngjG/qHzqW8sKUMoE9xwke8Jupd6SjL2ZZMNLswfEh6kD FQoIApsBAh4BFiEEP+qwj8Y4KcCAQSy/xtODbG6Bd4kAAGUiAP4gkkp7KTaIeJiI R+zzwTUvJrWHOBscrBdb9W9TJUEqrQD/ROveBdFjYUk0qPk/2GomxcZOei3woZE2 t362SyA+NAzNEjx1MTc0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EMbTg2xugXeJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5oC0FH+9FI8iURPzrc8Yjz/CaoAkD21+HqhKaWNkai/AxUKCAKZAQKbAQIeARYh BD/qsI/GOCnAgEEsv8bTg2xugXeJAADsxQD/ToDDccIrBOb2Qb7IX/hpjLc6/A3R cajavvrwzKDVWYYA/3dSd5K07kxfHi1IH0dRR6b2JGH9UjkraxbG+r8Li1kL =BQVb -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u174.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdACXS9C6ixipTwDMtzQ3mFzvagtSr3F+Qopb1+ nulDi1PCwAsEHxYKAH0FgmHz9rgDCwkHCRDG04NsboF3iUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeCMb+ofOpbywpQygT3HCR7wm6l3pKM vZlkw0uzB8SHqQMVCggCmwECHgEWIQQ/6rCPxjgpwIBBLL/G04NsboF3iQAAZSIA /iCSSnspNoh4mIhH7PPBNS8mtYc4GxysF1v1b1MlQSqtAP9E694F0WNhSTSo+T/Y aibFxk56LfChkTa3frZLID40DM0SPHUxNzRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQxtODbG6Bd4lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnmgLQUf70UjyJRE/OtzxiPP8JqgCQPbX4eqEppY2RqL8DFQoI ApkBApsBAh4BFiEEP+qwj8Y4KcCAQSy/xtODbG6Bd4kAAOzFAP9OgMNxwisE5vZB vshf+GmMtzr8DdFxqNq++vDMoNVZhgD/d1J3krTuTF8eLUgfR1FHpvYkYf1SOStr Fsb6vwuLWQvCwAEEEBYKAHMFgmH0CO0Dhf94CRAe1L8jnZwQ8kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme5Lizu3+idRMlAK03LVUQrtox2 J4DAJ0iDWpalZWWDzRYhBFuKisUhMGSuhMl95B7UvyOdnBDyAADmQQEA8E4N4BR8 IMDQdgJByiuwi+tMN0pAFQccbP7VAseYxtAA/2LpCkRI2UnmJsUN2e5wraxD76PQ 6eXX5pJEWwFpds4M =Sxas -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u175-priv.pgp000064400000000000000000000015601046102023000222730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2316 05AE E347 62F3 BBC8 ECF7 3808 EFA9 2588 37F8 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAmbOdX03EdHJ6BVpf0z7y+AR/wGxixs0wCbAQ Zz14M8cAAQCKwhu970bOJdgtfMQ6/zr2TRO5Jex0CotFrTGr6x4llg/AwsALBB8W CgB9BYJh8/a4AwsJBwkQOAjvqSWIN/hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnfZZ4vD+8oAM3AUvkFxtG7di7+riAvnqSU4HI3pdwZbQD FQoIApsBAh4BFiEEIxYFruNHYvO7yOz3OAjvqSWIN/gAAAduAQCygiCZTBx+X0RV i/Cq/OvYojAkNrlPwsg1cqpwB18m2AD+P7bKTQkyVA0+O76XciKXLExQ4cF2wMM+ DVdrzbaMKwvNEjx1MTc1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EDgI76kliDf4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zz0IuWqkkode4qdMfAlZhElkO2krLZNO1EsqmZJ+rBFJAxUKCAKZAQKbAQIeARYh BCMWBa7jR2Lzu8js9zgI76kliDf4AACozAD/XAAghT1eBXUEcy9yebvrOVxG62nz VAugtW8GXCwpsdAA+gMIDn4deEEvWZlbBptzWTeBzPmbA971kHHiwYpkrwsH =GPe+ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u175.pgp000064400000000000000000000017561046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAmbOdX03EdHJ6BVpf0z7y+AR/wGxixs0wCbAQ Zz14M8fCwAsEHxYKAH0FgmHz9rgDCwkHCRA4CO+pJYg3+EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd9lni8P7ygAzcBS+QXG0bt2Lv6uIC+ epJTgcjel3BltAMVCggCmwECHgEWIQQjFgWu40di87vI7Pc4CO+pJYg3+AAAB24B ALKCIJlMHH5fRFWL8Kr869iiMCQ2uU/CyDVyqnAHXybYAP4/tspNCTJUDT47vpdy IpcsTFDhwXbAwz4NV2vNtowrC80SPHUxNzVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQOAjvqSWIN/hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnPQi5aqSSh17ip0x8CVmESWQ7aSstk07USyqZkn6sEUkDFQoI ApkBApsBAh4BFiEEIxYFruNHYvO7yOz3OAjvqSWIN/gAAKjMAP9cACCFPV4FdQRz L3J5u+s5XEbrafNUC6C1bwZcLCmx0AD6AwgOfh14QS9ZmVsGm3NZN4HM+ZsD3vWQ ceLBimSvCwfCwAEEEBYKAHMFgmH0CO0Dhf94CRDG04NsboF3iUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdaZNhUHjSLN5EGfQY6K0bY7zJ8 9nckacDiPmRhYe4rAhYhBD/qsI/GOCnAgEEsv8bTg2xugXeJAABSGgEAqViW4Oqa d6FoQj+cLu57pbzGsRvS9yljc/3V7lK/4VEBAJv7jjFuUlDRvHG6flF5L+pYmCi2 tLHJlT9OGWSAmMgK =7F2r -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u176-priv.pgp000064400000000000000000000015601046102023000222740ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: AE27 59F4 EC85 0FA6 CE98 FA47 29FD 8264 9411 B973 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAoE9+o3JXfORt4oEAOn8BnKJJBMKZ8aU+rMPK tOpnjC0AAQCpovapYlCGYJxwolNJWleXHJxkUdNOS03qLNpFK9nfjQ/gwsALBB8W CgB9BYJh8/a4AwsJBwkQKf2CZJQRuXNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnIUeVVXaNfvcepcZnraIOxf/FksUlex7UG1iie26oUKMD FQoIApsBAh4BFiEEridZ9OyFD6bOmPpHKf2CZJQRuXMAAFgtAP9HdiiCp1w7/lSz WUqdIPTj5aRVc3tJesTLT/sn3X8WlwD/YuvtG9YUcZv7OnT1SmyEclRc0cNG0a+D JRCnOLQpFA7NEjx1MTc2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ ECn9gmSUEblzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2EDZRjmeTrjEupVs4+Ra34fzO62jV7uV94y/pKzPeEoAxUKCAKZAQKbAQIeARYh BK4nWfTshQ+mzpj6Ryn9gmSUEblzAADERAEA4wp5oPD/V27wvkRVlltkLm80iVuA DhICHGXjWy4pFdQBAIWv/y9pGYS9lzmFhaJpnj46kvmPqU38SqFAiqqRTfgG =xldW -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u176.pgp000064400000000000000000000017561046102023000213250ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAoE9+o3JXfORt4oEAOn8BnKJJBMKZ8aU+rMPK tOpnjC3CwAsEHxYKAH0FgmHz9rgDCwkHCRAp/YJklBG5c0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmchR5VVdo1+9x6lxmetog7F/8WSxSV7 HtQbWKJ7bqhQowMVCggCmwECHgEWIQSuJ1n07IUPps6Y+kcp/YJklBG5cwAAWC0A /0d2KIKnXDv+VLNZSp0g9OPlpFVze0l6xMtP+yfdfxaXAP9i6+0b1hRxm/s6dPVK bIRyVFzRw0bRr4MlEKc4tCkUDs0SPHUxNzZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQKf2CZJQRuXNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnYQNlGOZ5OuMS6lWzj5Frfh/M7raNXu5X3jL+krM94SgDFQoI ApkBApsBAh4BFiEEridZ9OyFD6bOmPpHKf2CZJQRuXMAAMREAQDjCnmg8P9XbvC+ RFWWW2QubzSJW4AOEgIcZeNbLikV1AEAha//L2kZhL2XOYWFommePjqS+Y+pTfxK oUCKqpFN+AbCwAEEEBYKAHMFgmH0CO0Dhf94CRA4CO+pJYg3+EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfoPXNQ1+kQGZNwLDR9yU9GFDk2 0J1vo483XiVrdjtkxhYhBCMWBa7jR2Lzu8js9zgI76kliDf4AACzMAD/f4jzMGEU Y6EVxkWGUEEph75CgT9vvbTf8CYZlNNr7YoBAJG3DNpaZeE15dw26Muqx6Jd9Mol 5rrxE0E+RJooZXwE =zRzW -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u177-priv.pgp000064400000000000000000000015601046102023000222750ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E752 9E35 67F5 9BBC ADAA D124 6613 DBC8 6DAD 45F8 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAdHHKJCPxcFwV7MCb0NKo63bHbGg/n1ssXpLb R2HRSvIAAQCmmyYQCSOWabCib8+jynu0psVqGSi/hTALCqb5NhmuBA4OwsALBB8W CgB9BYJh8/a4AwsJBwkQZhPbyG2tRfhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jngt4sOzaIaOq4+KaTSnaOf48qRatNbkcszvcrkCyPBFED FQoIApsBAh4BFiEE51KeNWf1m7ytqtEkZhPbyG2tRfgAAHtsAQC4SmJ/u476skBb rXLaecwgjwYLFv+qLqkQL99/ANv3bgEA59kickuz+wyO8CQfUNOTZ94f3MAuoFAD 3YKaGvdp/wvNEjx1MTc3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EGYT28htrUX4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4oaSM1cJSxyxjbmSpnTxBh1eNzk+yADox+PRQV/cXvXAxUKCAKZAQKbAQIeARYh BOdSnjVn9Zu8rarRJGYT28htrUX4AACzBQD9Fe5Qa+W9+a4zusM0rbxybzwgs2Y2 f7s/6rXKSAqZXUgA/iJQgKxcllWBaPhWDUP+8cZoIfpkzMFlCbkKQG5D+YUN =Qwh5 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u177.pgp000064400000000000000000000017561046102023000213260ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAdHHKJCPxcFwV7MCb0NKo63bHbGg/n1ssXpLb R2HRSvLCwAsEHxYKAH0FgmHz9rgDCwkHCRBmE9vIba1F+EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeC3iw7Noho6rj4ppNKdo5/jypFq01u RyzO9yuQLI8EUQMVCggCmwECHgEWIQTnUp41Z/WbvK2q0SRmE9vIba1F+AAAe2wB ALhKYn+7jvqyQFutctp5zCCPBgsW/6ouqRAv338A2/duAQDn2SJyS7P7DI7wJB9Q 05Nn3h/cwC6gUAPdgpoa92n/C80SPHUxNzdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQZhPbyG2tRfhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnihpIzVwlLHLGNuZKmdPEGHV43OT7IAOjH49FBX9xe9cDFQoI ApkBApsBAh4BFiEE51KeNWf1m7ytqtEkZhPbyG2tRfgAALMFAP0V7lBr5b35rjO6 wzStvHJvPCCzZjZ/uz/qtcpICpldSAD+IlCArFyWVYFo+FYNQ/7xxmgh+mTMwWUJ uQpAbkP5hQ3CwAEEEBYKAHMFgmH0CO0Dhf94CRAp/YJklBG5c0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmffPrQmPpgtUvZhaZeeoXg7XpLg Uy4rryxwmGg16AD5IxYhBK4nWfTshQ+mzpj6Ryn9gmSUEblzAABDlwD/bNn+ay4w z1NvGztZvW4rSK84+Zx6kYORvM/74SnsEmAA/RPDwEDDV8OI8p+3Ixh2JODWV5LN Y1s6DCaEcRnOTx4H =olGr -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u178-priv.pgp000064400000000000000000000015601046102023000222760ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CF32 0590 351A 8C41 C9EA 0C1F 4C6F 00F7 AEA7 3AD5 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAskUEBOG1DJX/96uS9fsAAIi7KuKwK+BUVhQM knx6eu0AAP9ZaVwp57UrgfPnqyFGiE4yT2zq4R36mp2pfsfE0eoF6xKzwsALBB8W CgB9BYJh8/a4AwsJBwkQTG8A966nOtVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnRhV9PCRVQ49Ug4+xYwwS2Nye9Z/DG8DhscgvxgleYVoD FQoIApsBAh4BFiEEzzIFkDUajEHJ6gwfTG8A966nOtUAAMK6AP9KXa69OmkbCipT whpBa0tqGZMYTbOxOENr/z4EfEUaegD6A7TxTSv/X+SR8iTks+schwEaT1ljyw7O yVyTNkcFJAnNEjx1MTc4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EExvAPeupzrVRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z9zcdl6HN288nNqz4LRqyy1ZoMXZBSIbESNApBKouOOlAxUKCAKZAQKbAQIeARYh BM8yBZA1GoxByeoMH0xvAPeupzrVAABLLAEAz5ztwGLa3ux8kROZdupnUYinLUQQ nROy3RS2xbUyFrYBAMHRTtLpgUz0uDQqhx44SR1eozPkB40l5TXWmxVI6cII =0RdA -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u178.pgp000064400000000000000000000017561046102023000213270ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAskUEBOG1DJX/96uS9fsAAIi7KuKwK+BUVhQM knx6eu3CwAsEHxYKAH0FgmHz9rgDCwkHCRBMbwD3rqc61UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdGFX08JFVDj1SDj7FjDBLY3J71n8Mb wOGxyC/GCV5hWgMVCggCmwECHgEWIQTPMgWQNRqMQcnqDB9MbwD3rqc61QAAwroA /0pdrr06aRsKKlPCGkFrS2oZkxhNs7E4Q2v/PgR8RRp6APoDtPFNK/9f5JHyJOSz 6xyHARpPWWPLDs7JXJM2RwUkCc0SPHUxNzhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQTG8A966nOtVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn3Nx2Xoc3bzyc2rPgtGrLLVmgxdkFIhsRI0CkEqi446UDFQoI ApkBApsBAh4BFiEEzzIFkDUajEHJ6gwfTG8A966nOtUAAEssAQDPnO3AYtre7HyR E5l26mdRiKctRBCdE7LdFLbFtTIWtgEAwdFO0umBTPS4NCqHHjhJHV6jM+QHjSXl NdabFUjpwgjCwAEEEBYKAHMFgmH0CO0Dhf94CRBmE9vIba1F+EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfwnCB+CSCTQX19MnzI0sGWkgca MIHKiXo3qZK0+SaYfxYhBOdSnjVn9Zu8rarRJGYT28htrUX4AABu+gD+OvFzmV3Q eEXvp0yA4oR4KQr/km/EB/Ysvwdx5rxTaDUBAOm7caKmp8CYj/PmqJxEAiA0I2R3 UlwiYvEzZx5eP60E =i7xg -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u179-priv.pgp000064400000000000000000000015601046102023000222770ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 475A 4409 1578 C02A 0C5C 2D62 F106 918D 87E1 5476 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAOgi88UuZgzEpbp2JOyKXH0HB3YLjhQG4n96c 107HUc4AAPsFVNs1YWExIxPywwtn3z9o7MZXzBYCyE4UdGbDbZrXww+PwsALBB8W CgB9BYJh8/a4AwsJBwkQ8QaRjYfhVHZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnb13x9O2zVWV+LE4c7niiHkSgOZOZqdPl7eCNz5nZDQ0D FQoIApsBAh4BFiEER1pECRV4wCoMXC1i8QaRjYfhVHYAADMXAPoDsUu8U1dserZA 4LH2b31LhroF6321uILAJtmdQ0E/cwD+MXGj48er4viUbFCLFC7ith+L1ydGwmDD BP3jHMO+EgvNEjx1MTc5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EPEGkY2H4VR2RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2Bzkk1+YYzyGFBMZC27vk5cmoZNpx0bE/73gK2xJiwWAxUKCAKZAQKbAQIeARYh BEdaRAkVeMAqDFwtYvEGkY2H4VR2AABlTwEAk+qGQUw6LeXSmToi+GT285uzJx1d VX/9eC2MgvUShboA/1qlLa86CX6tb4XtnvzCz6067SyE7GcZd+SrgCoebOcO =gLXk -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u179.pgp000064400000000000000000000017561046102023000213300ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAOgi88UuZgzEpbp2JOyKXH0HB3YLjhQG4n96c 107HUc7CwAsEHxYKAH0FgmHz9rgDCwkHCRDxBpGNh+FUdkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdvXfH07bNVZX4sThzueKIeRKA5k5mp 0+Xt4I3PmdkNDQMVCggCmwECHgEWIQRHWkQJFXjAKgxcLWLxBpGNh+FUdgAAMxcA +gOxS7xTV2x6tkDgsfZvfUuGugXrfbW4gsAm2Z1DQT9zAP4xcaPjx6vi+JRsUIsU LuK2H4vXJ0bCYMME/eMcw74SC80SPHUxNzlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQ8QaRjYfhVHZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnYHOSTX5hjPIYUExkLbu+Tlyahk2nHRsT/veArbEmLBYDFQoI ApkBApsBAh4BFiEER1pECRV4wCoMXC1i8QaRjYfhVHYAAGVPAQCT6oZBTDot5dKZ OiL4ZPbzm7MnHV1Vf/14LYyC9RKFugD/WqUtrzoJfq1vhe2e/MLPrTrtLITsZxl3 5KuAKh5s5w7CwAEEEBYKAHMFgmH0CO0Dhf94CRBMbwD3rqc61UcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfXrggbORLDzcPUMLKo9VDGQ+3U 5rFAyx1ccq9JwFf4SxYhBM8yBZA1GoxByeoMH0xvAPeupzrVAAC6awEA3jEEWGTp uqoVgBUk7Po3jDn4Ahzk/d17QIZY6Is/iFABANjyCggcZTto5Tqy/jMXBZQckno4 py1d+ouP0ag83EgB =n0Je -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u18-priv.pgp000064400000000000000000000015571046102023000222150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 20B4 81FF B7B7 2F67 81BA 4980 6C8E 35B5 C79A 3E41 Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAC/4sIQFpC6L+5BaJWRxlo2PGzndzOrb9wicY SOZCnhoAAP9mjCaqJ/De/LFYKspFitwoIo0fodIv2Hsyf+FzvWvxQBGjwsALBB8W CgB9BYJh8/awAwsJBwkQbI41tceaPkFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn74UssbT4bpAysOGAus8a2fzQIViuaAdKbna/TKmrNgkD FQoIApsBAh4BFiEEILSB/7e3L2eBukmAbI41tceaPkEAALeqAQD7NFy6DzzY2G60 VUcQRd+YnVEmnU0gjyeECqmzjQ8oJwD9HyMJ1z2GxStQgvnwoUSOBF5N2u+60odq QVPoN2bILwbNETx1MThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ bI41tceaPkFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn xjFplAhoqhJv4vxTkDEvbS+++IW6fP2+ca9cjuhc4BoDFQoIApkBApsBAh4BFiEE ILSB/7e3L2eBukmAbI41tceaPkEAABKMAP9IwlBky9bCUPZDryGafQgC3F0rnMvt FygI17RY1YWjAAEA4iS+8qlFglpB4EptJItUu8Yfy+Mfo7W0p1hiWDjjCg8= =+sfr -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u18.pgp000064400000000000000000000017561046102023000212400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAC/4sIQFpC6L+5BaJWRxlo2PGzndzOrb9wicY SOZCnhrCwAsEHxYKAH0FgmHz9rADCwkHCRBsjjW1x5o+QUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfvhSyxtPhukDKw4YC6zxrZ/NAhWK5o B0pudr9Mqas2CQMVCggCmwECHgEWIQQgtIH/t7cvZ4G6SYBsjjW1x5o+QQAAt6oB APs0XLoPPNjYbrRVRxBF35idUSadTSCPJ4QKqbONDygnAP0fIwnXPYbFK1CC+fCh RI4EXk3a77rSh2pBU+g3ZsgvBs0RPHUxOEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRBsjjW1x5o+QUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfGMWmUCGiqEm/i/FOQMS9tL774hbp8/b5xr1yO6FzgGgMVCggC mQECmwECHgEWIQQgtIH/t7cvZ4G6SYBsjjW1x5o+QQAAEowA/0jCUGTL1sJQ9kOv IZp9CALcXSucy+0XKAjXtFjVhaMAAQDiJL7yqUWCWkHgSm0ki1S7xh/L4x+jtbSn WGJYOOMKD8LAAQQQFgoAcwWCYfQI5wOF/3gJEK+5ryZDuJo6RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5/nryEAWNJ1Qbh8EpkWijh3RYts JXungkG9rLR380LaFiEEWRSSyvUcBlFieHI+r7mvJkO4mjoAAEboAP99S4xsaHxC dk3DeQhKB+SRwt/x/CsasDjHtjlQ+NUJXgEAn7YCjl/JDi0H2b8+4FCqR1jp9FUI 4zKAWH7Xxwd7AAE= =Mpes -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u180-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5B88 BF2E 7163 D059 4CE0 E302 C2AD 0FE4 3D47 3EFE Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAkUqQF2ZAvg4+FaD2wU6LYgv7+TyLV2VEM25s SJPcghUAAP4xGAuf48qoiJOlaMH0DDNhoNpsPa1yJrbBLzraMjdtshBtwsALBB8W CgB9BYJh8/a4AwsJBwkQwq0P5D1HPv5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnA6560Wva4gJZwwUIFdkjp6E8YAOVl53CS8Xn9xzEOhsD FQoIApsBAh4BFiEEW4i/LnFj0FlM4OMCwq0P5D1HPv4AALumAQDYRHQuqI+t5NP0 fMOl+GWGTE30IJPUdKcLyHK6lkUENwD/e4HsTlBC1SGn8ulviGZjyBQQ2Sq5OJ9Z lnp9EMRaIAPNEjx1MTgwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EMKtD+Q9Rz7+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2QKHDUwW6ArtwXAU1DbvpmYRzsPtt8g1UIuJt6d+U67AxUKCAKZAQKbAQIeARYh BFuIvy5xY9BZTODjAsKtD+Q9Rz7+AAB1FQEA5LT+VkDMozzRUidawMowrxB2J423 h0C/Fm9N4ve7s+YBANx/5EiYlOSrseRWY0r3LPZ0GEeJ0MfM1/PrC/+bDxcI =jbhx -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u180.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAkUqQF2ZAvg4+FaD2wU6LYgv7+TyLV2VEM25s SJPcghXCwAsEHxYKAH0FgmHz9rgDCwkHCRDCrQ/kPUc+/kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcDrnrRa9riAlnDBQgV2SOnoTxgA5WX ncJLxef3HMQ6GwMVCggCmwECHgEWIQRbiL8ucWPQWUzg4wLCrQ/kPUc+/gAAu6YB ANhEdC6oj63k0/R8w6X4ZYZMTfQgk9R0pwvIcrqWRQQ3AP97gexOUELVIafy6W+I ZmPIFBDZKrk4n1mWen0QxFogA80SPHUxODBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQwq0P5D1HPv5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnZAocNTBboCu3BcBTUNu+mZhHOw+23yDVQi4m3p35TrsDFQoI ApkBApsBAh4BFiEEW4i/LnFj0FlM4OMCwq0P5D1HPv4AAHUVAQDktP5WQMyjPNFS J1rAyjCvEHYnjbeHQL8Wb03i97uz5gEA3H/kSJiU5Kux5FZjSvcs9nQYR4nQx8zX 8+sL/5sPFwjCwAEEEBYKAHMFgmH0CO0Dhf94CRDxBpGNh+FUdkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeo1Itp+oTeunIKuH8DDYXD38Zu ZNRJRnjStzdVlr7sGBYhBEdaRAkVeMAqDFwtYvEGkY2H4VR2AADVdAD+OEinXKXH /5L8jeSDTkMES2B6airMuAGe03piB6GMUG0BAOjulnzoM/TpZpkEIyBZAfh1UVbX 9X2AIE1uJUVQuhgL =V9t/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u181-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E4AD A4F5 D702 AD51 0C2F 7A19 3169 50AD 7429 C1FA Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAA7ywD6WzkP+j7tUIAJAo8M6v/G7iZprijVzp DwQPc+sAAP9YojLWUBwJSbQ1+TcFkcnNG9Pv7hv7z73cG1ldD1ZLMQ//wsALBB8W CgB9BYJh8/a4AwsJBwkQMWlQrXQpwfpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn5eCSNqsv94o+NEkR59VYKAr7QBJnCZK9tBITc4utnrMD FQoIApsBAh4BFiEE5K2k9dcCrVEML3oZMWlQrXQpwfoAADt4AQDkyqzWo76ve/9R RH9A/ExqUshLqx/1HvEyVTmR6icUGgEAuBlfyn0NSQ6JfRIb8wWZ7X10IY93zdqi 7nTAjcpD0g3NEjx1MTgxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EDFpUK10KcH6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZyyYQccCWbDnXILh5anpnydN+Har1IwzR8wRI1FCx4xgAxUKCAKZAQKbAQIeARYh BOStpPXXAq1RDC96GTFpUK10KcH6AAB+KAD9Fm+38uRQFuRNqqPSdjoJNpSMS8Br b3DEGXSDRJAy7b8BANnNonpuZXczERf39qZ423RJztVpxap8bZx8nauv7qIP =8EGu -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u181.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAA7ywD6WzkP+j7tUIAJAo8M6v/G7iZprijVzp DwQPc+vCwAsEHxYKAH0FgmHz9rgDCwkHCRAxaVCtdCnB+kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfl4JI2qy/3ij40SRHn1VgoCvtAEmcJ kr20EhNzi62eswMVCggCmwECHgEWIQTkraT11wKtUQwvehkxaVCtdCnB+gAAO3gB AOTKrNajvq97/1FEf0D8TGpSyEurH/Ue8TJVOZHqJxQaAQC4GV/KfQ1JDol9Ehvz BZntfXQhj3fN2qLudMCNykPSDc0SPHUxODFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQMWlQrXQpwfpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnLJhBxwJZsOdcguHlqemfJ034dqvUjDNHzBEjUULHjGADFQoI ApkBApsBAh4BFiEE5K2k9dcCrVEML3oZMWlQrXQpwfoAAH4oAP0Wb7fy5FAW5E2q o9J2Ogk2lIxLwGtvcMQZdINEkDLtvwEA2c2iem5ldzMRF/f2pnjbdEnO1WnFqnxt nHydq6/uog/CwAEEEBYKAHMFgmH0CO0Dhf94CRDCrQ/kPUc+/kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmepJ3vox3Z7S0Hi/NNOgGWC6Xcm A1E8SjO0skX5WxLIdRYhBFuIvy5xY9BZTODjAsKtD+Q9Rz7+AAB7cAD+MflCpdt9 MjNR28Gngp8jzF8siEz8S9N6gFPPYHtQkewBAM1jDzrodwV2YaNUdtWIc9U+a5yM mYNemuHr8dB9ELwH =O7x0 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u182-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6D6B 846B 8661 F101 3E7B C8D6 4C72 80F7 DF9D A6E6 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAbRqzsGDPJqKzsvii6DsVxKjgOPWKDamwnrSi mHTlB+QAAQDo6GNcgmajXU2ZJD2fZ70HSHgDG6zt9xml0Y2eZ2AN/Q+CwsALBB8W CgB9BYJh8/a4AwsJBwkQTHKA99+dpuZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn1U9X48MLCUGC/BboPpj+1YCS6YFyMNq1k8ZZbctYXzsD FQoIApsBAh4BFiEEbWuEa4Zh8QE+e8jWTHKA99+dpuYAAKkkAP0ai0wyq6JjD8EQ yw6LzBJnPvzEKnciDAh1ZIRfp58CCQEAtw8Rxre6CZd6+I7WHTGAKnB9LRp5IAKI nchUl/kspQ3NEjx1MTgyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EExygPffnabmRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z8EL4mTJlaPzm2XZvJ5tnlE9wxGX7OPm1ewjZtaIDk7+AxUKCAKZAQKbAQIeARYh BG1rhGuGYfEBPnvI1kxygPffnabmAAAGbgD9GdOvx7xXtDFd6IpEE3SqkxytKS0v 4J7EbMQTUa3vv/EA/jyh4xlzCpWEhsCviU+Xyj9yyiJ3HUjovfqDd0X8cQAK =o7nr -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u182.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAbRqzsGDPJqKzsvii6DsVxKjgOPWKDamwnrSi mHTlB+TCwAsEHxYKAH0FgmHz9rgDCwkHCRBMcoD3352m5kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfVT1fjwwsJQYL8Fug+mP7VgJLpgXIw 2rWTxllty1hfOwMVCggCmwECHgEWIQRta4RrhmHxAT57yNZMcoD3352m5gAAqSQA /RqLTDKromMPwRDLDovMEmc+/MQqdyIMCHVkhF+nnwIJAQC3DxHGt7oJl3r4jtYd MYAqcH0tGnkgAoidyFSX+SylDc0SPHUxODJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQTHKA99+dpuZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnwQviZMmVo/ObZdm8nm2eUT3DEZfs4+bV7CNm1ogOTv4DFQoI ApkBApsBAh4BFiEEbWuEa4Zh8QE+e8jWTHKA99+dpuYAAAZuAP0Z06/HvFe0MV3o ikQTdKqTHK0pLS/gnsRsxBNRre+/8QD+PKHjGXMKlYSGwK+JT5fKP3LKIncdSOi9 +oN3RfxxAArCwAEEEBYKAHMFgmH0CO0Dhf94CRAxaVCtdCnB+kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeREysTzQtTt1OStmTCpozR+piL kUoZgloZAT+/m2A4sRYhBOStpPXXAq1RDC96GTFpUK10KcH6AABJ3QD+Jw14dAYl kUa37SgCijUoEntRkVDNZ5/l6OIJ/jneEYsA/3m7dGjaVBmLMbbCGwHrWTTi/SeA etuXtWG8auAH6pEM =slTM -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u183-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4988 3F6C A68B 9F45 2F2A 5F2F 0468 7A60 78E0 0FBF Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAXFbwD75SldtMsgWEYStw3yCm8GUiVqD5AwxZ eKXBrvgAAQDwxav/1pR5/E+KTe7FNs0vnIdu1rNCeNjhpWzOVLlsDBM7wsALBB8W CgB9BYJh8/a4AwsJBwkQBGh6YHjgD79HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn8abpBKi0rAh351Yw6BWdlsI79NHs2rnN4v8mY5joAUwD FQoIApsBAh4BFiEESYg/bKaLn0UvKl8vBGh6YHjgD78AAGpbAQCHeaimJGLA+pMl Ssnvh94QgOfoS5ueYbOkMRdpJP2d2gEA5NxCStFIl30E771SqjNitn4GEWe/o8pI oXql3rjpBAvNEjx1MTgzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EARoemB44A+/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7mWd81el5qBfVdRnm9Him/GarnhPQuSROqpwU3X/TioAxUKCAKZAQKbAQIeARYh BEmIP2ymi59FLypfLwRoemB44A+/AAD8VgEAjPGTdItb+ucASUvVYHpIm7eIU6rc LpeoZC5uv7W91MIA/2PpVxkn8OrZd/dPbFaEfQ2Stzy8oERKihnMKnQB7J8F =Xanu -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u183.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAXFbwD75SldtMsgWEYStw3yCm8GUiVqD5AwxZ eKXBrvjCwAsEHxYKAH0FgmHz9rgDCwkHCRAEaHpgeOAPv0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfxpukEqLSsCHfnVjDoFZ2Wwjv00eza uc3i/yZjmOgBTAMVCggCmwECHgEWIQRJiD9spoufRS8qXy8EaHpgeOAPvwAAalsB AId5qKYkYsD6kyVKye+H3hCA5+hLm55hs6QxF2kk/Z3aAQDk3EJK0UiXfQTvvVKq M2K2fgYRZ7+jykiheqXeuOkEC80SPHUxODNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQBGh6YHjgD79HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnuZZ3zV6XmoF9V1Geb0eKb8ZqueE9C5JE6qnBTdf9OKgDFQoI ApkBApsBAh4BFiEESYg/bKaLn0UvKl8vBGh6YHjgD78AAPxWAQCM8ZN0i1v65wBJ S9Vgekibt4hTqtwul6hkLm6/tb3UwgD/Y+lXGSfw6tl3909sVoR9DZK3PLygREqK GcwqdAHsnwXCwAEEEBYKAHMFgmH0CO0Dhf94CRBMcoD3352m5kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfi6/cVpd1A84wPHDZMOYgkQIEV lPoeyaWo+f/NIDNgHxYhBG1rhGuGYfEBPnvI1kxygPffnabmAACERQEAxMBp0o9B gEA5No0Izhl9mP461wHAKEtMoSbnxhT52msA/iH6KbZVeWuDRQXri+5IPF8dSVhd ij+tCdWRWmq93RAA =fUaS -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u184-priv.pgp000064400000000000000000000015601046102023000222730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3046 B507 5B9D AF56 45F5 1717 D01A B613 4290 0011 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAOzbogEpCHrL5ioisV9wKamlNvf6ynfP53yu5 ttux+0sAAQC1TmO/R+H3EIoUjJT7AiN/mShhyD+SUZtmzFvP1ppEhQ/uwsALBB8W CgB9BYJh8/a4AwsJBwkQ0Bq2E0KQABFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn68hJDry/rget0J3Mdr2wgNv8t63DjqbkIYoQrWKL404D FQoIApsBAh4BFiEEMEa1B1udr1ZF9RcX0Bq2E0KQABEAACBjAQDytDUIRBj2heiw cFaj9pJ/Boh7LLw9EjpUIlPk16v95gD/aFTh4AVsNMJsYrkZmNcE3ZFcxeInzjW7 nO+VS+IwKQXNEjx1MTg0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ ENAathNCkAARRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z99hzxk5Z4rA4KIcZBQW0eiWSLGwUHwhZvOZjhu/FjAqAxUKCAKZAQKbAQIeARYh BDBGtQdbna9WRfUXF9AathNCkAARAABFewEAorCU0ggFRmZXr65GbLUuiVdi0tQD Ixv/S+KvexXKS8cBAJvpe6wpRRn+/ZsBF/fIrAmzlVq/o68sXcVcMzEOO/kC =skDD -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u184.pgp000064400000000000000000000017561046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAOzbogEpCHrL5ioisV9wKamlNvf6ynfP53yu5 ttux+0vCwAsEHxYKAH0FgmHz9rgDCwkHCRDQGrYTQpAAEUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfryEkOvL+uB63Qncx2vbCA2/y3rcOO puQhihCtYovjTgMVCggCmwECHgEWIQQwRrUHW52vVkX1FxfQGrYTQpAAEQAAIGMB APK0NQhEGPaF6LBwVqP2kn8GiHssvD0SOlQiU+TXq/3mAP9oVOHgBWw0wmxiuRmY 1wTdkVzF4ifONbuc75VL4jApBc0SPHUxODRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQ0Bq2E0KQABFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn32HPGTlnisDgohxkFBbR6JZIsbBQfCFm85mOG78WMCoDFQoI ApkBApsBAh4BFiEEMEa1B1udr1ZF9RcX0Bq2E0KQABEAAEV7AQCisJTSCAVGZlev rkZstS6JV2LS1AMjG/9L4q97FcpLxwEAm+l7rClFGf79mwEX98isCbOVWr+jryxd xVwzMQ47+QLCwAEEEBYKAHMFgmH0CO0Dhf94CRAEaHpgeOAPv0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme/heLzyBrMRSnCmNzO7ocENr4t n1/XTcm+5aq20Es4SBYhBEmIP2ymi59FLypfLwRoemB44A+/AAC1dAD7BBaK0Mru MiUcIqYg5RS3SWPddI6vu+r8iKfOqYyawIcBALVmsNHxvDn2yStZbKBl5dOEiBxG G0LWSUJYuhiqBvsK =iBMj -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u185-priv.pgp000064400000000000000000000015601046102023000222740ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 1621 3F8B 540A C28F E0CB 3548 D84F 0D74 8AC2 3379 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAEV6z0hmO4MHaq0z3tvECmpR9Oz6oGKPLRdAZ hjsxJlwAAP0ZUqSFnZZiiry2HBoepuaHPpMK3NYGkhFqXxgmdaRchQ7AwsALBB8W CgB9BYJh8/a4AwsJBwkQ2E8NdIrCM3lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnPdMBBqN7A6P9y4vWdoGQV7ueM9WRzN/cGPZ/F/6Y/aMD FQoIApsBAh4BFiEEFiE/i1QKwo/gyzVI2E8NdIrCM3kAABw/AP9ejW6QZkUbw4WO G9IscPQlDo5XBv3hwq8Di2N0DMYAcwD+Jq3eiFxXFG+nV67WoyslJe04WVvX/91t TI1wkFKpgQnNEjx1MTg1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ ENhPDXSKwjN5RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z8jyi+Db6g7IkpqjOsBezNIkiG4iH4CU4wafg3qaruDTAxUKCAKZAQKbAQIeARYh BBYhP4tUCsKP4Ms1SNhPDXSKwjN5AABqmwD/WcXjzK8FYlX2jgI/BFkcmEN3Wo30 0iZq7nDdc8vAqDMBAKK9eYXyH+NDd6GfGcKje0JLRZqQYLu3cdqdqOeJHC4E =JikK -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u185.pgp000064400000000000000000000017561046102023000213250ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAEV6z0hmO4MHaq0z3tvECmpR9Oz6oGKPLRdAZ hjsxJlzCwAsEHxYKAH0FgmHz9rgDCwkHCRDYTw10isIzeUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc90wEGo3sDo/3Li9Z2gZBXu54z1ZHM 39wY9n8X/pj9owMVCggCmwECHgEWIQQWIT+LVArCj+DLNUjYTw10isIzeQAAHD8A /16NbpBmRRvDhY4b0ixw9CUOjlcG/eHCrwOLY3QMxgBzAP4mrd6IXFcUb6dXrtaj KyUl7ThZW9f/3W1MjXCQUqmBCc0SPHUxODVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQ2E8NdIrCM3lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnyPKL4NvqDsiSmqM6wF7M0iSIbiIfgJTjBp+Depqu4NMDFQoI ApkBApsBAh4BFiEEFiE/i1QKwo/gyzVI2E8NdIrCM3kAAGqbAP9ZxePMrwViVfaO Aj8EWRyYQ3dajfTSJmrucN1zy8CoMwEAor15hfIf40N3oZ8ZwqN7QktFmpBgu7dx 2p2o54kcLgTCwAEEEBYKAHMFgmH0CO0Dhf94CRDQGrYTQpAAEUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd/AkYXfgIhS8oYKlgE9dcvSItv w6+HBxw6dMnBlsqyuhYhBDBGtQdbna9WRfUXF9AathNCkAARAAAcHgD+L/56JDO/ MX/VGOyk0uOm7733UgsxAKFNKyVzQKxc/FcBAOaxi/D9LKBTK5r+ydyq5kIq9Y4X fHYqdcZ9R+qaFygD =vdJ9 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u186-priv.pgp000064400000000000000000000015601046102023000222750ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9C68 E981 98FF 9964 FA23 66AD CBAD 3A46 5C76 396B Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAcpV53dRKuEkavPuU67lZ9QQbg3YWcK7rqrKC EM0m+NAAAPwJ3kP0252heCo5guh0mvO8B65PCnxH7vyPOq569COthRIqwsALBB8W CgB9BYJh8/a4AwsJBwkQy606Rlx2OWtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnr3ByXVAU795lLecvE+DOnViKJnpTkLtQMyIwfshDqGwD FQoIApsBAh4BFiEEnGjpgZj/mWT6I2aty606Rlx2OWsAAKdEAQD0myZe8dEYGZOj rokOnM5bsxXz65AdqbJDrtjiwEM/fwD/U8bJUW/RqX6drQmbjfZ877rG5A88w8yi MsI42FJgsgfNEjx1MTg2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EMutOkZcdjlrRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/FWDfjwUypdIo9d4oSpnN5Pmeq4HBoA8pQyXbqniBMeAxUKCAKZAQKbAQIeARYh BJxo6YGY/5lk+iNmrcutOkZcdjlrAADHzgD/T11t53UhgLsRWSXPN0E4IBSCWaic C+Ji+4JxylBCvh4A/062p2jZjJ5AT1xJSJKCAMxa0knC1/XwgRcyke8HAMkO =OVyX -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u186.pgp000064400000000000000000000017561046102023000213260ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAcpV53dRKuEkavPuU67lZ9QQbg3YWcK7rqrKC EM0m+NDCwAsEHxYKAH0FgmHz9rgDCwkHCRDLrTpGXHY5a0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmevcHJdUBTv3mUt5y8T4M6dWIomelOQ u1AzIjB+yEOobAMVCggCmwECHgEWIQScaOmBmP+ZZPojZq3LrTpGXHY5awAAp0QB APSbJl7x0RgZk6OuiQ6czluzFfPrkB2pskOu2OLAQz9/AP9TxslRb9Gpfp2tCZuN 9nzvusbkDzzDzKIywjjYUmCyB80SPHUxODZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQy606Rlx2OWtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn8VYN+PBTKl0ij13ihKmc3k+Z6rgcGgDylDJduqeIEx4DFQoI ApkBApsBAh4BFiEEnGjpgZj/mWT6I2aty606Rlx2OWsAAMfOAP9PXW3ndSGAuxFZ Jc83QTggFIJZqJwL4mL7gnHKUEK+HgD/TranaNmMnkBPXElIkoIAzFrSScLX9fCB FzKR7wcAyQ7CwAEEEBYKAHMFgmH0CO0Dhf94CRDYTw10isIzeUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmck21KCH2mCr4Cdh7KR5rliqxBl I+pIRKqX0r87m3V2txYhBBYhP4tUCsKP4Ms1SNhPDXSKwjN5AADZeAEAzrMGFBgz 6HdzQK/rd5wiua4jXomEnvgD3M22lf8/KssA/2QnRgrXT/uUanApG4V6io7bFEuH rNlEwJtd2cfb/c4E =UJWx -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u187-priv.pgp000064400000000000000000000015601046102023000222760ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6EC3 A10A A0B6 B70D C540 8CAE 74B0 BE83 6FD3 82D6 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAnL0qi7Yux+j2M2rfHs7mAfvN3V+H1oeQslJp x0Pis/IAAP4mIWKX8L87khZLemd3StWun6rPqI+Huh1oxbj40it/qBHuwsALBB8W CgB9BYJh8/a4AwsJBwkQdLC+g2/TgtZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnckWlaGPodZ964Be7r5WoSHxQRHWJDZtGBueJrFBt0SMD FQoIApsBAh4BFiEEbsOhCqC2tw3FQIyudLC+g2/TgtYAAKsJAP9mkAVOVwRp4Qoz I7ZBLPB/K4U7Qbhi3c2kTxq1nY1UlQD/Wkj07O28EuR375bW7bPY1znxeuskG7fA LNa1GkmxowDNEjx1MTg3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EHSwvoNv04LWRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zxw8nsnYadqkRpH+Yrt0f+ZBGRya/MWSu1dLw0hKmk1RAxUKCAKZAQKbAQIeARYh BG7DoQqgtrcNxUCMrnSwvoNv04LWAABoWQD9FfSdEODv/hjBrF7c5DuEN9XWF+y+ EIyCiCsqWQIUNCYA/jnTo/jRN0KpvpifDq/nG/osoY8O1O1/ytmcu4ZhQ3oK =o57u -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u187.pgp000064400000000000000000000017561046102023000213270ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAnL0qi7Yux+j2M2rfHs7mAfvN3V+H1oeQslJp x0Pis/LCwAsEHxYKAH0FgmHz9rgDCwkHCRB0sL6Db9OC1kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdyRaVoY+h1n3rgF7uvlahIfFBEdYkN m0YG54msUG3RIwMVCggCmwECHgEWIQRuw6EKoLa3DcVAjK50sL6Db9OC1gAAqwkA /2aQBU5XBGnhCjMjtkEs8H8rhTtBuGLdzaRPGrWdjVSVAP9aSPTs7bwS5Hfvltbt s9jXOfF66yQbt8As1rUaSbGjAM0SPHUxODdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQdLC+g2/TgtZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnHDyeydhp2qRGkf5iu3R/5kEZHJr8xZK7V0vDSEqaTVEDFQoI ApkBApsBAh4BFiEEbsOhCqC2tw3FQIyudLC+g2/TgtYAAGhZAP0V9J0Q4O/+GMGs XtzkO4Q31dYX7L4QjIKIKypZAhQ0JgD+OdOj+NE3Qqm+mJ8Or+cb+iyhjw7U7X/K 2Zy7hmFDegrCwAEEEBYKAHMFgmH0CO4Dhf94CRDLrTpGXHY5a0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfjv499hv7JqGae9q2AE81tq8Ke XXaTZ7e2W5GvAeyfURYhBJxo6YGY/5lk+iNmrcutOkZcdjlrAACadgD+ImQ92ddd xsbO03k2aiq3Szof0p996/YR3DwlPr5FimAA/0iS/OKA0eDoFqbK4Nx+dvhXBJKg 1/9MiWz4WN1cbPgB =cVP7 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u188-priv.pgp000064400000000000000000000015601046102023000222770ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E25E 062B E69B 48D3 B99A 9608 6991 D15C A737 0F0C Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAFseD43ocoXnnjxxmDsMdobrGaKCd4eZeBUeA UWmnJDIAAQDveFdJuED0cCJuiJKJiHd1jRMnDZY3ymXxvqER1PhDrA/3wsALBB8W CgB9BYJh8/a4AwsJBwkQaZHRXKc3DwxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnjLU4068/dmqC/sNlcK7/fmSuj1fICNbnjPMCbamzvuUD FQoIApsBAh4BFiEE4l4GK+abSNO5mpYIaZHRXKc3DwwAAADmAQD569JtaoGp6yuW kpqtNT1fHYSLU2a0iOgUtu2PUA0QOwD9G41YXzmHctARXT7Z+KDdRyveq4ueelnC ySWoySvT0w/NEjx1MTg4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EGmR0VynNw8MRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zw6+gqA3DKXtBFgfv4xFFWrnH9WcOunrizs4+4xrrZRYAxUKCAKZAQKbAQIeARYh BOJeBivmm0jTuZqWCGmR0VynNw8MAACnwQD9GjKUVA4wQalKpsPc7ARvNBjSiZNk PD+blZLNGcTnNi8BAMVZS4uk8LtRBZyfXJwk2O4jCfnenur4WkzCz81kcE0A =Qwvm -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u188.pgp000064400000000000000000000017561046102023000213300ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAFseD43ocoXnnjxxmDsMdobrGaKCd4eZeBUeA UWmnJDLCwAsEHxYKAH0FgmHz9rgDCwkHCRBpkdFcpzcPDEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeMtTjTrz92aoL+w2Vwrv9+ZK6PV8gI 1ueM8wJtqbO+5QMVCggCmwECHgEWIQTiXgYr5ptI07malghpkdFcpzcPDAAAAOYB APnr0m1qganrK5aSmq01PV8dhItTZrSI6BS27Y9QDRA7AP0bjVhfOYdy0BFdPtn4 oN1HK96ri556WcLJJajJK9PTD80SPHUxODhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQaZHRXKc3DwxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnDr6CoDcMpe0EWB+/jEUVaucf1Zw66euLOzj7jGutlFgDFQoI ApkBApsBAh4BFiEE4l4GK+abSNO5mpYIaZHRXKc3DwwAAKfBAP0aMpRUDjBBqUqm w9zsBG80GNKJk2Q8P5uVks0ZxOc2LwEAxVlLi6Twu1EFnJ9cnCTY7iMJ+d6e6vha TMLPzWRwTQDCwAEEEBYKAHMFgmH0CO4Dhf94CRB0sL6Db9OC1kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfBOOVQhdjKaW9Hx2QGTnDYH4uV I1NIox0y3EX748VfZxYhBG7DoQqgtrcNxUCMrnSwvoNv04LWAADECwD/d5gN1uM8 yDcpZzPxiK0TsD+cZlTqHP4uc467ltxadwsBAPqCdgIkNlvboT195qUguVAhu2OM W9gQoUuIh6k4pf4O =5fv5 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u189-priv.pgp000064400000000000000000000015601046102023000223000ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A01A 30A1 AB19 1AF9 C148 C370 4F45 82E2 7D8D 7527 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdA8CSxTCKE/y03zT6YzgLZQtALoPveAtBoudAj y+qmL0kAAQCN2KieQdAwgusVZ/cXFcmxgLG9d1e2sfHEVThmsLW+hRHmwsALBB8W CgB9BYJh8/a4AwsJBwkQT0WC4n2NdSdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jng7UlYp9O8AiWwElT62ixTzT0JIyle7nWjcWiGVKpWtYD FQoIApsBAh4BFiEEoBowoasZGvnBSMNwT0WC4n2NdScAAGfoAQDEpiFrPB7kcN5W Yu/D5juBrWORQZ+Lpqu7SrCCwvma4AEAof6sEqMWuHg524mK+Ubmk3Zh87OpanKn T+8TDsT4sgXNEjx1MTg5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EE9FguJ9jXUnRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZzFEAqSB3F445a7PzjsuOVGWudmUcJMZdSNgoyoHfevrAxUKCAKZAQKbAQIeARYh BKAaMKGrGRr5wUjDcE9FguJ9jXUnAABb5gD/QkI+NkMaQ8rCpgXKY2CYltBzylQe vuX+xjx/nrJtJrQA/1EHcIDJnTiWDLC8gcHpphaL2mRPSg2I5qnt75UO2dcL =aQkx -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u189.pgp000064400000000000000000000017561046102023000213310ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdA8CSxTCKE/y03zT6YzgLZQtALoPveAtBoudAj y+qmL0nCwAsEHxYKAH0FgmHz9rgDCwkHCRBPRYLifY11J0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeDtSVin07wCJbASVPraLFPNPQkjKV7 udaNxaIZUqla1gMVCggCmwECHgEWIQSgGjChqxka+cFIw3BPRYLifY11JwAAZ+gB AMSmIWs8HuRw3lZi78PmO4GtY5FBn4umq7tKsILC+ZrgAQCh/qwSoxa4eDnbiYr5 RuaTdmHzs6lqcqdP7xMOxPiyBc0SPHUxODlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQT0WC4n2NdSdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnMUQCpIHcXjjlrs/OOy45UZa52ZRwkxl1I2CjKgd96+sDFQoI ApkBApsBAh4BFiEEoBowoasZGvnBSMNwT0WC4n2NdScAAFvmAP9CQj42QxpDysKm BcpjYJiW0HPKVB6+5f7GPH+esm0mtAD/UQdwgMmdOJYMsLyBwemmFovaZE9KDYjm qe3vlQ7Z1wvCwAEEEBYKAHMFgmH0CO4Dhf94CRBpkdFcpzcPDEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcaa9F2oUfxg3MuMaWIKI7W16M/ 4PzzHtB4g+bfuszyCxYhBOJeBivmm0jTuZqWCGmR0VynNw8MAAAWVQD/Xq9Q6/ep IEKvzeRVwye1DovcSehFie3wZ5UqchbEuS0BAKmym+DeGpiIyupVlkBRVBm+JNlR FHGQFtCQJV8O0GcF =yb00 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u19-priv.pgp000064400000000000000000000015571046102023000222160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 270E 3D9E 87CA 0999 D422 CD22 F905 BF87 E8F6 0A36 Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdATQhf0cCSqDjDvXB6+15U1MGBN797N5g94H/V tXRzz/MAAQDsdQC6yfO+GEaw/AFaMYQ7vCxHR5Pw6BboNgunEgQLLA3/wsALBB8W CgB9BYJh8/awAwsJBwkQ+QW/h+j2CjZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnoTd9DSExkmce7jCWeEfDUw3Cw/piAHqpYceGkHe/PeYD FQoIApsBAh4BFiEEJw49nofKCZnUIs0i+QW/h+j2CjYAAEXaAP4voknB8KWfiYC6 DutrRcI2VGSxi+RLkszEVVPSEYH2GgD/eCReYEjL53+7SrcA39wJ3veklGCxEu+v xvqIbBPNlArNETx1MTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ +QW/h+j2CjZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn RPL15mhyi3eZKABvMbmtYKNEphUk6ttD1EticJJNP38DFQoIApkBApsBAh4BFiEE Jw49nofKCZnUIs0i+QW/h+j2CjYAAKOkAQCzYn6XPf56Sym74BZ0/HQobg9T+Sgp Ry5q4TxKvXBFSgD+JgDUfFxAGBsBbxHbnfInQyX1wCos8pqRep4iuuFLtQ4= =tF5f -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u19.pgp000064400000000000000000000017561046102023000212410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdATQhf0cCSqDjDvXB6+15U1MGBN797N5g94H/V tXRzz/PCwAsEHxYKAH0FgmHz9rADCwkHCRD5Bb+H6PYKNkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmehN30NITGSZx7uMJZ4R8NTDcLD+mIA eqlhx4aQd7895gMVCggCmwECHgEWIQQnDj2eh8oJmdQizSL5Bb+H6PYKNgAARdoA /i+iScHwpZ+JgLoO62tFwjZUZLGL5EuSzMRVU9IRgfYaAP94JF5gSMvnf7tKtwDf 3Ane96SUYLES76/G+ohsE82UCs0RPHUxOUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRD5Bb+H6PYKNkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdE8vXmaHKLd5koAG8xua1go0SmFSTq20PUS2Jwkk0/fwMVCggC mQECmwECHgEWIQQnDj2eh8oJmdQizSL5Bb+H6PYKNgAAo6QBALNifpc9/npLKbvg FnT8dChuD1P5KClHLmrhPEq9cEVKAP4mANR8XEAYGwFvEdud8idDJfXAKizympF6 niK64Uu1DsLAAQQQFgoAcwWCYfQI5wOF/3gJEGyONbXHmj5BRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0Vlbrb4gbKh3oY25twjqhrbGVDh X7ibdPeL2CR+KoBXFiEEILSB/7e3L2eBukmAbI41tceaPkEAAHsWAP45oJXY6Uir AWGt97kdCnDHXyrNdKlDH4KRz6Xwf00YRwD9Gv9caWohI1W5R4mFM00oX+9IH4js LKbg6oXqFqbfswE= =VKmj -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u190-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5D33 5519 03E1 4FAA BF75 E9EC FB7A E6C2 AC99 59FB Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdANNiNSN8dZzelaE8hX3553Zv+YkejkWJhmM7u hAWQJb4AAQDQHWXRkB3XtxdFcFtYGwjlXy5tktr6emVLG46a3Uk/GA4wwsALBB8W CgB9BYJh8/a4AwsJBwkQ+3rmwqyZWftHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JntS+ww7DUknrvWPittO8ZREo7IqbsGziUDS6KpteWFIQD FQoIApsBAh4BFiEEXTNVGQPhT6q/dens+3rmwqyZWfsAAIreAQCV9BaX/HVlo4t5 ocYL06thc47QNQ3I8j43hingwIIB8AD/cxMF77FHpLZOT9L9w5BvDP5Owh9NjcCP geWLYpj2iwnNEjx1MTkwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EPt65sKsmVn7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2yXYPwIS7Zn7qCDhpQONHKQ0x8b9X1LYNF2/6zDfFhXAxUKCAKZAQKbAQIeARYh BF0zVRkD4U+qv3Xp7Pt65sKsmVn7AAAzGQEA9EDL1GkDtJZjnsVsiMdZkHsFfivq PkBtnEQ/lht6ocIA/3IMONFxrDISOWEInJB1Tgdzx7vmyWnvcRa5h1iO/GIJ =uHAu -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u190.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdANNiNSN8dZzelaE8hX3553Zv+YkejkWJhmM7u hAWQJb7CwAsEHxYKAH0FgmHz9rgDCwkHCRD7eubCrJlZ+0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme1L7DDsNSSeu9Y+K207xlESjsipuwb OJQNLoqm15YUhAMVCggCmwECHgEWIQRdM1UZA+FPqr916ez7eubCrJlZ+wAAit4B AJX0Fpf8dWWji3mhxgvTq2FzjtA1DcjyPjeGKeDAggHwAP9zEwXvsUektk5P0v3D kG8M/k7CH02NwI+B5YtimPaLCc0SPHUxOTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQ+3rmwqyZWftHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnbJdg/AhLtmfuoIOGlA40cpDTHxv1fUtg0Xb/rMN8WFcDFQoI ApkBApsBAh4BFiEEXTNVGQPhT6q/dens+3rmwqyZWfsAADMZAQD0QMvUaQO0lmOe xWyIx1mQewV+K+o+QG2cRD+WG3qhwgD/cgw40XGsMhI5YQickHVOB3PHu+bJae9x FrmHWI78YgnCwAEEEBYKAHMFgmH0CO4Dhf94CRBPRYLifY11J0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeZZIZ0Sl/2mlCQDbWLsypZdW/i A1CReW4BpraqNSNUOhYhBKAaMKGrGRr5wUjDcE9FguJ9jXUnAABnHAEArFVCG9QD QFcPKFza03NjWqiOpGB3p/lqu3Cs6E0/Ux0A/12AUNJHr+rMGR2SVS2h2c4pyKBC Ee4LqrbVUbHcj/0D =BYrS -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u191-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B37A E84F B0B4 226F B935 A309 0F7C 543F 95A2 1EEF Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAQmmpJa4fP9NbzC9fJjWUuagS8LEDSzNQ+A0U 5zV5+VkAAP90eUNTDZWdtRWFZC/c0wvKzKVA08/UMvPbPGWtPlGgbBE3wsALBB8W CgB9BYJh8/a4AwsJBwkQD3xUP5WiHu9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnsR8bnne1IHG3jhCIATVnWrJ6nny3ghmUHLu8/HkNXYsD FQoIApsBAh4BFiEEs3roT7C0Im+5NaMJD3xUP5WiHu8AAGqaAQD6EMk9tEyZ9Sgx K5UNniqIxH+C6M4+JQhlj7kueA+nqwEA03UIAa2O83UenKMU8+Ai0emB1/QOL514 Y46Alwd1mgfNEjx1MTkxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EA98VD+Voh7vRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z0B26jj29Szxmm385N09CTO9jkOIzm//imRLF7adXT3/AxUKCAKZAQKbAQIeARYh BLN66E+wtCJvuTWjCQ98VD+Voh7vAACMvAEA61RTCj3eaup5dbJDgqh5VqXBRaye d3pUo5DX/qYooPQBALVVioJB1JoibIfcIbEYA0ZQADnHHPHkaXG9hAC7uAQP =8Non -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u191.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAQmmpJa4fP9NbzC9fJjWUuagS8LEDSzNQ+A0U 5zV5+VnCwAsEHxYKAH0FgmHz9rgDCwkHCRAPfFQ/laIe70cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmexHxued7UgcbeOEIgBNWdasnqefLeC GZQcu7z8eQ1diwMVCggCmwECHgEWIQSzeuhPsLQib7k1owkPfFQ/laIe7wAAapoB APoQyT20TJn1KDErlQ2eKojEf4Lozj4lCGWPuS54D6erAQDTdQgBrY7zdR6coxTz 4CLR6YHX9A4vnXhjjoCXB3WaB80SPHUxOTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQD3xUP5WiHu9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnQHbqOPb1LPGabfzk3T0JM72OQ4jOb/+KZEsXtp1dPf8DFQoI ApkBApsBAh4BFiEEs3roT7C0Im+5NaMJD3xUP5WiHu8AAIy8AQDrVFMKPd5q6nl1 skOCqHlWpcFFrJ53elSjkNf+piig9AEAtVWKgkHUmiJsh9whsRgDRlAAOccc8eRp cb2EALu4BA/CwAEEEBYKAHMFgmH0CO4Dhf94CRD7eubCrJlZ+0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd9VzcMos4p7/XSSTjsFs8tJToF 5gag7A0CiaxL3DQ55RYhBF0zVRkD4U+qv3Xp7Pt65sKsmVn7AADt3wD/Uv0wz330 tOAc08L5IHlmj/zE0QtudCDxwcbYz+2X3SgBAJD8zAGkZhrLxA0+6Gav4uO6CE7d UfiukP4JyZki6ZgK =fFML -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u192-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 65B2 CD9E 6A6F 6A36 496B 54A2 85F9 BA4B 68AA 5174 Comment: xVgEYfP2uBYJKwYBBAHaRw8BAQdAISl3rKneZmJm3V/5SOVJ7mfcKiNe5M4P3XmE UNUOEnsAAQDrP3cxFdb/G/fePUcusjNgxLJsImcpu0BcS/HuLXArIA6hwsALBB8W CgB9BYJh8/a4AwsJBwkQhfm6S2iqUXRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnQizOHuTp6cg5UWlW4OPGn7UnA3un1PdSmbYiWSC6LnoD FQoIApsBAh4BFiEEZbLNnmpvajZJa1Sihfm6S2iqUXQAAF3RAP9oH27BOqFvkwix ZRcxaKx0proCW6Or31hsljfFX2RDzQD+Jd0Qt8ewDvlmhV0bT5jd9Mo/4dhpWddm SxtZRQ4rPgPNEjx1MTkyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EIX5uktoqlF0RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZwAPnII+feMCVqFZ+svnk4D4fFXNPHd98NhIS610ZhExAxUKCAKZAQKbAQIeARYh BGWyzZ5qb2o2SWtUooX5uktoqlF0AADc9gEA/ZIDyMpJL4JrThtFDdLBRe7b+jSr 6FszEmUioyUaKq8A/iBnyTS2RI933rK72BdAI/ySvL/+LZw1D2Je51YUwcYF =o+8g -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u192.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uBYJKwYBBAHaRw8BAQdAISl3rKneZmJm3V/5SOVJ7mfcKiNe5M4P3XmE UNUOEnvCwAsEHxYKAH0FgmHz9rgDCwkHCRCF+bpLaKpRdEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdCLM4e5OnpyDlRaVbg48aftScDe6fU 91KZtiJZILouegMVCggCmwECHgEWIQRlss2eam9qNklrVKKF+bpLaKpRdAAAXdEA /2gfbsE6oW+TCLFlFzForHSmugJbo6vfWGyWN8VfZEPNAP4l3RC3x7AO+WaFXRtP mN30yj/h2GlZ12ZLG1lFDis+A80SPHUxOTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a4AwsJBwkQhfm6S2iqUXRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnAA+cgj594wJWoVn6y+eTgPh8Vc08d33w2EhLrXRmETEDFQoI ApkBApsBAh4BFiEEZbLNnmpvajZJa1Sihfm6S2iqUXQAANz2AQD9kgPIykkvgmtO G0UN0sFF7tv6NKvoWzMSZSKjJRoqrwD+IGfJNLZEj3fesrvYF0Aj/JK8v/4tnDUP Yl7nVhTBxgXCwAEEEBYKAHMFgmH0CO4Dhf94CRAPfFQ/laIe70cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfxPr5iPV/QDKBDDtQRk3iRQO+F ba79GZ8Q/yUwjO99cxYhBLN66E+wtCJvuTWjCQ98VD+Voh7vAABdRQEAzshgsxyX P0fRr0AN8jrQv/DUN/ZJZ6DQQQ88/lSYolsBAOEpuj2Tprf4tDhWJfn8cfTKm/Ph LhS3cwTYnE8Ti4EM =R6Y/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u193-priv.pgp000064400000000000000000000015601046102023000222730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: C0AA 5CFC 4558 0335 A785 DC2B 3F9E E769 EAAF E70D Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAnwveuXVLn2uIT0LIPsnWxriOjYrbXpOpBfw+ WEZrXD0AAQDC8OFg5RONjfFQRqJ6JaE9sE95fi2HedLYIfkEeosqfBBCwsALBB8W CgB9BYJh8/a5AwsJBwkQP57naeqv5w1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn7CMq6kewSYB29RT+FGj6X/dZsJzZ9L1IKyVTW4QqVmsD FQoIApsBAh4BFiEEwKpc/EVYAzWnhdwrP57naeqv5w0AAFttAQDc0mafyysya8mf c1trbvRfo6Z32aVG+5GmrnxDA/MoUAD/aVpNVqR7tOLYLmX8IE4F4S0fvn63fluy 7+013UPjGA/NEjx1MTkzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ ED+e52nqr+cNRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3HnxJAOU3omVxijiCxg5BKEnxLFjSxAHIShUtQ/GlETAxUKCAKZAQKbAQIeARYh BMCqXPxFWAM1p4XcKz+e52nqr+cNAAALxQEAiHpqWEHt23cE+5TmN1XzbI5u7vu3 whlgkLivQhRiQ1IA+wZt1REP1qaa8g+0w31WY1psAGKq7kkFGuudyTngUTsM =basu -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u193.pgp000064400000000000000000000017561046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAnwveuXVLn2uIT0LIPsnWxriOjYrbXpOpBfw+ WEZrXD3CwAsEHxYKAH0FgmHz9rkDCwkHCRA/nudp6q/nDUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfsIyrqR7BJgHb1FP4UaPpf91mwnNn0 vUgrJVNbhCpWawMVCggCmwECHgEWIQTAqlz8RVgDNaeF3Cs/nudp6q/nDQAAW20B ANzSZp/LKzJryZ9zW2tu9F+jpnfZpUb7kaaufEMD8yhQAP9pWk1WpHu04tguZfwg TgXhLR++frd+W7Lv7TXdQ+MYD80SPHUxOTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQP57naeqv5w1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JncefEkA5TeiZXGKOILGDkEoSfEsWNLEAchKFS1D8aURMDFQoI ApkBApsBAh4BFiEEwKpc/EVYAzWnhdwrP57naeqv5w0AAAvFAQCIempYQe3bdwT7 lOY3VfNsjm7u+7fCGWCQuK9CFGJDUgD7Bm3VEQ/WppryD7TDfVZjWmwAYqruSQUa 653JOeBROwzCwAEEEBYKAHMFgmH0CO4Dhf94CRCF+bpLaKpRdEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf7LuSfmNCzn+UkTrNifKs/F8RE YPf+YSXFsdfXJ1RAgRYhBGWyzZ5qb2o2SWtUooX5uktoqlF0AAAnxAEA0NEVrEHs zRctp0wceU+1txq5LWbyFpbHzZKe7CAEZDcBAIFZ/d9uymN67guEqM+HvKyoocZl 7vfDs1P9baVKkB8N =egrD -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u194-priv.pgp000064400000000000000000000015601046102023000222740ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0997 3DF6 3346 7325 9B77 4B84 0B14 9637 1FDC 2BE6 Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAqpP8GDiebgiEBL9J2boADbG2uFux6p6DPH2P MdkLC2oAAP9vcZY15XJZgBamekCopC/8rDKdznTBQoYoBlqwveTzCBDhwsALBB8W CgB9BYJh8/a5AwsJBwkQCxSWNx/cK+ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnzgedvgbrbvPnf8x45RndzoW3gr3IjE1sHhLnWsV1vKUD FQoIApsBAh4BFiEECZc99jNGcyWbd0uECxSWNx/cK+YAAN9AAP9KUm0gjX4a0qif xNcCKf0Foa9h66wB2MbKdnCuWHhayQEA2CYqPWQ9CiFqoqFgMw9ycu8qwHLIt2yB t34vOjaFLgrNEjx1MTk0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EAsUljcf3CvmRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/NrNUKYVm6qwTtX+4ofd/DYWqFIjhQqYovt9ppNHrTmAxUKCAKZAQKbAQIeARYh BAmXPfYzRnMlm3dLhAsUljcf3CvmAADkGwD/Wl2CGX5em6Kqf+tsefYVhmoz3mVM tTN16X/tGyIRFSYA+gJlDNlii47si2WSqZi8w4cwzUNSOyHgOm43dlIHKnYG =1Pgo -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u194.pgp000064400000000000000000000017561046102023000213250ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAqpP8GDiebgiEBL9J2boADbG2uFux6p6DPH2P MdkLC2rCwAsEHxYKAH0FgmHz9rkDCwkHCRALFJY3H9wr5kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfOB52+Butu8+d/zHjlGd3OhbeCvciM TWweEudaxXW8pQMVCggCmwECHgEWIQQJlz32M0ZzJZt3S4QLFJY3H9wr5gAA30AA /0pSbSCNfhrSqJ/E1wIp/QWhr2HrrAHYxsp2cK5YeFrJAQDYJio9ZD0KIWqioWAz D3Jy7yrAcsi3bIG3fi86NoUuCs0SPHUxOTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQCxSWNx/cK+ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn82s1QphWbqrBO1f7ih938NhaoUiOFCpii+32mk0etOYDFQoI ApkBApsBAh4BFiEECZc99jNGcyWbd0uECxSWNx/cK+YAAOQbAP9aXYIZfl6boqp/ 62x59hWGajPeZUy1M3Xpf+0bIhEVJgD6AmUM2WKLjuyLZZKpmLzDhzDNQ1I7IeA6 bjd2UgcqdgbCwAEEEBYKAHMFgmH0CO4Dhf94CRA/nudp6q/nDUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmet6JbzlSSue/hdOBezipNhpEMQ oJMx1GFhGvf3Ww0onhYhBMCqXPxFWAM1p4XcKz+e52nqr+cNAACLfwD9G3vhrwY/ 4zeZUwc160erKPk5A9/sYzodzolbuhvHcqkA/3BAZpT8LkR5rR/csDq2j6A5KujZ 4nnoT0IvchDMPCoJ =qaif -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u195-priv.pgp000064400000000000000000000015601046102023000222750ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 29AA A5AF 7CF9 41F4 307D E966 BD9E 690D 59FE 5383 Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdA0j5MEC+sYktQMIyCxFnMnuF1Ac1udY8LNK/S Gq/ajX4AAP0bRx6Ppz64wa00vZxVyijLguMS4ziLFk5KWscTG3V5Ag7AwsALBB8W CgB9BYJh8/a5AwsJBwkQvZ5pDVn+U4NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnziO+BHvXjYSNT3wkDz8ppW6VninIsEJU0TjiQQliOW0D FQoIApsBAh4BFiEEKaqlr3z5QfQwfelmvZ5pDVn+U4MAAMtWAQCBQ1brB4z/7KQB cYvDCfSS1iYey7CYr1IGpHgFNL9t6wEA9R0aWIMVpTY/5M65O6Yiq5dELPeg5HwG Ts8Dv8QscQ/NEjx1MTk1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EL2eaQ1Z/lODRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z01SPZsAkE0Id578u6dCS3IF6WKYroNznJ5YSoYlvUN4AxUKCAKZAQKbAQIeARYh BCmqpa98+UH0MH3pZr2eaQ1Z/lODAABReAEAyjn2IQxJeVrjeZlLVDUSRU7N0iAE 3SRrxxd7Q63fJHsA/3j/T0GH5XQXBcBkIue86ZrS2VqZlgGGOrqjnNsPqJ4H =MVJ2 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u195.pgp000064400000000000000000000017561046102023000213260ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdA0j5MEC+sYktQMIyCxFnMnuF1Ac1udY8LNK/S Gq/ajX7CwAsEHxYKAH0FgmHz9rkDCwkHCRC9nmkNWf5Tg0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfOI74Ee9eNhI1PfCQPPymlbpWeKciw QlTROOJBCWI5bQMVCggCmwECHgEWIQQpqqWvfPlB9DB96Wa9nmkNWf5TgwAAy1YB AIFDVusHjP/spAFxi8MJ9JLWJh7LsJivUgakeAU0v23rAQD1HRpYgxWlNj/kzrk7 piKrl0Qs96DkfAZOzwO/xCxxD80SPHUxOTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQvZ5pDVn+U4NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnTVI9mwCQTQh3nvy7p0JLcgXpYpiug3OcnlhKhiW9Q3gDFQoI ApkBApsBAh4BFiEEKaqlr3z5QfQwfelmvZ5pDVn+U4MAAFF4AQDKOfYhDEl5WuN5 mUtUNRJFTs3SIATdJGvHF3tDrd8kewD/eP9PQYfldBcFwGQi57zpmtLZWpmWAYY6 uqOc2w+ongfCwAEEEBYKAHMFgmH0CO4Dhf94CRALFJY3H9wr5kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcafwiyDmVXTVCwZ+OaUAfIwnve wjaRBNWWOz68/jV4iRYhBAmXPfYzRnMlm3dLhAsUljcf3CvmAAAwPgEAnwI+wUJt 9+FVIdiT0s3zStK8Z/xLP9Oi3HcKKDhMTssBAKsZo3U/sOZaH9dGvhg6h/21Jl1b xVrmCp2sSjY4dhMD =4avU -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u196-priv.pgp000064400000000000000000000015601046102023000222760ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9BDA 50D8 A6C7 8525 051A AE07 CC26 5940 22C7 D4AE Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAv8C5PFozLUMfJej8JTdTFHYby3uohzzDpQho jynGFYkAAQCa5mobOiaJsTEEZiitN2oBUpmX+T/436kPPEYLgLhApg2mwsALBB8W CgB9BYJh8/a5AwsJBwkQzCZZQCLH1K5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnSS94Rd+9iKbWzlH6J8089COW1nWS8mg4+lLl1CW/BXMD FQoIApsBAh4BFiEEm9pQ2KbHhSUFGq4HzCZZQCLH1K4AAH4MAP9EslQbmxvy9Itl VGnqccFGEQ408aP+t7GzBWLIuc4K9wD/bJPKSOx+aing5FdY/Wht2rnqwzrYKity o1T25OTqGADNEjx1MTk2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EMwmWUAix9SuRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4ngHPdhiGIsmdr7kcsD4t5dZlrJVcl95v/CR+vRyzGmAxUKCAKZAQKbAQIeARYh BJvaUNimx4UlBRquB8wmWUAix9SuAACQVwD9Etpj1WugQuVgsTJbLSIR4LgAicSZ BYWOcDUC2xrjNtIA/2YGLZpYQ8H/kp+Ow7sweIdCYSHwsSNGJB0GoK2bKZ0G =8AhC -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u196.pgp000064400000000000000000000017561046102023000213270ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAv8C5PFozLUMfJej8JTdTFHYby3uohzzDpQho jynGFYnCwAsEHxYKAH0FgmHz9rkDCwkHCRDMJllAIsfUrkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJL3hF372IptbOUfonzTz0I5bWdZLy aDj6UuXUJb8FcwMVCggCmwECHgEWIQSb2lDYpseFJQUargfMJllAIsfUrgAAfgwA /0SyVBubG/L0i2VUaepxwUYRDjTxo/63sbMFYsi5zgr3AP9sk8pI7H5qKeDkV1j9 aG3auerDOtgqK3KjVPbk5OoYAM0SPHUxOTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQzCZZQCLH1K5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnieAc92GIYiyZ2vuRywPi3l1mWslVyX3m/8JH69HLMaYDFQoI ApkBApsBAh4BFiEEm9pQ2KbHhSUFGq4HzCZZQCLH1K4AAJBXAP0S2mPVa6BC5WCx MlstIhHguACJxJkFhY5wNQLbGuM20gD/ZgYtmlhDwf+Sn47DuzB4h0JhIfCxI0Yk HQagrZspnQbCwAEEEBYKAHMFgmH0CO4Dhf94CRC9nmkNWf5Tg0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdUd0DenYsaZHowWZXgwKwV3g7+ apx9EpwhMNdjGVJV9BYhBCmqpa98+UH0MH3pZr2eaQ1Z/lODAADpJAEAr1MU3MXF hHxIuLjxtyRRcCIESmLT3gWPUnpJ4y1RpJsA/jxGgLLigLwiWCui+upJI+Ej1R62 my+0mYCsVwa30fcO =GN9q -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u197-priv.pgp000064400000000000000000000015601046102023000222770ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2B0B 6FDB 04B9 E8FF 3A31 EBE1 6A6B 0A72 A657 1C45 Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAGoO8sZlSv+JGNMOgu3yVVLM5b6x3PD8a2Hmz aXL8ANUAAQCU5s8r8dkVbPLThOnDgo2Yq1+CCJCV8bhh/jq02o1kSBMewsALBB8W CgB9BYJh8/a5AwsJBwkQamsKcqZXHEVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jne8u01Xb7cKRU3twZjZ94g03wQ+FroOa/fpz+f1VrujwD FQoIApsBAh4BFiEEKwtv2wS56P86MevhamsKcqZXHEUAAFBWAQCZAEUYk0WgFkY8 heJVPvi4PB/D8GxIzE1uVZsoiKQy+QEA4jW6O4W8ry+iLMDxnaBNrfY9gBkNBSA3 X19fpkgZ+AfNEjx1MTk3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EGprCnKmVxxFRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZwEsI+4ILAeNmI49rr43gEEyWmEtF4sCjJVJfts0Z4+PAxUKCAKZAQKbAQIeARYh BCsLb9sEuej/OjHr4WprCnKmVxxFAAANUgD/W5Lfd314VRrIq6nRXvPfwpKw6EFB c5NlBGqkROOc1WcBALz8owxwMRcfdcwijZU7tsXNRgC1VpA7Cz2rnG1EoAED =PrWn -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u197.pgp000064400000000000000000000017561046102023000213300ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAGoO8sZlSv+JGNMOgu3yVVLM5b6x3PD8a2Hmz aXL8ANXCwAsEHxYKAH0FgmHz9rkDCwkHCRBqawpyplccRUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd7y7TVdvtwpFTe3BmNn3iDTfBD4Wug 5r9+nP5/VWu6PAMVCggCmwECHgEWIQQrC2/bBLno/zox6+FqawpyplccRQAAUFYB AJkARRiTRaAWRjyF4lU++Lg8H8PwbEjMTW5VmyiIpDL5AQDiNbo7hbyvL6IswPGd oE2t9j2AGQ0FIDdfX1+mSBn4B80SPHUxOTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQamsKcqZXHEVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnASwj7ggsB42Yjj2uvjeAQTJaYS0XiwKMlUl+2zRnj48DFQoI ApkBApsBAh4BFiEEKwtv2wS56P86MevhamsKcqZXHEUAAA1SAP9bkt93fXhVGsir qdFe89/CkrDoQUFzk2UEaqRE45zVZwEAvPyjDHAxFx91zCKNlTu2xc1GALVWkDsL PaucbUSgAQPCwAEEEBYKAHMFgmH0CO4Dhf94CRDMJllAIsfUrkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeAifkKXHfoGv3IIRaBDg8vSIrt 1PuCbderOieTo42TFRYhBJvaUNimx4UlBRquB8wmWUAix9SuAADJpQD+Mt6JraH8 F8IGemmOJzP83EGus60EqeipcwZ8dw4IwGwA/3cOSn3bbtyKAf6PLjdZV7FSKTzc HQ/04PCTKZ7Y/GED =LWHJ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u198-priv.pgp000064400000000000000000000015601046102023000223000ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5C26 50D8 DA98 4295 1614 0262 8880 5244 633C 686B Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAs1yEEm3yjcXuJL9dU6oxd9IRXEnrP0x5bL4g KO+JD7cAAQCvMTSF9dfj6/NbRO7GJ3UjEPywxkltn1ozR7w52K+MihF2wsALBB8W CgB9BYJh8/a5AwsJBwkQiIBSRGM8aGtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnoT3TSnPd8HJNgyb+0PBwVs4271Cdoh2FxTqvAb/PFb8D FQoIApsBAh4BFiEEXCZQ2NqYQpUWFAJiiIBSRGM8aGsAAPZuAQC+CWMMCz9t+kb3 X9B1arYFyitL2BdmMMtDdjO5mgTelQD/d1rJGaKY8IcVrL1mf0cjQhTr4V4RKxe4 7PovTo1s6QzNEjx1MTk4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EIiAUkRjPGhrRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z84scF3nhli1FigIuVzmrvGbKjuA9Mts8l5e3WFWVmiGAxUKCAKZAQKbAQIeARYh BFwmUNjamEKVFhQCYoiAUkRjPGhrAADpHgD+M/rgkPaTeJy6H4f6VPSwy/R3+liW AJiOvvNd7ourx1EA/AkD9YtgA0HpyP8abQvJvt9xJsOS+PQX4xOP5sKOuKUC =LAm5 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u198.pgp000064400000000000000000000017561046102023000213310ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAs1yEEm3yjcXuJL9dU6oxd9IRXEnrP0x5bL4g KO+JD7fCwAsEHxYKAH0FgmHz9rkDCwkHCRCIgFJEYzxoa0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmehPdNKc93wck2DJv7Q8HBWzjbvUJ2i HYXFOq8Bv88VvwMVCggCmwECHgEWIQRcJlDY2phClRYUAmKIgFJEYzxoawAA9m4B AL4JYwwLP236Rvdf0HVqtgXKK0vYF2Ywy0N2M7maBN6VAP93WskZopjwhxWsvWZ/ RyNCFOvhXhErF7js+i9OjWzpDM0SPHUxOThAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQiIBSRGM8aGtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnzixwXeeGWLUWKAi5XOau8ZsqO4D0y2zyXl7dYVZWaIYDFQoI ApkBApsBAh4BFiEEXCZQ2NqYQpUWFAJiiIBSRGM8aGsAAOkeAP4z+uCQ9pN4nLof h/pU9LDL9Hf6WJYAmI6+813ui6vHUQD8CQP1i2ADQenI/xptC8m+33Emw5L49Bfj E4/mwo64pQLCwAEEEBYKAHMFgmH0CO4Dhf94CRBqawpyplccRUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfqQC2gzowUzdRFV3C0DCslmmcg 1SFeY1tRoxDvkBm3OxYhBCsLb9sEuej/OjHr4WprCnKmVxxFAAAM3gD9HiuVN3KR 7HJ/DtT9k+YBDFIwUNAUrI6SGq0MujKmEBkA/RooWtznCDF3AbNM3uzAOuIE3ldq Vb0Xj68g0K0KON4B =cabZ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u199-priv.pgp000064400000000000000000000015601046102023000223010ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: EEA6 502B 34AB 08FA 2F3B DA1E 355A C29B 6D8B 67FA Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAJvOOWs16RBnMNCcPBIpp4RsgiVJVBogy07Nl 24aLqhQAAP9fMGTq8cB1WXd6zjG/RC9rTDhf38vvwk//tsSec7CJ+RMxwsALBB8W CgB9BYJh8/a5AwsJBwkQNVrCm22LZ/pHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnysPr4LOG/SPgV/4M4AKLHVjQdKvsNlSRq2fPL3lhaRkD FQoIApsBAh4BFiEE7qZQKzSrCPovO9oeNVrCm22LZ/oAAOH4APwLQJuFzk3nBOb+ frnt5P4QlnByr4RLV6/7YYe5zvUimwD9Gy+c5mZ3k0i5O2NV6DnSCR+qKER4SCDI ITwVSfVRIQzNEjx1MTk5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EDVawptti2f6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/Oxljcd99bgip5tvC7G96/Y9Bs4UO0fT8imbSBxzx9RAxUKCAKZAQKbAQIeARYh BO6mUCs0qwj6LzvaHjVawptti2f6AACGCQEA3dH1tFwo3oaRCVMg3c/iATUlgp1w E7wZT91wRIVCIb8BANqagWq4RjwQe5ECmZKBctYBfJEMHB13OzyfMevLX5wG =e8Tn -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u199.pgp000064400000000000000000000017561046102023000213320ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAJvOOWs16RBnMNCcPBIpp4RsgiVJVBogy07Nl 24aLqhTCwAsEHxYKAH0FgmHz9rkDCwkHCRA1WsKbbYtn+kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfKw+vgs4b9I+BX/gzgAosdWNB0q+w2 VJGrZ88veWFpGQMVCggCmwECHgEWIQTuplArNKsI+i872h41WsKbbYtn+gAA4fgA /AtAm4XOTecE5v5+ue3k/hCWcHKvhEtXr/thh7nO9SKbAP0bL5zmZneTSLk7Y1Xo OdIJH6ooRHhIIMghPBVJ9VEhDM0SPHUxOTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQNVrCm22LZ/pHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn87GWNx331uCKnm28Lsb3r9j0GzhQ7R9PyKZtIHHPH1EDFQoI ApkBApsBAh4BFiEE7qZQKzSrCPovO9oeNVrCm22LZ/oAAIYJAQDd0fW0XCjehpEJ UyDdz+IBNSWCnXATvBlP3XBEhUIhvwEA2pqBarhGPBB7kQKZkoFy1gF8kQwcHXc7 PJ8x68tfnAbCwAEEEBYKAHMFgmH0CO4Dhf94CRCIgFJEYzxoa0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc6iowdC17nHO3YdOHhA4XauhGy +byj5JrG0ap9NQENvRYhBFwmUNjamEKVFhQCYoiAUkRjPGhrAADbRwD/SWhy/XfO nWsfl3AdnffO9lr3EDzk66maeGRgWKKQ7V0BALl8r1q7+rbFBreQTMLL2hiQUlB0 N4q9yUHmQVs8b8gE =9ZXf -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u2-priv.pgp000064400000000000000000000015561046102023000221250ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0618 F850 B6D0 C48D BF40 6BBF AB3D AED8 09A3 5F78 Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdAUYOEik5unIc139kQwMED2it8N0YoQFuU6IcY l3df65YAAQDV6zuUT7PZpTyzR9O1kt8lFtrDptnQpLxnElwd+9+IqhLEwsALBB8W CgB9BYJh8/avAwsJBwkQqz2u2AmjX3hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnOhkXTIi6Dh/bUmM8EhJ2t46m/kBT3q5uomt0JLq+XeoD FQoIApsBAh4BFiEEBhj4ULbQxI2/QGu/qz2u2AmjX3gAADhxAQDV3cfmQpw5lbpe Y6QoPvuvvNtM0Ph7zfNH+ZJDUChAUwD+LnuV8qSiDzey2m3qPh8LCE/vy729mpUV LQyhQoYUgQPNEDx1MkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9q8DCwkHCRCr Pa7YCaNfeEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcV QnipSbCKCCdkGK0noBjwSUOhB+JRnHqPWGs0cZUFvgMVCggCmQECmwECHgEWIQQG GPhQttDEjb9Aa7+rPa7YCaNfeAAACIoBAI/iHVtblWxbt8bSvAVMlezrqntj4mZ6 Yg0mDKzA93cMAQCqO7AkHSGxqohZ6VGRkpjv35m3DuTFclO8NTaXEdWEBA== =RoNw -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u2.pgp000064400000000000000000000017561046102023000211510ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2rxYJKwYBBAHaRw8BAQdAUYOEik5unIc139kQwMED2it8N0YoQFuU6IcY l3df65bCwAsEHxYKAH0FgmHz9q8DCwkHCRCrPa7YCaNfeEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc6GRdMiLoOH9tSYzwSEna3jqb+QFPe rm6ia3Qkur5d6gMVCggCmwECHgEWIQQGGPhQttDEjb9Aa7+rPa7YCaNfeAAAOHEB ANXdx+ZCnDmVul5jpCg++6+820zQ+HvN80f5kkNQKEBTAP4ue5XypKIPN7Labeo+ HwsIT+/Lvb2alRUtDKFChhSBA80QPHUyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YfP2rwMLCQcJEKs9rtgJo194RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZxVCeKlJsIoIJ2QYrSegGPBJQ6EH4lGceo9YazRxlQW+AxUKCAKZ AQKbAQIeARYhBAYY+FC20MSNv0Brv6s9rtgJo194AAAIigEAj+IdW1uVbFu3xtK8 BUyV7Ouqe2PiZnpiDSYMrMD3dwwBAKo7sCQdIbGqiFnpUZGSmO/fmbcO5MVyU7w1 NpcR1YQEwsABBBAWCgBzBYJh9AjnA4X/eAkQFJGpwr3m8dxHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JntTuhhhI9NbjbbHVf1AVPtR/9i6NW yipJ8eCXckrUxQYWIQS1V4YngKl2dswy9LsUkanCvebx3AAAs4MA/id3dGi8Jd6u 9U/zwAWMmxHL4VT/ygvOkw0lw7S8vri5AP47rha8TX4+WEQAgITx000jOZhRcW8K Qccj/sdWAM/uDA== =HfX1 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u20-priv.pgp000064400000000000000000000015571046102023000222060ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 1921 24BD 42BA 6BF5 4A88 20FB 94B6 B70D 8182 41E3 Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAGiGRy2WjjHdEbVjPEVK2wJXT9cwl+z0l6UFp nWUYgkcAAQCJZBcp+Q2CoakWfNgGkeoORAoUNTkMIHq6E4QmBS4oygsLwsALBB8W CgB9BYJh8/awAwsJBwkQlLa3DYGCQeNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnrwD7LXG97MU63lofbdE+XhNng/bSaE8HZ/9+QC7dgEwD FQoIApsBAh4BFiEEGSEkvUK6a/VKiCD7lLa3DYGCQeMAABR6AQCCN1RpSBr9MiEM gDkHiuTMW9OrCfQRji3vuE3/lIX5YgD/XM+33OwgLIv5GYjfTR+Id0R4M7R29LV6 oL1CuO9r5w/NETx1MjBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ lLa3DYGCQeNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 35CnlVsn4jH6Bhxk9eatRQNUNAh37FQoeUHyhCrD2rYDFQoIApkBApsBAh4BFiEE GSEkvUK6a/VKiCD7lLa3DYGCQeMAADueAQCjV1TSTXKhefQEOPkAY4J+IJ/1YVoW mmgJcI3w426KigD/QTw6Jy+h4nkUgdoWQdIXqoIGbzFRlBLLka/UQrRaLA4= =Bbiu -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u20.pgp000064400000000000000000000017561046102023000212310ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAGiGRy2WjjHdEbVjPEVK2wJXT9cwl+z0l6UFp nWUYgkfCwAsEHxYKAH0FgmHz9rADCwkHCRCUtrcNgYJB40cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmevAPstcb3sxTreWh9t0T5eE2eD9tJo Twdn/35ALt2ATAMVCggCmwECHgEWIQQZISS9Qrpr9UqIIPuUtrcNgYJB4wAAFHoB AII3VGlIGv0yIQyAOQeK5Mxb06sJ9BGOLe+4Tf+UhfliAP9cz7fc7CAsi/kZiN9N H4h3RHgztHb0tXqgvUK472vnD80RPHUyMEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRCUtrcNgYJB40cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmffkKeVWyfiMfoGHGT15q1FA1Q0CHfsVCh5QfKEKsPatgMVCggC mQECmwECHgEWIQQZISS9Qrpr9UqIIPuUtrcNgYJB4wAAO54BAKNXVNJNcqF59AQ4 +QBjgn4gn/VhWhaaaAlwjfDjboqKAP9BPDonL6HieRSB2hZB0heqggZvMVGUEsuR r9RCtFosDsLAAQQQFgoAcwWCYfQI5wOF/3gJEPkFv4fo9go2RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3sbEDLHpvo9QABpC6DFG7n27Xy4 ExnrDnNjC1o+HuvTFiEEJw49nofKCZnUIs0i+QW/h+j2CjYAAOHbAQCGavNElXH7 vtcWQFYUrl3CowYexpVGIESrzK8hfaeV3wEAi6NKpEv5IG9WgeJUdkLkYlH5pwEy GIG/9BXhR6FtIAw= =5Y2N -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u200-priv.pgp000064400000000000000000000015601046102023000222600ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 61B0 0DCD C020 69F4 6F20 D7F9 1075 929D C6DA 674C Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAzzPxF38a2WVFnWrBTXz0cD/ccARY8OkBcEc1 UFc6JQQAAP9bp9VzYf8lX67zxyNEnjxiq7Wr9T1a23nVOsG3KY7phxLRwsALBB8W CgB9BYJh8/a5AwsJBwkQEHWSncbaZ0xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnHv8/VuQRPQEj4U72Hkn9fxVFaD8P3f4yDL/rMNvFVbgD FQoIApsBAh4BFiEEYbANzcAgafRvINf5EHWSncbaZ0wAALv1AQDaUE49Wmis023p l0AzrwB0/cz71hi5/Cxtz2xNZlcu+AEA+12k7yu7C8gAXu5JamwOLSYibZzMKvzz vB3AQQ+9zgXNEjx1MjAwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EBB1kp3G2mdMRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zy5uTCjUD5afdBtSe5MWeMWiBk0lVG3d9lgukfxDGPqtAxUKCAKZAQKbAQIeARYh BGGwDc3AIGn0byDX+RB1kp3G2mdMAAB4tQEAtka9sooSXiV9ca1jf9JVdllUt0LN 1wqqDXks6g2mJd0BAO7zWWUsrG+/Y6GaL7DIIH+USRCrwmlDMM6j5oKpXJgG =JUIR -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u200.pgp000064400000000000000000000017561046102023000213110ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAzzPxF38a2WVFnWrBTXz0cD/ccARY8OkBcEc1 UFc6JQTCwAsEHxYKAH0FgmHz9rkDCwkHCRAQdZKdxtpnTEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmce/z9W5BE9ASPhTvYeSf1/FUVoPw/d /jIMv+sw28VVuAMVCggCmwECHgEWIQRhsA3NwCBp9G8g1/kQdZKdxtpnTAAAu/UB ANpQTj1aaKzTbemXQDOvAHT9zPvWGLn8LG3PbE1mVy74AQD7XaTvK7sLyABe7klq bA4tJiJtnMwq/PO8HcBBD73OBc0SPHUyMDBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQEHWSncbaZ0xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnLm5MKNQPlp90G1J7kxZ4xaIGTSVUbd32WC6R/EMY+q0DFQoI ApkBApsBAh4BFiEEYbANzcAgafRvINf5EHWSncbaZ0wAAHi1AQC2Rr2yihJeJX1x rWN/0lV2WVS3Qs3XCqoNeSzqDaYl3QEA7vNZZSysb79joZovsMggf5RJEKvCaUMw zqPmgqlcmAbCwAEEEBYKAHMFgmH0CO4Dhf94CRA1WsKbbYtn+kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc5n+gcs3ohD0cXKZiUj6/AR8yY 9UUi9IiqHm5D3/ypzhYhBO6mUCs0qwj6LzvaHjVawptti2f6AADzuAEAqtc1OM+m bbKXtDgHdLHO6BS3QBHW4aHZiaMg1St2gbkA/0uMulvt100WP6VJLkqPN65V82ZO FWA71JI30pjtum8N =NA3r -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u201-priv.pgp000064400000000000000000000015601046102023000222610ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A1F5 307F 398F A45E CFC6 8CA9 2A5F C888 D2DD 2728 Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAH7YqwM2qcCgIy2vlXGuAaewW8R49qjQXP9gK NgVf06EAAP9A/3XWeA2XE+qXjdPEjX6VvvysSKrVNULiq/73d4kqmxPowsALBB8W CgB9BYJh8/a5AwsJBwkQKl/IiNLdJyhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JncEShyPwydap0mREsQTLezUUzsXgpRt9Da4GXxlsl6z0D FQoIApsBAh4BFiEEofUwfzmPpF7PxoypKl/IiNLdJygAAOAtAQDt+E8/EDJldKPa +MY82cgAhDkZPBoc4cyRy191SrkHwQEAzW4hopNDzwgsry6DeoCrDmkkKr1gqbOs mTtDgNrJtgzNEjx1MjAxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ ECpfyIjS3ScoRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZxD56yi9tkB/Vk2ZifnqU2foMnJjm5i59HOcg6OUVUBCAxUKCAKZAQKbAQIeARYh BKH1MH85j6Rez8aMqSpfyIjS3ScoAAAFsgD/UxUmuR/KoPOI5BVNK+yhSG1Um3BN 6Ckg9yp9fKG9kxUA/0YLbSDQcUzBkQTg16JO8wd7gKLpYFkGKB9F3Kt176oM =8iJn -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u201.pgp000064400000000000000000000017561046102023000213120ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAH7YqwM2qcCgIy2vlXGuAaewW8R49qjQXP9gK NgVf06HCwAsEHxYKAH0FgmHz9rkDCwkHCRAqX8iI0t0nKEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdwRKHI/DJ1qnSZESxBMt7NRTOxeClG 30NrgZfGWyXrPQMVCggCmwECHgEWIQSh9TB/OY+kXs/GjKkqX8iI0t0nKAAA4C0B AO34Tz8QMmV0o9r4xjzZyACEORk8GhzhzJHLX3VKuQfBAQDNbiGik0PPCCyvLoN6 gKsOaSQqvWCps6yZO0OA2sm2DM0SPHUyMDFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQKl/IiNLdJyhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnEPnrKL22QH9WTZmJ+epTZ+gycmObmLn0c5yDo5RVQEIDFQoI ApkBApsBAh4BFiEEofUwfzmPpF7PxoypKl/IiNLdJygAAAWyAP9TFSa5H8qg84jk FU0r7KFIbVSbcE3oKSD3Kn18ob2TFQD/RgttINBxTMGRBODXok7zB3uAoulgWQYo H0Xcq3XvqgzCwAEEEBYKAHMFgmH0CO4Dhf94CRAQdZKdxtpnTEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcGIs0j1HeqSbSiqEB8XLSec0XJ aiSRCqgYu/66Mx3k0hYhBGGwDc3AIGn0byDX+RB1kp3G2mdMAAAS4QEAphHptID1 scO7Z3Vo+xOOkneLGx5/lX0B07a9/PfnJCUBAJnZOm81B1KgEqRaKCS32fRBfaom wYnzrQhMHLA4N3EM =QcKt -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u202-priv.pgp000064400000000000000000000015601046102023000222620ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: AB0A DD3B F024 EB6C 75D9 A366 ABE6 9FC6 E9F6 0DA0 Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdABsTPvfa5lZI1a7w/MUJ7X6hxws1tqW71ftRb PXxKiUsAAP4y8nuGO6OLgXVHMs7ZC4Vnii6fXqzfUcGDIVNdUiqvSA+ywsALBB8W CgB9BYJh8/a5AwsJBwkQq+afxun2DaBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnScn/NXojaJVLwn0FGv7a/1L2WEdl0X7689UiaeKHIFgD FQoIApsBAh4BFiEEqwrdO/Ak62x12aNmq+afxun2DaAAAAnbAPwI5UlzbMXaPYqI ARtdcGrrCvUAXfkqvK/Rs/2pbRExnQEA5XjvgquPr9E/o30C+9cZJluDcT6tkxQm Bfh0NtEccgbNEjx1MjAyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EKvmn8bp9g2gRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7YPX0ZAT3riOIKb61/Q+HOl+xLx4Q/QAlzLZSCApMOgAxUKCAKZAQKbAQIeARYh BKsK3TvwJOtsddmjZqvmn8bp9g2gAABXGwD+JYx5vUtc6zL8GDfZD5kQ/A67qj8a e9wQ1PjecWETPU0A/iQtPp2BPv/4RPzPW90MePqM+7ryRiSGZozgY5KbfTkK =WA2e -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u202.pgp000064400000000000000000000017561046102023000213130ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdABsTPvfa5lZI1a7w/MUJ7X6hxws1tqW71ftRb PXxKiUvCwAsEHxYKAH0FgmHz9rkDCwkHCRCr5p/G6fYNoEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJyf81eiNolUvCfQUa/tr/UvZYR2XR fvrz1SJp4ocgWAMVCggCmwECHgEWIQSrCt078CTrbHXZo2ar5p/G6fYNoAAACdsA /AjlSXNsxdo9iogBG11wausK9QBd+Sq8r9Gz/altETGdAQDleO+Cq4+v0T+jfQL7 1xkmW4NxPq2TFCYF+HQ20RxyBs0SPHUyMDJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQq+afxun2DaBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jntg9fRkBPeuI4gpvrX9D4c6X7EvHhD9ACXMtlIICkw6ADFQoI ApkBApsBAh4BFiEEqwrdO/Ak62x12aNmq+afxun2DaAAAFcbAP4ljHm9S1zrMvwY N9kPmRD8DruqPxp73BDU+N5xYRM9TQD+JC0+nYE+//hE/M9b3Qx4+oz7uvJGJIZm jOBjkpt9OQrCwAEEEBYKAHMFgmH0CO4Dhf94CRAqX8iI0t0nKEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeMRYL3iAhx5TXuONsuhZWr4lGa V8R2eLTBYNnGS0Vd0BYhBKH1MH85j6Rez8aMqSpfyIjS3ScoAACCXAEA1H9kHTmw xUk5uDPNR87wTFBOQVXSc3Y/Jo3UbN3kR3cBAKKPG1pNW8kDRp3qmYnegfPwUgaB jR1uuvwHARGhkIgF =NQVo -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u203-priv.pgp000064400000000000000000000015601046102023000222630ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 20DF EEF4 2F41 8CCE B02D B3E8 96E4 0B04 13F1 B4C5 Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAzyT5ytvYPeGaKwDqPm7IihTLyzbRRunwQZ37 D9OiukgAAP0f5ggUGTEj9wIX9uFn3ZGqiLI+QI77y5oXWvh58N8LoRD0wsALBB8W CgB9BYJh8/a5AwsJBwkQluQLBBPxtMVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnMEAZ2+SAg7dUWs0BUfiWRt26NS79Tvj707gO1LLrPHMD FQoIApsBAh4BFiEEIN/u9C9BjM6wLbPoluQLBBPxtMUAAGiEAP44YOQFIHPmJObg KneQdYlem4bAHSkkE7AyM/xEATOZxAD9G64Vi8W4uNekxCBzpMi2COUrkqgVwSRn xlp+nErjBg3NEjx1MjAzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EJbkCwQT8bTFRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zy6DxfEdQKiLwRZpcpFhEgleXl0aBsuv7sPUNv6XgShuAxUKCAKZAQKbAQIeARYh BCDf7vQvQYzOsC2z6JbkCwQT8bTFAABfCQEA7kZE0QqaTDgLaO33z3/2BIoyKlEb lmfbHD2Ag0MdX9oBAOGT6080Q1Pp2+KnXm5clOVDHfARG05jkcvAYG01BskF =jIQD -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u203.pgp000064400000000000000000000017561046102023000213140ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAzyT5ytvYPeGaKwDqPm7IihTLyzbRRunwQZ37 D9OiukjCwAsEHxYKAH0FgmHz9rkDCwkHCRCW5AsEE/G0xUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcwQBnb5ICDt1RazQFR+JZG3bo1Lv1O +PvTuA7Usus8cwMVCggCmwECHgEWIQQg3+70L0GMzrAts+iW5AsEE/G0xQAAaIQA /jhg5AUgc+Yk5uAqd5B1iV6bhsAdKSQTsDIz/EQBM5nEAP0brhWLxbi416TEIHOk yLYI5SuSqBXBJGfGWn6cSuMGDc0SPHUyMDNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQluQLBBPxtMVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnLoPF8R1AqIvBFmlykWESCV5eXRoGy6/uw9Q2/peBKG4DFQoI ApkBApsBAh4BFiEEIN/u9C9BjM6wLbPoluQLBBPxtMUAAF8JAQDuRkTRCppMOAto 7ffPf/YEijIqURuWZ9scPYCDQx1f2gEA4ZPrTzRDU+nb4qdeblyU5UMd8BEbTmOR y8BgbTUGyQXCwAEEEBYKAHMFgmH0CO4Dhf94CRCr5p/G6fYNoEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdOnh29TF8W0BgMw52i4Jy7A1Ao ZhYqJlVvAXrNxdSz2xYhBKsK3TvwJOtsddmjZqvmn8bp9g2gAACnvAD/dMhZspHK qpgfK/mDqC66YEBbRL6F1bX5dAjqJXaDQXoBAOm3rbTUZwlbEWamOvSzkIoI14tJ pS3QAoIaz+p6zrkA =6aSz -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u204-priv.pgp000064400000000000000000000015601046102023000222640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 59C4 E41C 31D1 E16F 11BC F513 04E7 B81D 67AD 1FA0 Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdA31E+XSK/x5PGCJo3TlF1ZDuiNAWEJnQlRZiz m2apaUAAAP9ILJJMFmcjtpl+rEsP9i4NJTG4y596WuCQQfKmzfmLjhBpwsALBB8W CgB9BYJh8/a5AwsJBwkQBOe4HWetH6BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnxNgxdvygbJK4wUZUnYI3SoKK53dNh20jQuKZrQCnWesD FQoIApsBAh4BFiEEWcTkHDHR4W8RvPUTBOe4HWetH6AAAKqHAP4y+cOULfrb0l7T 8SkpcBY9KqC3yIAzh0O2brHe+IyBrgD+N6gN+Rp8HkiFM2Oe1HmBgdCyZsOMk0Wg b8PtJPKmFgPNEjx1MjA0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EATnuB1nrR+gRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZxJmUif9+AtJPFYhm2+wYG9yWyxJ/PH9exTACDmtbt5WAxUKCAKZAQKbAQIeARYh BFnE5Bwx0eFvEbz1EwTnuB1nrR+gAABQzQEAqwIflWst1lntQ6p815jTHmUyMplA BdI5DsRHMLtRfVEA/0PhZq7rWOqioQbP+A4pnP9sJEHLBJCI6apEiGJIlZYB =u2Th -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u204.pgp000064400000000000000000000017561046102023000213150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdA31E+XSK/x5PGCJo3TlF1ZDuiNAWEJnQlRZiz m2apaUDCwAsEHxYKAH0FgmHz9rkDCwkHCRAE57gdZ60foEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfE2DF2/KBskrjBRlSdgjdKgornd02H bSNC4pmtAKdZ6wMVCggCmwECHgEWIQRZxOQcMdHhbxG89RME57gdZ60foAAAqocA /jL5w5Qt+tvSXtPxKSlwFj0qoLfIgDOHQ7Zusd74jIGuAP43qA35GnweSIUzY57U eYGB0LJmw4yTRaBvw+0k8qYWA80SPHUyMDRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQBOe4HWetH6BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnEmZSJ/34C0k8ViGbb7Bgb3JbLEn88f17FMAIOa1u3lYDFQoI ApkBApsBAh4BFiEEWcTkHDHR4W8RvPUTBOe4HWetH6AAAFDNAQCrAh+Vay3WWe1D qnzXmNMeZTIymUAF0jkOxEcwu1F9UQD/Q+FmrutY6qKhBs/4Dimc/2wkQcsEkIjp qkSIYkiVlgHCwAEEEBYKAHMFgmH0CO4Dhf94CRCW5AsEE/G0xUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfSrC9yMfugRmWjpHk8+3gfvtDI qUDVhW/Yxu9g6EIvwBYhBCDf7vQvQYzOsC2z6JbkCwQT8bTFAAChjQEA/XAgHyOX 0dSlUELlVx0DMN/MRj2vlWJwWhiWDm3RfUsBALtGs7pAKKd6regl7jZm/lKPkGOi +/9brw8zSz58UtcL =K6fh -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u205-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: C0A3 A190 F8BF B611 5A87 CF7C BEC9 211A 2E21 0C86 Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAgNNz6xDLoT6f9w5isCVe6n3FBZm9sYG8OlM/ Ql2U6VoAAP9BmYOJrYb+lUe1nsWJ9ssd5f2a4AdjJAH5j9cXsl7xWBMrwsALBB8W CgB9BYJh8/a5AwsJBwkQvskhGi4hDIZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jni+m9Xf2Zq5HpQ3coeseXtlnvWvHUHmD05VvcK/+5y3sD FQoIApsBAh4BFiEEwKOhkPi/thFah898vskhGi4hDIYAAJL3AQDs+p8mXptarRUi BxynHekXRC+zP40D58U2Yvk2DSYGwAEAq+JP1gPlplHM1pYqSm5e6OQoGLvRx61X hLb0fDc3ZgnNEjx1MjA1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EL7JIRouIQyGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2vLeR2yACh7nCT1tQqSG2l+7WYh/LIBmJEgqsKVnZeeAxUKCAKZAQKbAQIeARYh BMCjoZD4v7YRWofPfL7JIRouIQyGAABzIwEApXcyYOUMEB04ahq2TXjWxufCfl1l vO4v8XseQkdumKwA/iJybbvV40SeAZr0zqHGiMd/Y/NPxKfXS51No2JU4GsD =+jBz -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u205.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAgNNz6xDLoT6f9w5isCVe6n3FBZm9sYG8OlM/ Ql2U6VrCwAsEHxYKAH0FgmHz9rkDCwkHCRC+ySEaLiEMhkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeL6b1d/ZmrkelDdyh6x5e2We9a8dQe YPTlW9wr/7nLewMVCggCmwECHgEWIQTAo6GQ+L+2EVqHz3y+ySEaLiEMhgAAkvcB AOz6nyZem1qtFSIHHKcd6RdEL7M/jQPnxTZi+TYNJgbAAQCr4k/WA+WmUczWlipK bl7o5CgYu9HHrVeEtvR8NzdmCc0SPHUyMDVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQvskhGi4hDIZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jna8t5HbIAKHucJPW1CpIbaX7tZiH8sgGYkSCqwpWdl54DFQoI ApkBApsBAh4BFiEEwKOhkPi/thFah898vskhGi4hDIYAAHMjAQCldzJg5QwQHThq GrZNeNbG58J+XWW87i/xex5CR26YrAD+InJtu9XjRJ4BmvTOocaIx39j80/Ep9dL nU2jYlTgawPCwAEEEBYKAHMFgmH0CO4Dhf94CRAE57gdZ60foEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcQb/V31tMdFdV680NxlSaPTBzp cba3bDhIt0Lg5N+ithYhBFnE5Bwx0eFvEbz1EwTnuB1nrR+gAAAsRwEA9kN7z62Q GNpF/ErAY4Zo7lNZQN2uD93K8YUpdEct0TsA/3frMdBoa3I6eAaVBSplXzLmGsKl oqZrvFl5FCkQ+goD =gvmH -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u206-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8932 D417 D3C0 C4E3 694E 9048 0B92 349F 276E 4EE0 Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAVr+DyQbg5RLdBV3oWELeWs4N8NKJG6OWQsSl fcKHmLgAAQCBQI5at5VoU3tbDlUly7cc0DX1thFc/qsWi7RhRfzCWQ+FwsALBB8W CgB9BYJh8/a5AwsJBwkQC5I0nyduTuBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnY+7KfrJgZzrfdHQuzXXaWnvViOjxBCNWEDikMqCe8rID FQoIApsBAh4BFiEEiTLUF9PAxONpTpBIC5I0nyduTuAAAAtUAP99UjiGeYfvXCGp OWVdRf5iyecT6bqDeVkJr5+5xDvU2wEA59C+ZoWa32R6uPIXSkA0koZDTfxROJhr 249Wjf/VnwHNEjx1MjA2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EAuSNJ8nbk7gRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z1/vR9VuH2EuDsmRstH/mW8D+FGtlXZAJ3nDGA+aj4nbAxUKCAKZAQKbAQIeARYh BIky1BfTwMTjaU6QSAuSNJ8nbk7gAACy0wD/TSwPToStP57qLdEhnwUdz8Y+Tt4v lW4ZRdsMmW/8S8kA/3Hf9qhPEKIRsequmzqr5Aqyl1Ab+9sjlOjoXR6CpVsG =Rh4B -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u206.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAVr+DyQbg5RLdBV3oWELeWs4N8NKJG6OWQsSl fcKHmLjCwAsEHxYKAH0FgmHz9rkDCwkHCRALkjSfJ25O4EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdj7sp+smBnOt90dC7Nddpae9WI6PEE I1YQOKQyoJ7ysgMVCggCmwECHgEWIQSJMtQX08DE42lOkEgLkjSfJ25O4AAAC1QA /31SOIZ5h+9cIak5ZV1F/mLJ5xPpuoN5WQmvn7nEO9TbAQDn0L5mhZrfZHq48hdK QDSShkNN/FE4mGvbj1aN/9WfAc0SPHUyMDZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQC5I0nyduTuBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnX+9H1W4fYS4OyZGy0f+ZbwP4Ua2VdkAnecMYD5qPidsDFQoI ApkBApsBAh4BFiEEiTLUF9PAxONpTpBIC5I0nyduTuAAALLTAP9NLA9OhK0/nuot 0SGfBR3Pxj5O3i+VbhlF2wyZb/xLyQD/cd/2qE8QohGx6q6bOqvkCrKXUBv72yOU 6OhdHoKlWwbCwAEEEBYKAHMFgmH0CO4Dhf94CRC+ySEaLiEMhkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme/NIxhQFRj1ViDi7RtXmRRWrCq +l3jh0KLnCcyUr5KVRYhBMCjoZD4v7YRWofPfL7JIRouIQyGAAA5VwEA7o8VntCs yp0Ory7ZxkPAHxr4fdHfUFQHq47t6C4QcPEBAL5+Ya3DzICafUACmR0iBnGUjnyt RYqrQV2Lx2REhiAC =O/x/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u207-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5BE2 88B0 F7DC D892 00D1 12D0 09E7 3AB0 6030 B4EB Comment: xVgEYfP2uRYJKwYBBAHaRw8BAQdAtzCeEfxLV2Xa4NPLzXlZLDtQhLFMOiMwafGP T/3R0XoAAQC4CCxFehqGswo7cUExWHZfRMNTSEx/OA546ChumKKSVAwdwsALBB8W CgB9BYJh8/a5AwsJBwkQCec6sGAwtOtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnzLCm05FAvZa+BaijCL6nlG7hX9gY2fpe9wQMLhVXfloD FQoIApsBAh4BFiEEW+KIsPfc2JIA0RLQCec6sGAwtOsAAPtfAP9NszNdyB+kbtwd Kl77rAP8gumMsL48EGc7cn766SnZNwEA3IVNAbyGrmMegGPrI16e6Y8ph/zmHhvl g37jZGgIqgDNEjx1MjA3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EAnnOrBgMLTrRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZwostYvKQodv5Xayskq4iKWzdZbNAzMndNCspIpVMWW9AxUKCAKZAQKbAQIeARYh BFviiLD33NiSANES0AnnOrBgMLTrAAA2aQD/WmujQjq9D6t4c6faXMPAPYoisuR3 6z+Uc5EF6q/ea/IA/3xbVN3MgS8AIj3fq+ab7Udfk/1xehenFLmVC48gOegH =OiOH -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u207.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uRYJKwYBBAHaRw8BAQdAtzCeEfxLV2Xa4NPLzXlZLDtQhLFMOiMwafGP T/3R0XrCwAsEHxYKAH0FgmHz9rkDCwkHCRAJ5zqwYDC060cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfMsKbTkUC9lr4FqKMIvqeUbuFf2BjZ +l73BAwuFVd+WgMVCggCmwECHgEWIQRb4oiw99zYkgDREtAJ5zqwYDC06wAA+18A /02zM13IH6Ru3B0qXvusA/yC6YywvjwQZztyfvrpKdk3AQDchU0BvIauYx6AY+sj Xp7pjymH/OYeG+WDfuNkaAiqAM0SPHUyMDdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQCec6sGAwtOtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnCiy1i8pCh2/ldrKySriIpbN1ls0DMyd00KykilUxZb0DFQoI ApkBApsBAh4BFiEEW+KIsPfc2JIA0RLQCec6sGAwtOsAADZpAP9aa6NCOr0Pq3hz p9pcw8A9iiKy5HfrP5RzkQXqr95r8gD/fFtU3cyBLwAiPd+r5pvtR1+T/XF6F6cU uZULjyA56AfCwAEEEBYKAHMFgmH0CO4Dhf94CRALkjSfJ25O4EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcwStTX9pFlQuwYFLuN+1kWqwDf ek/vq22Rl3MoOmOOaRYhBIky1BfTwMTjaU6QSAuSNJ8nbk7gAAD4JAD9GKD5Mztp Ywc7Swm2+z2tRIr5RuieGDGDQyhKextAePcBAOt4wTsvAkwbPaNM74Xeuv8OfiRR 2oUfDfxCG0EDMY8N =jfzj -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u208-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CF47 2156 042D 6F20 32BC 025B 6854 4E0A 5844 F3A7 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdALDrPTtqH6orDDszNUFkgsB/ABTUp4YIO5tYY or8XHmMAAP42efuQmJpXXX1GMSeImUi63B2ZQPNZpoHNe2cWfMrcEBCYwsALBB8W CgB9BYJh8/a6AwsJBwkQaFROClhE86dHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnVp+8JoAUSyghrsDTL4K9Qer2tpaBioisYTVyynKK6V8D FQoIApsBAh4BFiEEz0chVgQtbyAyvAJbaFROClhE86cAAHPJAP4m6dInv/1w2FS8 37Z+itDx11W9mRL+TeRSjNAL9qt5gAD/V+QnUIAEy4IRLkO20w+5VjsqryHHG5h3 BYtQLEjKmwHNEjx1MjA4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EGhUTgpYRPOnRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6rlCrxxhTkuP8SkXqe32iRSts30Q9vMJSndkPnvwAuOAxUKCAKZAQKbAQIeARYh BM9HIVYELW8gMrwCW2hUTgpYRPOnAAAPLwEAhQ3eXFKi2bdEDwHYIXxfA96e/ChV drQaFQeQ3t1WllcBAMB0MEMva39oEy/+LeT6cpKxqBAbNid8P5Peo5L+0WEK =9hU5 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u208.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdALDrPTtqH6orDDszNUFkgsB/ABTUp4YIO5tYY or8XHmPCwAsEHxYKAH0FgmHz9roDCwkHCRBoVE4KWETzp0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdWn7wmgBRLKCGuwNMvgr1B6va2loGK iKxhNXLKcorpXwMVCggCmwECHgEWIQTPRyFWBC1vIDK8AltoVE4KWETzpwAAc8kA /ibp0ie//XDYVLzftn6K0PHXVb2ZEv5N5FKM0Av2q3mAAP9X5CdQgATLghEuQ7bT D7lWOyqvIccbmHcFi1AsSMqbAc0SPHUyMDhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQaFROClhE86dHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnquUKvHGFOS4/xKRep7faJFK2zfRD28wlKd2Q+e/AC44DFQoI ApkBApsBAh4BFiEEz0chVgQtbyAyvAJbaFROClhE86cAAA8vAQCFDd5cUqLZt0QP AdghfF8D3p78KFV2tBoVB5De3VaWVwEAwHQwQy9rf2gTL/4t5PpykrGoEBs2J3w/ k96jkv7RYQrCwAEEEBYKAHMFgmH0CO4Dhf94CRAJ5zqwYDC060cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeUVOC+HYopMaAwX9f7YzQhyj2I fKjDorMWX7ok6LKWURYhBFviiLD33NiSANES0AnnOrBgMLTrAACNxwD/fdtGLoCC m7FjzbQOtgBJW/qGO1mwSZY56Tu/KF3lBGgBAJK8nHZ5b1fnTkDRD+JFMsjUBemj JkBLSfMM7lA+CKcI =8ti9 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u209-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D544 01DB BDE3 2805 DAF0 8C4E 1177 C10E 27F7 D235 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAlLvl4jRm3VTOLuZl5iz6ZgxAbbz+gKW42bgP STybytAAAP9w50NNWgfU2Y9RY1L/g39rZMPouAuOHjeeNn1LSSlF8w/wwsALBB8W CgB9BYJh8/a6AwsJBwkQEXfBDif30jVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn3ymCrClKIl180RWatleTJyqwjnKdSYl0GAtPfcqFYp0D FQoIApsBAh4BFiEE1UQB273jKAXa8IxOEXfBDif30jUAAMLVAP0X9HkQGr+GguQ9 n8ZR1cy6qgkLIWHKmcYxxxOwaDhV6gD/drFVZme7oa+cCmmwDrnVLYDg/GwnooVU x/lmcQzo0gHNEjx1MjA5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EBF3wQ4n99I1RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZyTruV+RNP7ShCJqgvGaDk33a47sJdYnO6sJTlLF+AN6AxUKCAKZAQKbAQIeARYh BNVEAdu94ygF2vCMThF3wQ4n99I1AAAp+gEA36v/3IGg2GO1PVXyRf6M1rUsFzlS hIMtJm90s8EcWVMBAMtXhZ2UhCX9q+3jsaQpwVDd2p8U+TE1SVvyi7jx9FUF =xich -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u209.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAlLvl4jRm3VTOLuZl5iz6ZgxAbbz+gKW42bgP STybytDCwAsEHxYKAH0FgmHz9roDCwkHCRARd8EOJ/fSNUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmffKYKsKUoiXXzRFZq2V5MnKrCOcp1J iXQYC099yoVinQMVCggCmwECHgEWIQTVRAHbveMoBdrwjE4Rd8EOJ/fSNQAAwtUA /Rf0eRAav4aC5D2fxlHVzLqqCQshYcqZxjHHE7BoOFXqAP92sVVmZ7uhr5wKabAO udUtgOD8bCeihVTH+WZxDOjSAc0SPHUyMDlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQEXfBDif30jVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnJOu5X5E0/tKEImqC8ZoOTfdrjuwl1ic7qwlOUsX4A3oDFQoI ApkBApsBAh4BFiEE1UQB273jKAXa8IxOEXfBDif30jUAACn6AQDfq//cgaDYY7U9 VfJF/ozWtSwXOVKEgy0mb3SzwRxZUwEAy1eFnZSEJf2r7eOxpCnBUN3anxT5MTVJ W/KLuPH0VQXCwAEEEBYKAHMFgmH0CO4Dhf94CRBoVE4KWETzp0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfHK/VBGj3v+zTaGuLlywNCenjf WgruyrwL2Da3gRFAXBYhBM9HIVYELW8gMrwCW2hUTgpYRPOnAAB/dgEA99T2Nl+U +fTCAZIgG39Hwo7S2pL53nopxGaqMTZ8gFQA/jNEJCKrn6Xv11vTuVxiT1roqgKn TTx6rKOLyRBNpI0O =mtIP -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u21-priv.pgp000064400000000000000000000015571046102023000222070ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 07C1 D935 3932 8F97 517C 59D2 7ABC 3071 DB73 A790 Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAqgUOcRXXnWf7rPEJzdIiqkEzQMDo2uDohcPK 0TxoPRYAAQDEPhsC5dwBrysZTuHBXiToEF9EJ3cvTBxI/cB4RkucBgzHwsALBB8W CgB9BYJh8/awAwsJBwkQerwwcdtzp5BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnT99ls8yIgJpQi18T1ze/fX/bopv8ot6YCchohEBw2+ED FQoIApsBAh4BFiEEB8HZNTkyj5dRfFnSerwwcdtzp5AAACSOAP0cxDE8x78l2jn7 lHtmaY2gJh30wdhsufHEhJIt/UQ8ZAEA7q7oBtlFoJT4nz8Unm92dZhiP0L41yBo eoyCIhOUzAXNETx1MjFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ erwwcdtzp5BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn opPd816mMBUnTbQyKJsIYQRq+jjcfUZ08o3B9b0bEg4DFQoIApkBApsBAh4BFiEE B8HZNTkyj5dRfFnSerwwcdtzp5AAAP01AP9YFRUzhnQ6a/aXCiHdF/ZF6jDPW/pz lpwkw9gkwgFXwgD9FH0jLE3J7gATyAScbv52sCAOf8ERM7y4WPLxZ1GMWQ8= =7RB1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u21.pgp000064400000000000000000000017561046102023000212320ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAqgUOcRXXnWf7rPEJzdIiqkEzQMDo2uDohcPK 0TxoPRbCwAsEHxYKAH0FgmHz9rADCwkHCRB6vDBx23OnkEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdP32WzzIiAmlCLXxPXN799f9uim/yi 3pgJyGiEQHDb4QMVCggCmwECHgEWIQQHwdk1OTKPl1F8WdJ6vDBx23OnkAAAJI4A /RzEMTzHvyXaOfuUe2ZpjaAmHfTB2Gy58cSEki39RDxkAQDurugG2UWglPifPxSe b3Z1mGI/QvjXIGh6jIIiE5TMBc0RPHUyMUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRB6vDBx23OnkEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeik93zXqYwFSdNtDIomwhhBGr6ONx9RnTyjcH1vRsSDgMVCggC mQECmwECHgEWIQQHwdk1OTKPl1F8WdJ6vDBx23OnkAAA/TUA/1gVFTOGdDpr9pcK Id0X9kXqMM9b+nOWnCTD2CTCAVfCAP0UfSMsTcnuABPIBJxu/nawIA5/wREzvLhY 8vFnUYxZD8LAAQQQFgoAcwWCYfQI5wOF/3gJEJS2tw2BgkHjRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ35LmOi74yX/c2iLCBCcPcbj8up2 kKfUmMkcA3QNQIW4FiEEGSEkvUK6a/VKiCD7lLa3DYGCQeMAAE2QAP9pMB9Wj7x/ MTCEabWNv/ksicJfl2JwpUowr+N5l4xkLAD/UgopiJiRyl+xGGtZl09uUoWJvdtg +sitxjugnuCX5AE= =7lne -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u210-priv.pgp000064400000000000000000000015601046102023000222610ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5610 0D18 E943 687F 7CFB C3CB 2047 9A11 B7DD 5E1D Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAapJCLz99/Ac+y/nDjCN7uaoitjtPIPqz8Ph4 C+8hAjYAAQCUK7GBANllGvbxXOtoHORMbmNjNfB2GryytIP04oVWJxCSwsALBB8W CgB9BYJh8/a6AwsJBwkQIEeaEbfdXh1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnUjN3IvU3TXJnvDFstm0t2hZYL1vNj1oTv80Sq6PqerMD FQoIApsBAh4BFiEEVhANGOlDaH98+8PLIEeaEbfdXh0AABxpAQDuqwdiJzeEMFYo Qx/F+Zqdh/rsDPw7YH1Mff6mJZC6IAEA5nVs4l1Yta3m78+lD7s9nYIJtnM2pHRE cJgj86LKEgHNEjx1MjEwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ ECBHmhG33V4dRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zwe1hGAhl2W+iCCdDDcyOCTjAuKMzspl1yl/S0obc7ACAxUKCAKZAQKbAQIeARYh BFYQDRjpQ2h/fPvDyyBHmhG33V4dAABa5wEA1qefXnUswweU98XnglgtrLebqmlV SEU3ymkAl/AtkCgA/A7DPVI7RiRJibNI7ORDZ12lh7A6cJJYoy5j8pbxn0kK =HUPR -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u210.pgp000064400000000000000000000017561046102023000213120ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAapJCLz99/Ac+y/nDjCN7uaoitjtPIPqz8Ph4 C+8hAjbCwAsEHxYKAH0FgmHz9roDCwkHCRAgR5oRt91eHUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdSM3ci9TdNcme8MWy2bS3aFlgvW82P WhO/zRKro+p6swMVCggCmwECHgEWIQRWEA0Y6UNof3z7w8sgR5oRt91eHQAAHGkB AO6rB2InN4QwVihDH8X5mp2H+uwM/DtgfUx9/qYlkLogAQDmdWziXVi1rebvz6UP uz2dggm2czakdERwmCPzosoSAc0SPHUyMTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQIEeaEbfdXh1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnB7WEYCGXZb6IIJ0MNzI4JOMC4ozOymXXKX9LShtzsAIDFQoI ApkBApsBAh4BFiEEVhANGOlDaH98+8PLIEeaEbfdXh0AAFrnAQDWp59edSzDB5T3 xeeCWC2st5uqaVVIRTfKaQCX8C2QKAD8DsM9UjtGJEmJs0js5ENnXaWHsDpwklij LmPylvGfSQrCwAEEEBYKAHMFgmH0CO4Dhf94CRARd8EOJ/fSNUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeiDRuEoayeDAn5cf/IvTI0c4uY XMaNuYB39XTgHhvAKBYhBNVEAdu94ygF2vCMThF3wQ4n99I1AAB0lAEAvXqXVIK5 ZJDYdWVXIBMU1TD8n7s2WjDvUJr92X/60+gA/ifIQqKpH2ZrsC3gYVq1Fk/b0o2p grQe5BPvk2D1358H =+B3L -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u211-priv.pgp000064400000000000000000000015601046102023000222620ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9349 703A 779B D372 5C5C 822E 21DA 8172 102E C4CD Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAwPwjN3wIkWPEEkEWgRWO+dUxCggxsAkQFC+o b5Q5IjwAAP9FJeCyBD22bMQG1737fJp7df88NX4IrUrI7gL4MsZ5QBELwsALBB8W CgB9BYJh8/a6AwsJBwkQIdqBchAuxM1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnEPcRZ3efjSzIX6ai2Gbq9l073dbAXaf/N+++OkEfOa4D FQoIApsBAh4BFiEEk0lwOneb03JcXIIuIdqBchAuxM0AAOv/APsHpSp5XQIAz+rD C4jG9ZeTQgfLJMg919oEnHsCZ59ibgD6AtKdcvT8QW4b+MWgbw55X3OJa8QlqfQA l8S2UiZLQwTNEjx1MjExQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ ECHagXIQLsTNRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z41jHzI6uR5VB9p4dqLsFtYc3k5ul+sJAzTBDXmKn6DMAxUKCAKZAQKbAQIeARYh BJNJcDp3m9NyXFyCLiHagXIQLsTNAADM4AD+On4wndXYJvM6TPJB1nvkOpqYr8V1 csSav0/pWv7cpl8BAPgCqoUand8pfwUSWifaZ2qMWiyYOhN3Il7leoIzti4C =fa8l -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u211.pgp000064400000000000000000000017561046102023000213130ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAwPwjN3wIkWPEEkEWgRWO+dUxCggxsAkQFC+o b5Q5IjzCwAsEHxYKAH0FgmHz9roDCwkHCRAh2oFyEC7EzUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcQ9xFnd5+NLMhfpqLYZur2XTvd1sBd p/837746QR85rgMVCggCmwECHgEWIQSTSXA6d5vTclxcgi4h2oFyEC7EzQAA6/8A +welKnldAgDP6sMLiMb1l5NCB8skyD3X2gScewJnn2JuAPoC0p1y9PxBbhv4xaBv Dnlfc4lrxCWp9ACXxLZSJktDBM0SPHUyMTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQIdqBchAuxM1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnjWMfMjq5HlUH2nh2ouwW1hzeTm6X6wkDNMENeYqfoMwDFQoI ApkBApsBAh4BFiEEk0lwOneb03JcXIIuIdqBchAuxM0AAMzgAP46fjCd1dgm8zpM 8kHWe+Q6mpivxXVyxJq/T+la/tymXwEA+AKqhRqd3yl/BRJaJ9pnaoxaLJg6E3ci XuV6gjO2LgLCwAEEEBYKAHMFgmH0CO4Dhf94CRAgR5oRt91eHUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeO9DftyX9qLcRRv1qDJaxVXzay kdgrDuunHpcQ2Jy6XhYhBFYQDRjpQ2h/fPvDyyBHmhG33V4dAABsSQEArCs/VjCq W7ko5Lub9mEPpXMn3KweK86T5ccnDo0MWtMA/i++vrYRKUkKLeFZj+3PEczKevkX sgLCwZDpB9b1oOEI =3qMI -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u212-priv.pgp000064400000000000000000000015601046102023000222630ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5DCA AB77 198D 1378 5C34 0D7B 375D D44D 815A 0481 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdA6+oABsTPPN61JweN+ktMvwGbX4oKErwiycHM u0gY1SMAAQC55bhnGkK792GoGYVco8hVouJn9BQzKl5/u2TblrpIvRELwsALBB8W CgB9BYJh8/a6AwsJBwkQN13UTYFaBIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnIrv2lQcmrBVSSesjMAs4v+v1JeHB1g7zH+FosqQyI2QD FQoIApsBAh4BFiEEXcqrdxmNE3hcNA17N13UTYFaBIEAAOBFAQDOgv568i419W8z iHbF0qxLdaMXfdHdEdfroUbVeLIEfQD+N0sySYXpzg7uHkcSffdXVowQrjLvlahD lr0NNA0zhwjNEjx1MjEyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EDdd1E2BWgSBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/MqEpJ/+nojRonIN2QWEpZrVHWcM14RA3D7KtRO+Q0BAxUKCAKZAQKbAQIeARYh BF3Kq3cZjRN4XDQNezdd1E2BWgSBAADKgQEAkWoU1khMSAqeDlKLsbFqnhzxDrAI gzDglpJgfiuiP1gBAOZ+sXjJOPCR9+QhwEnyl5K1c14oaECQVI9VQ6Kd/ZMA =bVLQ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u212.pgp000064400000000000000000000017561046102023000213140ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdA6+oABsTPPN61JweN+ktMvwGbX4oKErwiycHM u0gY1SPCwAsEHxYKAH0FgmHz9roDCwkHCRA3XdRNgVoEgUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmciu/aVByasFVJJ6yMwCzi/6/Ul4cHW DvMf4WiypDIjZAMVCggCmwECHgEWIQRdyqt3GY0TeFw0DXs3XdRNgVoEgQAA4EUB AM6C/nryLjX1bzOIdsXSrEt1oxd90d0R1+uhRtV4sgR9AP43SzJJhenODu4eRxJ9 91dWjBCuMu+VqEOWvQ00DTOHCM0SPHUyMTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQN13UTYFaBIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn8yoSkn/6eiNGicg3ZBYSlmtUdZwzXhEDcPsq1E75DQEDFQoI ApkBApsBAh4BFiEEXcqrdxmNE3hcNA17N13UTYFaBIEAAMqBAQCRahTWSExICp4O UouxsWqeHPEOsAiDMOCWkmB+K6I/WAEA5n6xeMk48JH35CHASfKXkrVzXihoQJBU j1VDop39kwDCwAEEEBYKAHMFgmH0CO4Dhf94CRAh2oFyEC7EzUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfJ1W0tkCg2OjpdGm4jDs7UUSA2 mCTxFOoWTLNFOi7xsBYhBJNJcDp3m9NyXFyCLiHagXIQLsTNAACQRgEA5rLeHM1g aflHIvoRZAPRLi/+/NqJ7/aUXtxYVcOJefsA/2pGoc61390OvoFdUZqJAUG0i5dz MLSD/DXrM0VRA9IL =Jun3 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u213-priv.pgp000064400000000000000000000015601046102023000222640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5959 CAC7 EB9C 1C7D 9ECF 10B8 C023 ED12 A0F7 F556 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdA5vZsReCEDYLhBKVM3IrzROCfEnduG340mEnc bc6BtY8AAQCBZq3ZzkCgNpi8QDY1HSBsbXG0WAktc5wGibkAtjnI+g4iwsALBB8W CgB9BYJh8/a6AwsJBwkQwCPtEqD39VZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnSQGGlY0QYeXVpW1FD7b1hITpNvCwjtQZGrnE45nlNfYD FQoIApsBAh4BFiEEWVnKx+ucHH2ezxC4wCPtEqD39VYAAMMvAP41tYEV1LYrgSxm UcBrMzAp/NadrGEYJz89MEcVc3B9NgEAx81aaTT9NNvmr+s77MRmPPjDUY8cPE8O VQ2Dr5C7QgHNEjx1MjEzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EMAj7RKg9/VWRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZzDwQKpDk2mNWyUpgFWNe6ef9s53QLhivElG9QxNNxY1AxUKCAKZAQKbAQIeARYh BFlZysfrnBx9ns8QuMAj7RKg9/VWAAAaRwEAiZOswMUevNZPOWSD0aNl68N8xFWc hEg3M7V6YWAbWAIBALuPYkNKorKJldTYShOIsrstGR3JVmLyMO4msb7rnn8D =f2wv -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u213.pgp000064400000000000000000000017561046102023000213150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdA5vZsReCEDYLhBKVM3IrzROCfEnduG340mEnc bc6BtY/CwAsEHxYKAH0FgmHz9roDCwkHCRDAI+0SoPf1VkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJAYaVjRBh5dWlbUUPtvWEhOk28LCO 1BkaucTjmeU19gMVCggCmwECHgEWIQRZWcrH65wcfZ7PELjAI+0SoPf1VgAAwy8A /jW1gRXUtiuBLGZRwGszMCn81p2sYRgnPz0wRxVzcH02AQDHzVppNP002+av6zvs xGY8+MNRjxw8Tw5VDYOvkLtCAc0SPHUyMTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQwCPtEqD39VZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnMPBAqkOTaY1bJSmAVY17p5/2zndAuGK8SUb1DE03FjUDFQoI ApkBApsBAh4BFiEEWVnKx+ucHH2ezxC4wCPtEqD39VYAABpHAQCJk6zAxR681k85 ZIPRo2Xrw3zEVZyESDcztXphYBtYAgEAu49iQ0qisomV1NhKE4iyuy0ZHclWYvIw 7iaxvuuefwPCwAEEEBYKAHMFgmH0CO4Dhf94CRA3XdRNgVoEgUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc69SiTGoFo0i6agp35p03EpbJL SyGwNoXVviLd/TZ6/xYhBF3Kq3cZjRN4XDQNezdd1E2BWgSBAADj2AD+L0/jkLNm 3nO7C3NXIpCNZIgPSzITHccnklNwqblJgoQBAILyBiB1Q/O6VMWfUpAS1UCk58rC TegY7aH3Z+9TxQEF =n8wH -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u214-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7D4E A25C 4F36 4AF1 B61B 6416 4816 D289 7753 52A8 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAwDoEBLqO1tEjiv9ApsKCCVIAuZ4csTWzI2zY lQJ5SMoAAP0ZZJ6RAR/lMrEokaqY/pO4HUaiLUzsiEft5tCAabLYPhFiwsALBB8W CgB9BYJh8/a6AwsJBwkQSBbSiXdTUqhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnUf1OP8TPjZyHWlVhp5fMZ9tWB0z+VMXyRYv9ngMUJDYD FQoIApsBAh4BFiEEfU6iXE82SvG2G2QWSBbSiXdTUqgAABOUAP9e74T88AS5OpMF mm9EQjusvMt8GXMk9IHAvf7YhdPuZAEA8ULScYjoUghn+jBoVnPNu6LULZS7S8m2 Lkg4zwJXUgjNEjx1MjE0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EEgW0ol3U1KoRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4ooLB1VXOCjDAFCDS9RGRyCnoZNJEkZhlMmWfVhMAEhAxUKCAKZAQKbAQIeARYh BH1OolxPNkrxthtkFkgW0ol3U1KoAACVJAEA0cPdMGNP95ldHeX8P9jb0WJESjWy vpuqVhnC7Hli3b4BAJQqXt3WlHls39Qb9lUdvBM2psaWxzetWEeq9ekXDd4K =zv/V -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u214.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAwDoEBLqO1tEjiv9ApsKCCVIAuZ4csTWzI2zY lQJ5SMrCwAsEHxYKAH0FgmHz9roDCwkHCRBIFtKJd1NSqEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdR/U4/xM+NnIdaVWGnl8xn21YHTP5U xfJFi/2eAxQkNgMVCggCmwECHgEWIQR9TqJcTzZK8bYbZBZIFtKJd1NSqAAAE5QA /17vhPzwBLk6kwWab0RCO6y8y3wZcyT0gcC9/tiF0+5kAQDxQtJxiOhSCGf6MGhW c827otQtlLtLybYuSDjPAldSCM0SPHUyMTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQSBbSiXdTUqhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JniigsHVVc4KMMAUINL1EZHIKehk0kSRmGUyZZ9WEwASEDFQoI ApkBApsBAh4BFiEEfU6iXE82SvG2G2QWSBbSiXdTUqgAAJUkAQDRw90wY0/3mV0d 5fw/2NvRYkRKNbK+m6pWGcLseWLdvgEAlCpe3daUeWzf1Bv2VR28EzamxpbHN61Y R6r16RcN3grCwAEEEBYKAHMFgmH0CO8Dhf94CRDAI+0SoPf1VkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdRpqV23L0a8NZkdovCRadlvk2y laLLyzRa5/1YhM00ERYhBFlZysfrnBx9ns8QuMAj7RKg9/VWAADFPAD/eaWIaEq/ t3BoSDVAPujkzTkSdPEIyzeBTGGLs1kZCpkA/RGRwIzwdOOTmFV7yY4UtTbMvTnU deCmOlb3/GtHWYgB =nDuT -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u215-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8429 1C88 2E05 9C51 00C5 C1AD 1746 298F 01E7 D682 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdACBGaskQvrI5l2c1UuC/k28imtA4kvnrwL7x6 xAnLiWMAAPsFVYr9iHj85Q7rpVTeDBw/APWAxwXgDVhUamTYZOcusxCgwsALBB8W CgB9BYJh8/a6AwsJBwkQF0YpjwHn1oJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn+UoQVU52dzRbIo6ikZvGB1IwLxV1glEtla3Oah3hzVgD FQoIApsBAh4BFiEEhCkciC4FnFEAxcGtF0YpjwHn1oIAABAHAPoC8e5Vo1mZvluy dkJakmqAIRL70No12RifOSo20xledgEA8rRluhaja6GypLXZ9dor15zpsW36YCAd KMXLtxzY0wfNEjx1MjE1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EBdGKY8B59aCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5U75anxvrL57VtBKiPGU3uD5oORhvwmBI4llqire7KTAxUKCAKZAQKbAQIeARYh BIQpHIguBZxRAMXBrRdGKY8B59aCAABBmQEA8C8vK/jubF+AyvpVAgESyioFwwH9 0X18RaDtXw2S+p4BAP3Ecbrbd6JA/8zE/ECZUq03VoGzEyNjihNxS7UW8ZsD =zqfC -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u215.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdACBGaskQvrI5l2c1UuC/k28imtA4kvnrwL7x6 xAnLiWPCwAsEHxYKAH0FgmHz9roDCwkHCRAXRimPAefWgkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf5ShBVTnZ3NFsijqKRm8YHUjAvFXWC US2Vrc5qHeHNWAMVCggCmwECHgEWIQSEKRyILgWcUQDFwa0XRimPAefWggAAEAcA +gLx7lWjWZm+W7J2QlqSaoAhEvvQ2jXZGJ85KjbTGV52AQDytGW6FqNrobKktdn1 2ivXnOmxbfpgIB0oxcu3HNjTB80SPHUyMTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQF0YpjwHn1oJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnlTvlqfG+svntW0EqI8ZTe4Pmg5GG/CYEjiWWqKt7spMDFQoI ApkBApsBAh4BFiEEhCkciC4FnFEAxcGtF0YpjwHn1oIAAEGZAQDwLy8r+O5sX4DK +lUCARLKKgXDAf3RfXxFoO1fDZL6ngEA/cRxutt3okD/zMT8QJlSrTdWgbMTI2OK E3FLtRbxmwPCwAEEEBYKAHMFgmH0CO8Dhf94CRBIFtKJd1NSqEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdeJMbctnhihncE5cQ3ymR4JVcz y8Qm+/KR9u3nBqLePxYhBH1OolxPNkrxthtkFkgW0ol3U1KoAAC8FwEAvxctPaoB WfWvoRmJVM5hijKnVSXWKYJAb/rTfA4A3CAA/iJLdksrRoo33LPIrqL78Fa5g7N8 afWOKHnYukvnx0EN =hGBE -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u216-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: F3A9 5472 FDB6 5D96 5EC2 C4E3 D22B D567 B60B E41E Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAhjQzJjSDVi7ft6uOIIpwOFLHz/Od6MsG8RXO yZIoS7oAAP9dDg0NMHip/Xs6TpwlVubSD5elFTqC+q/Go4s4xRY7Lg7ZwsALBB8W CgB9BYJh8/a6AwsJBwkQ0ivVZ7YL5B5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn1I5xJajpoYjWz2js+owhXIKP/1SP9eSLVnLe5wl/QWgD FQoIApsBAh4BFiEE86lUcv22XZZewsTj0ivVZ7YL5B4AAO9dAPwMGpjmkIl5Naly XtDVVnzFqX6JK1ZMNQjBWFsHsJrnagEAgPMmrFLuidoh2JiDUjZBBnc0awUq8qYi wqpx0QlhqAnNEjx1MjE2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ ENIr1We2C+QeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4UPgP5WIxUiH0Pnue7JhDrYOgWp4UHWPvM7gXJ+wPKdAxUKCAKZAQKbAQIeARYh BPOpVHL9tl2WXsLE49Ir1We2C+QeAAAyOAD9GAGUdBMwKRUQDXsvk1cTvPpSW4Pm 4H0OCZSvzxr7qHEA/2Od7IAfXnRj1eOd9v+RcEWIdcVAzr7b/kcy06GFAxkO =KjpJ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u216.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAhjQzJjSDVi7ft6uOIIpwOFLHz/Od6MsG8RXO yZIoS7rCwAsEHxYKAH0FgmHz9roDCwkHCRDSK9VntgvkHkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfUjnElqOmhiNbPaOz6jCFcgo//VI/1 5ItWct7nCX9BaAMVCggCmwECHgEWIQTzqVRy/bZdll7CxOPSK9VntgvkHgAA710A /AwamOaQiXk1qXJe0NVWfMWpfokrVkw1CMFYWwewmudqAQCA8yasUu6J2iHYmINS NkEGdzRrBSrypiLCqnHRCWGoCc0SPHUyMTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQ0ivVZ7YL5B5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnhQ+A/lYjFSIfQ+e57smEOtg6BanhQdY+8zuBcn7A8p0DFQoI ApkBApsBAh4BFiEE86lUcv22XZZewsTj0ivVZ7YL5B4AADI4AP0YAZR0EzApFRAN ey+TVxO8+lJbg+bgfQ4JlK/PGvuocQD/Y53sgB9edGPV4532/5FwRYh1xUDOvtv+ RzLToYUDGQ7CwAEEEBYKAHMFgmH0CO8Dhf94CRAXRimPAefWgkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc5ORmnwYe+OAtMT8e91C1LJAbU ikidUTF94d84K8ZqSRYhBIQpHIguBZxRAMXBrRdGKY8B59aCAAAjfQD/bhbsrV3L qnjme47Z9AFY7MMhLe1kqkEDR7QfgtqDeagBAIAYVoeDfQt93eRFpxQsy9Zr51Mq VIkCm40w/7AFBMkH =ZEYp -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u217-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0B9B 18FB 07F2 9E89 D33A A0A8 6ED4 7AC9 E7B8 6518 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAL7K7LroqMyLMHPmrwkM4h3AqU6R25NqYhaoP o2l9iQcAAP4m1sN+ar8e7YQfcS4b6BJIrIAbR6/hm/VErasMl0D+qxDkwsALBB8W CgB9BYJh8/a6AwsJBwkQbtR6yee4ZRhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnCzv0uIbiXHxSAeQP7FDJIYUIvapAXmeVVOln6MMIhv0D FQoIApsBAh4BFiEEC5sY+wfynonTOqCobtR6yee4ZRgAAECQAQCrEgx4QdKZj7og wrAY6Fr5Ao9mzO2l+kTA05AZenseiAEA4MbZtmYKuvVb0qhBL8aB39uwIXjUyafM OinzGTMY5gbNEjx1MjE3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EG7UesnnuGUYRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zxdqh+FtD30I5TqBqYRtJhg8jwHyAk2peSmRBQ1Th2wsAxUKCAKZAQKbAQIeARYh BAubGPsH8p6J0zqgqG7UesnnuGUYAAC4UQEA42CnWLBlpTKHQGIXE68Jc6QuHGWs xf+ysmy5XzYgQfcA/jJfs/sGvTzURP7kOHBw4y3dLjZ/mVzHeVzfWoFD3PoI =qR5Z -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u217.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAL7K7LroqMyLMHPmrwkM4h3AqU6R25NqYhaoP o2l9iQfCwAsEHxYKAH0FgmHz9roDCwkHCRBu1HrJ57hlGEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcLO/S4huJcfFIB5A/sUMkhhQi9qkBe Z5VU6WfowwiG/QMVCggCmwECHgEWIQQLmxj7B/KeidM6oKhu1HrJ57hlGAAAQJAB AKsSDHhB0pmPuiDCsBjoWvkCj2bM7aX6RMDTkBl6ex6IAQDgxtm2Zgq69VvSqEEv xoHf27AheNTJp8w6KfMZMxjmBs0SPHUyMTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQbtR6yee4ZRhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnF2qH4W0PfQjlOoGphG0mGDyPAfICTal5KZEFDVOHbCwDFQoI ApkBApsBAh4BFiEEC5sY+wfynonTOqCobtR6yee4ZRgAALhRAQDjYKdYsGWlModA YhcTrwlzpC4cZazF/7KybLlfNiBB9wD+Ml+z+wa9PNRE/uQ4cHDjLd0uNn+ZXMd5 XN9agUPc+gjCwAEEEBYKAHMFgmH0CO8Dhf94CRDSK9VntgvkHkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf6G/GX9W6zO13ed/7raC+G7XV0 l+rpHJByd1M+AcXZshYhBPOpVHL9tl2WXsLE49Ir1We2C+QeAAAYYgEA0IVaXthT Y+fuuECTnqfs0XcDYLjvEhEea1i25irkGxAA/3fOy9HIp4ncs+eRkQRxMKNPOD0Z OeFaTLAAAM36qAME =FuO/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u218-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2A11 B658 32E9 7E65 DAA6 9D69 0C30 4130 A843 F532 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAJB9IAld6CjPgYGxzusqroP59Q3WWpSdtsRK5 85W3ErEAAP0QjeqzM5BENoFBZQhuiAkioUB37AsZrIdPuGBYyXe+cg6OwsALBB8W CgB9BYJh8/a6AwsJBwkQDDBBMKhD9TJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnxsH+m2DpLiVTQ0A8uKoHk1NQcDWRwEJ9MKaz6HrLdxED FQoIApsBAh4BFiEEKhG2WDLpfmXapp1pDDBBMKhD9TIAAHvAAQCPaTTQZEO+jQJx JMjWz0XkEzaxpboI3VJkGxjnDAyg4QEA/MPS7BWk0p2IHIkhaXUzJ1JCbzNUqW3A oJvsT+1egAXNEjx1MjE4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EAwwQTCoQ/UyRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/AjtC+IW1QH5UVzY5xTWI8rSMsoNkVMlIOGtOO+E78sAxUKCAKZAQKbAQIeARYh BCoRtlgy6X5l2qadaQwwQTCoQ/UyAACiqwEAlkqsi4l9DjWpFx+HFePkyNuAVIQB VXJNGHUZrcvF+Y4BAI5xYDTwyHLbhRFeRJC4qyoGS0Uq7nT0C6AcedS5ZFoO =KoiN -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u218.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAJB9IAld6CjPgYGxzusqroP59Q3WWpSdtsRK5 85W3ErHCwAsEHxYKAH0FgmHz9roDCwkHCRAMMEEwqEP1MkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfGwf6bYOkuJVNDQDy4qgeTU1BwNZHA Qn0wprPoest3EQMVCggCmwECHgEWIQQqEbZYMul+ZdqmnWkMMEEwqEP1MgAAe8AB AI9pNNBkQ76NAnEkyNbPReQTNrGlugjdUmQbGOcMDKDhAQD8w9LsFaTSnYgciSFp dTMnUkJvM1SpbcCgm+xP7V6ABc0SPHUyMThAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQDDBBMKhD9TJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn8CO0L4hbVAflRXNjnFNYjytIyyg2RUyUg4a0474TvywDFQoI ApkBApsBAh4BFiEEKhG2WDLpfmXapp1pDDBBMKhD9TIAAKKrAQCWSqyLiX0ONakX H4cV4+TI24BUhAFVck0YdRmty8X5jgEAjnFgNPDIctuFEV5EkLirKgZLRSrudPQL oBx51LlkWg7CwAEEEBYKAHMFgmH0CO8Dhf94CRBu1HrJ57hlGEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnMe3EU53b0338RtSlxaQMIB3s HPowpMjbD8CuSecZnBYhBAubGPsH8p6J0zqgqG7UesnnuGUYAACyXQEAqeCm0Uni RB3HJRJ9w1W/icbaILGnNHeXO2HaN//U72YBAKaa076IOwbK6Lx1K8Z7yvm+/Xfb vAOUSJaNsoyFZ44K =1yid -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u219-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BB1B 2F93 AE4C 4D41 B438 5AB6 53A4 1933 45AA 17C7 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAmr6rLsMXcSy8PevFT4gqJTkK3S0spJfdKYub NWgujOUAAQCNL5R17TafuaZAJbTIT4Wp4BPGI5jwjlY/f076qZN7EhBcwsALBB8W CgB9BYJh8/a6AwsJBwkQU6QZM0WqF8dHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnAjov8IrN2JziVlhx58D7iAEU3vJW0KzuTiZmbMTUOzgD FQoIApsBAh4BFiEEuxsvk65MTUG0OFq2U6QZM0WqF8cAAGvmAQDMCbjqGwDTmZ4I NHtH4z07o+caj/obj8uoF3uqeplYDQD/StVY87gCK+8hlFvfjmdcaWv4N+lf9bMR U1lyxfxs6AjNEjx1MjE5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EFOkGTNFqhfHRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+wyc4qqd4ZEyF70NOi9fLlp0cyvBqoYjJA8GaIsmrb4AxUKCAKZAQKbAQIeARYh BLsbL5OuTE1BtDhatlOkGTNFqhfHAAA1sgEAqRWEv6fIoBhfJrjMhbqVB+Wz5OcX ixn2Ia9NsBG3iKkBANBX0qpyze1GRfU5llnDwx5wxegnE4PSiXhJPTtBXfkO =DuW/ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u219.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAmr6rLsMXcSy8PevFT4gqJTkK3S0spJfdKYub NWgujOXCwAsEHxYKAH0FgmHz9roDCwkHCRBTpBkzRaoXx0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcCOi/wis3YnOJWWHHnwPuIARTe8lbQ rO5OJmZsxNQ7OAMVCggCmwECHgEWIQS7Gy+TrkxNQbQ4WrZTpBkzRaoXxwAAa+YB AMwJuOobANOZngg0e0fjPTuj5xqP+huPy6gXe6p6mVgNAP9K1VjzuAIr7yGUW9+O Z1xpa/g36V/1sxFTWXLF/GzoCM0SPHUyMTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQU6QZM0WqF8dHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn7DJziqp3hkTIXvQ06L18uWnRzK8GqhiMkDwZoiyatvgDFQoI ApkBApsBAh4BFiEEuxsvk65MTUG0OFq2U6QZM0WqF8cAADWyAQCpFYS/p8igGF8m uMyFupUH5bPk5xeLGfYhr02wEbeIqQEA0FfSqnLN7UZF9TmWWcPDHnDF6CcTg9KJ eEk9O0Fd+Q7CwAEEEBYKAHMFgmH0CO8Dhf94CRAMMEEwqEP1MkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfWj5fIBs9ozx5Fi9kCPKWMTOCE tp1Y65TJiVXmI/jtZhYhBCoRtlgy6X5l2qadaQwwQTCoQ/UyAACvrgEA9l4Dzh0z Yo6wcIh1vD6UerGpiGH+ZG6jawrkOcYyP40A/iscMIBp9WWshScMEPY9FnxNCN6a wapI/NZLCkDtMRkB =M6r/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u22-priv.pgp000064400000000000000000000015571046102023000222100ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A915 D1BA 3F06 6E98 9B96 5ADF A27C C8D1 61C0 F48A Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAYKZWDTb+qs5ebcp2gDa6gI/8azRuckc1hdWZ B3HR0JwAAP4nOsvsLBZPyceHSr/G3dnHxXk7hg69oyG+eg87DfK/rRGFwsALBB8W CgB9BYJh8/awAwsJBwkQonzI0WHA9IpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnmcksXk9PsM3FSQwssFWhvpPsTEApOl6V7Rc6wxC24u0D FQoIApsBAh4BFiEEqRXRuj8GbpibllrfonzI0WHA9IoAAOhKAPsEjNYGe7JP6wfv uB4rfxuZ994ILPCTOr43NGxOZERuCAD9HvVt7bn9OqQZGfaRs+/VdQ1cyOgy4mqb Ytw3PfI9DwvNETx1MjJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ onzI0WHA9IpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn FiAf1q5OYtYbmWoctebQIK+oCw/lJByP/iDCavPdO4UDFQoIApkBApsBAh4BFiEE qRXRuj8GbpibllrfonzI0WHA9IoAAB1KAQCJaCsHvyNk+g4KJXL2BjlSSDonAF3F 7jA8b/uNrCniAgD/cvKjJAy+a6DLUCx4fBXKEVTU3RfIjCdGP9Dg7iFz+A4= =LxPD -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u22.pgp000064400000000000000000000017561046102023000212330ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAYKZWDTb+qs5ebcp2gDa6gI/8azRuckc1hdWZ B3HR0JzCwAsEHxYKAH0FgmHz9rADCwkHCRCifMjRYcD0ikcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeZySxeT0+wzcVJDCywVaG+k+xMQCk6 XpXtFzrDELbi7QMVCggCmwECHgEWIQSpFdG6PwZumJuWWt+ifMjRYcD0igAA6EoA +wSM1gZ7sk/rB++4Hit/G5n33ggs8JM6vjc0bE5kRG4IAP0e9W3tuf06pBkZ9pGz 79V1DVzI6DLiapti3Dc98j0PC80RPHUyMkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRCifMjRYcD0ikcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcWIB/Wrk5i1huZahy15tAgr6gLD+UkHI/+IMJq8907hQMVCggC mQECmwECHgEWIQSpFdG6PwZumJuWWt+ifMjRYcD0igAAHUoBAIloKwe/I2T6Dgol cvYGOVJIOicAXcXuMDxv+42sKeICAP9y8qMkDL5roMtQLHh8FcoRVNTdF8iMJ0Y/ 0ODuIXP4DsLAAQQQFgoAcwWCYfQI5wOF/3gJEHq8MHHbc6eQRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwpqxYTAqYkxrNYBM+Uk42weOnbR PE8WVNkrQnind/AoFiEEB8HZNTkyj5dRfFnSerwwcdtzp5AAAOw6APkBhSPyAX7w ETGt4SjvuxiABRm+TxnuTGGNVxtdFxql6gEAxPxGqWk6sah4jLgWjTt7hrRVycy+ 6wF6PuluwlJXNAE= =e6pO -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u220-priv.pgp000064400000000000000000000015601046102023000222620ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4B52 6E27 DAA4 1961 F9D8 9404 ED2F 25E6 50D8 2444 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdA2b6VULDwMjqbYJeFI+mycO62L3DKIezhH6f1 vGSqdIUAAP49lAILGqHN2vyEDK1VHxsuIZIbgAaieYP+7n3J+gRbcA8hwsALBB8W CgB9BYJh8/a6AwsJBwkQ7S8l5lDYJERHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnc+6E+UQn2z6W5UfB9e9GyJKtG75aAtRbR1AWrGtBXJID FQoIApsBAh4BFiEES1JuJ9qkGWH52JQE7S8l5lDYJEQAAOMuAPwIFwJ4tZ88L+cV X1vf4Rj07xmKOK9X6JYnJ5076mOv9AEA2PEyVwHeysLhwtDM34iWYd/sTA9HSyFW DXpf2a7tDwHNEjx1MjIwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EO0vJeZQ2CRERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z24+xMi49d8MnSiSSeyrVqR6Aaa/wo3kpeGDxC86DkMkAxUKCAKZAQKbAQIeARYh BEtSbifapBlh+diUBO0vJeZQ2CREAABkzwD/U8tOTrCV8pqf9fvAfe8TfmkRblFu cz1gg73E0E/1IsgA/ifzR937Tigbws5yZHtX0U44CGI0loylWMvedtNX+M0O =xaP6 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u220.pgp000064400000000000000000000017561046102023000213130ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdA2b6VULDwMjqbYJeFI+mycO62L3DKIezhH6f1 vGSqdIXCwAsEHxYKAH0FgmHz9roDCwkHCRDtLyXmUNgkREcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdz7oT5RCfbPpblR8H170bIkq0bvloC 1FtHUBasa0FckgMVCggCmwECHgEWIQRLUm4n2qQZYfnYlATtLyXmUNgkRAAA4y4A /AgXAni1nzwv5xVfW9/hGPTvGYo4r1folicnnTvqY6/0AQDY8TJXAd7KwuHC0Mzf iJZh3+xMD0dLIVYNel/Zru0PAc0SPHUyMjBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQ7S8l5lDYJERHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnbj7EyLj13wydKJJJ7KtWpHoBpr/CjeSl4YPELzoOQyQDFQoI ApkBApsBAh4BFiEES1JuJ9qkGWH52JQE7S8l5lDYJEQAAGTPAP9Ty05OsJXymp/1 +8B97xN+aRFuUW5zPWCDvcTQT/UiyAD+J/NH3ftOKBvCznJke1fRTjgIYjSWjKVY y95201f4zQ7CwAEEEBYKAHMFgmH0CO8Dhf94CRBTpBkzRaoXx0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeeT0Sc1lGpSjBJw7wXoengh6Lw 3FPEpUsG86fiGL4hHBYhBLsbL5OuTE1BtDhatlOkGTNFqhfHAACzkAD/VejV41KO Mc9Q/yNc7iTrFhZiitfBE9ysQ/GqyzYLCpYA/RugyRSw+2axiEn/d9B8h313RGlX wYi8OGFSpQhCf2oG =JjFi -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u221-priv.pgp000064400000000000000000000015601046102023000222630ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8DC5 1F77 AEFA E450 5547 92A0 C704 999E F5D3 2A6B Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAKyuwtVrlnt3NtrxYuoWdXuaJyeoQHSzjUCf3 14ZwHukAAQCO+Qpiz/mCBOasqjY/ERWMbLVWNTOckMgTUsW0fMI4qQ91wsALBB8W CgB9BYJh8/a6AwsJBwkQxwSZnvXTKmtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn/2oUGt1gs8MZL08xdZa8BFzIeSbl/3d58HaiEIQ51tMD FQoIApsBAh4BFiEEjcUfd6765FBVR5KgxwSZnvXTKmsAABoQAQDzVVNNoj6cEYMY xOoJrZe+sCI5zjGgN6G+EqK3Fd/vlAD8Daq6B0XqGqx8sylTqlVtNMeYmsvT3mfN btcRen2lVQfNEjx1MjIxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EMcEmZ710yprRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z65L/Xl28rp8OKKUv+XKU4Cc0MO9GWYEPuXmTqhc0ghJAxUKCAKZAQKbAQIeARYh BI3FH3eu+uRQVUeSoMcEmZ710yprAAB4NQD/RJ7xRKQFs/9Uq11Mu+4V1SCjVaHZ V2gzgTzVQ/UNs2EBAMXQvtBeLUfr8VvSg5hfaefpF0IJz7bojuNLOn3ICPUP =T9oE -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u221.pgp000064400000000000000000000017561046102023000213140ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAKyuwtVrlnt3NtrxYuoWdXuaJyeoQHSzjUCf3 14ZwHunCwAsEHxYKAH0FgmHz9roDCwkHCRDHBJme9dMqa0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf/ahQa3WCzwxkvTzF1lrwEXMh5JuX/ d3nwdqIQhDnW0wMVCggCmwECHgEWIQSNxR93rvrkUFVHkqDHBJme9dMqawAAGhAB APNVU02iPpwRgxjE6gmtl76wIjnOMaA3ob4SorcV3++UAPwNqroHReoarHyzKVOq VW00x5iay9PeZ81u1xF6faVVB80SPHUyMjFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQxwSZnvXTKmtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnrkv9eXbyunw4opS/5cpTgJzQw70ZZgQ+5eZOqFzSCEkDFQoI ApkBApsBAh4BFiEEjcUfd6765FBVR5KgxwSZnvXTKmsAAHg1AP9EnvFEpAWz/1Sr XUy77hXVIKNVodlXaDOBPNVD9Q2zYQEAxdC+0F4tR+vxW9KDmF9p5+kXQgnPtuiO 40s6fcgI9Q/CwAEEEBYKAHMFgmH0CO8Dhf94CRDtLyXmUNgkREcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmecFelHBcTkeD20ezYWmbqwU0JM /IdR2omDAjrkKZ7K2RYhBEtSbifapBlh+diUBO0vJeZQ2CREAAC4/QEAi020Dh+P WxQ8/80nrW+TAID1SVxP5P2JsmxKtnOPBx8A/3DHOnJQOL+n2BokfjcfIHClzxxP CtU+0nXAlDb4v40L =yyFv -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u222-priv.pgp000064400000000000000000000015601046102023000222640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: ACD8 0C31 E49F EAF9 AA07 DBD9 FA96 E7E8 57A6 94DE Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAfFlud1zKkGKAgt84mwznH6ViYxoxyihYApL/ Ps0FAZUAAQCnRdH83Hsxh3VIX6i8wfT89iozTD5mHi7FGxja9FbxoRE3wsALBB8W CgB9BYJh8/a6AwsJBwkQ+pbn6FemlN5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jngl1vnMj14hXJrLMSjk/JNBVlFLcSs/t4gf1HeNmdb0AD FQoIApsBAh4BFiEErNgMMeSf6vmqB9vZ+pbn6FemlN4AAC73AP9Duuj1CYiRlpt6 LVideSsTzxFk2wjRHMcDb897uFyp+QEA8o3YVaINhK/BffsDSUxqNYewAFZ+smB1 mIB8w4uYUwbNEjx1MjIyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EPqW5+hXppTeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/dCQWdTdrOZTBpNTcrRO1EaHV9edrTOc1GnzwpGlEPVAxUKCAKZAQKbAQIeARYh BKzYDDHkn+r5qgfb2fqW5+hXppTeAAB5zQEAzMmoneCqu0Dl2ipvWznWwkEtp5OH lmYJnrxKbwlvsvIBAK+6iRtzlhr9phjO2erDPAMI1dAH98xcoKsct8qvpVUD =2bb2 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u222.pgp000064400000000000000000000017561046102023000213150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAfFlud1zKkGKAgt84mwznH6ViYxoxyihYApL/ Ps0FAZXCwAsEHxYKAH0FgmHz9roDCwkHCRD6lufoV6aU3kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeCXW+cyPXiFcmssxKOT8k0FWUUtxKz +3iB/Ud42Z1vQAMVCggCmwECHgEWIQSs2Awx5J/q+aoH29n6lufoV6aU3gAALvcA /0O66PUJiJGWm3otWJ15KxPPEWTbCNEcxwNvz3u4XKn5AQDyjdhVog2Er8F9+wNJ TGo1h7AAVn6yYHWYgHzDi5hTBs0SPHUyMjJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQ+pbn6FemlN5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn90JBZ1N2s5lMGk1NytE7URodX152tM5zUafPCkaUQ9UDFQoI ApkBApsBAh4BFiEErNgMMeSf6vmqB9vZ+pbn6FemlN4AAHnNAQDMyaid4Kq7QOXa Km9bOdbCQS2nk4eWZgmevEpvCW+y8gEAr7qJG3OWGv2mGM7Z6sM8AwjV0Af3zFyg qxy3yq+lVQPCwAEEEBYKAHMFgmH0CO8Dhf94CRDHBJme9dMqa0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmefKniXJyJMH/dWZHJRn+YFW971 Kzm4ZSeJZs6TrBgedhYhBI3FH3eu+uRQVUeSoMcEmZ710yprAADudAD/XQyzvCdJ nFL4Rb8J8n6eRS6rlNbwgTkAtk/bzN62G90A/RiRBIRrgUTRD8dhUxuReCWL8KPT D53PGLKF3Cvm3w8O =Wt3O -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u223-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: F2A4 AE3A BC6D E047 5E22 B836 DB0B 8264 BE49 6577 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdA7j+5GVGwBMp1rM00eBQS47RW2ekDTYPISGTx vSaXwlsAAPkBI0CopD5PnHBEa1cx6mjmu8yF0L3fa6/PIL8sZXCzIBDFwsALBB8W CgB9BYJh8/a6AwsJBwkQ2wuCZL5JZXdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn7JHZd+k6TfQEEusfpAfR+0vru88Q7SQh1gwtF09YNlcD FQoIApsBAh4BFiEE8qSuOrxt4EdeIrg22wuCZL5JZXcAAHdkAQCf65uz7WeK3VAt AJ4tUtiUFX8QmPfENzvPR0xvs8i9iAEAjZxW4DPag/Nkddkv/4KRY7oIh0i0Xc1C R24J6bszFAHNEjx1MjIzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ ENsLgmS+SWV3RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7SGn7VM4NVIJHpgyDJxxL7bXNOhZjTgRmW9Q8LOvCf7AxUKCAKZAQKbAQIeARYh BPKkrjq8beBHXiK4NtsLgmS+SWV3AAD82QEAoHS7MU78REOawGyTU/HV8iY1P2+9 XYrBcRft4aTptU4BAI/Bl5JKZJ8hVbUBQsdB277HRTqBHdmSxGdLEaSK5xYP =ncRP -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u223.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdA7j+5GVGwBMp1rM00eBQS47RW2ekDTYPISGTx vSaXwlvCwAsEHxYKAH0FgmHz9roDCwkHCRDbC4Jkvklld0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfskdl36TpN9AQS6x+kB9H7S+u7zxDt JCHWDC0XT1g2VwMVCggCmwECHgEWIQTypK46vG3gR14iuDbbC4JkvklldwAAd2QB AJ/rm7PtZ4rdUC0Ani1S2JQVfxCY98Q3O89HTG+zyL2IAQCNnFbgM9qD82R12S// gpFjugiHSLRdzUJHbgnpuzMUAc0SPHUyMjNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQ2wuCZL5JZXdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JntIaftUzg1UgkemDIMnHEvttc06FmNOBGZb1Dws68J/sDFQoI ApkBApsBAh4BFiEE8qSuOrxt4EdeIrg22wuCZL5JZXcAAPzZAQCgdLsxTvxEQ5rA bJNT8dXyJjU/b71disFxF+3hpOm1TgEAj8GXkkpknyFVtQFCx0HbvsdFOoEd2ZLE Z0sRpIrnFg/CwAEEEBYKAHMFgmH0CO8Dhf94CRD6lufoV6aU3kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfKHlEG6wiR11W6RKbOS8GE7QCA 49g36CG5cUFrZYxwWBYhBKzYDDHkn+r5qgfb2fqW5+hXppTeAACsgwD6At1Mo53R bURsXJfZFSd1oAsV0RCCxJHmRrrDS/nXtzYBAN9u8YWNO05iWoI0/zSjL19cfyKb tjiIn96mG7e4wWgJ =kftK -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u224-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 14AA 7B5B 7D90 88CB BD5F F8CB 95F3 4513 BA88 7EC0 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAGYrcOQV4O51BTSnUf4wmMEmgp64aE4hrIAn0 15ZbBRwAAP9ZBCg8YEApiV/CY8oramcUAnhvHN72Sxq6wRvnSTLnWQ3mwsALBB8W CgB9BYJh8/a6AwsJBwkQlfNFE7qIfsBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnhTLhbt5UsiW4twl+3oIe4opbnjlaMJx61oR0HJBO3bYD FQoIApsBAh4BFiEEFKp7W32QiMu9X/jLlfNFE7qIfsAAAK1jAQDH8ez0LDYM0ECl JHHWb2yW8J+D1a6t22CjTOgpdsxHlwD+MEdapfap3Yt4BTGOf5AAQw8fdgL5+VU8 WGyVFEo52gLNEjx1MjI0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EJXzRRO6iH7ARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZyAOdtpLGVc0MU4k8mTy86Nerc5BlLr7BWBgvoLpFPLaAxUKCAKZAQKbAQIeARYh BBSqe1t9kIjLvV/4y5XzRRO6iH7AAAB/nQEAyVDByWZxilOxuOKX9QmBBH3H7zQl b44A3eK6KFwIvaUBAPA6bJMmkXyHJysjIQ7U5Kjr+PLJbX5+M4ODGqlvlFYK =DHss -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u224.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAGYrcOQV4O51BTSnUf4wmMEmgp64aE4hrIAn0 15ZbBRzCwAsEHxYKAH0FgmHz9roDCwkHCRCV80UTuoh+wEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeFMuFu3lSyJbi3CX7egh7iilueOVow nHrWhHQckE7dtgMVCggCmwECHgEWIQQUqntbfZCIy71f+MuV80UTuoh+wAAArWMB AMfx7PQsNgzQQKUkcdZvbJbwn4PVrq3bYKNM6Cl2zEeXAP4wR1ql9qndi3gFMY5/ kABDDx92Avn5VTxYbJUUSjnaAs0SPHUyMjRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQlfNFE7qIfsBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnIA522ksZVzQxTiTyZPLzo16tzkGUuvsFYGC+gukU8toDFQoI ApkBApsBAh4BFiEEFKp7W32QiMu9X/jLlfNFE7qIfsAAAH+dAQDJUMHJZnGKU7G4 4pf1CYEEfcfvNCVvjgDd4rooXAi9pQEA8DpskyaRfIcnKyMhDtTkqOv48sltfn4z g4MaqW+UVgrCwAEEEBYKAHMFgmH0CO8Dhf94CRDbC4Jkvklld0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmchKmjmvRbY4Rx2MxhyqdX88Gih pJajnWeUp1h85kTtMhYhBPKkrjq8beBHXiK4NtsLgmS+SWV3AAAJ3QD/Sfs/95Q4 D26CFIrccHNe075wqkCY3+aY+W3IjBYZEyoA/0oNgHgKR0oDokxcPfq/xhRvsY87 /KrHjuqCwPJX4ssP =ebny -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u225-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 185A 81E4 5751 F632 2490 BE79 87DD CD2A 02E3 8D38 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAKqXKWnetWFSh3aoDkSwV2Xvj+x/DkqZB0VRO XBDaqBQAAQDCWVBuqRy4azww6rg6SJh1lkxW/49uZ0XdR7+jC2xiIQ6/wsALBB8W CgB9BYJh8/a6AwsJBwkQh93NKgLjjThHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn/dYTG5j2gaKVPURYjoWSg0J/aspzLhhYdpmW2UUypuQD FQoIApsBAh4BFiEEGFqB5FdR9jIkkL55h93NKgLjjTgAAImvAP9nSwTFm58NgBvL NZYu3USDiJ/jFRG+getnZ2jYmMpygQD9HdIgjFAfu8cAIWSWgw05NZkCNXKs9PL7 3569Z1EqrwLNEjx1MjI1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EIfdzSoC4404RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3QlZwAmSxwfApux1N6U9j/vVOtivVsN5Bc0Fmoj2PFRAxUKCAKZAQKbAQIeARYh BBhageRXUfYyJJC+eYfdzSoC4404AACA6QEAmKJa/e2mcyfyjJc4x22cEg+VI6tE m+vHyem5IGdz5NwBAJrEzlVSd0NiON0OjxKHEJzLmQY7fKMXzaZ0Eviged4D =5NRK -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u225.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAKqXKWnetWFSh3aoDkSwV2Xvj+x/DkqZB0VRO XBDaqBTCwAsEHxYKAH0FgmHz9roDCwkHCRCH3c0qAuONOEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf91hMbmPaBopU9RFiOhZKDQn9qynMu GFh2mZbZRTKm5AMVCggCmwECHgEWIQQYWoHkV1H2MiSQvnmH3c0qAuONOAAAia8A /2dLBMWbnw2AG8s1li7dRIOIn+MVEb6B62dnaNiYynKBAP0d0iCMUB+7xwAhZJaD DTk1mQI1cqz08vvfnr1nUSqvAs0SPHUyMjVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQh93NKgLjjThHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JndCVnACZLHB8Cm7HU3pT2P+9U62K9Ww3kFzQWaiPY8VEDFQoI ApkBApsBAh4BFiEEGFqB5FdR9jIkkL55h93NKgLjjTgAAIDpAQCYolr97aZzJ/KM lzjHbZwSD5Ujq0Sb68fJ6bkgZ3Pk3AEAmsTOVVJ3Q2I43Q6PEocQnMuZBjt8oxfN pnQS+KB53gPCwAEEEBYKAHMFgmH0CO8Dhf94CRCV80UTuoh+wEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd2TSxfQR6k+on0LohnPB7+kgrz n3eVJ8VAPvocSSgwchYhBBSqe1t9kIjLvV/4y5XzRRO6iH7AAAC8cgD/XWIwcMtC RKKfw6OMSOwYFpoMC/WDT3ntXEmaCBDxazEBAJUc03q3k0YiUOoINbMVs3kg43VW 2t+mRSBKxrb4BgUB =YM6i -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u226-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BFCC 758F 6B56 7FF4 8980 1B53 9ED7 0790 2064 CF71 Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdAtXXffNTiZje0M6mm7L3u9X2Lbgnogt+MfMgL tpVJs38AAP0bonTFq8MzOeyrArSoy2wnsV1Pqe7UFZ0Pbu5wNshwBBDnwsALBB8W CgB9BYJh8/a6AwsJBwkQntcHkCBkz3FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn0yxgg4IxyjjlYWOtTRr1KC2GopO5RZk4L+PTArfPDacD FQoIApsBAh4BFiEEv8x1j2tWf/SJgBtTntcHkCBkz3EAACRJAP9tTFwOUbAHyhnF ex1CSP1aMubbJeDrI8l2TC/6OIV9UwEA/RpMLunrlkhzeVsmGlKUcPP+tkL6nnNo 2q5XGui1TADNEjx1MjI2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EJ7XB5AgZM9xRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7t8w8ju3iC2nsEv3tXa61jqYaPz5V+9dU46gkRwoQeTAxUKCAKZAQKbAQIeARYh BL/MdY9rVn/0iYAbU57XB5AgZM9xAACEPgEA2v2anBmsj6FW7ZBvrAtAMVsPFi+g JpyhYq/ye+WgmvkBAJ+bgDonKOB0b7VJySA6UvLqoSpHiQ5dgGDRGyONCE0E =5GVd -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u226.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdAtXXffNTiZje0M6mm7L3u9X2Lbgnogt+MfMgL tpVJs3/CwAsEHxYKAH0FgmHz9roDCwkHCRCe1weQIGTPcUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfTLGCDgjHKOOVhY61NGvUoLYaik7lF mTgv49MCt88NpwMVCggCmwECHgEWIQS/zHWPa1Z/9ImAG1Oe1weQIGTPcQAAJEkA /21MXA5RsAfKGcV7HUJI/Voy5tsl4OsjyXZML/o4hX1TAQD9Gkwu6euWSHN5WyYa UpRw8/62Qvqec2jarlca6LVMAM0SPHUyMjZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQntcHkCBkz3FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnu3zDyO7eILaewS/e1drrWOpho/PlX711TjqCRHChB5MDFQoI ApkBApsBAh4BFiEEv8x1j2tWf/SJgBtTntcHkCBkz3EAAIQ+AQDa/ZqcGayPoVbt kG+sC0AxWw8WL6AmnKFir/J75aCa+QEAn5uAOico4HRvtUnJIDpS8uqhKkeJDl2A YNEbI40ITQTCwAEEEBYKAHMFgmH0CO8Dhf94CRCH3c0qAuONOEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmefi4j9WK6yQGaaNBcuZg+WX4Vl 6+q/krjYiU/GbSxbWRYhBBhageRXUfYyJJC+eYfdzSoC4404AACWdQD/ScMpsl7Y 5wGN2TY36wI3e10BFVMRyma1XuFo7sVRqV0A/1koeb1B2A+0xJ+PG9lePkb8n1xn POnY3BRomdepe24K =JR7Q -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u227-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6F80 DC80 D1F4 C148 1075 0CAF 51FA B910 F100 F6AB Comment: xVgEYfP2uhYJKwYBBAHaRw8BAQdA6dTvB2za99hbkHbqdJQYcJG13P9mB77ax+ns IO4NpFEAAQCLsNZmOrEJOtdfMZS768Y4u4tV2yi2wGDS7zeh53Z6YxGMwsALBB8W CgB9BYJh8/a6AwsJBwkQUfq5EPEA9qtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnXSGV/J2NeInkg60u/yU989dJ8auXImvtZmYSefdeZUcD FQoIApsBAh4BFiEEb4DcgNH0wUgQdQyvUfq5EPEA9qsAAK8IAP9jUmWG4vs+ma4l 99eN8+5I1tNHSqvrE38t/Wu3JS5n1AEA9hkRHuD6KyUCYQChpGYWr8rCWPCWBYaH Gw58YDkNjAPNEjx1MjI3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJ EFH6uRDxAParRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4iGDtQeVmJqI5Hrzr246Q3iFRX4bHIe/XXgSA3cKsniAxUKCAKZAQKbAQIeARYh BG+A3IDR9MFIEHUMr1H6uRDxAParAAC6iQEA3SwuZ9n0srQihxgCaxhQ2YopmVY9 +N/xutK40t1+n7wBALIErD3l6M6c5EjgvJY9iG9O9wIEkRS9XMEupMJLbaED =Am/Y -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u227.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uhYJKwYBBAHaRw8BAQdA6dTvB2za99hbkHbqdJQYcJG13P9mB77ax+ns IO4NpFHCwAsEHxYKAH0FgmHz9roDCwkHCRBR+rkQ8QD2q0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmddIZX8nY14ieSDrS7/JT3z10nxq5ci a+1mZhJ5915lRwMVCggCmwECHgEWIQRvgNyA0fTBSBB1DK9R+rkQ8QD2qwAArwgA /2NSZYbi+z6ZriX3143z7kjW00dKq+sTfy39a7clLmfUAQD2GREe4PorJQJhAKGk ZhavysJY8JYFhocbDnxgOQ2MA80SPHUyMjdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a6AwsJBwkQUfq5EPEA9qtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JniIYO1B5WYmojkevOvbjpDeIVFfhsch79deBIDdwqyeIDFQoI ApkBApsBAh4BFiEEb4DcgNH0wUgQdQyvUfq5EPEA9qsAALqJAQDdLC5n2fSytCKH GAJrGFDZiimZVj343/G60rjS3X6fvAEAsgSsPeXozpzkSOC8lj2Ib073AgSRFL1c wS6kwkttoQPCwAEEEBYKAHMFgmH0CO8Dhf94CRCe1weQIGTPcUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcRBk44TbxpOK8HR2gfQneKjuwC aiiIvJ1mrvJEZmziShYhBL/MdY9rVn/0iYAbU57XB5AgZM9xAADMPwEA+zEoWx/+ N8G4Bsm+Nq6ZmIlysBq7CUAhrlyF4IC7jw8BANGn+Ldan353s7DaeMxjVlZIKRTX Uy1AudcLo/IvIm0O =jL3e -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u228-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D220 EB0F 833D B979 83F2 21D9 02D4 5679 E35E 555A Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAjBFwMXuapTh/ZD/IgmTEpgrobTgf51e5DIEo qgMjfRUAAQCS9efvrMBK3l959iQBPJ9mRRfulGMgsax7dOiVUL1n0BGUwsALBB8W CgB9BYJh8/a7AwsJBwkQAtRWeeNeVVpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnISSA8VoFELKJIIaZayT4RKETh+FIzewQ8rZwNSS3QkcD FQoIApsBAh4BFiEE0iDrD4M9uXmD8iHZAtRWeeNeVVoAAKdOAP4nKR0+YZRjVWnh gj2rBziRauwX1XJishnT7Qq26wJ+hQEA+HRSz9A/9vuPCLNZy7ygmi7xgyTlsute wHAZUWZHHgLNEjx1MjI4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EALUVnnjXlVaRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z827Gb5yx0cfOpYujPVaChibElO/bwqpABrPo4V/08KdAxUKCAKZAQKbAQIeARYh BNIg6w+DPbl5g/Ih2QLUVnnjXlVaAADPxQEAllFboiATJvFtDoCQbun9Kn5asR48 3gq/yrVpXey9CkUA/RjybSaKEnk5eQjbsTj2AQWT4pPiPxuliVbfqCUM3gwA =SALy -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u228.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAjBFwMXuapTh/ZD/IgmTEpgrobTgf51e5DIEo qgMjfRXCwAsEHxYKAH0FgmHz9rsDCwkHCRAC1FZ5415VWkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmchJIDxWgUQsokghplrJPhEoROH4UjN 7BDytnA1JLdCRwMVCggCmwECHgEWIQTSIOsPgz25eYPyIdkC1FZ5415VWgAAp04A /icpHT5hlGNVaeGCPasHOJFq7BfVcmKyGdPtCrbrAn6FAQD4dFLP0D/2+48Is1nL vKCaLvGDJOWy617AcBlRZkceAs0SPHUyMjhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQAtRWeeNeVVpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnzbsZvnLHRx86li6M9VoKGJsSU79vCqkAGs+jhX/Twp0DFQoI ApkBApsBAh4BFiEE0iDrD4M9uXmD8iHZAtRWeeNeVVoAAM/FAQCWUVuiIBMm8W0O gJBu6f0qflqxHjzeCr/KtWld7L0KRQD9GPJtJooSeTl5CNuxOPYBBZPik+I/G6WJ Vt+oJQzeDADCwAEEEBYKAHMFgmH0CO8Dhf94CRBR+rkQ8QD2q0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdsAv3wJfCmYwficQux+sHcByMA KjZZtfG51FKWBJAyHBYhBG+A3IDR9MFIEHUMr1H6uRDxAParAAASYgD+OctL9fIh 24kIesc6fdADB3a+JrlXyvWq4ylSC0ZpclYBAMW/Q644TCs3wEmJBQ7Cmu18ymjJ 1QKajcPoOUyk4vIC =M2jy -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u229-priv.pgp000064400000000000000000000015601046102023000222730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6F75 7C63 6ED4 E157 D6F6 570D BC03 D6A8 FCC6 CD68 Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdANtwKnH0dDbHc4IUUovREJDGm8RdvV8dxBDxN VuVKSQUAAQDtllQQbb4X4IC2p15urFMQnX+qTPN4P9qFgpwUz+F1hxC7wsALBB8W CgB9BYJh8/a7AwsJBwkQvAPWqPzGzWhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnmStoNR+U2cF2x1q9WHBXsdXlACDHwB5ZQyHOGdp/JKkD FQoIApsBAh4BFiEEb3V8Y27U4VfW9lcNvAPWqPzGzWgAAOjyAPsH4/WWsTPDuHQR TS+SjD4nVoKo7SKWjmXuKgCAL+Kd2QEAqSrSYa1NvtsLxg/aai1wG9hdBZwlIZDc cE0eUKKJtAbNEjx1MjI5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ ELwD1qj8xs1oRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z1YXZwIorqMnXJAHjmxY9dAKkZ4KDXnf7nIcgtCebOBiAxUKCAKZAQKbAQIeARYh BG91fGNu1OFX1vZXDbwD1qj8xs1oAAAc6AEA0izBWAtOXvpkKJfdME/dc4jWFbhI 2SCv8Z2KQzC7RvYBAK+G4QvCz8pvPQoRY0WZW7lUULnMeByvS3HcmYJUVD0C =UgGO -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u229.pgp000064400000000000000000000017561046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdANtwKnH0dDbHc4IUUovREJDGm8RdvV8dxBDxN VuVKSQXCwAsEHxYKAH0FgmHz9rsDCwkHCRC8A9ao/MbNaEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeZK2g1H5TZwXbHWr1YcFex1eUAIMfA HllDIc4Z2n8kqQMVCggCmwECHgEWIQRvdXxjbtThV9b2Vw28A9ao/MbNaAAA6PIA +wfj9ZaxM8O4dBFNL5KMPidWgqjtIpaOZe4qAIAv4p3ZAQCpKtJhrU2+2wvGD9pq LXAb2F0FnCUhkNxwTR5Qoom0Bs0SPHUyMjlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQvAPWqPzGzWhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnVhdnAiiuoydckAeObFj10AqRngoNed/uchyC0J5s4GIDFQoI ApkBApsBAh4BFiEEb3V8Y27U4VfW9lcNvAPWqPzGzWgAABzoAQDSLMFYC05e+mQo l90wT91ziNYVuEjZIK/xnYpDMLtG9gEAr4bhC8LPym89ChFjRZlbuVRQucx4HK9L cdyZglRUPQLCwAEEEBYKAHMFgmH0CO8Dhf94CRAC1FZ5415VWkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcGdWu+9O0gfnVxIV4KEZSQo+u1 yiNvW0d1/3lBITwP9hYhBNIg6w+DPbl5g/Ih2QLUVnnjXlVaAACGXgEAmMOfS/lo pgrF+n4eL0pCCL3q+XZwl8Zc5tRyl6U4HVABAJwG5lcVc17zrrgPt5JInanKzkQ6 OLqyWmpmAn8ZmWUA =KUtU -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u23-priv.pgp000064400000000000000000000015571046102023000222110ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D968 AFB7 EAF1 3E04 BB71 D961 00CC 5141 19C8 303E Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdA8Nch9+tpf0xaaVAq/VdNrGSvGvO6BeTkxcYh oMG+CN0AAP96n1DW9bYW9TdXS9efyAs/eUH/gYDSgvfthehcwGY1ixL2wsALBB8W CgB9BYJh8/awAwsJBwkQAMxRQRnIMD5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JntNafNVori5avleGowXaq4dmJfPUauMe3ATIcsCrLlx8D FQoIApsBAh4BFiEE2Wivt+rxPgS7cdlhAMxRQRnIMD4AAO/JAQCAEsYmgPUt4s13 KTnC7WVW3GoVIjxid6fRQoRlcHyUZAD/QKfT7h5YygYqp38aa8zol68c3a0F+Cto v39+5nCJCQfNETx1MjNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ AMxRQRnIMD5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn LegKetYPBnK0MBjQooycLFT+WWshloN/mxTkBHwCqnIDFQoIApkBApsBAh4BFiEE 2Wivt+rxPgS7cdlhAMxRQRnIMD4AAMXTAP4pOHr6ibOTsP+1YrziTCrAW5rlGs+z t8QyEMaRX+c8EAD+OTUYNXIugR956Zu118NjJSWi43Fv5VpbDt1YNJS6tww= =rz9P -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u23.pgp000064400000000000000000000017561046102023000212340ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdA8Nch9+tpf0xaaVAq/VdNrGSvGvO6BeTkxcYh oMG+CN3CwAsEHxYKAH0FgmHz9rADCwkHCRAAzFFBGcgwPkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme01p81WiuLlq+V4ajBdqrh2Yl89Rq4 x7cBMhywKsuXHwMVCggCmwECHgEWIQTZaK+36vE+BLtx2WEAzFFBGcgwPgAA78kB AIASxiaA9S3izXcpOcLtZVbcahUiPGJ3p9FChGVwfJRkAP9Ap9PuHljKBiqnfxpr zOiXrxzdrQX4K2i/f37mcIkJB80RPHUyM0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRAAzFFBGcgwPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmct6Ap61g8GcrQwGNCijJwsVP5ZayGWg3+bFOQEfAKqcgMVCggC mQECmwECHgEWIQTZaK+36vE+BLtx2WEAzFFBGcgwPgAAxdMA/ik4evqJs5Ow/7Vi vOJMKsBbmuUaz7O3xDIQxpFf5zwQAP45NRg1ci6BH3npm7XXw2MlJaLjcW/lWlsO 3Vg0lLq3DMLAAQQQFgoAcwWCYfQI5wOF/3gJEKJ8yNFhwPSKRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ93x40R2zW5XGMqvl9Rs9Q1+UX1L 7Zjrp2cvjf5B7T14FiEEqRXRuj8GbpibllrfonzI0WHA9IoAABSjAQDlBBiCXZDB cZzTL1Idvp6OLNJNs2P322FhmSpVg/YDCwEA9YLQdGlHdxv5yaVgEbBqsGsZYwFw VzUxH3ZCIxctfws= =caQd -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u230-priv.pgp000064400000000000000000000015601046102023000222630ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: C0C4 B2D2 9A88 A8F0 42FB 1342 2605 B329 0364 FF74 Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAP1s0/ni/X28+sxKsL9SFbF/2k8OJp/LHYB4j z++1hYAAAP9EbIpQ1Rik202o0xrSpZ2Dy48yrZbrMVQe5uvCZm/iGhIvwsALBB8W CgB9BYJh8/a7AwsJBwkQJgWzKQNk/3RHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn9jSI0PY+/7t/VjjkTNcei+xbEya9pakrqQjgAuPEca8D FQoIApsBAh4BFiEEwMSy0pqIqPBC+xNCJgWzKQNk/3QAAEYcAPsFVleVZTW0oh3u rOUju8lnnVPu6383cvqgUYGbYRidfgEAtzfeogAbmyixa5e6/vKYGi2Rtvztcsgz SowdIbr46wvNEjx1MjMwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ ECYFsykDZP90RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7MTG66tMLCYhNVjHfzCmLDYgrVg7alq2YU7FdsyCwX8AxUKCAKZAQKbAQIeARYh BMDEstKaiKjwQvsTQiYFsykDZP90AAAd6gEAq/tDJIezlRaB1RGNw1QblDJ4tPKK 7vOdWnfXxqPgmtcBAJPgCxxufWE52Q5cAUOoTfCENr0rm0dXEKD0eRLlPGsN =Oto1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u230.pgp000064400000000000000000000017561046102023000213140ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAP1s0/ni/X28+sxKsL9SFbF/2k8OJp/LHYB4j z++1hYDCwAsEHxYKAH0FgmHz9rsDCwkHCRAmBbMpA2T/dEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf2NIjQ9j7/u39WOORM1x6L7FsTJr2l qSupCOAC48RxrwMVCggCmwECHgEWIQTAxLLSmoio8EL7E0ImBbMpA2T/dAAARhwA +wVWV5VlNbSiHe6s5SO7yWedU+7rfzdy+qBRgZthGJ1+AQC3N96iABubKLFrl7r+ 8pgaLZG2/O1yyDNKjB0huvjrC80SPHUyMzBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQJgWzKQNk/3RHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnsxMbrq0wsJiE1WMd/MKYsNiCtWDtqWrZhTsV2zILBfwDFQoI ApkBApsBAh4BFiEEwMSy0pqIqPBC+xNCJgWzKQNk/3QAAB3qAQCr+0Mkh7OVFoHV EY3DVBuUMni08oru851ad9fGo+Ca1wEAk+ALHG59YTnZDlwBQ6hN8IQ2vSubR1cQ oPR5EuU8aw3CwAEEEBYKAHMFgmH0CO8Dhf94CRC8A9ao/MbNaEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf5uZd4s8I4FDZSKI6L7yIHsD94 dFY7fwVyVgWFfiUfJBYhBG91fGNu1OFX1vZXDbwD1qj8xs1oAACuOgEAoFz7vsPM TiN758esMTHPoo5Q1nhlWcWmfB+991w7VbgA/0OVjbQvDJbmRaG0f+iNKK7SQjgV JK1qBtiRYdv+DwkD =t7y2 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u231-priv.pgp000064400000000000000000000015601046102023000222640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 23EB A00A 8576 434A E4B0 77F9 819A 1B62 3B2E 138C Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAD1xWtehh29vV1tTN244aOy8UDFD+DEgyqdzQ Cekbl5IAAQCmGkw6cNfOTuF9XhBYcUkwke9T0ZkDNTxwNiSV3wjtGA20wsALBB8W CgB9BYJh8/a7AwsJBwkQgZobYjsuE4xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnSKiLtaP5iCYgzuqolfptyt1EUuVQoxPus+XuEKRCVYYD FQoIApsBAh4BFiEEI+ugCoV2Q0rksHf5gZobYjsuE4wAAJzDAP4gEdvg2lvar6iw HECpud31SPWckVhBzPBJ8qetNWza/wEA4DCs97ot7MzONEuIqcgWOJc5euRSrVnH OswXMZmLXwvNEjx1MjMxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EIGaG2I7LhOMRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2BpSIDG65UWL8m9w8M9dLmHfbyM08eQiwHIo3xiJgpIAxUKCAKZAQKbAQIeARYh BCProAqFdkNK5LB3+YGaG2I7LhOMAADkIwEA5dmVSwfigp2ensdssEiza5GK6wQ7 as4vD2iO2yDYvkMBALph+vH759xCEOJoTDGZOfxawBzn9ovJWpCop4gEBO4A =gL0W -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u231.pgp000064400000000000000000000017561046102023000213150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAD1xWtehh29vV1tTN244aOy8UDFD+DEgyqdzQ Cekbl5LCwAsEHxYKAH0FgmHz9rsDCwkHCRCBmhtiOy4TjEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdIqIu1o/mIJiDO6qiV+m3K3URS5VCj E+6z5e4QpEJVhgMVCggCmwECHgEWIQQj66AKhXZDSuSwd/mBmhtiOy4TjAAAnMMA /iAR2+DaW9qvqLAcQKm53fVI9ZyRWEHM8Enyp601bNr/AQDgMKz3ui3szM40S4ip yBY4lzl65FKtWcc6zBcxmYtfC80SPHUyMzFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQgZobYjsuE4xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnYGlIgMbrlRYvyb3Dwz10uYd9vIzTx5CLAcijfGImCkgDFQoI ApkBApsBAh4BFiEEI+ugCoV2Q0rksHf5gZobYjsuE4wAAOQjAQDl2ZVLB+KCnZ6e x2ywSLNrkYrrBDtqzi8PaI7bINi+QwEAumH68fvn3EIQ4mhMMZk5/FrAHOf2i8la kKiniAQE7gDCwAEEEBYKAHMFgmH0CO8Dhf94CRAmBbMpA2T/dEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmccE9vbWgkY7QeRKXy7a0BRLYD7 dfERH81AliePKPci0xYhBMDEstKaiKjwQvsTQiYFsykDZP90AABC7QD+LyV7dB47 qOvTZ+cZQBQrOGmEZTSD3UiYHdgEsqL8zKsBAKf8rF1PlpEfqNO/chuQKC/T0ipc NhQ6eCOwa8VCYUkF =5fjv -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u232-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 88C1 8A2D 5133 9461 068D DF72 6938 71FA F6FF C6FF Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAj5Cgskvo0ZCqGdZGml77z571DEeZXnu3u5sj n6a2Da4AAQConeNz/Kg7ElcpT8mK5gcOv5DtofN49kKXEOr6apXBsxIowsALBB8W CgB9BYJh8/a7AwsJBwkQaThx+vb/xv9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn4xQYuocQfdDAGxuldlq0zpqe5PeHHlyJAc0wg1GV6eMD FQoIApsBAh4BFiEEiMGKLVEzlGEGjd9yaThx+vb/xv8AADy/AQDY7VT9q93RMUqJ VM+gC3Xin8SUXNWL12c1sqeAxapEpgD+OHbTV2qpdaFJwNM2k6K/axYtZkiJ9YMT gMcpLBgkewvNEjx1MjMyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EGk4cfr2/8b/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z0LcEgJGQ246aZ+gQRyNlHMT0cNYVttPm+CcOyyEqpEaAxUKCAKZAQKbAQIeARYh BIjBii1RM5RhBo3fcmk4cfr2/8b/AAC1vAD8CWbEcC+VN1gjTxZr6SlOteJgmIA3 fl+V4am2l9s1shwA/RY/fnbCgtNOZMT2ETTw3kOPLBLJDpLmn1e4gqKFK2cA =kVm+ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u232.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAj5Cgskvo0ZCqGdZGml77z571DEeZXnu3u5sj n6a2Da7CwAsEHxYKAH0FgmHz9rsDCwkHCRBpOHH69v/G/0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfjFBi6hxB90MAbG6V2WrTOmp7k94ce XIkBzTCDUZXp4wMVCggCmwECHgEWIQSIwYotUTOUYQaN33JpOHH69v/G/wAAPL8B ANjtVP2r3dExSolUz6ALdeKfxJRc1YvXZzWyp4DFqkSmAP44dtNXaql1oUnA0zaT or9rFi1mSIn1gxOAxyksGCR7C80SPHUyMzJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQaThx+vb/xv9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnQtwSAkZDbjppn6BBHI2UcxPRw1hW20+b4Jw7LISqkRoDFQoI ApkBApsBAh4BFiEEiMGKLVEzlGEGjd9yaThx+vb/xv8AALW8APwJZsRwL5U3WCNP FmvpKU614mCYgDd+X5XhqbaX2zWyHAD9Fj9+dsKC005kxPYRNPDeQ48sEskOkuaf V7iCooUrZwDCwAEEEBYKAHMFgmH0CO8Dhf94CRCBmhtiOy4TjEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeiIKrjk6hm0ZIElYXhf/h8h+1g 1cOsG/IWi1MTq7Xt7BYhBCProAqFdkNK5LB3+YGaG2I7LhOMAAA7+QD+Ku28+7ZR ZLxyyzRBJPeMZeBrLgeq7U0MxXZnnDxC51MA/2uPop0pUZJq4hiHINYFyyCkcaHX w7/tQ2Bk/IVixXQN =WgpE -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u233-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CDA5 DE72 36C2 47F0 D116 CC0A 1A25 910D 0CD9 09C0 Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdALGFJQYgTD7bCNWMTXnOIL9sN9RN4LSeqOuQx mCCMAWAAAQCrWB5LXU0QSz6YwePx82Jw+33FxAPn8i0K6eI5p7Xc2hHMwsALBB8W CgB9BYJh8/a7AwsJBwkQGiWRDQzZCcBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJ2U5E4QbxxZuUN9BkS+n50+WyEB4jyZW4NPtaRftA+oD FQoIApsBAh4BFiEEzaXecjbCR/DRFswKGiWRDQzZCcAAAO3wAP44lC2jgIGQPa8Y hMpkO1Kk28USgPuxPfMmYCdXdumuLQEA7sDuFU1fNaE6/TuX2jKq+chrI0FyTNVY Uthl4/YBcgvNEjx1MjMzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EBolkQ0M2QnARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zw14LsoInl7bMvsyQaKSq1SrC4U38ZSe519/k1KJBGQVAxUKCAKZAQKbAQIeARYh BM2l3nI2wkfw0RbMCholkQ0M2QnAAABp7QD9EpsA8bDChpyzPoGMACOaOg6MjGV1 gWgKIKH9k7/fidcBAPSujL6ehWpB6A7F52XpBakq5nc2QvHzmwmpa5UPVosI =MC/1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u233.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdALGFJQYgTD7bCNWMTXnOIL9sN9RN4LSeqOuQx mCCMAWDCwAsEHxYKAH0FgmHz9rsDCwkHCRAaJZENDNkJwEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnZTkThBvHFm5Q30GRL6fnT5bIQHiP Jlbg0+1pF+0D6gMVCggCmwECHgEWIQTNpd5yNsJH8NEWzAoaJZENDNkJwAAA7fAA /jiULaOAgZA9rxiEymQ7UqTbxRKA+7E98yZgJ1d26a4tAQDuwO4VTV81oTr9O5fa Mqr5yGsjQXJM1VhS2GXj9gFyC80SPHUyMzNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQGiWRDQzZCcBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnDXguygieXtsy+zJBopKrVKsLhTfxlJ7nX3+TUokEZBUDFQoI ApkBApsBAh4BFiEEzaXecjbCR/DRFswKGiWRDQzZCcAAAGntAP0SmwDxsMKGnLM+ gYwAI5o6DoyMZXWBaAogof2Tv9+J1wEA9K6Mvp6FakHoDsXnZekFqSrmdzZC8fOb CalrlQ9WiwjCwAEEEBYKAHMFgmH0CO8Dhf94CRBpOHH69v/G/0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcFeM6rPmJ/cQ7pvPKbZg2b2XMX PJzJ9CU78j8lFH0SfhYhBIjBii1RM5RhBo3fcmk4cfr2/8b/AAAdCgD+NiiqDFFp bMzzgslFFWlReASVAcXl/DRe022cg+BZPr0A/RrAV7+WRjgQYZ8m7hZuHEnWOR05 lTLxsiSONXxu/xoG =W+WL -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u234-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E405 0602 28D4 9BA4 3C6E D9A3 E25A DFDC C001 2F48 Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAbn/m6rfPhzliBGcrK3rtOqZwQCwJOD2c111q RN/Q7h4AAQDFCSeWVVtja+tq7Kry642XyWL6I0CJBJStwn8Rtpie1hFgwsALBB8W CgB9BYJh8/a7AwsJBwkQ4lrf3MABL0hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnucCWihp/vzWvP+M2nOpH/RKVBXwL3h+OYKQBZUdycroD FQoIApsBAh4BFiEE5AUGAijUm6Q8btmj4lrf3MABL0gAAJKPAP92AsbVKXdI/b3T t/Kbxln+BCXo/BuSSDsC6Jj6+Fh/AAEAszjOgA4NQXiFVUywz4ShrZQd4ns1+QDU bMaKgqtMoQ3NEjx1MjM0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EOJa39zAAS9IRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3d/lgVsACgEYJl8cXjpnhrCkPu2CM7drsT7vukOFPp/AxUKCAKZAQKbAQIeARYh BOQFBgIo1JukPG7Zo+Ja39zAAS9IAADTAQD5AdLsiiw8LPeYPLk1kiUeFC4vveAA Xo/F1yEvLW0U66YBAJN1N8h3Mxai15JVMHJkKh3P3f7wEgYq2SbWSX46liMK =NkJK -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u234.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAbn/m6rfPhzliBGcrK3rtOqZwQCwJOD2c111q RN/Q7h7CwAsEHxYKAH0FgmHz9rsDCwkHCRDiWt/cwAEvSEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme5wJaKGn+/Na8/4zac6kf9EpUFfAve H45gpAFlR3JyugMVCggCmwECHgEWIQTkBQYCKNSbpDxu2aPiWt/cwAEvSAAAko8A /3YCxtUpd0j9vdO38pvGWf4EJej8G5JIOwLomPr4WH8AAQCzOM6ADg1BeIVVTLDP hKGtlB3iezX5ANRsxoqCq0yhDc0SPHUyMzRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQ4lrf3MABL0hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnd3+WBWwAKARgmXxxeOmeGsKQ+7YIzt2uxPu+6Q4U+n8DFQoI ApkBApsBAh4BFiEE5AUGAijUm6Q8btmj4lrf3MABL0gAANMBAPkB0uyKLDws95g8 uTWSJR4ULi+94ABej8XXIS8tbRTrpgEAk3U3yHczFqLXklUwcmQqHc/d/vASBirZ JtZJfjqWIwrCwAEEEBYKAHMFgmH0CO8Dhf94CRAaJZENDNkJwEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcYeJyC6gfpHOwkRDRzH3zeNGA0 EX14TkjwOvvTIxlNKBYhBM2l3nI2wkfw0RbMCholkQ0M2QnAAADxCQEAwAgisylq DVcMe2By8NFMDLbQ5NovDcXHnm6uEVPkTiMBAM/UBMvUaiI3wcDG9NFwogKnDLCU y5eN2CrWxwt8SEQJ =BXGo -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u235-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 575D B527 D78D 5A06 3AB4 1978 91DB 2946 F8EE 3A8C Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAZf/zLU3y/P+ju/hkMj9/+NOumTcDlWA/38aH nq5xPm0AAP9cTUmUMlHcVotpHMpujr8D8UrB3sm7ZKc8TRPD75g/mBD4wsALBB8W CgB9BYJh8/a7AwsJBwkQkdspRvjuOoxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnl/oqAn1FI2MZzt8Wew0TibSrecCnLf5z4hVF+hyys3wD FQoIApsBAh4BFiEEV121J9eNWgY6tBl4kdspRvjuOowAAEOIAP99QUZuJm1l57NQ LvG1ok/p8BtUoTeoxsN83KXXA1f8zQEAjzgxaxiFdrD4lJa0XWkbirIMELtQqj3p K/jKO5QWZgDNEjx1MjM1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EJHbKUb47jqMRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZznGHrHjBwtkJn58+XBs4d3N+7KZSGSVWzThgmXYKEdcAxUKCAKZAQKbAQIeARYh BFddtSfXjVoGOrQZeJHbKUb47jqMAABAygEA2yhNn5OzCMcXrYIhL8wSsfN/6mwT byw3yltVjS9qz98A/jaDl+WuxrBa6dnHB615/YTOtLWKG3EiYzTUNq7I3owO =2LRM -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u235.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAZf/zLU3y/P+ju/hkMj9/+NOumTcDlWA/38aH nq5xPm3CwAsEHxYKAH0FgmHz9rsDCwkHCRCR2ylG+O46jEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeX+ioCfUUjYxnO3xZ7DROJtKt5wKct /nPiFUX6HLKzfAMVCggCmwECHgEWIQRXXbUn141aBjq0GXiR2ylG+O46jAAAQ4gA /31BRm4mbWXns1Au8bWiT+nwG1ShN6jGw3zcpdcDV/zNAQCPODFrGIV2sPiUlrRd aRuKsgwQu1CqPekr+Mo7lBZmAM0SPHUyMzVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQkdspRvjuOoxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnOcYeseMHC2Qmfnz5cGzh3c37splIZJVbNOGCZdgoR1wDFQoI ApkBApsBAh4BFiEEV121J9eNWgY6tBl4kdspRvjuOowAAEDKAQDbKE2fk7MIxxet giEvzBKx83/qbBNvLDfKW1WNL2rP3wD+NoOX5a7GsFrp2ccHrXn9hM60tYobcSJj NNQ2rsjejA7CwAEEEBYKAHMFgmH0CO8Dhf94CRDiWt/cwAEvSEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmefK51rQhgubywhP7T7nDmXKF9E Qr9jhqN/yk29OKBP8hYhBOQFBgIo1JukPG7Zo+Ja39zAAS9IAACdSAEAzDFRzDlV KU+5oczAfcdfJGifDHy+7A3alfWnpszZg6sA/3mJDSYjgj6S0+lsa5VXZfo6LybC 6OS5FYD+dZv4uWoF =EjRk -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u236-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D4BB E60F CA2F C785 0FF7 3091 02DE F04D 111B A114 Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAmTcIBsijXrFiHOrxi6pg8xjFDWVfBVowQozl GIVb1zkAAQDRYPnC1yMRKQWWkvVUXBkpHfM2P4IfzDVJsQ/mBQtudw1AwsALBB8W CgB9BYJh8/a7AwsJBwkQAt7wTREboRRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn+hcMak9bD6cQMDRUESJ6rpLcEsHJBMior5VIgmgGKrQD FQoIApsBAh4BFiEE1LvmD8ovx4UP9zCRAt7wTREboRQAAJ9OAP4syJYNTcWFkhOk NX/qJoGiVxQvJSJQ3SDvV8YekJdq4wEAxGw1rCmYdGKW5ftP/FWGHiHwwQL7LYKk b8FqOmtI2AjNEjx1MjM2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EALe8E0RG6EURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZxrhqR7n/7nSRm0r7aRTnr1CgZW7fnJ85A4gD2FBaNpZAxUKCAKZAQKbAQIeARYh BNS75g/KL8eFD/cwkQLe8E0RG6EUAADFhgEAuJElxwQY92grcvyizFfRG5uwqv43 6OEiqdKlYJTUoE4A/18QDhNlLHqVD4k12wYAdzjtxGDcMNDsd7O1FTCMHK0H =LDZT -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u236.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAmTcIBsijXrFiHOrxi6pg8xjFDWVfBVowQozl GIVb1znCwAsEHxYKAH0FgmHz9rsDCwkHCRAC3vBNERuhFEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf6FwxqT1sPpxAwNFQRInquktwSwckE yKivlUiCaAYqtAMVCggCmwECHgEWIQTUu+YPyi/HhQ/3MJEC3vBNERuhFAAAn04A /izIlg1NxYWSE6Q1f+omgaJXFC8lIlDdIO9Xxh6Ql2rjAQDEbDWsKZh0Ypbl+0/8 VYYeIfDBAvstgqRvwWo6a0jYCM0SPHUyMzZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQAt7wTREboRRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnGuGpHuf/udJGbSvtpFOevUKBlbt+cnzkDiAPYUFo2lkDFQoI ApkBApsBAh4BFiEE1LvmD8ovx4UP9zCRAt7wTREboRQAAMWGAQC4kSXHBBj3aCty /KLMV9Ebm7Cq/jfo4SKp0qVglNSgTgD/XxAOE2UsepUPiTXbBgB3OO3EYNww0Ox3 s7UVMIwcrQfCwAEEEBYKAHMFgmH0CO8Dhf94CRCR2ylG+O46jEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfvjjkaUTwmTkPIfLSJIWy5T6tc SpuFBRST1EwsnrjTixYhBFddtSfXjVoGOrQZeJHbKUb47jqMAABf+QEAoqsUuPui Qk/v42MGWwOqJxVQcSn9XVcPapSUl5M9GnsBAPH6wn7VJp9VqprAM885Zl8Ivm6I mHjIV1E4YkCx5v8E =NatH -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u237-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9779 4BE1 FD57 2947 0D04 9D86 BE16 BB8E 38D6 D8EB Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdA0LZdnNzisO95e9GzxTeo9OE+0+YAyAHm6og2 np5FPWsAAQD5ejXRHQpmzPAsctJNPTMaRVlDCbarJUtBWADBQ/PWXQ2IwsALBB8W CgB9BYJh8/a7AwsJBwkQvha7jjjW2OtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnLTGhGqcHLNLtonwVFRds6Z+CXpGLpLq5Be6jlZ4xXkwD FQoIApsBAh4BFiEEl3lL4f1XKUcNBJ2Gvha7jjjW2OsAAGHAAP43i0Xkl5tZ+1Se uaGmSN+KM5mjHpv+d+9Zz6HxfnQW5gD7BJ5EIS4vHK65diewLQzPm+tKSxhVkIOO A2CyKEyfHwPNEjx1MjM3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EL4Wu4441tjrRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z8uZHL1yeYmq2HzQSQBzosMO9Dy6e/OACqvCoqLFVL+AAxUKCAKZAQKbAQIeARYh BJd5S+H9VylHDQSdhr4Wu4441tjrAAAlbAEAnTrDaD4ZsyOYQrPxtIpD8tQBi5Aq 3R1r5CotY9XMyw0BAPU60me0pMJMwE28XuXNHUpmhI99lBY73zvyx3A47EYD =kooc -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u237.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdA0LZdnNzisO95e9GzxTeo9OE+0+YAyAHm6og2 np5FPWvCwAsEHxYKAH0FgmHz9rsDCwkHCRC+FruOONbY60cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmctMaEapwcs0u2ifBUVF2zpn4JekYuk urkF7qOVnjFeTAMVCggCmwECHgEWIQSXeUvh/VcpRw0EnYa+FruOONbY6wAAYcAA /jeLReSXm1n7VJ65oaZI34ozmaMem/5371nPofF+dBbmAPsEnkQhLi8crrl2J7At DM+b60pLGFWQg44DYLIoTJ8fA80SPHUyMzdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQvha7jjjW2OtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jny5kcvXJ5iarYfNBJAHOiww70PLp784AKq8KiosVUv4ADFQoI ApkBApsBAh4BFiEEl3lL4f1XKUcNBJ2Gvha7jjjW2OsAACVsAQCdOsNoPhmzI5hC s/G0ikPy1AGLkCrdHWvkKi1j1czLDQEA9TrSZ7SkwkzATbxe5c0dSmaEj32UFjvf O/LHcDjsRgPCwAEEEBYKAHMFgmH0CO8Dhf94CRAC3vBNERuhFEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfXTWFLwgRN5MLQq6+FYTnPynh/ FlbavRAjl9yFJp6PYxYhBNS75g/KL8eFD/cwkQLe8E0RG6EUAAA5wgEA27NX4iLM W7/Wfnx10oWLGL2Kzj8eEsiTFt0qP0zymc8A/RR04jCoHHAgd7CWy9zfv0w/fL7H ihgBas17x4gYLUcC =7iBv -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u238-priv.pgp000064400000000000000000000015601046102023000222730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4C01 1F0F 9E4C 5802 2DBD 2E1F AA54 9F08 6FB7 7001 Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAq/VyJVxGuCe2VgiQ9R2AdjgrdHcAkFfvRfEI vGK2FQsAAP9nhiZtHahZ5cqiOS7hjQTWEexL2bXzulFJfMjJ6EcRwhHJwsALBB8W CgB9BYJh8/a7AwsJBwkQqlSfCG+3cAFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn5P1PfWKruQj+TRs3X453sxkq7uIVXO6chyMWnQroA34D FQoIApsBAh4BFiEETAEfD55MWAItvS4fqlSfCG+3cAEAAE4+AQDSlxDcXepzMDqr haOdpWS5XWFszbj1UvFQS9+3tVQaEQEA/in04VoQ4nQG1ECs3YrPgIq+ULz5l5Vk yAwzA5SF6AbNEjx1MjM4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EKpUnwhvt3ABRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4k9e4zA31/Um/okA8U2rVmjKFkCxlJ2d+//gVLijmrIAxUKCAKZAQKbAQIeARYh BEwBHw+eTFgCLb0uH6pUnwhvt3ABAAAWIQEAkClKT1mOH18REiynBIPsd0aP06vC uwWYtzsX96kX9H8A/2VFsFIl/60qUluaN8au1ujhCOfL/OMC3yJ3Uii1GO8L =7Aqe -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u238.pgp000064400000000000000000000017561046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAq/VyJVxGuCe2VgiQ9R2AdjgrdHcAkFfvRfEI vGK2FQvCwAsEHxYKAH0FgmHz9rsDCwkHCRCqVJ8Ib7dwAUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfk/U99Yqu5CP5NGzdfjnezGSru4hVc 7pyHIxadCugDfgMVCggCmwECHgEWIQRMAR8PnkxYAi29Lh+qVJ8Ib7dwAQAATj4B ANKXENxd6nMwOquFo52lZLldYWzNuPVS8VBL37e1VBoRAQD+KfThWhDidAbUQKzd is+Air5QvPmXlWTIDDMDlIXoBs0SPHUyMzhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQqlSfCG+3cAFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JniT17jMDfX9Sb+iQDxTatWaMoWQLGUnZ37/+BUuKOasgDFQoI ApkBApsBAh4BFiEETAEfD55MWAItvS4fqlSfCG+3cAEAABYhAQCQKUpPWY4fXxES LKcEg+x3Ro/Tq8K7BZi3Oxf3qRf0fwD/ZUWwUiX/rSpSW5o3xq7W6OEI58v84wLf IndSKLUY7wvCwAEEEBYKAHMFgmH0CO8Dhf94CRC+FruOONbY60cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdNuiy11HbeFYzd7r6Zh1iI4ZRD 8KleqiZDAL9xs0PaMRYhBJd5S+H9VylHDQSdhr4Wu4441tjrAABJ8wD/SkvpLpVV VZHSYFlVShbbUgM6zZZPRQyuzG6h5EwIulkA/jORhP2Mf6zEdsYoQx6fB1dByQJF dByScFMfSzRGTnIM =a4T4 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u239-priv.pgp000064400000000000000000000015601046102023000222740ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 950D 06C5 3390 F94A F59A 1560 9900 DA7A 91A6 38CF Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdA3PokJXaqw6e3rHdLGvzqTm5r7DjXAm/UoTWA MS8ZsbMAAQCPSCunf6l26g/kFdEDKSgl28WXvT98gRHg6l7RSuK2MQ/RwsALBB8W CgB9BYJh8/a7AwsJBwkQmQDaepGmOM9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JndWahe//++ViyZClOOdnB9DovLlEuC7s1Me5iRpKp75MD FQoIApsBAh4BFiEElQ0GxTOQ+Ur1mhVgmQDaepGmOM8AAHa7AQDsb3aDjOOmJo7c Za5ywJ33hCgXAx2X4a96K44Rb2QwKAEAlsz/JZv9bWymA+rSBP/A7gREnDXe9/nu UmEJS2apKQvNEjx1MjM5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EJkA2nqRpjjPRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z77W1EyfADGXZA5fxcf5doK27YQpFGlRFFEEoEtVCLvwAxUKCAKZAQKbAQIeARYh BJUNBsUzkPlK9ZoVYJkA2nqRpjjPAADSKwD/RKT9Ik/PMiIH1NZqK8KKL/ITdY9A dGh2kqmgkWoSeKsBALgQwjOvwAu2aBLP1Q8vJs8Ffu1fb6qJHRmjjee2rOQO =LKga -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u239.pgp000064400000000000000000000017561046102023000213250ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdA3PokJXaqw6e3rHdLGvzqTm5r7DjXAm/UoTWA MS8ZsbPCwAsEHxYKAH0FgmHz9rsDCwkHCRCZANp6kaY4z0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd1ZqF7//75WLJkKU452cH0Oi8uUS4L uzUx7mJGkqnvkwMVCggCmwECHgEWIQSVDQbFM5D5SvWaFWCZANp6kaY4zwAAdrsB AOxvdoOM46YmjtxlrnLAnfeEKBcDHZfhr3orjhFvZDAoAQCWzP8lm/1tbKYD6tIE /8DuBEScNd73+e5SYQlLZqkpC80SPHUyMzlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQmQDaepGmOM9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnvtbUTJ8AMZdkDl/Fx/l2grbthCkUaVEUUQSgS1UIu/ADFQoI ApkBApsBAh4BFiEElQ0GxTOQ+Ur1mhVgmQDaepGmOM8AANIrAP9EpP0iT88yIgfU 1morwoov8hN1j0B0aHaSqaCRahJ4qwEAuBDCM6/AC7ZoEs/VDy8mzwV+7V9vqokd GaON57as5A7CwAEEEBYKAHMFgmH0CO8Dhf94CRCqVJ8Ib7dwAUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcOiKj6HP8bNojFgLTWWzD7AWS1 DdtrpAnZ7F95oQrsXhYhBEwBHw+eTFgCLb0uH6pUnwhvt3ABAACadQEA0R1Ehxua fY93cXHPJRfNh2EFIM2MQTzOejzd6BhFWqABAK6nbD2tILjAnIXZRbpVgfQsLhpv m4UfHxedNCqMLbwM =pqU4 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u24-priv.pgp000064400000000000000000000015571046102023000222120ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A62F 988F 2896 A028 6F92 F8B8 201E 7737 D11D 7039 Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAwnAuSI5x7GL+3EYKQdCNU2v/R/YJqRjwWv1W XngUHdoAAP0UYZ92/+V4QpWDSvunSKR7z6rudLc5EWJTP0hYZaCYChCnwsALBB8W CgB9BYJh8/awAwsJBwkQIB53N9EdcDlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnlBQxXJRR/VLamLJDbWk1oh1RYyDZ4Lf5WNo0XO67b9AD FQoIApsBAh4BFiEEpi+YjyiWoChvkvi4IB53N9EdcDkAAKEWAP92f5U/y34E8uac 8Otz97afZCCu1113WnHh2ovyBq0YrQD8D+8q9XJzkvgGbG58vQsO3Fhl/kT3PV8m K8OoMx6c1QfNETx1MjRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ IB53N9EdcDlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn R3nwESebkMw/YHvonaZMfwNrIRlUxiQYPMT/iZNFO0UDFQoIApkBApsBAh4BFiEE pi+YjyiWoChvkvi4IB53N9EdcDkAADHPAQDTs0rIgzJgog/vz95LRw8oEPoE8NQO cwfgj9NevQv8YwEA7sp1EUGjjZ1k+nDqNNoxLsZ8y/M+2NB9qXmxgZwHOgQ= =oTIl -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u24.pgp000064400000000000000000000017561046102023000212350ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAwnAuSI5x7GL+3EYKQdCNU2v/R/YJqRjwWv1W XngUHdrCwAsEHxYKAH0FgmHz9rADCwkHCRAgHnc30R1wOUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeUFDFclFH9UtqYskNtaTWiHVFjINng t/lY2jRc7rtv0AMVCggCmwECHgEWIQSmL5iPKJagKG+S+LggHnc30R1wOQAAoRYA /3Z/lT/LfgTy5pzw63P3tp9kIK7XXXdaceHai/IGrRitAPwP7yr1cnOS+AZsbny9 Cw7cWGX+RPc9XyYrw6gzHpzVB80RPHUyNEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRAgHnc30R1wOUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdHefARJ5uQzD9ge+idpkx/A2shGVTGJBg8xP+Jk0U7RQMVCggC mQECmwECHgEWIQSmL5iPKJagKG+S+LggHnc30R1wOQAAMc8BANOzSsiDMmCiD+/P 3ktHDygQ+gTw1A5zB+CP0169C/xjAQDuynURQaONnWT6cOo02jEuxnzL8z7Y0H2p ebGBnAc6BMLAAQQQFgoAcwWCYfQI5wOF/3gJEADMUUEZyDA+RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzGl6LGCPvEIsYX1tmo6irr0BgPA cM+X79dSqEoNyNboFiEE2Wivt+rxPgS7cdlhAMxRQRnIMD4AAMGSAP9rc4AZ9kcl 0YTGbyU9UVXxEHZgbx4o7iC5toHhpaNMbQD9G8CwoqAMnte+2umdgCWKRaLKqo/a BI80uPrAFU2h/wk= =CbE3 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u240-priv.pgp000064400000000000000000000015601046102023000222640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 013B 231F 139A 4631 2550 BBCB C524 51FD B722 85FC Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAOtq5Fm81UnQCSYsPs0I9rSEIGSpAhKj131rL O05jA0oAAP9ZB+4OF2mkuIx8sW7wEfvlufyXHOoxM3zdHZni5cG1RxKIwsALBB8W CgB9BYJh8/a7AwsJBwkQxSRR/bcihfxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn34oG/TW1o/3zdS/mFFkuKwbeJUqfZ+GKlz8XKy/N2E0D FQoIApsBAh4BFiEEATsjHxOaRjElULvLxSRR/bcihfwAAJ4qAQDFabf6v8R2ZT42 S5JSHIv9HnbV5LS5BqN0ciYtquft1AEAvO2xVJKYFDLaZInGbV+smA+a92TyUSSN tcx7Dn1biwHNEjx1MjQwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EMUkUf23IoX8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zxhcx5lL6pAiGLhgQYv34DvAIO97pxqsnjKm6tRlo/JiAxUKCAKZAQKbAQIeARYh BAE7Ix8TmkYxJVC7y8UkUf23IoX8AAA/OQEA4vXLFrBXnSa2jDFIbwSU7a1uC1If n6I6yzdGgXkmPkcA/22C0nzU5UAPt9BerzZ8ce6coJlmTu5zsX//LpMKoxkB =zBuE -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u240.pgp000064400000000000000000000017561046102023000213150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAOtq5Fm81UnQCSYsPs0I9rSEIGSpAhKj131rL O05jA0rCwAsEHxYKAH0FgmHz9rsDCwkHCRDFJFH9tyKF/EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmffigb9NbWj/fN1L+YUWS4rBt4lSp9n 4YqXPxcrL83YTQMVCggCmwECHgEWIQQBOyMfE5pGMSVQu8vFJFH9tyKF/AAAnioB AMVpt/q/xHZlPjZLklIci/0edtXktLkGo3RyJi2q5+3UAQC87bFUkpgUMtpkicZt X6yYD5r3ZPJRJI21zHsOfVuLAc0SPHUyNDBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQxSRR/bcihfxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnGFzHmUvqkCIYuGBBi/fgO8Ag73unGqyeMqbq1GWj8mIDFQoI ApkBApsBAh4BFiEEATsjHxOaRjElULvLxSRR/bcihfwAAD85AQDi9csWsFedJraM MUhvBJTtrW4LUh+fojrLN0aBeSY+RwD/bYLSfNTlQA+30F6vNnxx7pygmWZO7nOx f/8ukwqjGQHCwAEEEBYKAHMFgmH0CO8Dhf94CRCZANp6kaY4z0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfnaQMEr3gMAJMmbfajhjWW7XtK I74Lq7N9oNZOc32PdxYhBJUNBsUzkPlK9ZoVYJkA2nqRpjjPAAAvEQEA/EMc6+5L 9xarCHYc4POU+vjnsxEgNS2YCzzXGFYazp4BAOsx+KsivxdkBdto1+r8Ub1zjKjz FT13YhPqUi1pJF4I =lQMK -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u241-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A814 BA23 7B27 B460 5C71 A907 B8A8 D55F C49C B5E6 Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAjdDeamrDnelVQOIGtS6TM2z+Oe+0q1WjOOGK YkUMd1IAAQC9irfys2+DNM/9pLu5EnHiQcpX+iaVRWudgBYAil5sjRDuwsALBB8W CgB9BYJh8/a7AwsJBwkQuKjVX8ScteZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnaN5jczpaxpQzAFFcCVTcW2EVPIuvieU98UKY+0Sz1XQD FQoIApsBAh4BFiEEqBS6I3sntGBccakHuKjVX8ScteYAAK/VAP44kPuVity6zgUv rBuz+VCIwXGQ/n/MkoIFIl+HLaUEJQEA13tMIua1/FmDrHfa+y4lKlM+KzKQgd0e M5/rxnabxgvNEjx1MjQxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ ELio1V/EnLXmRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z1rmz4JoUpVnz+xU/Uoees9sQIQ+erLjckmdlQLK3XekAxUKCAKZAQKbAQIeARYh BKgUuiN7J7RgXHGpB7io1V/EnLXmAADfFAD9E/bPXtJM1MNZVmDKWhancL5CN0Iu rZYLS8NzTarVNgcBAPrbX3eVxtP7LLuPm9hqrARdeMiBuVDsLElwNBCLdD8P =BHeK -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u241.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAjdDeamrDnelVQOIGtS6TM2z+Oe+0q1WjOOGK YkUMd1LCwAsEHxYKAH0FgmHz9rsDCwkHCRC4qNVfxJy15kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdo3mNzOlrGlDMAUVwJVNxbYRU8i6+J 5T3xQpj7RLPVdAMVCggCmwECHgEWIQSoFLojeye0YFxxqQe4qNVfxJy15gAAr9UA /jiQ+5WK3LrOBS+sG7P5UIjBcZD+f8ySggUiX4ctpQQlAQDXe0wi5rX8WYOsd9r7 LiUqUz4rMpCB3R4zn+vGdpvGC80SPHUyNDFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQuKjVX8ScteZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnWubPgmhSlWfP7FT9Sh56z2xAhD56suNySZ2VAsrdd6QDFQoI ApkBApsBAh4BFiEEqBS6I3sntGBccakHuKjVX8ScteYAAN8UAP0T9s9e0kzUw1lW YMpaFqdwvkI3Qi6tlgtLw3NNqtU2BwEA+ttfd5XG0/ssu4+b2GqsBF14yIG5UOws SXA0EIt0Pw/CwAEEEBYKAHMFgmH0CPADhf94CRDFJFH9tyKF/EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcLlbwinHsxEsymt8A8RfCqKzpn 2Rpi/NnSltTVpvl+txYhBAE7Ix8TmkYxJVC7y8UkUf23IoX8AAD0QgEA+ChqQ3SB lcqZdPOvulFRsiSoxLItfO3J01NFCxg3tbMBAN0ih3ClCg/8f2OLzmmazienVjV1 xbP8ovopsIGf16EF =N1z2 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u242-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A3AE 147D BC88 7FA3 2585 2A4D C3FF E143 772A 8587 Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdA+rb/+msQXOtF80nM1oW1L14yxhoUWzaIJFZ/ JtwtUQ0AAP9pIhu+7gxNyqUeZj5oky1Lk7gagMNqDNsWGQKylPH8Iw7OwsALBB8W CgB9BYJh8/a7AwsJBwkQw//hQ3cqhYdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnxEokaob0/rdhhX6+G2+H2D5voSeZlkjz7yhB++LBTLED FQoIApsBAh4BFiEEo64UfbyIf6MlhSpNw//hQ3cqhYcAAJ3JAP0dyqM5jaU1c6j1 fQvkth2gvnizvF47IwEmTIQWRGWw8wEAjVuJV/5rGiO4KhlRy+xoBrF+xlCscrGI dW87Sp4WSgHNEjx1MjQyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EMP/4UN3KoWHRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4cFXe4ZUY7kGCURuH4LrAYzH4XrnHsTSQTSUuT3qvhNAxUKCAKZAQKbAQIeARYh BKOuFH28iH+jJYUqTcP/4UN3KoWHAABoeQD9Hgh/OUg0sf4nobD3D2NpIZIwrpM/ VIlvisMIXTyaYscA/2um9N9MGt1Y6IcxkqJ5yht0pF9VGPcbrZcmS/xGmQsC =LVPA -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u242.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdA+rb/+msQXOtF80nM1oW1L14yxhoUWzaIJFZ/ JtwtUQ3CwAsEHxYKAH0FgmHz9rsDCwkHCRDD/+FDdyqFh0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfESiRqhvT+t2GFfr4bb4fYPm+hJ5mW SPPvKEH74sFMsQMVCggCmwECHgEWIQSjrhR9vIh/oyWFKk3D/+FDdyqFhwAAnckA /R3KozmNpTVzqPV9C+S2HaC+eLO8XjsjASZMhBZEZbDzAQCNW4lX/msaI7gqGVHL 7GgGsX7GUKxysYh1bztKnhZKAc0SPHUyNDJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQw//hQ3cqhYdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnhwVd7hlRjuQYJRG4fgusBjMfheucexNJBNJS5Peq+E0DFQoI ApkBApsBAh4BFiEEo64UfbyIf6MlhSpNw//hQ3cqhYcAAGh5AP0eCH85SDSx/ieh sPcPY2khkjCukz9UiW+KwwhdPJpixwD/a6b030wa3VjohzGSonnKG3SkX1UY9xut lyZL/EaZCwLCwAEEEBYKAHMFgmH0CPADhf94CRC4qNVfxJy15kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcMTO6qNBKOpP11a2uM9NRPWmxw KIL2ZcQfdlMn89T8zRYhBKgUuiN7J7RgXHGpB7io1V/EnLXmAAD+gwD/e//qoZAP cq9Eqavksid+Jr46I9CeLh44uGxYSmFd44oBAKVsPZT9/++RU6ziA5CI00+W1ZSA 2NEjxEUbN8LlQmsH =ycn0 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u243-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4D88 E9B3 14F4 ECAF 99E0 2611 C985 FD35 0408 C791 Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAr8Wy4w48Vi41mhbwxODlMQZNplGZWN/8x6ZT UMzsoCUAAQC51iJdkQgtr2YEExaTGE04+vMG5uS9psHHHbFLLafeew81wsALBB8W CgB9BYJh8/a7AwsJBwkQyYX9NQQIx5FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn+G63zNlFUv50aMMUFSWGbeHY00FyM4EGRM5aqZSaJMAD FQoIApsBAh4BFiEETYjpsxT07K+Z4CYRyYX9NQQIx5EAAGA4AP9kd0dedKBw+N80 vKM2u10y/Opn6CuZ5UYy6RPezrZQzgD/Sh8Xzqakvdaj1HOdvyGnh+MreHV7APjT sO1BMUTTBwbNEjx1MjQzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EMmF/TUECMeRRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2MGUPan8VPhkQ3VPexo/MByHzvc5PZfJEz2xEpRCiM2AxUKCAKZAQKbAQIeARYh BE2I6bMU9OyvmeAmEcmF/TUECMeRAADgrQD/aqD/zxwxHW90435gkkClMchI0nxB D+zxe7Zn9Wx9Q7QBALF+koMk00NVkvsPuhOYqbdUCIh54iG0FIjgEol4wqgC =+a+4 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u243.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAr8Wy4w48Vi41mhbwxODlMQZNplGZWN/8x6ZT UMzsoCXCwAsEHxYKAH0FgmHz9rsDCwkHCRDJhf01BAjHkUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf4brfM2UVS/nRowxQVJYZt4djTQXIz gQZEzlqplJokwAMVCggCmwECHgEWIQRNiOmzFPTsr5ngJhHJhf01BAjHkQAAYDgA /2R3R150oHD43zS8oza7XTL86mfoK5nlRjLpE97OtlDOAP9KHxfOpqS91qPUc52/ IaeH4yt4dXsA+NOw7UExRNMHBs0SPHUyNDNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQyYX9NQQIx5FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnYwZQ9qfxU+GRDdU97Gj8wHIfO9zk9l8kTPbESlEKIzYDFQoI ApkBApsBAh4BFiEETYjpsxT07K+Z4CYRyYX9NQQIx5EAAOCtAP9qoP/PHDEdb3Tj fmCSQKUxyEjSfEEP7PF7tmf1bH1DtAEAsX6SgyTTQ1WS+w+6E5ipt1QIiHniIbQU iOASiXjCqALCwAEEEBYKAHMFgmH0CPADhf94CRDD/+FDdyqFh0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdLSKa1NZ/4tYWn6iQAsLwzTuMZ cEm5M25oySqu1zQXAhYhBKOuFH28iH+jJYUqTcP/4UN3KoWHAACtmQEAyPkK6EEt 4e8xhAM0ANaUyLhT8/MsSfc9nkO6LUWdly4A/0ZTQegMyPTtV98MVG7Ld24FbWSH MoIg3MZyiXNubhMO =97AI -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u244-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CE9A 27BE 1248 3A5F 094F 8533 0E51 D13D C283 0B24 Comment: xVcEYfP2uxYJKwYBBAHaRw8BAQdAoKC/QbEwLoJp4bF0XbVZrUpH/2K3Ft65+1xi 6iVP5moAAPj4hKD22X53IjNUlNGaKinl2XW3xNJcVlF8JtcmB9Q4EQjCwAsEHxYK AH0FgmHz9rsDCwkHCRAOUdE9woMLJEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmf+jP57+E1m8g4bFjqRPHpZRT66ufIT9oZNcmoBfIw6SgMV CggCmwECHgEWIQTOmie+Ekg6XwlPhTMOUdE9woMLJAAAPrcBAK0c4UVOH0Z159Fj +V5MXPmn5iUF91E4ElVYKpr4W3g0AQCS7E/VfCNongjMC5rwMZbjIf3siwpAZRlZ mkDCrRNpD80SPHUyNDRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a7AwsJBwkQ DlHRPcKDCyRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn qQSxJx67Ks/saWyozRA6oSXLtaW7mLrh/7ELWaQEIyIDFQoIApkBApsBAh4BFiEE zponvhJIOl8JT4UzDlHRPcKDCyQAAKyVAQCiP1Rc8Mk91vmN8o3509ek5Q5yCeig SX1fkJEzbEjsXAEA8gdtINo4Gb8JEa45ekY7wCdDBx6lAebRJ19Sj1ytMgA= =bLRx -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u244.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAoKC/QbEwLoJp4bF0XbVZrUpH/2K3Ft65+1xi 6iVP5mrCwAsEHxYKAH0FgmHz9rsDCwkHCRAOUdE9woMLJEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf+jP57+E1m8g4bFjqRPHpZRT66ufIT 9oZNcmoBfIw6SgMVCggCmwECHgEWIQTOmie+Ekg6XwlPhTMOUdE9woMLJAAAPrcB AK0c4UVOH0Z159Fj+V5MXPmn5iUF91E4ElVYKpr4W3g0AQCS7E/VfCNongjMC5rw MZbjIf3siwpAZRlZmkDCrRNpD80SPHUyNDRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQDlHRPcKDCyRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnqQSxJx67Ks/saWyozRA6oSXLtaW7mLrh/7ELWaQEIyIDFQoI ApkBApsBAh4BFiEEzponvhJIOl8JT4UzDlHRPcKDCyQAAKyVAQCiP1Rc8Mk91vmN 8o3509ek5Q5yCeigSX1fkJEzbEjsXAEA8gdtINo4Gb8JEa45ekY7wCdDBx6lAebR J19Sj1ytMgDCwAEEEBYKAHMFgmH0CPADhf94CRDJhf01BAjHkUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfz62XD3czjGqaVT6uHXtEUxv9N u/fZEewDhd/xKsya4xYhBE2I6bMU9OyvmeAmEcmF/TUECMeRAAAKBgD8CfGz4hVJ f2d42c7/Vf+X3PRYpWngOVc1ZimbWmtnwYABALlhoU5ONQ7FVlIMo6oBSwgV2Kiu E96mCRPuXt6R1ScE =V/lV -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u245-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B656 5ADD D563 FDD7 20D0 5411 CD34 49BD 5089 2312 Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdASWBFWMmt3zEfeCaT6Wq37RCL6xyn/guwdkna 3bEpYdsAAQDGw5w2kNT4m0j5BRLJABCnuHQ3BjtJmR9/cncoKx0iqA1ywsALBB8W CgB9BYJh8/a7AwsJBwkQzTRJvVCJIxJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn6z/VPI2PlIUCKk5TikR9TyhDYsjTrF8h+uRKEezYGaoD FQoIApsBAh4BFiEEtlZa3dVj/dcg0FQRzTRJvVCJIxIAAKWbAPwJaOaIcMtVCEpa X6qyRvWUnrnZxMnRzYHI6Z3kvhggsQD+NgsvUH7VMH92ME+C3wajQY3hjI4UgpBs HyL6Ls8rrQDNEjx1MjQ1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EM00Sb1QiSMSRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7H1SdWLy16B0bM0HhiNWnh34iR5sGZ1Xs3daLM7fYoEAxUKCAKZAQKbAQIeARYh BLZWWt3VY/3XINBUEc00Sb1QiSMSAABjqQD8CnZCXxoNJkASzGK5gBEPtMv8Bs+A T4kqt/uxf8J5JcsBAJs1SG9JuqRgrRqUkAd99GXFFZso/SBRQazk01vp03YD =0D7z -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u245.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdASWBFWMmt3zEfeCaT6Wq37RCL6xyn/guwdkna 3bEpYdvCwAsEHxYKAH0FgmHz9rsDCwkHCRDNNEm9UIkjEkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfrP9U8jY+UhQIqTlOKRH1PKENiyNOs XyH65EoR7NgZqgMVCggCmwECHgEWIQS2Vlrd1WP91yDQVBHNNEm9UIkjEgAApZsA /Alo5ohwy1UISlpfqrJG9ZSeudnEydHNgcjpneS+GCCxAP42Cy9QftUwf3YwT4Lf BqNBjeGMjhSCkGwfIvouzyutAM0SPHUyNDVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQzTRJvVCJIxJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnsfVJ1YvLXoHRszQeGI1aeHfiJHmwZnVezd1oszt9igQDFQoI ApkBApsBAh4BFiEEtlZa3dVj/dcg0FQRzTRJvVCJIxIAAGOpAPwKdkJfGg0mQBLM YrmAEQ+0y/wGz4BPiSq3+7F/wnklywEAmzVIb0m6pGCtGpSQB330ZcUVmyj9IFFB rOTTW+nTdgPCwAEEEBYKAHMFgmH0CPADhf94CRAOUdE9woMLJEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeeJBppCTR8AnNtfFV823THMlKq BAlxF9Qr9DGtBC4tdhYhBM6aJ74SSDpfCU+FMw5R0T3CgwskAAAH/AD/UMldga8z aCa3X8wV4taoy9BBrgiRgtTbxQ/hkeqLkCMA/R4AaZyIeul3s2AeVfcOjNLy4iZq tagzbxv31wxZLDgA =ZvCY -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u246-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: F1EB B0F9 4C08 A777 867F 403E 9FAF BE3A 1022 8952 Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAAbg0DD0e8aD7+bvaIOnbb9xhWWBlAYco9i07 ttqmRUsAAQD9xVkJqHBrbUNoQo8KTmBN2nkc8aSCWS0v3fQxwpDQjQ+CwsALBB8W CgB9BYJh8/a7AwsJBwkQn6++OhAiiVJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnV8VPkRlCvjBJ8O9Qr8Dxg7QXpDM2oTbn72MyzJr5Pj8D FQoIApsBAh4BFiEE8euw+UwIp3eGf0A+n6++OhAiiVIAAN83AQDkh/stKf3zghqV AkXIsVoxA0WtW9eB1A3Oei1uz8XA8AEA+KsQh3PztP+tagfvvpKO+JNt/vRyEQyj 4EjbEXQAlwvNEjx1MjQ2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EJ+vvjoQIolSRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3o5cDMy4wnbX4+DPsCpC14e8RmgsmBv8kPSpKqgH0KgAxUKCAKZAQKbAQIeARYh BPHrsPlMCKd3hn9APp+vvjoQIolSAAC7ggEAz1kTDFdFe3HjT0mY5yueymXn4bvr mTv6a0p+D4e1gusA/33t6MVp88OniVls7UkpAdpbYL/+YySbASH5UkXkR3IH =muW6 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u246.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAAbg0DD0e8aD7+bvaIOnbb9xhWWBlAYco9i07 ttqmRUvCwAsEHxYKAH0FgmHz9rsDCwkHCRCfr746ECKJUkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdXxU+RGUK+MEnw71CvwPGDtBekMzah NufvYzLMmvk+PwMVCggCmwECHgEWIQTx67D5TAind4Z/QD6fr746ECKJUgAA3zcB AOSH+y0p/fOCGpUCRcixWjEDRa1b14HUDc56LW7PxcDwAQD4qxCHc/O0/61qB+++ ko74k23+9HIRDKPgSNsRdACXC80SPHUyNDZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQn6++OhAiiVJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnejlwMzLjCdtfj4M+wKkLXh7xGaCyYG/yQ9KkqqAfQqADFQoI ApkBApsBAh4BFiEE8euw+UwIp3eGf0A+n6++OhAiiVIAALuCAQDPWRMMV0V7ceNP SZjnK57KZefhu+uZO/prSn4Ph7WC6wD/fe3oxWnzw6eJWWztSSkB2ltgv/5jJJsB IflSReRHcgfCwAEEEBYKAHMFgmH0CPADhf94CRDNNEm9UIkjEkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcPGs8lTy7UHHgEyM6mU7j7NPWL hW+UoRrIt1wPE9qQ5RYhBLZWWt3VY/3XINBUEc00Sb1QiSMSAADbugD/WJPGtDHq erGGUkQwm7uAVOkk3GsR4ElifUiVP+76InsA/AhCuYp8BpoVg9vE6HnzlLqicb7E qRyv3SRJ8vaTJhwM =0KKm -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u247-priv.pgp000064400000000000000000000015601046102023000222730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 94D6 27E6 27E1 5F9B 9144 4578 16A7 36F4 42FD 6A6F Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdAvd2he8957sQzsC34n7hQ+5O5V6r1DDqe8eqU 0dtfelUAAQDhCf9ZiEnM2tGOoNy7N7LDWs3HkBFIoMTwRISRum4jhRJQwsALBB8W CgB9BYJh8/a7AwsJBwkQFqc29EL9am9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnlGWL0WVAdxU7Sz68nVW2OSydWoDbZMDKMgM53zhghmoD FQoIApsBAh4BFiEElNYn5ifhX5uRREV4Fqc29EL9am8AAFkAAQDlgi/aIPa8Iih6 JL9hrwTiLUN0aZoTfZMIvZmbmocVQwD/f3IgwpzQ4i4sZfo/5jtEVu1Rl0iHqL2Q kcJSWAG3vAbNEjx1MjQ3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ EBanNvRC/WpvRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZwBDdRgiAdDx/COjOGD71Mr/yz5hJ8dbcI6jFfKX6HUZAxUKCAKZAQKbAQIeARYh BJTWJ+Yn4V+bkURFeBanNvRC/WpvAADUGAEApKxXA4tV4Lb/CFQOWNjE59/jVfLO 2Opp+nlUCl8xZ10A/0vqBDCvI2SsscGl2hYEPP3Ir4OXzHyz6ys3WIsilv8G =mDIN -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u247.pgp000064400000000000000000000017561046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdAvd2he8957sQzsC34n7hQ+5O5V6r1DDqe8eqU 0dtfelXCwAsEHxYKAH0FgmHz9rsDCwkHCRAWpzb0Qv1qb0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeUZYvRZUB3FTtLPrydVbY5LJ1agNtk wMoyAznfOGCGagMVCggCmwECHgEWIQSU1ifmJ+Ffm5FERXgWpzb0Qv1qbwAAWQAB AOWCL9og9rwiKHokv2GvBOItQ3RpmhN9kwi9mZuahxVDAP9/ciDCnNDiLixl+j/m O0RW7VGXSIeovZCRwlJYAbe8Bs0SPHUyNDdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQFqc29EL9am9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnAEN1GCIB0PH8I6M4YPvUyv/LPmEnx1twjqMV8pfodRkDFQoI ApkBApsBAh4BFiEElNYn5ifhX5uRREV4Fqc29EL9am8AANQYAQCkrFcDi1Xgtv8I VA5Y2MTn3+NV8s7Y6mn6eVQKXzFnXQD/S+oEMK8jZKyxwaXaFgQ8/civg5fMfLPr KzdYiyKW/wbCwAEEEBYKAHMFgmH0CPADhf94CRCfr746ECKJUkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcUDxkALRZeEznZcmtovztxrTq0 ARBp5v2kdY7RqtREvxYhBPHrsPlMCKd3hn9APp+vvjoQIolSAAD/eQEAqo+jSEi4 jd5F5jvudOXggvNxfwdJvxcHjAks8dwJ9ZwBAKdszKegVVXrRp5SS7bkAbhn4M+H hXywYOemJWIW8psO =WkEa -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u248-priv.pgp000064400000000000000000000015601046102023000222740ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B3B1 CDB5 875C D872 5B5F C915 B1ED 7C0F CE77 21EE Comment: xVgEYfP2uxYJKwYBBAHaRw8BAQdA/VvWNNp1RyZvIqb+zjejOR05a3lXfY7QrWM4 sasZL0EAAQCUcYxJ4mZmTxLy0IF3+0zPNlR3hnrP4A9vThUvE/Y8YA8fwsALBB8W CgB9BYJh8/a7AwsJBwkQse18D853Ie5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnSltPaxdPVUni6anxHCn0+7Fk4Sa3B4/K9vQIbwcU27YD FQoIApsBAh4BFiEEs7HNtYdc2HJbX8kVse18D853Ie4AAPrGAQCnAt8FwKdLN/Ap rOTG9lHOLSRFvUCSGOkPt7YjqFADpAD6A7SU8JttYHSyGPT87DOltvensGNcuhku CN53AncKcgXNEjx1MjQ4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJ ELHtfA/OdyHuRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z/1bhmorufr9BDC2tWSgww61C++vx6rRAHkuu0hkGD0lAxUKCAKZAQKbAQIeARYh BLOxzbWHXNhyW1/JFbHtfA/OdyHuAAAUOQEA5kxT0vOOXwiVr+5trndDLiSgOBLc A9XcS9qAfb2SXm0A/3t72c8mU3ufZxJO+voN0dTO3chkjHZc60SnjgnnGYwG =IlZc -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u248.pgp000064400000000000000000000017561046102023000213250ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2uxYJKwYBBAHaRw8BAQdA/VvWNNp1RyZvIqb+zjejOR05a3lXfY7QrWM4 sasZL0HCwAsEHxYKAH0FgmHz9rsDCwkHCRCx7XwPznch7kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdKW09rF09VSeLpqfEcKfT7sWThJrcH j8r29AhvBxTbtgMVCggCmwECHgEWIQSzsc21h1zYcltfyRWx7XwPznch7gAA+sYB AKcC3wXAp0s38Cms5Mb2Uc4tJEW9QJIY6Q+3tiOoUAOkAPoDtJTwm21gdLIY9Pzs M6W296ewY1y6GS4I3ncCdwpyBc0SPHUyNDhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a7AwsJBwkQse18D853Ie5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn/VuGaiu5+v0EMLa1ZKDDDrUL76/HqtEAeS67SGQYPSUDFQoI ApkBApsBAh4BFiEEs7HNtYdc2HJbX8kVse18D853Ie4AABQ5AQDmTFPS845fCJWv 7m2ud0MuJKA4EtwD1dxL2oB9vZJebQD/e3vZzyZTe59nEk76+g3R1M7dyGSMdlzr RKeOCecZjAbCwAEEEBYKAHMFgmH0CPADhf94CRAWpzb0Qv1qb0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeNmjiqFL5pC+XVWC7r9uEGL4Sa vRAq1vbdRp4h9Q8CbBYhBJTWJ+Yn4V+bkURFeBanNvRC/WpvAAD3zAD/SWb+gA36 yIT440tasqNgcfhIaR33XhYV+Nt4LdpFFcAA/RAjw2TUXAQuYmX4SuyxualS2dzn 2VP4EjYyUp4NPxgE =9T54 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u249-priv.pgp000064400000000000000000000015601046102023000222750ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9E80 CD68 3AA0 1265 FE25 DF26 5DAD CE43 3039 185C Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdA33fTaCA5JSy+9YMfJxQLFPTROInu93N9O5UY Uucyp8YAAQCIzOakzxwq85KtfAfX0+EqhkXSfNnduUE4vAn95RU9UxGrwsALBB8W CgB9BYJh8/a8AwsJBwkQXa3OQzA5GFxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnZrHV0FJeJ/TfF1QvwkVgVOqZDQ3iPhK+UKFLzC6kCr8D FQoIApsBAh4BFiEEnoDNaDqgEmX+Jd8mXa3OQzA5GFwAADdNAP0UZbnjdGqJ/2U3 WuYS/a3Vz+0uq5zCLtaW2eFRw0Iw4QD+LorsUYjK6sJtpox6W35XByZYjxKJZ3rD VX0j0E2rNgfNEjx1MjQ5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ EF2tzkMwORhcRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3Odi2GyB0Z8534h8exYl1mKaG0/axrbUpcfJQ3AD6vRAxUKCAKZAQKbAQIeARYh BJ6AzWg6oBJl/iXfJl2tzkMwORhcAAAsBAD/UtZJcQvYhAwkZIc/u5uEZ5dmc7O9 l2dIozVkSiwCTEMBANtFrA2JQzQHHgKGUC23hXFHVOSbMk90e4VSzFKRP+4J =tsCQ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u249.pgp000064400000000000000000000017561046102023000213260ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdA33fTaCA5JSy+9YMfJxQLFPTROInu93N9O5UY Uucyp8bCwAsEHxYKAH0FgmHz9rwDCwkHCRBdrc5DMDkYXEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdmsdXQUl4n9N8XVC/CRWBU6pkNDeI+ Er5QoUvMLqQKvwMVCggCmwECHgEWIQSegM1oOqASZf4l3yZdrc5DMDkYXAAAN00A /RRlueN0aon/ZTda5hL9rdXP7S6rnMIu1pbZ4VHDQjDhAP4uiuxRiMrqwm2mjHpb flcHJliPEolnesNVfSPQTas2B80SPHUyNDlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQXa3OQzA5GFxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnc52LYbIHRnznfiHx7FiXWYpobT9rGttSlx8lDcAPq9EDFQoI ApkBApsBAh4BFiEEnoDNaDqgEmX+Jd8mXa3OQzA5GFwAACwEAP9S1klxC9iEDCRk hz+7m4Rnl2Zzs72XZ0ijNWRKLAJMQwEA20WsDYlDNAceAoZQLbeFcUdU5JsyT3R7 hVLMUpE/7gnCwAEEEBYKAHMFgmH0CPADhf94CRCx7XwPznch7kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf3ViUf003wxzm5PiKfnI/7As7n S9kjgNnn0pw/d8dL0xYhBLOxzbWHXNhyW1/JFbHtfA/OdyHuAACO/gD/Xf3LLqIO 04f7G2U/aEc1xTxRSxl016WhegON1CAhWqEA/RI0pzQmhGRYz2VSr8lEujDj3seL z9pNpuOa6sS+fEAF =rSmd -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u25-priv.pgp000064400000000000000000000015571046102023000222130ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9BF8 933F CA53 06F5 67F5 F575 0CE3 375A FA93 98A1 Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAecqJngG/PCKlP2sDJf8QYuAqTe2SebKICvHB A4R19qsAAQCG2Jq4Azh6VJbPgpn+/Flh+hj4nIxLDaL8OlaSoGh1bxEkwsALBB8W CgB9BYJh8/awAwsJBwkQDOM3WvqTmKFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnvutoG90bpMQIFdWI40CHHFpYSjZs9rS+Cla9WDk5Gw0D FQoIApsBAh4BFiEEm/iTP8pTBvVn9fV1DOM3WvqTmKEAAGWdAQC/qFFlJdQEc8bg Cv7HiUXdFyJwzQm9lQEWFmq/eE6YjgEAqmThL/L4qxLGPXjvu55KouYPwBShG170 CzL2V3PhGgHNETx1MjVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ DOM3WvqTmKFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn vxQO9hd5LP+jC2wkz/sPj6wVEEkKRtOby1farmbezUEDFQoIApkBApsBAh4BFiEE m/iTP8pTBvVn9fV1DOM3WvqTmKEAAGXDAQC/TTmUYHzGy1Pp55Gx7nq+btOmwZDx hkdBss21ViJN+QEA6kgZYDMjHSwUkvvy34dwdpzfI2OaNtABXuC/TEbrGAE= =DeWZ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u25.pgp000064400000000000000000000017561046102023000212360ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAecqJngG/PCKlP2sDJf8QYuAqTe2SebKICvHB A4R19qvCwAsEHxYKAH0FgmHz9rADCwkHCRAM4zda+pOYoUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme+62gb3RukxAgV1YjjQIccWlhKNmz2 tL4KVr1YOTkbDQMVCggCmwECHgEWIQSb+JM/ylMG9Wf19XUM4zda+pOYoQAAZZ0B AL+oUWUl1ARzxuAK/seJRd0XInDNCb2VARYWar94TpiOAQCqZOEv8virEsY9eO+7 nkqi5g/AFKEbXvQLMvZXc+EaAc0RPHUyNUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRAM4zda+pOYoUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcme/FA72F3ks/6MLbCTP+w+PrBUQSQpG05vLV9quZt7NQQMVCggC mQECmwECHgEWIQSb+JM/ylMG9Wf19XUM4zda+pOYoQAAZcMBAL9NOZRgfMbLU+nn kbHuer5u06bBkPGGR0GyzbVWIk35AQDqSBlgMyMdLBSS+/Lfh3B2nN8jY5o20AFe 4L9MRusYAcLAAQQQFgoAcwWCYfQI5wOF/3gJECAedzfRHXA5RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ53wxQoIDZiDl494ktQQCMJ84vQ8 iunjfyo1JIkbm9FWFiEEpi+YjyiWoChvkvi4IB53N9EdcDkAAHtSAQCNjbEzEOEd y7zPlZe6JBeAUKd2nvXxe9LyPfRqq+Z8zQD/e3pw0b4Jk0jiZePFaR62XSmIHQQu DheV7NaGJbEPfgY= =7NtI -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u250-priv.pgp000064400000000000000000000015601046102023000222650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: AFDE 99A0 08E9 BC76 1DFA 6367 C984 AF52 5463 08CF Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdAzKsKeSFr9AQQAu5OlfzE2ma0TwYRtSXuKEbq C6WSv3EAAP9dXFxhna3lMEjVNZ6fdxZ/8H9MjEF7tjd/GcVJt5GPoxB/wsALBB8W CgB9BYJh8/a8AwsJBwkQyYSvUlRjCM9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn1o6754xh5+OhcB0Q7PgabGpfsiAa38luSz2t3C1WyxID FQoIApsBAh4BFiEEr96ZoAjpvHYd+mNnyYSvUlRjCM8AAEijAP9cvFTTL78AFzeq V1e5gISa42jdwtJXguv8eOj+94U9YAEA4j7sK1wqyGQepAvGDRlR4w/z2a6Z5VHt GyOoPyEQxw/NEjx1MjUwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ EMmEr1JUYwjPRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z40zDuDKF+GuyiNs8wFGS82JPm7a5smVWzI19GZsoeG5AxUKCAKZAQKbAQIeARYh BK/emaAI6bx2HfpjZ8mEr1JUYwjPAADr9wEAx6OU4I94K+qgJG5rZ1LUs5WYhtxc NdSaI2KLkUPWihMBAN2wDqsMlusDlE1icrr+tzxhwIKEZwu925b+K98nNxkC =bd0q -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u250.pgp000064400000000000000000000017561046102023000213160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdAzKsKeSFr9AQQAu5OlfzE2ma0TwYRtSXuKEbq C6WSv3HCwAsEHxYKAH0FgmHz9rwDCwkHCRDJhK9SVGMIz0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfWjrvnjGHn46FwHRDs+Bpsal+yIBrf yW5LPa3cLVbLEgMVCggCmwECHgEWIQSv3pmgCOm8dh36Y2fJhK9SVGMIzwAASKMA /1y8VNMvvwAXN6pXV7mAhJrjaN3C0leC6/x46P73hT1gAQDiPuwrXCrIZB6kC8YN GVHjD/PZrpnlUe0bI6g/IRDHD80SPHUyNTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQyYSvUlRjCM9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnjTMO4MoX4a7KI2zzAUZLzYk+btrmyZVbMjX0Zmyh4bkDFQoI ApkBApsBAh4BFiEEr96ZoAjpvHYd+mNnyYSvUlRjCM8AAOv3AQDHo5Tgj3gr6qAk bmtnUtSzlZiG3Fw11JojYouRQ9aKEwEA3bAOqwyW6wOUTWJyuv63PGHAgoRnC73b lv4r3yc3GQLCwAEEEBYKAHMFgmH0CPADhf94CRBdrc5DMDkYXEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf7cTDY/L6DVMt+/Chp3zUUaVoC dYs6/sJEmBJkubQT8RYhBJ6AzWg6oBJl/iXfJl2tzkMwORhcAADVZQD/Tlukmzi1 +pmMHsUXOSYxSXWZVuEkiz0MEytLviof/ncBAJgKCWQMRx71xu7LMMUSDUX2TPf9 ZU4uyHv4ZZ3jAHIA =rHrU -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u251-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3648 54C3 6A1E FFDC AC7B 8029 6A8F 683B 48BC 5F33 Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdAc48fEKTlpAxNiGJgK7UI/6ePlShQwIvCNrMe DjbfHroAAP0ftNHK5P51Y0JThgYtZB+U8iZ1jrSIZAH/N5w+G6uqqRBvwsALBB8W CgB9BYJh8/a8AwsJBwkQao9oO0i8XzNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnZeGiR8aGNdSR/jcC371mz2zxu6Bp1BPC4JzHOWK+hjYD FQoIApsBAh4BFiEENkhUw2oe/9yse4Apao9oO0i8XzMAAF7pAQDYqPJigqxG82R4 cYiUbJGwJT/8JEetdgcHdjcs6f95bwD9GDi4k4cVC6MiNNGwwZOacztpC37xP82n cVI6tn0ckQbNEjx1MjUxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ EGqPaDtIvF8zRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3AP751UibUd0ZbMQAKFZ6v4EPCGhXSu/uQlb6+BfONGAxUKCAKZAQKbAQIeARYh BDZIVMNqHv/crHuAKWqPaDtIvF8zAAC00gD/SmR8jQU4n3XojH3T+gSN/ZF8Xw/B 8vlJjYP9PIrOia8A/i9ExqeA7w5Ux5Ti4kLSeP5qLamsVpUkWYUqc3iNTakK =k9G1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u251.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdAc48fEKTlpAxNiGJgK7UI/6ePlShQwIvCNrMe DjbfHrrCwAsEHxYKAH0FgmHz9rwDCwkHCRBqj2g7SLxfM0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdl4aJHxoY11JH+NwLfvWbPbPG7oGnU E8LgnMc5Yr6GNgMVCggCmwECHgEWIQQ2SFTDah7/3Kx7gClqj2g7SLxfMwAAXukB ANio8mKCrEbzZHhxiJRskbAlP/wkR612Bwd2Nyzp/3lvAP0YOLiThxULoyI00bDB k5pzO2kLfvE/zadxUjq2fRyRBs0SPHUyNTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQao9oO0i8XzNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JncA/vnVSJtR3RlsxAAoVnq/gQ8IaFdK7+5CVvr4F840YDFQoI ApkBApsBAh4BFiEENkhUw2oe/9yse4Apao9oO0i8XzMAALTSAP9KZHyNBTifdeiM fdP6BI39kXxfD8Hy+UmNg/08is6JrwD+L0TGp4DvDlTHlOLiQtJ4/motqaxWlSRZ hSpzeI1NqQrCwAEEEBYKAHMFgmH0CPADhf94CRDJhK9SVGMIz0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmduw9oNjQkBMXC0w04gmjqtJ1F/ fwitZu5oBhgNQORsaBYhBK/emaAI6bx2HfpjZ8mEr1JUYwjPAAAE6AEAjkK5LF1p Ao3j9EeFvzvQD+4mwG4SQGVZ6zbMiJmODFkA/jyXPt97d9+fe7jXhypt0HAzYxhn phE0BWsmJ2SKv8YM =1QFc -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u252-priv.pgp000064400000000000000000000015601046102023000222670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 77C3 730D B611 591E 71EE 4528 A15E E7D5 EF32 333F Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdAtILMZsfhBXx7Bv3BePKn++fWrA1I2CdxVY7t fA0dYPYAAP9MLUqC7UAxRgkW9nQQ9NuLeodNE2YFKPd8ehpdU/3tSQ65wsALBB8W CgB9BYJh8/a8AwsJBwkQoV7n1e8yMz9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn2Omu3MKmFgRb9YqOSaACIaDE6/y+klGx4a7+zJTxzGAD FQoIApsBAh4BFiEEd8NzDbYRWR5x7kUooV7n1e8yMz8AAMRhAQCAIFRdY6sX5EMi 15kFY9NlayYDEeaRYi/xKPJ0kkcOMAD/YWp9A58gsJ6Hlx++rwT8Cch9kWqibnO/ Klrr+MCipQbNEjx1MjUyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ EKFe59XvMjM/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z1tL+XGypdKyoUwLStx1lhQE/9AJN5b9rUkPcW8Kwl5TAxUKCAKZAQKbAQIeARYh BHfDcw22EVkece5FKKFe59XvMjM/AACkzAEAtBUKmgkkMe/Ly3F2qxTDC2U2l9Qf 6zDkKRytWjmyc+YA/i12dqCs+Tl4yiQ5v7Hefj89JUq00GbfKEVwkcHQHLcI =0bJn -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u252.pgp000064400000000000000000000017561046102023000213200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdAtILMZsfhBXx7Bv3BePKn++fWrA1I2CdxVY7t fA0dYPbCwAsEHxYKAH0FgmHz9rwDCwkHCRChXufV7zIzP0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfY6a7cwqYWBFv1io5JoAIhoMTr/L6S UbHhrv7MlPHMYAMVCggCmwECHgEWIQR3w3MNthFZHnHuRSihXufV7zIzPwAAxGEB AIAgVF1jqxfkQyLXmQVj02VrJgMR5pFiL/Eo8nSSRw4wAP9han0DnyCwnoeXH76v BPwJyH2RaqJuc78qWuv4wKKlBs0SPHUyNTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQoV7n1e8yMz9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnW0v5cbKl0rKhTAtK3HWWFAT/0Ak3lv2tSQ9xbwrCXlMDFQoI ApkBApsBAh4BFiEEd8NzDbYRWR5x7kUooV7n1e8yMz8AAKTMAQC0FQqaCSQx78vL cXarFMMLZTaX1B/rMOQpHK1aObJz5gD+LXZ2oKz5OXjKJDm/sd5+Pz0lSrTQZt8o RXCRwdActwjCwAEEEBYKAHMFgmH0CPADhf94CRBqj2g7SLxfM0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeE16/sF4M75YLnc5m4vW6t4AsE TbBHDOlIAv7FX/HgbRYhBDZIVMNqHv/crHuAKWqPaDtIvF8zAACaUgEAypzbAt+F qyaaOofhskUF6CyRpbQL+d4JXNOBTZ/REFgA/1jCtq4icauuQCaJOPSL/UiAmIZo 66XqI/Z7fnw4dl8F =fNsh -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u253-priv.pgp000064400000000000000000000015601046102023000222700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 138C C208 5B1A 06F0 2DE1 946D 5FB3 91D6 3C88 6EE6 Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdAdQdhp0a9BodKKO8QHB2TkRDkfT9qd+K6shAG C12c62AAAQDsUVKbZM0vt6PwFQAljiF4DbHoXYKjNGx/xK43WMVYrQ9IwsALBB8W CgB9BYJh8/a8AwsJBwkQX7OR1jyIbuZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnowPJBfImV9tX5E5Z1zxXxaOOEoqb/n39uGi+7KcZ1doD FQoIApsBAh4BFiEEE4zCCFsaBvAt4ZRtX7OR1jyIbuYAAPKxAQCG+QxEiL9Uw7k0 6WzBxBfdhFepJQ9WeCzZ5ACvHMoAGQD/VpchGO98zY9pMotQri7y9JBkai1eoBRI nu2vHFHEKgrNEjx1MjUzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ EF+zkdY8iG7mRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z39ktXLak15+2yJ1h9Cyby5KlUhMMghY6tsZ6NkMmfi7AxUKCAKZAQKbAQIeARYh BBOMwghbGgbwLeGUbV+zkdY8iG7mAACfwgD/QuV1k/KSOL8DFoAcN6izztUTeRKf g4kwbxJy22orKOwA/iOmdG7rl8fb0zBdcXSvKG9NQ6tw6esPgahjcR0Y/7MO =9j8L -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u253.pgp000064400000000000000000000017561046102023000213210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdAdQdhp0a9BodKKO8QHB2TkRDkfT9qd+K6shAG C12c62DCwAsEHxYKAH0FgmHz9rwDCwkHCRBfs5HWPIhu5kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmejA8kF8iZX21fkTlnXPFfFo44Sipv+ ff24aL7spxnV2gMVCggCmwECHgEWIQQTjMIIWxoG8C3hlG1fs5HWPIhu5gAA8rEB AIb5DESIv1TDuTTpbMHEF92EV6klD1Z4LNnkAK8cygAZAP9WlyEY73zNj2kyi1Cu LvL0kGRqLV6gFEie7a8cUcQqCs0SPHUyNTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQX7OR1jyIbuZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnf2S1ctqTXn7bInWH0LJvLkqVSEwyCFjq2xno2QyZ+LsDFQoI ApkBApsBAh4BFiEEE4zCCFsaBvAt4ZRtX7OR1jyIbuYAAJ/CAP9C5XWT8pI4vwMW gBw3qLPO1RN5Ep+DiTBvEnLbaiso7AD+I6Z0buuXx9vTMF1xdK8ob01Dq3Dp6w+B qGNxHRj/sw7CwAEEEBYKAHMFgmH0CPADhf94CRChXufV7zIzP0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfiEqU8uqTV+pml+cqjpl3YBgUG V3l7dalC+iLsT9GDSBYhBHfDcw22EVkece5FKKFe59XvMjM/AABrHgD9FrE4N7RH ugVZnZRy1a3Q6VZAomn4qxMt0kgcVx2CfeEA/2h8X80fKCijLmRP/VAIhjsqpaR2 OB8e4xgOrfi0ti4H =o2ll -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u254-priv.pgp000064400000000000000000000015601046102023000222710ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: AF09 7DA4 DB5C 0E21 16EF 583B 25A6 B381 B621 C082 Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdABv8kM3uQuR1Z0j/rVrgUIsjy/6q/wt882IXd t2lWAlUAAP9mMHXyxQl+I7q6o9Z7f1u1pwGUjU6cCSNph43n0QuBGhAcwsALBB8W CgB9BYJh8/a8AwsJBwkQJaazgbYhwIJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnxFaA0j9KviB+U1jF9TYeZdjrqUzcemfSJVa6baMNPKwD FQoIApsBAh4BFiEErwl9pNtcDiEW71g7JaazgbYhwIIAAM1hAQD/57OvV8fTUPwA vDtkpCVo+PP38sUMjSd2KNnj0z1nEgEA5GmcGaAIYR7JlxpuZdZ0FuVZ+q/SnDla TBBnHq/l+ArNEjx1MjU0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ ECWms4G2IcCCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6GQmnK9ckhBCbeR/FZCMA5FvqPZH4h3cCLYmvVs0wkbAxUKCAKZAQKbAQIeARYh BK8JfaTbXA4hFu9YOyWms4G2IcCCAABPOQD6AmikSfAIZEteYyQOQ4PNYYePrgKt W/GEqRZgG6BAYxEA/3/DO6fTLZ9bKjWRahhTVqO+Qi1TC1b79CYGWawciwcO =brgT -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u254.pgp000064400000000000000000000017561046102023000213220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdABv8kM3uQuR1Z0j/rVrgUIsjy/6q/wt882IXd t2lWAlXCwAsEHxYKAH0FgmHz9rwDCwkHCRAlprOBtiHAgkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfEVoDSP0q+IH5TWMX1Nh5l2OupTNx6 Z9IlVrptow08rAMVCggCmwECHgEWIQSvCX2k21wOIRbvWDslprOBtiHAggAAzWEB AP/ns69Xx9NQ/AC8O2SkJWj48/fyxQyNJ3Yo2ePTPWcSAQDkaZwZoAhhHsmXGm5l 1nQW5Vn6r9KcOVpMEGcer+X4Cs0SPHUyNTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQJaazgbYhwIJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnoZCacr1ySEEJt5H8VkIwDkW+o9kfiHdwItia9WzTCRsDFQoI ApkBApsBAh4BFiEErwl9pNtcDiEW71g7JaazgbYhwIIAAE85APoCaKRJ8AhkS15j JA5Dg81hh4+uAq1b8YSpFmAboEBjEQD/f8M7p9Mtn1sqNZFqGFNWo75CLVMLVvv0 JgZZrByLBw7CwAEEEBYKAHMFgmH0CPADhf94CRBfs5HWPIhu5kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcybG2IGz+kkErI0jYxrctv4A1d 9ogEcwse8wFnoLTx/xYhBBOMwghbGgbwLeGUbV+zkdY8iG7mAACdTwEA/Gs1CdNo G2g3pfAFFpYnIYLvOIJyE4RapEzggrx3UyQBAMbcMfiNG3clS/xT5OSJCspcEi5V a6vyM50qNSC7UZgI =ynep -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u255-priv.pgp000064400000000000000000000015601046102023000222720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 02DF 6CB2 758D 7695 940B 6937 804C AD30 CDAC 243C Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdAwSUrMMV68tO3Vw8AlP29i5W9jEK4wCRj/CYp u+wIp6gAAQCXd+JraCnFJfbjz7bWzHAeDazkLmJnFrgTYqkrmbnBBhApwsALBB8W CgB9BYJh8/a8AwsJBwkQgEytMM2sJDxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn9ytvZvYx5aJbMj4f2RYB+5cc7FlF+fms3ous8h4cZVID FQoIApsBAh4BFiEEAt9ssnWNdpWUC2k3gEytMM2sJDwAALi2AQC9evRMKCkR26Dn wkHe+h+8pavUvqTRODfvcjClWKpopAEAiiRsIvFf9udpcQKAIrvYTK3GVOCwevHi ZuS6JfUnKQ3NEjx1MjU1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ EIBMrTDNrCQ8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7pT6TlSHOPChGiaN8JQGTRq75KPHCzlrF0NUaeJ8o88AxUKCAKZAQKbAQIeARYh BALfbLJ1jXaVlAtpN4BMrTDNrCQ8AAD51wD/cxyp69FT7KfrugYMhhpPKbkrisKN sxqJg2KLutwm+UMA/RctQporf7rqkRrQozrqFgbxPuCsZqO0HLiWRcWEDFoM =Sdts -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u255.pgp000064400000000000000000000017561046102023000213230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdAwSUrMMV68tO3Vw8AlP29i5W9jEK4wCRj/CYp u+wIp6jCwAsEHxYKAH0FgmHz9rwDCwkHCRCATK0wzawkPEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf3K29m9jHlolsyPh/ZFgH7lxzsWUX5 +azei6zyHhxlUgMVCggCmwECHgEWIQQC32yydY12lZQLaTeATK0wzawkPAAAuLYB AL169EwoKRHboOfCQd76H7ylq9S+pNE4N+9yMKVYqmikAQCKJGwi8V/252lxAoAi u9hMrcZU4LB68eJm5Lol9ScpDc0SPHUyNTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQgEytMM2sJDxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnulPpOVIc48KEaJo3wlAZNGrvko8cLOWsXQ1Rp4nyjzwDFQoI ApkBApsBAh4BFiEEAt9ssnWNdpWUC2k3gEytMM2sJDwAAPnXAP9zHKnr0VPsp+u6 BgyGGk8puSuKwo2zGomDYou63Cb5QwD9Fy1Cmit/uuqRGtCjOuoWBvE+4Kxmo7Qc uJZFxYQMWgzCwAEEEBYKAHMFgmH0CPADhf94CRAlprOBtiHAgkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeKBAp6pfZvcA0fXc73Z9o5GR4Q 1iCrrjK6+TryqCKIvhYhBK8JfaTbXA4hFu9YOyWms4G2IcCCAABk0gEAmxrLdeSx QgfCbcw7YkGh+Zdzq++mGgaBfy35tbCdTT0BAL9uaz9RCTA5uhcuEHKRzwe546WG CTfiEAeuwQW36/IA =aMY/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u256-priv.pgp000064400000000000000000000015601046102023000222730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7F7C 3389 9D1A 34BE 0D2B 3C1C 3B8F 983D FABA 03B4 Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdAqV70/Zpn7aomosbF5zRhlr+AAslxdXFUC5oL 2lEUy+8AAQDuAA3EHh3KHLKkMR8ZnWRvFAeUERnImKkFkzlnj2VYPAuywsALBB8W CgB9BYJh8/a8AwsJBwkQO4+YPfq6A7RHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnCUXv0X4QMITknpGEAM+MVGFFJPIu3Jttm3JwaetdkWwD FQoIApsBAh4BFiEEf3wziZ0aNL4NKzwcO4+YPfq6A7QAAL5ZAQCnfZm9gELK71TL PT7k1LmAUw2jVLANXxk5Y9xbLf/ECwEA8BGkunAw/Cf3UN4X+dvATWQ5sUs+OjU/ e4MWo0sVLA7NEjx1MjU2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ EDuPmD36ugO0RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z9qyLwhZ47e5Zun92PxqwYAW380frfY4VxTCg5KJbzR4AxUKCAKZAQKbAQIeARYh BH98M4mdGjS+DSs8HDuPmD36ugO0AADbUwEA06zYbWyQ6OMtY1bjwpapTyHpr4JR BLpZZYSLTpkgZikBAKpYvl5rLAd39tYwnM+NIT8Tb0dxlkN8JaTsEMzhPl8K =TNSt -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u256.pgp000064400000000000000000000017561046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdAqV70/Zpn7aomosbF5zRhlr+AAslxdXFUC5oL 2lEUy+/CwAsEHxYKAH0FgmHz9rwDCwkHCRA7j5g9+roDtEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcJRe/RfhAwhOSekYQAz4xUYUUk8i7c m22bcnBp612RbAMVCggCmwECHgEWIQR/fDOJnRo0vg0rPBw7j5g9+roDtAAAvlkB AKd9mb2AQsrvVMs9PuTUuYBTDaNUsA1fGTlj3Fst/8QLAQDwEaS6cDD8J/dQ3hf5 28BNZDmxSz46NT97gxajSxUsDs0SPHUyNTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQO4+YPfq6A7RHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn2rIvCFnjt7lm6f3Y/GrBgBbfzR+t9jhXFMKDkolvNHgDFQoI ApkBApsBAh4BFiEEf3wziZ0aNL4NKzwcO4+YPfq6A7QAANtTAQDTrNhtbJDo4y1j VuPClqlPIemvglEEulllhItOmSBmKQEAqli+XmssB3f21jCcz40hPxNvR3GWQ3wl pOwQzOE+XwrCwAEEEBYKAHMFgmH0CPADhf94CRCATK0wzawkPEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeWywfluoumcTlmGjaWq/9zlAhJ 3wZJJOh1mhVYJEjd4xYhBALfbLJ1jXaVlAtpN4BMrTDNrCQ8AACXfAD+MMzK1Lc1 /YIxNoKmptJPGYklPH9e+dqwIE28y0j6XGkA/3L/21ldmoWg1kYEHutVqiBVcbaa tVTcmD2zieQrKzQE =igf0 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u257-priv.pgp000064400000000000000000000015601046102023000222740ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0415 49DB A90F 2C4E B9E2 2505 B451 5224 EB74 5A2C Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdADvZRdsDiW8k/6/nCcLSWHb05WvfgOFJK17Q3 qCmvINcAAQCobLq3Ka5ErUvOQsAO7Kc0qE7znyv9/K3ePTtYvmmTaxFqwsALBB8W CgB9BYJh8/a8AwsJBwkQtFFSJOt0WixHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jndduzk8qS9Z32W+4ubaN5pAIUjMHylzgwC8eukHJL/l4D FQoIApsBAh4BFiEEBBVJ26kPLE654iUFtFFSJOt0WiwAALFAAQDMBVfqVJ/N7ceX nyWQhr5NGMaU8J8hnUS4TZQX8HaI0QD8D47C0V06GhW/QudbvIxNh9SneZW98R3e eslbeAnokgDNEjx1MjU3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ ELRRUiTrdFosRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4isgWf++qGevmFeiu/r2s2jTY7+OAZi5gDWI2UfK1rfAxUKCAKZAQKbAQIeARYh BAQVSdupDyxOueIlBbRRUiTrdFosAACQAwD/WpUEo8TzR7zihunTnQ+zj9XQ1n+2 /kSsODcS2xJ3SlEA/RIBJTVOatNcCIjtynfKIsj0CumpjvLPblroHD62if8P =KzhI -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u257.pgp000064400000000000000000000017561046102023000213250ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdADvZRdsDiW8k/6/nCcLSWHb05WvfgOFJK17Q3 qCmvINfCwAsEHxYKAH0FgmHz9rwDCwkHCRC0UVIk63RaLEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd127OTypL1nfZb7i5to3mkAhSMwfKX ODALx66Qckv+XgMVCggCmwECHgEWIQQEFUnbqQ8sTrniJQW0UVIk63RaLAAAsUAB AMwFV+pUn83tx5efJZCGvk0YxpTwnyGdRLhNlBfwdojRAPwPjsLRXToaFb9C51u8 jE2H1Kd5lb3xHd56yVt4CeiSAM0SPHUyNTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQtFFSJOt0WixHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JniKyBZ/76oZ6+YV6K7+vazaNNjv44BmLmANYjZR8rWt8DFQoI ApkBApsBAh4BFiEEBBVJ26kPLE654iUFtFFSJOt0WiwAAJADAP9alQSjxPNHvOKG 6dOdD7OP1dDWf7b+RKw4NxLbEndKUQD9EgElNU5q01wIiO3Kd8oiyPQK6amO8s9u WugcPraJ/w/CwAEEEBYKAHMFgmH0CPADhf94CRA7j5g9+roDtEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmejGtvHJGbGoLK1OnEm0jNjWCu6 4eFycHIvgG2dHY08uxYhBH98M4mdGjS+DSs8HDuPmD36ugO0AADMOQEAm9CCjHdy eqo9VL6ENwEGWj0GbGPvfOD9PdgdStlqB9EBAPJtUIB8xaI8qT5eAue+J9q8wb6O KBIYbWy4hdie5b4A =UAil -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u258-priv.pgp000064400000000000000000000015601046102023000222750ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B732 06C4 F70E 0735 E928 8128 BAC3 4002 3373 8122 Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdA30qHDVKS6LIKn8GroIQMX4jGhntcMiipHdbW X1455RgAAPwOSzsiaOOCoe8goPXMHuvisOMwYopHiWkB4UzldR2Z5BGFwsALBB8W CgB9BYJh8/a8AwsJBwkQusNAAjNzgSJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnxNVpMt5KeQ/RfuWLtb70PHuZwoa513wJgKojypO+tUcD FQoIApsBAh4BFiEEtzIGxPcOBzXpKIEousNAAjNzgSIAAEUTAQDdH+s2rrszPjBj OlyEjbxZQccaHDoF6NFygrWgPs4P/wD6A2GAWf7YqeFGyfstb9y1qxHKe45Ws8An WPrA4FMPGA7NEjx1MjU4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ ELrDQAIzc4EiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6k85M/RwosV6dEZbhJiMWXj79VSctcLM7L36xMZkbOjAxUKCAKZAQKbAQIeARYh BLcyBsT3Dgc16SiBKLrDQAIzc4EiAADfmAD+JrtRrsrJBfY9zflyA7kJmASGt+EF hnx7me4FHs1p/UkBAM2MU31hBqXBdBoAwo2RUEot+O6Uc82BQMlGx4YQu34F =O3MD -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u258.pgp000064400000000000000000000017561046102023000213260ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdA30qHDVKS6LIKn8GroIQMX4jGhntcMiipHdbW X1455RjCwAsEHxYKAH0FgmHz9rwDCwkHCRC6w0ACM3OBIkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfE1Wky3kp5D9F+5Yu1vvQ8e5nChrnX fAmAqiPKk761RwMVCggCmwECHgEWIQS3MgbE9w4HNekogSi6w0ACM3OBIgAARRMB AN0f6zauuzM+MGM6XISNvFlBxxocOgXo0XKCtaA+zg//APoDYYBZ/tip4UbJ+y1v 3LWrEcp7jlazwCdY+sDgUw8YDs0SPHUyNThAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQusNAAjNzgSJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnqTzkz9HCixXp0RluEmIxZePv1VJy1wszsvfrExmRs6MDFQoI ApkBApsBAh4BFiEEtzIGxPcOBzXpKIEousNAAjNzgSIAAN+YAP4mu1GuyskF9j3N +XIDuQmYBIa34QWGfHuZ7gUezWn9SQEAzYxTfWEGpcF0GgDCjZFQSi347pRzzYFA yUbHhhC7fgXCwAEEEBYKAHMFgmH0CPADhf94CRC0UVIk63RaLEcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeLE6zAKciBtjEQlZM8dXYdvxrs SewohaWTBzVPxaGNixYhBAQVSdupDyxOueIlBbRRUiTrdFosAAAwBwEA9eAcF+UY u0cChOu0KZPF4fGUn9RJiWsEAIwCcZZku3QBAOI8x2ers+949DVvL7XiaEYLyI6U 7yQubOey0Vw7GYcO =sqsX -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u259-priv.pgp000064400000000000000000000015601046102023000222760ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: FCDF 4C1D 67AC FA8B 42F6 A77C 408A 9CB7 3671 71C2 Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdAkkAmZb9pciCFplawcIfxB2sy5O/0qm7RpRzW 0R0eYA8AAQD+SEUrqu5/set+sa2ZznChY6Po/5RZ4bWL2auecs6CuBRVwsALBB8W CgB9BYJh8/a8AwsJBwkQQIqctzZxccJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnniBng+bluvEqK6IbDGVvY0cw7r3qyqj/ek2H+7NkuMcD FQoIApsBAh4BFiEE/N9MHWes+otC9qd8QIqctzZxccIAALtvAPkBz61SOIIt9Sog HWXi27PQ5WN4wpmB1m08e3A+93MvpgD/ZplLgfhc6UybW7uve/tYP642MJZgL+GJ YeQdY9V6jQ7NEjx1MjU5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ EECKnLc2cXHCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z6+Km4JKlO/DFaXNcoAXCY5xxIwoieGjOhfvCTgt7NngAxUKCAKZAQKbAQIeARYh BPzfTB1nrPqLQvanfECKnLc2cXHCAAASnQD9HFLKCsn8pOoeKJSvYwiUk3L5AdQ5 X+UJkzRx5jozE50BAPp8XKRsgOJTCUABE6AUqgr8nXtDkOtTwA/dtNrdc+UK =AZnJ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u259.pgp000064400000000000000000000017561046102023000213270ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdAkkAmZb9pciCFplawcIfxB2sy5O/0qm7RpRzW 0R0eYA/CwAsEHxYKAH0FgmHz9rwDCwkHCRBAipy3NnFxwkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeeIGeD5uW68SorohsMZW9jRzDuverK qP96TYf7s2S4xwMVCggCmwECHgEWIQT830wdZ6z6i0L2p3xAipy3NnFxwgAAu28A +QHPrVI4gi31KiAdZeLbs9DlY3jCmYHWbTx7cD73cy+mAP9mmUuB+FzpTJtbu697 +1g/rjYwlmAv4Ylh5B1j1XqNDs0SPHUyNTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQQIqctzZxccJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnr4qbgkqU78MVpc1ygBcJjnHEjCiJ4aM6F+8JOC3s2eADFQoI ApkBApsBAh4BFiEE/N9MHWes+otC9qd8QIqctzZxccIAABKdAP0cUsoKyfyk6h4o lK9jCJSTcvkB1Dlf5QmTNHHmOjMTnQEA+nxcpGyA4lMJQAEToBSqCvyde0OQ61PA D9202t1z5QrCwAEEEBYKAHMFgmH0CPADhf94CRC6w0ACM3OBIkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcX94S8CgsDSL4jU6TokeQRVm8h SOsQs+AAaWIdLCopkBYhBLcyBsT3Dgc16SiBKLrDQAIzc4EiAAAzVQD/a2SbmPGz 2z6lXmDyWLYt/BJQStK+kdDJ/ROQo035PHsA/1Ctx26GqJomM9Mol0KH3vQ8L+W5 6FvJrTRw2vZrducC =uh76 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u26-priv.pgp000064400000000000000000000015571046102023000222140ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5EC7 400A 739E 579B 704E 6188 0934 5EF1 045B 304A Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAsWXrbTR4qMDQLsRBqnABlzM/vuJi6opuGLZF NK0ysG4AAP9mLKrfq65KPNQipBzMZWRUs985q8ECqvob8KBw8bJp1xJzwsALBB8W CgB9BYJh8/awAwsJBwkQCTRe8QRbMEpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJcqDL91uUh8LsCIlIkvzNEGVJ+Rr5a1BEnEgYu+9j4UD FQoIApsBAh4BFiEEXsdACnOeV5twTmGICTRe8QRbMEoAAJrRAQCbUXE+yuy1hxbW 5G6ZJPNbn7IqHPlT8Bb2rkat0TaRSAD8CsS50fSdObyq7vjgV1i/8SpUZAlO9juu 0FZUUp0S3gnNETx1MjZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ CTRe8QRbMEpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn uKgQ1k42JgIcrxMh87Ku4a+k8n3aChcNL/IpzUDzbdoDFQoIApkBApsBAh4BFiEE XsdACnOeV5twTmGICTRe8QRbMEoAAPxBAQCrvlXj6MZ2v8dJq2nKBpXFylozNEKG ni6oj7p/vsKcvQD+Ixcb2NRX4AL1kJU73Rjae7sEWXNxRpv2TBPPY/whYwc= =sPcN -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u26.pgp000064400000000000000000000017561046102023000212370ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAsWXrbTR4qMDQLsRBqnABlzM/vuJi6opuGLZF NK0ysG7CwAsEHxYKAH0FgmHz9rADCwkHCRAJNF7xBFswSkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmclyoMv3W5SHwuwIiUiS/M0QZUn5Gvl rUEScSBi772PhQMVCggCmwECHgEWIQRex0AKc55Xm3BOYYgJNF7xBFswSgAAmtEB AJtRcT7K7LWHFtbkbpkk81ufsioc+VPwFvauRq3RNpFIAPwKxLnR9J05vKru+OBX WL/xKlRkCU72O67QVlRSnRLeCc0RPHUyNkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRAJNF7xBFswSkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcme4qBDWTjYmAhyvEyHzsq7hr6TyfdoKFw0v8inNQPNt2gMVCggC mQECmwECHgEWIQRex0AKc55Xm3BOYYgJNF7xBFswSgAA/EEBAKu+VePoxna/x0mr acoGlcXKWjM0QoaeLqiPun++wpy9AP4jFxvY1FfgAvWQlTvdGNp7uwRZc3FGm/ZM E89j/CFjB8LAAAQQFgoAcwWCYfQI6AOF/3gJEAzjN1r6k5ihRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ66gjbnhUu0rNT9QYc7RMa7l00v9 rZRo+rOl8RtYFYzHFiEEm/iTP8pTBvVn9fV1DOM3WvqTmKEAAIZiAP4jTeawaF47 MzzVms4TS06nvqiLXlknqwmbGmDrT+VB8AD40ZwDNS3JLX51jkYwUqxVleCNXYAp xXlANWrrayU9Ag== =JxCm -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u260-priv.pgp000064400000000000000000000015601046102023000222660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B69A 678A A242 FA4F 0BBF 1220 5C06 0879 9B0E 3C51 Comment: xVgEYfP2vBYJKwYBBAHaRw8BAQdAL0eqvKkJo98vvW72HnZWiDGSSdRk+3c9FQZi uuPS2BEAAQDBQ1ODUjew67JUmtWwtMV2BK4dhKGKaGOaIH9fNDJZIg7VwsALBB8W CgB9BYJh8/a8AwsJBwkQXAYIeZsOPFFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJ0cXOjtAd2AlpbI86NLW7HR3ypDVxmmfmR+pK5KEoPgD FQoIApsBAh4BFiEEtppniqJC+k8LvxIgXAYIeZsOPFEAAB2uAQC1zs7rXfO/zVct c6MX0YQO8erMJDDhKb5A7b2l0PaKrAEA0llg24TsYkGkfDRwrzeYZbzmLqDWQXuX +dRMnrLRiAzNEjx1MjYwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJ EFwGCHmbDjxRRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZwMCs5bCXUJoC1LAIWY+oLQHrwKM9v/2q1CaxZbVZMcYAxUKCAKZAQKbAQIeARYh BLaaZ4qiQvpPC78SIFwGCHmbDjxRAADS2gEAhNCSAErzoA9+QjSxxzlztKzpbTUL H0d5Bo+qc/8W0vsBAKvsXcnyCkikuyfVedDSCaFGS2+sjTWLdaUNPwbMIb8L =2L5F -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u260.pgp000064400000000000000000000017561046102023000213170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2vBYJKwYBBAHaRw8BAQdAL0eqvKkJo98vvW72HnZWiDGSSdRk+3c9FQZi uuPS2BHCwAsEHxYKAH0FgmHz9rwDCwkHCRBcBgh5mw48UUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnRxc6O0B3YCWlsjzo0tbsdHfKkNXG aZ+ZH6krkoSg+AMVCggCmwECHgEWIQS2mmeKokL6Twu/EiBcBgh5mw48UQAAHa4B ALXOzutd87/NVy1zoxfRhA7x6swkMOEpvkDtvaXQ9oqsAQDSWWDbhOxiQaR8NHCv N5hlvOYuoNZBe5f51EyestGIDM0SPHUyNjBAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a8AwsJBwkQXAYIeZsOPFFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnAwKzlsJdQmgLUsAhZj6gtAevAoz2//arUJrFltVkxxgDFQoI ApkBApsBAh4BFiEEtppniqJC+k8LvxIgXAYIeZsOPFEAANLaAQCE0JIASvOgD35C NLHHOXO0rOltNQsfR3kGj6pz/xbS+wEAq+xdyfIKSKS7J9V50NIJoUZLb6yNNYt1 pQ0/BswhvwvCwAEEEBYKAHMFgmH0CPADhf94CRBAipy3NnFxwkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme+2gxzEYANggjG4vjccy6Hw094 JAm8kt8dEMjtse2bBRYhBPzfTB1nrPqLQvanfECKnLc2cXHCAAARxgEAj2JGZgHU VFs3qqO9TXQsjrTz6Gp/MxiNiRk7+eJqbNMBAPtHN9NkXAQSydmKZvafe9LppIxd moKGOccRTMd2w5UI =CvGU -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u27-priv.pgp000064400000000000000000000015571046102023000222150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2C7B 74D1 388C E0F2 C400 2CE4 1EAD 11DB B281 472A Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAzmAtBGvQ8OJYqXUt8sqW6XhXYHXVK+msZFNN g69O5IIAAQDQG/BZGyA0fyAP8Nj2jeshvsSYr1FEF74WNH+RrYhZaA8swsALBB8W CgB9BYJh8/awAwsJBwkQHq0R27KBRypHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnhkUR0XNC7y6Wd65NtPkwUCq+Z1tnYBhMFphdI1gRj14D FQoIApsBAh4BFiEELHt00TiM4PLEACzkHq0R27KBRyoAAFcDAQCCczlvY8KIc73R wN+sUVeLwFZAZoannbeGohUY15tDlAD+Id8v9o5KCGMzA7lAaugfD8b+Iiqnjr83 SQ+VPtp5BgvNETx1MjdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ Hq0R27KBRypHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 09ZSTwx6hWPhgfnl0qwZB+i3YEcAi9uudN/0Z7BKA3UDFQoIApkBApsBAh4BFiEE LHt00TiM4PLEACzkHq0R27KBRyoAABeXAPsGn8wmEwREiTB17Nb3iNdC6/SQ4tHF hc3MmkZvqhV3hwD/bKK7HIW1TijMjNJXudvfbzXH14aa5g4GT0JEG4V0sgU= =wM6i -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u27.pgp000064400000000000000000000017561046102023000212400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAzmAtBGvQ8OJYqXUt8sqW6XhXYHXVK+msZFNN g69O5ILCwAsEHxYKAH0FgmHz9rADCwkHCRAerRHbsoFHKkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeGRRHRc0LvLpZ3rk20+TBQKr5nW2dg GEwWmF0jWBGPXgMVCggCmwECHgEWIQQse3TROIzg8sQALOQerRHbsoFHKgAAVwMB AIJzOW9jwohzvdHA36xRV4vAVkBmhqedt4aiFRjXm0OUAP4h3y/2jkoIYzMDuUBq 6B8Pxv4iKqeOvzdJD5U+2nkGC80RPHUyN0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRAerRHbsoFHKkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfT1lJPDHqFY+GB+eXSrBkH6LdgRwCL26503/RnsEoDdQMVCggC mQECmwECHgEWIQQse3TROIzg8sQALOQerRHbsoFHKgAAF5cA+wafzCYTBESJMHXs 1veI10Lr9JDi0cWFzcyaRm+qFXeHAP9sorschbVOKMyM0le5299vNcfXhprmDgZP QkQbhXSyBcLAAQQQFgoAcwWCYfQI6AOF/3gJEAk0XvEEWzBKRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4ag0xQfaeGxruesrmd8om8NI0jv M2FJIhV1Z/sNHYt1FiEEXsdACnOeV5twTmGICTRe8QRbMEoAAEzQAQDDl+tEpvaR IX8tp16B/tT9stZ8v7HHbjd/42vMw3pR4wD+OM/LPhT1V98RZJCgwNrsHvDuRkei va5hMla4QyEs+Ao= =3ZTf -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u28-priv.pgp000064400000000000000000000015571046102023000222160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: C18D 7971 0A68 696E 972B 0F32 1E6D E596 CD08 B4FD Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAWBdVYxWv2qt2EWWmDdNsTcEAB4GT9Qxur7BH v/DVTHwAAQDscgY/FPHDHeoF7GWYar90AqFia3Rnlk3ZFgA/sTS7jA6GwsALBB8W CgB9BYJh8/awAwsJBwkQHm3lls0ItP1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JngX9yextbZ7tB3uPmgXtbugI+0QKCA5ad0pgm6NPyWCYD FQoIApsBAh4BFiEEwY15cQpoaW6XKw8yHm3lls0ItP0AAPI0AQDplLe5fC+D/iLP dpuh5PMxK2D7V0uDZsC/D9j02T7EMgEAmolDxAPoy4FWgECrHG54pQB4E4cErpuh 7zWjW47suw7NETx1MjhAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ Hm3lls0ItP1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 00OvMmvaTvSrAqQdOOZLP3+PGOAzArVTylhXMnfigYwDFQoIApkBApsBAh4BFiEE wY15cQpoaW6XKw8yHm3lls0ItP0AAOnOAQDBWJXY79kqAU+b6yh533cNoPiscJ2l Il+SJygbXktrQgD/cgg3GgB496qsxp8QzJb4a670aYRljd5+O5bq3jNIaQc= =y1R7 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u28.pgp000064400000000000000000000017561046102023000212410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAWBdVYxWv2qt2EWWmDdNsTcEAB4GT9Qxur7BH v/DVTHzCwAsEHxYKAH0FgmHz9rADCwkHCRAebeWWzQi0/UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeBf3J7G1tnu0He4+aBe1u6Aj7RAoID lp3SmCbo0/JYJgMVCggCmwECHgEWIQTBjXlxCmhpbpcrDzIebeWWzQi0/QAA8jQB AOmUt7l8L4P+Is92m6Hk8zErYPtXS4NmwL8P2PTZPsQyAQCaiUPEA+jLgVaAQKsc bnilAHgThwSum6HvNaNbjuy7Ds0RPHUyOEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRAebeWWzQi0/UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfTQ68ya9pO9KsCpB045ks/f48Y4DMCtVPKWFcyd+KBjAMVCggC mQECmwECHgEWIQTBjXlxCmhpbpcrDzIebeWWzQi0/QAA6c4BAMFYldjv2SoBT5vr KHnfdw2g+KxwnaUiX5InKBteS2tCAP9yCDcaAHj3qqzGnxDMlvhrrvRphGWN3n47 lureM0hpB8LAAQQQFgoAcwWCYfQI6AOF/3gJEB6tEduygUcqRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZx8mTvJmawK4ytX/kexwIovYxPF8 a1hbxu5RGOXH9RXHFiEELHt00TiM4PLEACzkHq0R27KBRyoAAOr5AP9hzKhsmbWo BESgy1VyyuOpuGyQsrhbdUYTs6z17DO9IAEA9G1dWDF4EgGw4JJFPQdX5Ha53nOe 6gN8d3yl6fpePwg= =v36q -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u29-priv.pgp000064400000000000000000000015571046102023000222170ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: C1B1 1509 8025 4353 538D 9CC5 A911 87FE 2DBD 51FF Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAB5bITt5gytEfgBhrbbsTdbEDTEE24mySRwVl 20exdMsAAP4uyD+q0Qn2pC2bQMab8ZISj6NW0rHbZx5Tj6hJGjV6PBCSwsALBB8W CgB9BYJh8/awAwsJBwkQqRGH/i29Uf9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnoZXiaLkIO1fhKgs3itGoevzEEFEb1dNGsh87DnMGtNoD FQoIApsBAh4BFiEEwbEVCYAlQ1NTjZzFqRGH/i29Uf8AAOhJAP4taOeeo3yCO98H wXlnCEx6B4RHccL0KFqlxQQ6YtEXCwEAkIS6L6YcztWLyAxkLTRhsjXrECUQhdc+ 5Iz8rp2aOQvNETx1MjlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ qRGH/i29Uf9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Tbc89r4rLdwPP/V/CYaiqpmth33S5s5jZAh+EPGOTcsDFQoIApkBApsBAh4BFiEE wbEVCYAlQ1NTjZzFqRGH/i29Uf8AABPuAP9C/k4oa6AJSmvnnKX1xKkjdx6eQr72 ofa+L9Xmc4tPqQEA+paWOtCYIgkVb18InfELL2uijBM/3vHLJZRfnRrmQgs= =CF/l -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u29.pgp000064400000000000000000000017561046102023000212420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAB5bITt5gytEfgBhrbbsTdbEDTEE24mySRwVl 20exdMvCwAsEHxYKAH0FgmHz9rADCwkHCRCpEYf+Lb1R/0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmehleJouQg7V+EqCzeK0ah6/MQQURvV 00ayHzsOcwa02gMVCggCmwECHgEWIQTBsRUJgCVDU1ONnMWpEYf+Lb1R/wAA6EkA /i1o556jfII73wfBeWcITHoHhEdxwvQoWqXFBDpi0RcLAQCQhLovphzO1YvIDGQt NGGyNesQJRCF1z7kjPyunZo5C80RPHUyOUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRCpEYf+Lb1R/0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdNtzz2vist3A8/9X8JhqKqma2HfdLmzmNkCH4Q8Y5NywMVCggC mQECmwECHgEWIQTBsRUJgCVDU1ONnMWpEYf+Lb1R/wAAE+4A/0L+TihroAlKa+ec pfXEqSN3Hp5Cvvah9r4v1eZzi0+pAQD6lpY60JgiCRVvXwid8Qsva6KMEz/e8csl lF+dGuZCC8LAAQQQFgoAcwWCYfQI6AOF/3gJEB5t5ZbNCLT9RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0f+SRw/srbQPwpQGa2TdFX3YuoL 5LSAW8Rjx6G6ViJfFiEEwY15cQpoaW6XKw8yHm3lls0ItP0AAPu+AQCq/3b8hC4L bGARrU2/Hi5qhfs5wxdTYAeoq0iRW/vHyQD9EDBdgYzxUKKfLNZ/gaDhYpJkS0VI oCERc3a/gOuoOww= =yspD -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u3-priv.pgp000064400000000000000000000015561046102023000221260ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 70B0 C5FE FFE6 B55F 2CEE 8545 5621 246D 16D6 785E Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdAVSBsBds9z1TSSVg6dWDn24uEzt06h8FPI3To chGVbdkAAQDY3mNcXv/WCUzrr2K3MgDril+4FnzFAj8CgdcHZmokYw6/wsALBB8W CgB9BYJh8/avAwsJBwkQViEkbRbWeF5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn9CsQf3qd089I3MirCNTjQWRQkdfdspZWTxxQRjS9cCkD FQoIApsBAh4BFiEEcLDF/v/mtV8s7oVFViEkbRbWeF4AAAs8AP0YO4sVpJq89ZsW WmOoyiUbQJEdemqJI7diTaeT3gq2XAD/QCzyBRCnBvbNRKRBENXvJ8ex/sliEINU Gv7BR9MkyQTNEDx1M0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9q8DCwkHCRBW ISRtFtZ4XkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmez eu42/ovOCXkK2XJNTh+vXUo1LD351k0h3kqCinFrmwMVCggCmQECmwECHgEWIQRw sMX+/+a1XyzuhUVWISRtFtZ4XgAAefEBAK5u1Uns+1Dwk0/6+pDty6FnqTDOSQFm w8ziePpprhFjAPsHun1YEFBpNvLyFDDTo9YLjQ8fHPUufzbbxwv0R6arCQ== =4t4r -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u3.pgp000064400000000000000000000017561046102023000211520ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2rxYJKwYBBAHaRw8BAQdAVSBsBds9z1TSSVg6dWDn24uEzt06h8FPI3To chGVbdnCwAsEHxYKAH0FgmHz9q8DCwkHCRBWISRtFtZ4XkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf0KxB/ep3Tz0jcyKsI1ONBZFCR192y llZPHFBGNL1wKQMVCggCmwECHgEWIQRwsMX+/+a1XyzuhUVWISRtFtZ4XgAACzwA /Rg7ixWkmrz1mxZaY6jKJRtAkR16aokjt2JNp5PeCrZcAP9ALPIFEKcG9s1EpEEQ 1e8nx7H+yWIQg1Qa/sFH0yTJBM0QPHUzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YfP2rwMLCQcJEFYhJG0W1nheRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ7N67jb+i84JeQrZck1OH69dSjUsPfnWTSHeSoKKcWubAxUKCAKZ AQKbAQIeARYhBHCwxf7/5rVfLO6FRVYhJG0W1nheAAB58QEArm7VSez7UPCTT/r6 kO3LoWepMM5JAWbDzOJ4+mmuEWMA+we6fVgQUGk28vIUMNOj1guNDx8c9S5/NtvH C/RHpqsJwsABBBAWCgBzBYJh9AjnA4X/eAkQqz2u2AmjX3hHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn3Nf119VQASRNUCyr/LCj1zmiMclI s2R8yFY7wCNxVZQWIQQGGPhQttDEjb9Aa7+rPa7YCaNfeAAA76QBAP7qiOMH8ggC 0iUkjb3xQGr+ajWunyoWcPrR3Khh5YxAAP9KvAnFuoL6e5D5FGBsv8PzJrAyBEy/ CoYd2o04Cy0HAw== =6oyS -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u30-priv.pgp000064400000000000000000000015571046102023000222070ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4FD9 4C28 8F39 C463 3FBB D120 BF1A 1C6B 6789 F983 Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAC8Da8Em8fb9jMGT4WS4oiYKdtEz86IDkHA2G BLrLTOoAAPwLwYlgZJu8/khAyrgRl4nGchanIe+pdOQqsnMlKSSebBB2wsALBB8W CgB9BYJh8/awAwsJBwkQvxoca2eJ+YNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn9kgCCIpZ6ztaVNrsbi5HvgUbcbH8U34vZ890TPeD6+YD FQoIApsBAh4BFiEET9lMKI85xGM/u9Egvxoca2eJ+YMAAG0PAP9IS7Zimf+ydwnu vCs+OM6WtLePVJIJs/RD2Cv5aH1T5gD9HMzbr8aT0s61GTaW9F/rE+IqDzf6ZuID cVBwlSsRTgLNETx1MzBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ vxoca2eJ+YNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 2I5wOZtvrOR43/j55ElWwyLBahOI8rIAsc9lr29IaQoDFQoIApkBApsBAh4BFiEE T9lMKI85xGM/u9Egvxoca2eJ+YMAAMRtAP9EKpzx66C1BoBamJGCOv1zNVG1Qq6c TN8KpqKklhrt/AEAjbPwthKVgAAb8sRn8bSTeGsUWk3Awx5Rd7p1u/AWFAo= =ZE8P -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u30.pgp000064400000000000000000000017561046102023000212320ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAC8Da8Em8fb9jMGT4WS4oiYKdtEz86IDkHA2G BLrLTOrCwAsEHxYKAH0FgmHz9rADCwkHCRC/GhxrZ4n5g0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf2SAIIilnrO1pU2uxuLke+BRtxsfxT fi9nz3RM94Pr5gMVCggCmwECHgEWIQRP2UwojznEYz+70SC/GhxrZ4n5gwAAbQ8A /0hLtmKZ/7J3Ce68Kz44zpa0t49Ukgmz9EPYK/lofVPmAP0czNuvxpPSzrUZNpb0 X+sT4ioPN/pm4gNxUHCVKxFOAs0RPHUzMEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRC/GhxrZ4n5g0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfYjnA5m2+s5Hjf+PnkSVbDIsFqE4jysgCxz2Wvb0hpCgMVCggC mQECmwECHgEWIQRP2UwojznEYz+70SC/GhxrZ4n5gwAAxG0A/0QqnPHroLUGgFqY kYI6/XM1UbVCrpxM3wqmoqSWGu38AQCNs/C2EpWAABvyxGfxtJN4axRaTcDDHlF3 unW78BYUCsLAAQQQFgoAcwWCYfQI6AOF/3gJEKkRh/4tvVH/RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1gTGhfPZwaAS3QhiDvGFdWmOB2Q qkQhq5f0KeiF2iRUFiEEwbEVCYAlQ1NTjZzFqRGH/i29Uf8AANb2AP9mIfbffbmD XsblkxnCefKa5V16nD13Mvs/cr+VbLoMagEA1PLVgnX7FKbxOVKF+J+YUo/PEULX 4AC+BvszDj/EoA8= =t8td -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u31-priv.pgp000064400000000000000000000015571046102023000222100ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: DE70 A745 F098 EBCC 45B4 A3B2 5D01 95EC 3C6E 0D65 Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdA+HhktEUb7u6n2z1XE9rzzcPxyNA2NSrWhT9+ fUbWmmUAAQCQas4ZBnPHLBX27InWVetJ1Y3zN1NRT1hBra++2NL69BH3wsALBB8W CgB9BYJh8/awAwsJBwkQXQGV7DxuDWVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnUTBaOrQ/uu8Dq1tncYk4XwzA4EKk7WVlnxJ1EH0hxKkD FQoIApsBAh4BFiEE3nCnRfCY68xFtKOyXQGV7DxuDWUAAPa3AQCUAIa1/KsIeswj g0pa+YiyIRBUBnwPjK49E3PinZxLtgEAuoeCXJ9pEPR4tVzZyye7tYWDontQKTMV wrEVqjdCegbNETx1MzFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ XQGV7DxuDWVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn UuCxfyypYQ16jUBP3MFpuPmpRsw9wj/0oVOFNcqbEyoDFQoIApkBApsBAh4BFiEE 3nCnRfCY68xFtKOyXQGV7DxuDWUAAOEEAQDEzwIjG0q3zdu3cBZ9yEVn8EW9rdRo 3qPamrV9ND1ulgEAziYwDtkAFKv3Pf+ionCGCpSsQgGrrfA9aKDiileifQY= =nsWS -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u31.pgp000064400000000000000000000017561046102023000212330ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdA+HhktEUb7u6n2z1XE9rzzcPxyNA2NSrWhT9+ fUbWmmXCwAsEHxYKAH0FgmHz9rADCwkHCRBdAZXsPG4NZUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdRMFo6tD+67wOrW2dxiThfDMDgQqTt ZWWfEnUQfSHEqQMVCggCmwECHgEWIQTecKdF8JjrzEW0o7JdAZXsPG4NZQAA9rcB AJQAhrX8qwh6zCODSlr5iLIhEFQGfA+Mrj0Tc+KdnEu2AQC6h4Jcn2kQ9Hi1XNnL J7u1hYOie1ApMxXCsRWqN0J6Bs0RPHUzMUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRBdAZXsPG4NZUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdS4LF/LKlhDXqNQE/cwWm4+alGzD3CP/ShU4U1ypsTKgMVCggC mQECmwECHgEWIQTecKdF8JjrzEW0o7JdAZXsPG4NZQAA4QQBAMTPAiMbSrfN27dw Fn3IRWfwRb2t1Gjeo9qatX00PW6WAQDOJjAO2QAUq/c9/6KicIYKlKxCAaut8D1o oOKKV6J9BsLAAQQQFgoAcwWCYfQI6AOF/3gJEL8aHGtnifmDRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyJMBIcbs3mVCOAZgxy8R3V8f51j pqbxyc7DFSkQFzNCFiEET9lMKI85xGM/u9Egvxoca2eJ+YMAAKkFAP48DspJJL78 GofX0JNYTVR7hYTGum1w1C30woPNgX95JgEAk8Cn21BlRxXcNqGeLzz8RsSIvioG gi2I3cMn/CnZXws= =hTY7 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u32-priv.pgp000064400000000000000000000015571046102023000222110ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4435 0591 F20A 4069 F131 1562 83AA BF91 FE4A E5EF Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAvzUI7r18jFL5zys1esLglfd05+KDd5eH8jOu VQh3i1YAAQCvmDnMjUapB7elpiZ6eIxkZuBrmkvJ7QwsNghcUd007Q9HwsALBB8W CgB9BYJh8/awAwsJBwkQg6q/kf5K5e9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnGv4dX7aUNt8alGGffe48jylB8abv5CeJY6g/wlT/m50D FQoIApsBAh4BFiEERDUFkfIKQGnxMRVig6q/kf5K5e8AAOvlAP41VvC8SKavV6BQ jNL4cHxTj53Wbv0g9IM+UUUxwprT9wD/QhlPfiNLeKV4zngsEmMNkRf9WQTKjZnn SEncUilXpQLNETx1MzJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ g6q/kf5K5e9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn U+iFRnhs9z9ED5vUZLesNO90aTLyMS+p4TZ7JoAqLEkDFQoIApkBApsBAh4BFiEE RDUFkfIKQGnxMRVig6q/kf5K5e8AADEnAQCaXQpaq5aY8z9MAsdxgV7Qp87flKk0 SuFTjgGxAqPXfQEAstKThLeaBS7n+pIEOUqzLKmBK2jNFlvb8bQW7uhTLAY= =3PFO -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u32.pgp000064400000000000000000000017561046102023000212340ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAvzUI7r18jFL5zys1esLglfd05+KDd5eH8jOu VQh3i1bCwAsEHxYKAH0FgmHz9rADCwkHCRCDqr+R/krl70cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmca/h1ftpQ23xqUYZ997jyPKUHxpu/k J4ljqD/CVP+bnQMVCggCmwECHgEWIQRENQWR8gpAafExFWKDqr+R/krl7wAA6+UA /jVW8LxIpq9XoFCM0vhwfFOPndZu/SD0gz5RRTHCmtP3AP9CGU9+I0t4pXjOeCwS Yw2RF/1ZBMqNmedISdxSKVelAs0RPHUzMkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRCDqr+R/krl70cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdT6IVGeGz3P0QPm9Rkt6w073RpMvIxL6nhNnsmgCosSQMVCggC mQECmwECHgEWIQRENQWR8gpAafExFWKDqr+R/krl7wAAMScBAJpdClqrlpjzP0wC x3GBXtCnzt+UqTRK4VOOAbECo9d9AQCy0pOEt5oFLuf6kgQ5SrMsqYEraM0WW9vx tBbu6FMsBsLAAQQQFgoAcwWCYfQI6AOF/3gJEF0Blew8bg1lRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9AUw56RoaoQ0q++r4TAMZc68PAD 1Ze6WBFoTXjnxAILFiEE3nCnRfCY68xFtKOyXQGV7DxuDWUAAICtAP0ds0lR1YAD hX83fvcanYrpM33HvQ72dpnFgJ+syVcxvwEA3o20vfAlYRV1EI0MOtPcvn3/yW3z cjBG8sGCI09J1wQ= =djjr -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u33-priv.pgp000064400000000000000000000015571046102023000222120ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 76E9 D213 C5F6 7F2D BE41 0F57 DF3F 9BB9 622A AFC7 Comment: xVgEYfP2sBYJKwYBBAHaRw8BAQdAIiSextZzT5eSTeF2iafleteCQKNawRFlCuES mJSH4qQAAP9QJMjpRdc9J4ybSvJ6B9+n9ZsslxcuCdx3EeNf9YwscBBywsALBB8W CgB9BYJh8/awAwsJBwkQ3z+buWIqr8dHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnphuHLgHGni45JGyBTLx85ms9u8Ve7gBwSN7vONr6QCMD FQoIApsBAh4BFiEEdunSE8X2fy2+QQ9X3z+buWIqr8cAAPoJAQDWl28KdCvPGHqp PQgAWdsOBmtaMMxKfCaLiS2e8DwxUQD/Wz234YEn+0Z1dpQUtU776r0hRGHH3/Zq upxSPQHxDA7NETx1MzNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ 3z+buWIqr8dHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn q66RVkn2xL9dYyRzJCpzwaS8Zv87e7lQ1ZTjnkYYA34DFQoIApkBApsBAh4BFiEE dunSE8X2fy2+QQ9X3z+buWIqr8cAALiHAQD6U2m+iLKVRWSXIOiPcPVTsDrSqK5f 5vY9fCamxcilXwD+LfHcDfmoe/7UriSsSXtPH8vZJ6QxD3mwUrOWbOkSYgM= =RDf6 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u33.pgp000064400000000000000000000017561046102023000212350ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sBYJKwYBBAHaRw8BAQdAIiSextZzT5eSTeF2iafleteCQKNawRFlCuES mJSH4qTCwAsEHxYKAH0FgmHz9rADCwkHCRDfP5u5Yiqvx0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmemG4cuAcaeLjkkbIFMvHzmaz27xV7u AHBI3u842vpAIwMVCggCmwECHgEWIQR26dITxfZ/Lb5BD1ffP5u5YiqvxwAA+gkB ANaXbwp0K88Yeqk9CABZ2w4Ga1owzEp8JouJLZ7wPDFRAP9bPbfhgSf7RnV2lBS1 TvvqvSFEYcff9mq6nFI9AfEMDs0RPHUzM0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rADCwkHCRDfP5u5Yiqvx0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmerrpFWSfbEv11jJHMkKnPBpLxm/zt7uVDVlOOeRhgDfgMVCggC mQECmwECHgEWIQR26dITxfZ/Lb5BD1ffP5u5YiqvxwAAuIcBAPpTab6IspVFZJcg 6I9w9VOwOtKorl/m9j18JqbFyKVfAP4t8dwN+ah7/tSuJKxJe08fy9knpDEPebBS s5Zs6RJiA8LAAQQQFgoAcwWCYfQI6AOF/3gJEIOqv5H+SuXvRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6EfLnzRUVAjOjSCaOzQmGGNkq1H 7Y4nuLIMqr+Y665PFiEERDUFkfIKQGnxMRVig6q/kf5K5e8AANh7AP9MeY1FFn8a zIc1JNC1XeAzFqBf1rxaQ1Ga/z6xR5dprwD+I3+Sb2NaOoc2PyB4/SaHepQsFVFo VJjsxz8s5TSFLgQ= =0AyM -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u34-priv.pgp000064400000000000000000000015571046102023000222130ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A48F 536C 34D4 A493 CD23 3870 C05B 675B 873B 139D Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdACqio72SjFIgN2nqSvMn5+WuqIz71vvq7Ve5l puHkwfoAAP9Vb3QH6OFI65/RJrM4MYvZEX6gjVn//Ee1dLRK4jyrHBGzwsALBB8W CgB9BYJh8/axAwsJBwkQwFtnW4c7E51HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJz5WAazCmOcQC1Igz2beU8h8XR6JVrlmJ3q6W/pGS6YD FQoIApsBAh4BFiEEpI9TbDTUpJPNIzhwwFtnW4c7E50AAL46AP0ReRcHyQtNgw/E QOERyv/jfiN/wv4GsROkErFDdeZzRwEA9jHNwr2ocE2Mv++AuvOamreqx5NnQYP3 jkYCHKqS5ArNETx1MzRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ wFtnW4c7E51HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn eOYvu0ZJXuvnxpXOR3qzJhqqOo4sOP/Iy5ddMaxDrVQDFQoIApkBApsBAh4BFiEE pI9TbDTUpJPNIzhwwFtnW4c7E50AAGDeAQCAEl4v0ux6MwxePGGKazx7Mb1FeJQO s9xcaHDS2gMpOQEAzwc8APK9SGFKnv0ojsmHRQt0fHiakH7vLidYWPGqRgc= =VnVA -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u34.pgp000064400000000000000000000017561046102023000212360ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdACqio72SjFIgN2nqSvMn5+WuqIz71vvq7Ve5l puHkwfrCwAsEHxYKAH0FgmHz9rEDCwkHCRDAW2dbhzsTnUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnPlYBrMKY5xALUiDPZt5TyHxdHolW uWYnerpb+kZLpgMVCggCmwECHgEWIQSkj1NsNNSkk80jOHDAW2dbhzsTnQAAvjoA /RF5FwfJC02DD8RA4RHK/+N+I3/C/gaxE6QSsUN15nNHAQD2Mc3CvahwTYy/74C6 85qat6rHk2dBg/eORgIcqpLkCs0RPHUzNEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRDAW2dbhzsTnUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmd45i+7Rkle6+fGlc5HerMmGqo6jiw4/8jLl10xrEOtVAMVCggC mQECmwECHgEWIQSkj1NsNNSkk80jOHDAW2dbhzsTnQAAYN4BAIASXi/S7HozDF48 YYprPHsxvUV4lA6z3FxocNLaAyk5AQDPBzwA8r1IYUqe/SiOyYdFC3R8eJqQfu8u J1hY8apGB8LAAQQQFgoAcwWCYfQI6AOF/3gJEN8/m7liKq/HRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxRg54jRINIYBG2iVRDFi4JJW3oi AIrYmeNu0n7K6rTkFiEEdunSE8X2fy2+QQ9X3z+buWIqr8cAAA0VAQCTwZ056QpE fQ7x3OSxLUH01sEoZJiDMa4xZgnkakR0ZQEAyOtF8uFgJO9caqbylt0wjxJtAr/f xqOpbs77ybxqZwU= =mFfW -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u35-priv.pgp000064400000000000000000000015571046102023000222140ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7C3F EDFA B082 D236 A918 1B8E 2B64 83A5 8275 6C6E Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAcSiUwKvgGzgsFif+G/VM4CZHkQW+krY+ygyD UV7rPioAAQDueoaKOqY4ijmfzeMhgYgP892+HbkMVGR+EyFUGqE2Ig4dwsALBB8W CgB9BYJh8/axAwsJBwkQK2SDpYJ1bG5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnzgEJuA6oGNPkAJY0LSe9bmxef+Pu1klUdQgoM7DI9u8D FQoIApsBAh4BFiEEfD/t+rCC0japGBuOK2SDpYJ1bG4AANbsAQDOIE3Ww4uy9scl 0tHirSLwdwKP/vBK5MgZhAWUj+C3PAEApU9WpIs5RARqr8tXflktkbWZcY4WrAM1 jpXTCmwlDQnNETx1MzVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ K2SDpYJ1bG5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn OCSQU+mtMZOy+JKTXA3XFJ7gVDY3XmXHc75vHHvU90gDFQoIApkBApsBAh4BFiEE fD/t+rCC0japGBuOK2SDpYJ1bG4AABW6AQD/968SJbLRhQqCaZPv1/CLX6mzD6t7 vsNSmudvdZJY0AEA9HTJCA0Zf7GwP6m/dBDIiH9xYQgnsLyAf6miEop1Kgo= =5tc2 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u35.pgp000064400000000000000000000017561046102023000212370ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAcSiUwKvgGzgsFif+G/VM4CZHkQW+krY+ygyD UV7rPirCwAsEHxYKAH0FgmHz9rEDCwkHCRArZIOlgnVsbkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfOAQm4DqgY0+QAljQtJ71ubF5/4+7W SVR1CCgzsMj27wMVCggCmwECHgEWIQR8P+36sILSNqkYG44rZIOlgnVsbgAA1uwB AM4gTdbDi7L2xyXS0eKtIvB3Ao/+8ErkyBmEBZSP4Lc8AQClT1akizlEBGqvy1d+ WS2RtZlxjhasAzWOldMKbCUNCc0RPHUzNUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRArZIOlgnVsbkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc4JJBT6a0xk7L4kpNcDdcUnuBUNjdeZcdzvm8ce9T3SAMVCggC mQECmwECHgEWIQR8P+36sILSNqkYG44rZIOlgnVsbgAAFboBAP/3rxIlstGFCoJp k+/X8ItfqbMPq3u+w1Ka5291kljQAQD0dMkIDRl/sbA/qb90EMiIf3FhCCewvIB/ qaISinUqCsLAAQQQFgoAcwWCYfQI6AOF/3gJEMBbZ1uHOxOdRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2oCcCrOZOh4dYHlglzfxSTtE7Sq NtEglOQD10xfIJpAFiEEpI9TbDTUpJPNIzhwwFtnW4c7E50AAHt/AQD2stYSef6c umbf8um5LzdwGZt+Y/ZTapizfchSlw9BMQEAy1Xw9vXUQWf4o5DbXWtuuP7GrR74 9uBgVy+MtwgCzQU= =9irc -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u36-priv.pgp000064400000000000000000000015571046102023000222150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0FDF AF64 606B 6C72 BF1C 940D 24F8 0C95 D5B8 310E Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAfqGnX+Jd/fPyCA6Tidbo0A5i169fQ7dEAwcp r0wYz54AAQDAWI0Rk7rVHQqw1/DShfQdBnRc+EFx1stg6C0Miv5K9RFIwsALBB8W CgB9BYJh8/axAwsJBwkQJPgMldW4MQ5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJBM/ulzDpUX85KRIHFpITQHGqN4KYV1yOa8gLE5R0rID FQoIApsBAh4BFiEED9+vZGBrbHK/HJQNJPgMldW4MQ4AAFMkAPwJSqu7pp1yZg3Y FW4crq8vDvICskQrJsGQvqBTJsHVnAD/ZqojV27kARYgOjMxrszSwzAA2Z9TQDVP 9tizHSMINQrNETx1MzZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ JPgMldW4MQ5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn AyV/iElpgrLI+Cr0m1a+ZVC4CJAdjkpNU5Dfqj31GE4DFQoIApkBApsBAh4BFiEE D9+vZGBrbHK/HJQNJPgMldW4MQ4AABnuAPwL8z63EmwO2gongpUAS56METqNcFJJ 5cj9TcNwEeyFxQEA22ULhZxs2yfKjYTzYdNV3TKChVZaP/KsJQCIxIbW/QM= =Uxmy -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u36.pgp000064400000000000000000000017561046102023000212400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAfqGnX+Jd/fPyCA6Tidbo0A5i169fQ7dEAwcp r0wYz57CwAsEHxYKAH0FgmHz9rEDCwkHCRAk+AyV1bgxDkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmckEz+6XMOlRfzkpEgcWkhNAcao3gph XXI5ryAsTlHSsgMVCggCmwECHgEWIQQP369kYGtscr8clA0k+AyV1bgxDgAAUyQA /AlKq7umnXJmDdgVbhyury8O8gKyRCsmwZC+oFMmwdWcAP9mqiNXbuQBFiA6MzGu zNLDMADZn1NANU/22LMdIwg1Cs0RPHUzNkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRAk+AyV1bgxDkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcDJX+ISWmCssj4KvSbVr5lULgIkB2OSk1TkN+qPfUYTgMVCggC mQECmwECHgEWIQQP369kYGtscr8clA0k+AyV1bgxDgAAGe4A/AvzPrcSbA7aCieC lQBLnowROo1wUknlyP1Nw3AR7IXFAQDbZQuFnGzbJ8qNhPNh01XdMoKFVlo/8qwl AIjEhtb9A8LAAQQQFgoAcwWCYfQI6AOF/3gJECtkg6WCdWxuRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZygzBZ5f8hu5g7CmclsVTc4RoGcA YhDLPVTkk4YffvW7FiEEfD/t+rCC0japGBuOK2SDpYJ1bG4AAEvVAPwLi1Ixaszc NpkjK29G2CMyg+GlQcSUXArltwjFYaGeWwEA+01YWKshAJiIuqZN8lI/h1QtQMX9 T+z5xyZUmqoHNQE= =E+rJ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u37-priv.pgp000064400000000000000000000015571046102023000222160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6B5A 25C2 DD40 AE58 272F B17D 15C3 3EF1 3B9D 7FE8 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAO5MJYbyHzkvmWSndWAwHUmpEUNLZXSpp8Cfw HEh2xYUAAP9wWJpqSZgWop2KLmfltPOKUmj1fuMqbJGPd7fGOsbcRxITwsALBB8W CgB9BYJh8/axAwsJBwkQFcM+8Tudf+hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnhXp5y9e/BVLPwu5DiSW3FDMu8Fpn8mgAuvO3XuoWWaMD FQoIApsBAh4BFiEEa1olwt1ArlgnL7F9FcM+8Tudf+gAAPorAQCAdaRJxwCbvNi4 S8U5aZ7YIyzwrn1lngSkr7S/jnRf4wD/djr6nbDKbouBMO0aWoXWZRq1DcQkLZJl TTTFr4tofwjNETx1MzdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ FcM+8Tudf+hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn O9hb3xCHU7fSDFuQBPoO6kM3JWxz1YCSQqdYIsm2a9kDFQoIApkBApsBAh4BFiEE a1olwt1ArlgnL7F9FcM+8Tudf+gAANriAQCRC3pqdaiV8cpfog1N0J1L2zbqt2Rx JNPnSXpXdPFLCwEAwCPvQPIcxSODNBNEvI+tqLcmHCrs2QhiyRsS67NxOQE= =iydd -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u37.pgp000064400000000000000000000017561046102023000212410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAO5MJYbyHzkvmWSndWAwHUmpEUNLZXSpp8Cfw HEh2xYXCwAsEHxYKAH0FgmHz9rEDCwkHCRAVwz7xO51/6EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeFennL178FUs/C7kOJJbcUMy7wWmfy aAC687de6hZZowMVCggCmwECHgEWIQRrWiXC3UCuWCcvsX0Vwz7xO51/6AAA+isB AIB1pEnHAJu82LhLxTlpntgjLPCufWWeBKSvtL+OdF/jAP92OvqdsMpui4Ew7Rpa hdZlGrUNxCQtkmVNNMWvi2h/CM0RPHUzN0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRAVwz7xO51/6EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc72FvfEIdTt9IMW5AE+g7qQzclbHPVgJJCp1giybZr2QMVCggC mQECmwECHgEWIQRrWiXC3UCuWCcvsX0Vwz7xO51/6AAA2uIBAJELemp1qJXxyl+i DU3QnUvbNuq3ZHEk0+dJeld08UsLAQDAI+9A8hzFI4M0E0S8j62otyYcKuzZCGLJ GxLrs3E5AcLAAQQQFgoAcwWCYfQI6AOF/3gJECT4DJXVuDEORxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ53TR4LxnW2PrIyBg0pms+qITGL/ jgwsDsjH81d8ZS0qFiEED9+vZGBrbHK/HJQNJPgMldW4MQ4AAIkNAP9Gvk//Vf3l T1ZZ2UMveIPW0wlzZOQrLsZqlSiSS/72kwEA8DJa4W94WIRBB34RYgH9eBOQGX2u +b25ROvbNcvfhAg= =ahvg -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u38-priv.pgp000064400000000000000000000015571046102023000222170ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3814 E465 DDDC DB7F 352E 513D 9C34 D38E 08A4 360A Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAju7NVOwYbLUczJhb2pSbUKbTaCsFp17alEGh VcSEaioAAPwPsMLrzvxjvSxeZzj/SsieELP+AQK+ooDIgscehEO3VhHRwsALBB8W CgB9BYJh8/axAwsJBwkQnDTTjgikNgpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn6srBidKKZ2slt1trtOBquEkYCvArn62bHcn1+EK1AgAD FQoIApsBAh4BFiEEOBTkZd3c2381LlE9nDTTjgikNgoAALt2AP42VvpcNPm181VH o1g3ZANnsEzfoz/Od0/8vqwcGJ1c1AD5AVE31gICeK3nbV7w4Yo3MXKkli7YxtWo vNw6F/G6iwvNETx1MzhAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ nDTTjgikNgpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn yzEbGjiT9uX+LGWs3Zmhny62Y9/DeEJ4zN+MCcvOzi8DFQoIApkBApsBAh4BFiEE OBTkZd3c2381LlE9nDTTjgikNgoAAD70AQCAowWrVcXHcKvn1B0+mntTbvlMgcQQ pzu42bXhLuvJLAEAyEl9KNvuDu2YsO5nB5ZMsWZ8tPabx2irVcaZWtLLnQ8= =zYGr -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u38.pgp000064400000000000000000000017561046102023000212420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAju7NVOwYbLUczJhb2pSbUKbTaCsFp17alEGh VcSEairCwAsEHxYKAH0FgmHz9rEDCwkHCRCcNNOOCKQ2CkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfqysGJ0opnayW3W2u04Gq4SRgK8Cuf rZsdyfX4QrUCAAMVCggCmwECHgEWIQQ4FORl3dzbfzUuUT2cNNOOCKQ2CgAAu3YA /jZW+lw0+bXzVUejWDdkA2ewTN+jP853T/y+rBwYnVzUAPkBUTfWAgJ4redtXvDh ijcxcqSWLtjG1ai83DoX8bqLC80RPHUzOEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRCcNNOOCKQ2CkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfLMRsaOJP25f4sZazdmaGfLrZj38N4QnjM34wJy87OLwMVCggC mQECmwECHgEWIQQ4FORl3dzbfzUuUT2cNNOOCKQ2CgAAPvQBAICjBatVxcdwq+fU HT6ae1Nu+UyBxBCnO7jZteEu68ksAQDISX0o2+4O7Ziw7mcHlkyxZny09pvHaKtV xpla0sudD8LAAQQQFgoAcwWCYfQI6AOF/3gJEBXDPvE7nX/oRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ38/zY9bys+A8G3KcevAgYUcIfua U6kfOgEw6uorOdvNFiEEa1olwt1ArlgnL7F9FcM+8Tudf+gAANHJAQC4Mdtyx1Iw RjyphgdXeYgLKxPTJNZfj7UNtmA5z6PKVwD/Vw9ykkSDefIMxCaNbfQiKZnvHGF8 ThqZXT31vmyyDgQ= =quA6 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u39-priv.pgp000064400000000000000000000015571046102023000222200ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2BF2 4399 1E5B 6444 861F C662 E938 8845 6D33 F149 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAg1ZvmgNG63oOmSVAB1a3bD3nFBn8f6tZ+9Lj Ta3MgygAAQCDoW9MNCq/boUsRGNqRGYF2nLd2BpPaVToesNeVP0zYQ5rwsALBB8W CgB9BYJh8/axAwsJBwkQ6TiIRW0z8UlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnOOF8CRxSIeLPGGhLcqfr7J3DtlzDy2u8KFxRa9pvXmcD FQoIApsBAh4BFiEEK/JDmR5bZESGH8Zi6TiIRW0z8UkAAAkTAP9XAGs9S91Hf0M7 EDP72ewVrRgAkcDhN7vxGX0oFxu0BAD/ROhLXxrfOT5/FufOJDeVtPTFmHY3iIef rRMnJqxoVArNETx1MzlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ 6TiIRW0z8UlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn ID6zAEO3sC5DlmLq+q9T2CkwVTygFWAf/rnA7T/gjfMDFQoIApkBApsBAh4BFiEE K/JDmR5bZESGH8Zi6TiIRW0z8UkAAJ8YAQCtVhdP8wKt+hYrz6LXU5ueAjezSJKq +SDgVXzNGIL42wEA+jOQVVo+Oo8H0PdJa1z6MdLz+anyQ1xVMbxvOqZOww4= =mkl6 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u39.pgp000064400000000000000000000017561046102023000212430ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAg1ZvmgNG63oOmSVAB1a3bD3nFBn8f6tZ+9Lj Ta3MgyjCwAsEHxYKAH0FgmHz9rEDCwkHCRDpOIhFbTPxSUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc44XwJHFIh4s8YaEtyp+vsncO2XMPL a7woXFFr2m9eZwMVCggCmwECHgEWIQQr8kOZHltkRIYfxmLpOIhFbTPxSQAACRMA /1cAaz1L3Ud/QzsQM/vZ7BWtGACRwOE3u/EZfSgXG7QEAP9E6EtfGt85Pn8W584k N5W09MWYdjeIh5+tEycmrGhUCs0RPHUzOUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRDpOIhFbTPxSUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcgPrMAQ7ewLkOWYur6r1PYKTBVPKAVYB/+ucDtP+CN8wMVCggC mQECmwECHgEWIQQr8kOZHltkRIYfxmLpOIhFbTPxSQAAnxgBAK1WF0/zAq36FivP otdTm54CN7NIkqr5IOBVfM0YgvjbAQD6M5BVWj46jwfQ90lrXPox0vP5qfJDXFUx vG86pk7DDsLAAQQQFgoAcwWCYfQI6AOF/3gJEJw0044IpDYKRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+3aQnbIeRerpEq4njnqUEN9zDUn gRohJCAaJ56cm1oxFiEEOBTkZd3c2381LlE9nDTTjgikNgoAAOFrAP44Xoe28QUm +6G5hqqdNLM64axRkf24dZP8p80XHVQLXAD9FcHT6a0AyrCtV4wLVoP9j11vfbHh G9FSO4WhZKz+eAw= =Owvr -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u4-priv.pgp000064400000000000000000000015561046102023000221270ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: EC44 75DE 5BD7 6EA7 DD47 9877 7E9C 990C 2497 38B1 Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdA8j204O49vR0oMxSTAl/69sjOJv3TERg4ioDd UIICCHkAAQDWbYkyJSeXtK+aOVuNzyU51+tXn1mmplno+cuBo41SZBD2wsALBB8W CgB9BYJh8/avAwsJBwkQfpyZDCSXOLFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJy9OhcI7i3whvABdRbRSlfMwEHtDlfKG2E0dklNqPYsD FQoIApsBAh4BFiEE7ER13lvXbqfdR5h3fpyZDCSXOLEAAJ/DAQC4RwyyXPnEVON7 r3avLas6iVO6BTP7laqnqx6bX5jp3wEAiOBP7zLvrpa8m7CnSXfzRqvCePvSpNt5 MLYrX75iFATNEDx1NEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9q8DCwkHCRB+ nJkMJJc4sUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfp 9Ed5Ka2qp3VTqNPCXtw/bWrG5EANpQ0vRYOqawG2pQMVCggCmQECmwECHgEWIQTs RHXeW9dup91HmHd+nJkMJJc4sQAAKfoA/RaqI8zYlP/FOkSdneXwWHpmG39xFJTf Rlb4gjsd94j8AP9eA3ZENBCAufZahNIYn7np6QaN2qnOHoXymDeglNJ4CA== =pX3J -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u4.pgp000064400000000000000000000017561046102023000211530ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2rxYJKwYBBAHaRw8BAQdA8j204O49vR0oMxSTAl/69sjOJv3TERg4ioDd UIICCHnCwAsEHxYKAH0FgmHz9q8DCwkHCRB+nJkMJJc4sUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnL06FwjuLfCG8AF1FtFKV8zAQe0OV 8obYTR2SU2o9iwMVCggCmwECHgEWIQTsRHXeW9dup91HmHd+nJkMJJc4sQAAn8MB ALhHDLJc+cRU43uvdq8tqzqJU7oFM/uVqqerHptfmOnfAQCI4E/vMu+ulrybsKdJ d/NGq8J4+9Kk23kwtitfvmIUBM0QPHU0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YfP2rwMLCQcJEH6cmQwklzixRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ+n0R3kpraqndVOo08Je3D9tasbkQA2lDS9Fg6prAbalAxUKCAKZ AQKbAQIeARYhBOxEdd5b126n3UeYd36cmQwklzixAAAp+gD9FqojzNiU/8U6RJ2d 5fBYemYbf3EUlN9GVviCOx33iPwA/14DdkQ0EIC59lqE0hifuenpBo3aqc4ehfKY N6CU0ngIwsABBBAWCgBzBYJh9AjnA4X/eAkQViEkbRbWeF5HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnfqFQZnYpXEhyQAFH7cye/Eajuz/L UALa1JU38V9yt2UWIQRwsMX+/+a1XyzuhUVWISRtFtZ4XgAAHggBAI7/zjKzuoNs 26V1GRBbeEt/Be03AtJXdReeB5h7z8sZAP9HVToF3QduWHPJotYCQ8eeNrezYEQb 70ZMl93CQ/AzCw== =+VQN -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u40-priv.pgp000064400000000000000000000015571046102023000222100ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 1247 6010 1EF9 48B0 E9EC 24D9 326F FEBD 505B E4D3 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAPw/lW8/pMalGtQjdamnpJ60WkpljYpMNpYOI wQNomowAAP9SDoAI2zFRdgP9zXWEQrHGi9KV5GdJRxBlwu8JZm524hBhwsALBB8W CgB9BYJh8/axAwsJBwkQMm/+vVBb5NNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnrT0FgQT/Ky7WdtpYsIoO8MQP4GFLRHIqSSqvMM8BstsD FQoIApsBAh4BFiEEEkdgEB75SLDp7CTZMm/+vVBb5NMAAN0sAP9/BLybNdeVAm+G bQG3aMQdsfJm6FMwNsaNrTDMmpAhlQEA4YpzNZZzr9J+QfWH5F+cmeWx2JgmTFkr ncAMTshHXgHNETx1NDBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ Mm/+vVBb5NNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn VTT/4YdthTHUnoONPsUe5TBkOGzCNnur/Fa4yWDGIE0DFQoIApkBApsBAh4BFiEE EkdgEB75SLDp7CTZMm/+vVBb5NMAAEPhAQCy+ttYdJm7MAyOx2FC+Jzdx4urEKZV upccVwuxCe0NpQD9H5j8+XAbJZyiBFvDjRs9ANpz/qw5L3GwOXom0eiegAw= =8ZN2 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u40.pgp000064400000000000000000000017561046102023000212330ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAPw/lW8/pMalGtQjdamnpJ60WkpljYpMNpYOI wQNomozCwAsEHxYKAH0FgmHz9rEDCwkHCRAyb/69UFvk00cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmetPQWBBP8rLtZ22liwig7wxA/gYUtE cipJKq8wzwGy2wMVCggCmwECHgEWIQQSR2AQHvlIsOnsJNkyb/69UFvk0wAA3SwA /38EvJs115UCb4ZtAbdoxB2x8mboUzA2xo2tMMyakCGVAQDhinM1lnOv0n5B9Yfk X5yZ5bHYmCZMWSudwAxOyEdeAc0RPHU0MEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRAyb/69UFvk00cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdVNP/hh22FMdSeg40+xR7lMGQ4bMI2e6v8VrjJYMYgTQMVCggC mQECmwECHgEWIQQSR2AQHvlIsOnsJNkyb/69UFvk0wAAQ+EBALL621h0mbswDI7H YUL4nN3Hi6sQplW6lxxXC7EJ7Q2lAP0fmPz5cBslnKIEW8ONGz0A2nP+rDkvcbA5 eibR6J6ADMLAAQQQFgoAcwWCYfQI6AOF/3gJEOk4iEVtM/FJRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzt2zC/3pKj9aY/Ye5cDUQY1tYXd tnLH61YaZzT79YzyFiEEK/JDmR5bZESGH8Zi6TiIRW0z8UkAAEuZAQCdQ2ldRt0O G/WYG4TNCCmG5b98hO4EGH8VAalvoBGWkgEAuInPKr+UQRupO/cg2/cM/Y6YgFNj 0DpEPPN6nup/1QU= =AsPx -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u41-priv.pgp000064400000000000000000000015571046102023000222110ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 074E 0836 27D1 ED61 8486 FB18 865E A712 3912 BE53 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdATikTIhYh3NlpBbPz3xhWNsXvepbecBZyMdjW cElShsgAAQD/b18vgrxDxo6vrRjeCJxYgVPpBbefUY5VnMeX1bJtERBrwsALBB8W CgB9BYJh8/axAwsJBwkQhl6nEjkSvlNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnssVjP10rpv9qaWBGbPlVrGMm8ptZaJE2Ay+9CIDtx9oD FQoIApsBAh4BFiEEB04INifR7WGEhvsYhl6nEjkSvlMAAJ0qAQD+b0MS1TU6jO0f 02Bp0vmazBUwBNJf6iqcmu6OZVYd7gEA416XWU4GGmudlgDcFR7HDtOBWzOeeYb7 bfkjNkx7twPNETx1NDFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ hl6nEjkSvlNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 1EUyzDYkkBd6P0xYlgjxZuC3n7Jygatzj+HrQOSedf4DFQoIApkBApsBAh4BFiEE B04INifR7WGEhvsYhl6nEjkSvlMAAJE9AQDkYAxHqdbwWJqQWDjYjZLRt0gmIhBW atuVUyNRVw+CyQD/QaTc92neOUpy7MMc/gEM3ZCBy23ZMNA9aKbEl9Q0SAg= =GQsq -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u41.pgp000064400000000000000000000017561046102023000212340ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdATikTIhYh3NlpBbPz3xhWNsXvepbecBZyMdjW cElShsjCwAsEHxYKAH0FgmHz9rEDCwkHCRCGXqcSORK+U0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeyxWM/XSum/2ppYEZs+VWsYybym1lo kTYDL70IgO3H2gMVCggCmwECHgEWIQQHTgg2J9HtYYSG+xiGXqcSORK+UwAAnSoB AP5vQxLVNTqM7R/TYGnS+ZrMFTAE0l/qKpya7o5lVh3uAQDjXpdZTgYaa52WANwV HscO04FbM555hvtt+SM2THu3A80RPHU0MUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRCGXqcSORK+U0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfURTLMNiSQF3o/TFiWCPFm4LefsnKBq3OP4etA5J51/gMVCggC mQECmwECHgEWIQQHTgg2J9HtYYSG+xiGXqcSORK+UwAAkT0BAORgDEep1vBYmpBY ONiNktG3SCYiEFZq25VTI1FXD4LJAP9BpNz3ad45SnLswxz+AQzdkIHLbdkw0D1o psSX1DRICMLAAQQQFgoAcwWCYfQI6AOF/3gJEDJv/r1QW+TTRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5tO/sBeu5GkA6lPRzwnFphuwPww K33VzZ6O7YtEIFpoFiEEEkdgEB75SLDp7CTZMm/+vVBb5NMAAJb9AQCtth+Sgwf8 OyNw3ZlRJTvhw5E2uqgoX0e/Sz/cilrfKwEA3E5ZTaINGjBdeJOcO+uws6UrwUjV Q0IRqZXHvw9YcAk= =b0h1 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u42-priv.pgp000064400000000000000000000015571046102023000222120ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 955B 6A60 E5EA 85BA DD68 B1E0 8AF3 E45D 3AB9 3DE9 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAiHBoxybssGSxGwGvvJEHDpll/uOlWX3GeBO6 hr/ViBMAAQCVz9CkYJzL8aob1pZt2HOnkMyBJMSOP+GRrb2Aj8NkkBNVwsALBB8W CgB9BYJh8/axAwsJBwkQivPkXTq5PelHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn03Yma3pFOL5aFTpEg9gbUyIBjg3w1aUOLxNql+fgox8D FQoIApsBAh4BFiEElVtqYOXqhbrdaLHgivPkXTq5PekAABTJAQCuA9ZWfXzbi6Vv z18me2JwKYtp4JnOTy9M1h3I8IjScQEA9bNoPLVVHW7dqEN0Ml02pKsvFqLek47Q LH9KsqJlBArNETx1NDJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ ivPkXTq5PelHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn th8TQe4xvJjpSl8DZ/13KTutiiysuiqsZASeMkun7JUDFQoIApkBApsBAh4BFiEE lVtqYOXqhbrdaLHgivPkXTq5PekAAA5sAP0YN33XrdFa06tpjlCP4Nlsuc498F7O 4glSlgLBUAfXvAEA4lqOg+Zkhp/N4UTGeJ6/fT5M3XuIvB4TXDi5QXFWxQ0= =eCeh -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u42.pgp000064400000000000000000000017561046102023000212350ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAiHBoxybssGSxGwGvvJEHDpll/uOlWX3GeBO6 hr/ViBPCwAsEHxYKAH0FgmHz9rEDCwkHCRCK8+RdOrk96UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfTdiZrekU4vloVOkSD2BtTIgGODfDV pQ4vE2qX5+CjHwMVCggCmwECHgEWIQSVW2pg5eqFut1oseCK8+RdOrk96QAAFMkB AK4D1lZ9fNuLpW/PXyZ7YnApi2ngmc5PL0zWHcjwiNJxAQD1s2g8tVUdbt2oQ3Qy XTakqy8Wot6TjtAsf0qyomUECs0RPHU0MkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRCK8+RdOrk96UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcme2HxNB7jG8mOlKXwNn/XcpO62KLKy6KqxkBJ4yS6fslQMVCggC mQECmwECHgEWIQSVW2pg5eqFut1oseCK8+RdOrk96QAADmwA/Rg3fdet0VrTq2mO UI/g2Wy5zj3wXs7iCVKWAsFQB9e8AQDiWo6D5mSGn83hRMZ4nr99Pkzde4i8HhNc OLlBcVbFDcLAAQQQFgoAcwWCYfQI6AOF/3gJEIZepxI5Er5TRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8cTF1OyClkmZMwKxtyGtresymXQ 63FLFbsZ+CgiKmq3FiEEB04INifR7WGEhvsYhl6nEjkSvlMAACubAP90fR+Til58 82LVmcIxgd79jn9DqRvHca+wwFO7fslpbAEA+LxkUS06Q3jSbKgA9F8jAh3jSu4q vqd/CIRyFLgS3As= =YEbd -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u43-priv.pgp000064400000000000000000000015571046102023000222130ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 857B 9C8D CF9E BD72 5562 37A4 0E65 2DDF 8101 E2D0 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdA+IJPOBH/s7/gvwKO5U6uEYGb6rl6Q23vwG9K AO90V9UAAQCXx0NefrXjNUyytX39wavhyBEYtO8i2nfHn1qJlfHjYRLfwsALBB8W CgB9BYJh8/axAwsJBwkQDmUt34EB4tBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnzf9EI6DFXMtp9DGy/lm8XKaLEmXFC2sURAl9sHC/msUD FQoIApsBAh4BFiEEhXucjc+evXJVYjekDmUt34EB4tAAAEQ9AP48EnYKQH0XyJ7P s6mu+R6KYB8TDrjGb4ayFgeLXMAuSgEAnjtv9MUCNes7HZ3Yuz7/+nOAuo+2uMoO vHUgY4a98QvNETx1NDNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ DmUt34EB4tBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn RYdPoyCIi01+r+iQnrPBswFg1iGTJBI76yaQRhCwDWADFQoIApkBApsBAh4BFiEE hXucjc+evXJVYjekDmUt34EB4tAAAC21AQC68ZUuEClO7QCnraFbyCQxuvU0F5tL N1mc8QXxaXRbCQEA9eic8V30az+XTFgiQSWblvnfnFznlxlJYvA0vC8Oago= =fgdc -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u43.pgp000064400000000000000000000017561046102023000212360ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdA+IJPOBH/s7/gvwKO5U6uEYGb6rl6Q23vwG9K AO90V9XCwAsEHxYKAH0FgmHz9rEDCwkHCRAOZS3fgQHi0EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfN/0QjoMVcy2n0MbL+WbxcposSZcUL axRECX2wcL+axQMVCggCmwECHgEWIQSFe5yNz569clViN6QOZS3fgQHi0AAARD0A /jwSdgpAfRfIns+zqa75HopgHxMOuMZvhrIWB4tcwC5KAQCeO2/0xQI16zsdndi7 Pv/6c4C6j7a4yg68dSBjhr3xC80RPHU0M0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRAOZS3fgQHi0EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdFh0+jIIiLTX6v6JCes8GzAWDWIZMkEjvrJpBGELANYAMVCggC mQECmwECHgEWIQSFe5yNz569clViN6QOZS3fgQHi0AAALbUBALrxlS4QKU7tAKet oVvIJDG69TQXm0s3WZzxBfFpdFsJAQD16JzxXfRrP5dMWCJBJZuW+d+cXOeXGUli 8DS8Lw5qCsLAAQQQFgoAcwWCYfQI6AOF/3gJEIrz5F06uT3pRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7+KlengUn/OwGf9GYUU123kIIkj 8ga+xpKGCkn/dQupFiEElVtqYOXqhbrdaLHgivPkXTq5PekAACKzAQC0KKl3ezz6 eJwMqy3K+El75IogRCDswEKFOhxr05F4jgD/Q0mMeyOGeOvZAssXuHmBuWKiivFc wjNz21PZ9foWOgk= =lqWX -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u44-priv.pgp000064400000000000000000000015571046102023000222140ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: FA11 A49D A2E2 2F68 6471 A434 3E6A 36C5 3F7C 2155 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAGvdGwak9574aeYd9QRuVaOz6ZLxd7DWp/INY nYQNavUAAPwJw/ChVj6bYUOpRM0zukiCXZQyxCmEqJHg0TilaRvFzREOwsALBB8W CgB9BYJh8/axAwsJBwkQPmo2xT98IVVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnELrvjLYUmmrcrHRjfxhB4V8eYWJNj1FnQ4Y3cmn0XukD FQoIApsBAh4BFiEE+hGknaLiL2hkcaQ0Pmo2xT98IVUAAOnHAP9bq/oXV8MJ9Y8a MdlN08cKO2BRmZBTVlUbhSmkHBKpvwEA6jRHrxZW1egpV88hpYp0RCpMa0APq0gY k4gGHyNVrQnNETx1NDRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ Pmo2xT98IVVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn oAx1idbxpV1f7oZqK2gUdydFm3GTn2C/3Ga6uNlCRMIDFQoIApkBApsBAh4BFiEE +hGknaLiL2hkcaQ0Pmo2xT98IVUAAOK7AP0Qd7rsCJjffHm/2jf4lWfjFTCwiYcf borSdIBgfKsE/AD6A/N7WlqLIQawHrFViceUU5zSW955vIz+loOorP9A9wI= =9k9l -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u44.pgp000064400000000000000000000017561046102023000212370ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAGvdGwak9574aeYd9QRuVaOz6ZLxd7DWp/INY nYQNavXCwAsEHxYKAH0FgmHz9rEDCwkHCRA+ajbFP3whVUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcQuu+MthSaatysdGN/GEHhXx5hYk2P UWdDhjdyafRe6QMVCggCmwECHgEWIQT6EaSdouIvaGRxpDQ+ajbFP3whVQAA6ccA /1ur+hdXwwn1jxox2U3Txwo7YFGZkFNWVRuFKaQcEqm/AQDqNEevFlbV6ClXzyGl inREKkxrQA+rSBiTiAYfI1WtCc0RPHU0NEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRA+ajbFP3whVUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmegDHWJ1vGlXV/uhmoraBR3J0WbcZOfYL/cZrq42UJEwgMVCggC mQECmwECHgEWIQT6EaSdouIvaGRxpDQ+ajbFP3whVQAA4rsA/RB3uuwImN98eb/a N/iVZ+MVMLCJhx9uitJ0gGB8qwT8APoD83taWoshBrAesVWJx5RTnNJb3nm8jP6W g6is/0D3AsLAAQQQFgoAcwWCYfQI6AOF/3gJEA5lLd+BAeLQRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1V7O4dz+uKF8uX2DqHt+DWALBVE d1GFFSve9CcpmpqxFiEEhXucjc+evXJVYjekDmUt34EB4tAAACngAQCNY2+DC5Cr 9oYECzWcFJWffQ/aWXPFLJ4jkAsnrGpmswEA7k2faRH6DvE+byNLvrvk0xQWVpeW kXOmZPwObxU5nAo= =06CD -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u45-priv.pgp000064400000000000000000000015571046102023000222150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 90DF 0E04 097E BFD2 95E0 5B9F 40BE 700A 2E8D 0995 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdA7FSU2aaehKczQTCydYhd+pMpLtQ5xZLGxLPd XREsjUoAAP9KxPEmDZPw7Q+nu6MM+JPpy983ih5vYfMihaPqvq0hgBLBwsALBB8W CgB9BYJh8/axAwsJBwkQQL5wCi6NCZVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnsE4F/rN+vEUZycjW8Gm+1/jOdX5lbXNDe2L/p5WRByYD FQoIApsBAh4BFiEEkN8OBAl+v9KV4FufQL5wCi6NCZUAAGH9AQCOC8Ht4GWVx1a4 1z2yp+AiSD5m+wf9txQZhdNDUIl39QD9EJnnbYTTAP6mYsOeBzX6yy9W19OjbALD EsgiuntDqAbNETx1NDVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ QL5wCi6NCZVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 323jLRccY7z/0o9mAlEFcYz8SrmNU7BFxUBn9cUemxYDFQoIApkBApsBAh4BFiEE kN8OBAl+v9KV4FufQL5wCi6NCZUAAI7jAP0dONWJ3nOIlzMJVEuDwbdVGotQywq6 qgz8MjvcSVkEOgD/Q2qNqNxqrRYs0oC+K+p/7KvFVzhEfCvm7cAdmkY1iQs= =5nVp -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u45.pgp000064400000000000000000000017561046102023000212400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdA7FSU2aaehKczQTCydYhd+pMpLtQ5xZLGxLPd XREsjUrCwAsEHxYKAH0FgmHz9rEDCwkHCRBAvnAKLo0JlUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmewTgX+s368RRnJyNbwab7X+M51fmVt c0N7Yv+nlZEHJgMVCggCmwECHgEWIQSQ3w4ECX6/0pXgW59AvnAKLo0JlQAAYf0B AI4Lwe3gZZXHVrjXPbKn4CJIPmb7B/23FBmF00NQiXf1AP0QmedthNMA/qZiw54H NfrLL1bX06NsAsMSyCK6e0OoBs0RPHU0NUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRBAvnAKLo0JlUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmffbeMtFxxjvP/Sj2YCUQVxjPxKuY1TsEXFQGf1xR6bFgMVCggC mQECmwECHgEWIQSQ3w4ECX6/0pXgW59AvnAKLo0JlQAAjuMA/R041Ynec4iXMwlU S4PBt1Uai1DLCrqqDPwyO9xJWQQ6AP9Dao2o3GqtFizSgL4r6n/sq8VXOER8K+bt wB2aRjWJC8LAAQQQFgoAcwWCYfQI6AOF/3gJED5qNsU/fCFVRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+DZa8vJYabesVx0C8Z1BNhYBNhm GACKuPFi+q2Yhq2YFiEE+hGknaLiL2hkcaQ0Pmo2xT98IVUAAABhAP98z+R45XI3 AO6Szm2qwuDsL9FdxvSfQyAvNgR5UlkpwAEAyUSSiD3SXXBtNqfacmCCfuONW8BO oizACYCRKI8m+ww= =YV6Z -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u46-priv.pgp000064400000000000000000000015571046102023000222160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 90BA 919C 17ED 4252 F8F0 ED32 7192 D79A 112A 0CE6 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdANdgIYiYTaJ4Q7AdD2szP0fnYLWnuiErBvSxO rEP1LxEAAP4umlN7SWCkq2w3Iv/w8gP2zaJQFO0DjLc4cEhkV/OWFRB6wsALBB8W CgB9BYJh8/axAwsJBwkQcZLXmhEqDOZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnLozC7i9uOVD0ujWS+a76vxjsczUSLqLMhrM/ojvCLAID FQoIApsBAh4BFiEEkLqRnBftQlL48O0ycZLXmhEqDOYAALh2AQChGy7EN0R7t7RF VU6G5360/EjhvyRTpZzwS6FTplh6mQEAsnDPf1X4OEtq04yv5VZEh27aQOQlgsys X5O1lwJDpAbNETx1NDZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ cZLXmhEqDOZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn r8WdBRsT1FMYbbDqx5aK8y2xOcyJ3xlQ9qHsYklcT3MDFQoIApkBApsBAh4BFiEE kLqRnBftQlL48O0ycZLXmhEqDOYAAFuTAQC99Hf4zqGx7kik5YUQL3vUhUycG/Bn /OZOXXRIkNbEGAEA1Z9Jl45JHPEoMPORTBz5HdtDuL8H/5gDxIhnlscHIAU= =btml -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u46.pgp000064400000000000000000000017561046102023000212410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdANdgIYiYTaJ4Q7AdD2szP0fnYLWnuiErBvSxO rEP1LxHCwAsEHxYKAH0FgmHz9rEDCwkHCRBxkteaESoM5kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcujMLuL245UPS6NZL5rvq/GOxzNRIu osyGsz+iO8IsAgMVCggCmwECHgEWIQSQupGcF+1CUvjw7TJxkteaESoM5gAAuHYB AKEbLsQ3RHu3tEVVTobnfrT8SOG/JFOlnPBLoVOmWHqZAQCycM9/Vfg4S2rTjK/l VkSHbtpA5CWCzKxfk7WXAkOkBs0RPHU0NkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRBxkteaESoM5kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmevxZ0FGxPUUxhtsOrHlorzLbE5zInfGVD2oexiSVxPcwMVCggC mQECmwECHgEWIQSQupGcF+1CUvjw7TJxkteaESoM5gAAW5MBAL30d/jOobHuSKTl hRAve9SFTJwb8Gf85k5ddEiQ1sQYAQDVn0mXjkkc8Sgw85FMHPkd20O4vwf/mAPE iGeWxwcgBcLAAQQQFgoAcwWCYfQI6AOF/3gJEEC+cAoujQmVRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9GlyciLFFxvWr9U0dyJwbAkqjdL DYzRQO+W/SnRqRv0FiEEkN8OBAl+v9KV4FufQL5wCi6NCZUAABnoAQCdvOIDjY7e LQGrb6cl84g9AAMPC4VNF6uvKY1bqRC2LgEAu9c5fsVoZunqhgTyfuJbe3+z1vxD gAnM1rk8WzfUJw0= =QANJ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u47-priv.pgp000064400000000000000000000015571046102023000222170ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3762 EB47 8F47 FEA8 48AD A9E1 611C 433D 28D8 4071 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdADPWaOdy2LM6hHwyoaENXHUuEsDV1ROJ1JMHo /gnJCU4AAP9cJqb3VOtBD/eibQYu3uFRjd+JPvMxWyGdW+quGWrlNRD3wsALBB8W CgB9BYJh8/axAwsJBwkQYRxDPSjYQHFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnPKKBRUKfgSbLxYalv+BTXNXbSgQJJ5CXCU6pL8MO1tAD FQoIApsBAh4BFiEEN2LrR49H/qhIranhYRxDPSjYQHEAAIEKAQDhBHr8Di1fjFQ1 mMdmd3jNeJNWt+gibrxj1UU7pryspgD/UpDlxPOVpjktXJLjP/pWUm50HiIlnX1Y muoLU0EGGgjNETx1NDdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ YRxDPSjYQHFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Rydj0PqGkq0Y3kckhMg9WG/4adhAOyMgEwLX1wOLRAoDFQoIApkBApsBAh4BFiEE N2LrR49H/qhIranhYRxDPSjYQHEAABOxAP9jtwN1GzocxNIDm+matuHtzRUrxUtM vAQOxNvFMBPHcAD/TXIWQx8U4BEgrd1cko6pF/7vwA04JrlTNXw9OrpZrA8= =Td5u -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u47.pgp000064400000000000000000000017561046102023000212420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdADPWaOdy2LM6hHwyoaENXHUuEsDV1ROJ1JMHo /gnJCU7CwAsEHxYKAH0FgmHz9rEDCwkHCRBhHEM9KNhAcUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc8ooFFQp+BJsvFhqW/4FNc1dtKBAkn kJcJTqkvww7W0AMVCggCmwECHgEWIQQ3YutHj0f+qEitqeFhHEM9KNhAcQAAgQoB AOEEevwOLV+MVDWYx2Z3eM14k1a36CJuvGPVRTumvKymAP9SkOXE85WmOS1ckuM/ +lZSbnQeIiWdfVia6gtTQQYaCM0RPHU0N0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRBhHEM9KNhAcUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdHJ2PQ+oaSrRjeRySEyD1Yb/hp2EA7IyATAtfXA4tECgMVCggC mQECmwECHgEWIQQ3YutHj0f+qEitqeFhHEM9KNhAcQAAE7EA/2O3A3UbOhzE0gOb 6Zq24e3NFSvFS0y8BA7E28UwE8dwAP9NchZDHxTgESCt3VySjqkX/u/ADTgmuVM1 fD06ulmsD8LAAQQQFgoAcwWCYfQI6AOF/3gJEHGS15oRKgzmRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/A5eq0yR6eb/zJwPG5F3p6idYeN s1ABEP1XaQkps+8DFiEEkLqRnBftQlL48O0ycZLXmhEqDOYAAF6hAQClxO0aYwql zckEei2Rq2jg2J/RciuCz9SMQrTHSSDingD9GKuHQycLK4EzuNgm3ynqbc+VbTC5 2bGIyXK0zwRlYwU= =mKP8 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u48-priv.pgp000064400000000000000000000015571046102023000222200ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E960 CD89 3E6C F7F4 1E75 2BEF 15ED 83EC DF49 463C Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAr+wtAtCgm9x1Pjom2Yfdowch5BFV1iw+I8Zk ccJi8XoAAQD2QiY85enm/5ZN5QBlGb8rUHMoWsxY3YzhYIaA+k3liBFLwsALBB8W CgB9BYJh8/axAwsJBwkQFe2D7N9JRjxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnaVB5djmggZWV4ihOth+qHcTtJW1cFv1iyI+Gw+B2bc0D FQoIApsBAh4BFiEE6WDNiT5s9/QedSvvFe2D7N9JRjwAAKu/AQDtvHzZPy7QqnKc 93JFM1qXIS8CoLE9zDRqM1sz+dwy2wEAkUi9oilHjMFRsk7N9Vw/TYVcQ1EtWuVI 71hXAAAwFgPNETx1NDhAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ Fe2D7N9JRjxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn P7tKKYM7zT8w5ey83j6dT6eoNVXHzjgPDAh3Gr5CMqgDFQoIApkBApsBAh4BFiEE 6WDNiT5s9/QedSvvFe2D7N9JRjwAAJnUAP9RxrUWlIF+AqAqt3Bkt8xBRHLW55sg n93RRri5IIRlwQEAl7Sl34FAjG9T0eTU3iWDhnJGZOg6UMKc674g1xA+0w4= =sYgW -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u48.pgp000064400000000000000000000017561046102023000212430ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAr+wtAtCgm9x1Pjom2Yfdowch5BFV1iw+I8Zk ccJi8XrCwAsEHxYKAH0FgmHz9rEDCwkHCRAV7YPs30lGPEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdpUHl2OaCBlZXiKE62H6odxO0lbVwW /WLIj4bD4HZtzQMVCggCmwECHgEWIQTpYM2JPmz39B51K+8V7YPs30lGPAAAq78B AO28fNk/LtCqcpz3ckUzWpchLwKgsT3MNGozWzP53DLbAQCRSL2iKUeMwVGyTs31 XD9NhVxDUS1a5UjvWFcAADAWA80RPHU0OEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRAV7YPs30lGPEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc/u0opgzvNPzDl7LzePp1Pp6g1VcfOOA8MCHcavkIyqAMVCggC mQECmwECHgEWIQTpYM2JPmz39B51K+8V7YPs30lGPAAAmdQA/1HGtRaUgX4CoCq3 cGS3zEFEctbnmyCf3dFGuLkghGXBAQCXtKXfgUCMb1PR5NTeJYOGckZk6DpQwpzr viDXED7TDsLAAQQQFgoAcwWCYfQI6AOF/3gJEGEcQz0o2EBxRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5jpOdmlV0m8JLU1Dsxlqml+4M0R SHoNMpZv287zL3ocFiEEN2LrR49H/qhIranhYRxDPSjYQHEAAPN5AP9yIapX5rcB SrH7nplGuDWm6m+ONUrFxgwpjf4rodjglgD+O0Cgtyugo41o/lVeDIcgkPUNZjQH 0iarUqaRvTxJbgA= =TXvL -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u49-priv.pgp000064400000000000000000000015571046102023000222210ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B125 6D98 7F27 8960 1FC5 D8FA F268 AB5F 6AB4 4782 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAJsbp784FSw4Dms+jCvRphMi9F3wjL4u+yYU5 zkwGJhIAAQCES+bYtgMdQTmRKOglfdqeZx932CNgXaSTkVFDUWwwhg4dwsALBB8W CgB9BYJh8/axAwsJBwkQ8mirX2q0R4JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnE2KZjEF6gFkrQDgZsKS+kWq+w5dA8zQoOh+ONyoDIBMD FQoIApsBAh4BFiEEsSVtmH8niWAfxdj68mirX2q0R4IAAEVxAP9/HeSF//l6Cusy nSMOL7ymp7NiMLn0pEw6naELUfepTgEA8ahifQRZER5HSMX7anJ/ZxNLXhHK0Aj+ IKLod25JQQzNETx1NDlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ 8mirX2q0R4JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 6XHV5Jqjdww/N7NVGrxGRFXXgEJoTxWYPUmphcsYJs0DFQoIApkBApsBAh4BFiEE sSVtmH8niWAfxdj68mirX2q0R4IAAIlhAP9ZG5c0M3XfOkVgqL0+g8FrDZXlpAof TKmz56T9D6FA2gEA67gLV9ThegDT9UyWSChYLlNoHveWY+OBgHgdeuAGQQM= =AzDe -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u49.pgp000064400000000000000000000017561046102023000212440ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAJsbp784FSw4Dms+jCvRphMi9F3wjL4u+yYU5 zkwGJhLCwAsEHxYKAH0FgmHz9rEDCwkHCRDyaKtfarRHgkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcTYpmMQXqAWStAOBmwpL6Rar7Dl0Dz NCg6H443KgMgEwMVCggCmwECHgEWIQSxJW2YfyeJYB/F2PryaKtfarRHggAARXEA /38d5IX/+XoK6zKdIw4vvKans2IwufSkTDqdoQtR96lOAQDxqGJ9BFkRHkdIxftq cn9nE0teEcrQCP4gouh3bklBDM0RPHU0OUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRDyaKtfarRHgkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfpcdXkmqN3DD83s1UavEZEVdeAQmhPFZg9SamFyxgmzQMVCggC mQECmwECHgEWIQSxJW2YfyeJYB/F2PryaKtfarRHggAAiWEA/1kblzQzdd86RWCo vT6DwWsNleWkCh9MqbPnpP0PoUDaAQDruAtX1OF6ANP1TJZIKFguU2ge95Zj44GA eB164AZBA8LAAQQQFgoAcwWCYfQI6AOF/3gJEBXtg+zfSUY8RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/N4TP5I2gLgylZPX0iHmM+zKNAx 7dGv4yVrVEn0AYTeFiEE6WDNiT5s9/QedSvvFe2D7N9JRjwAACzSAP0TqfB+LbIs zXkY6nOmzNezVwAOUYIL+Cu+J3SHR+/m3AD/f8mHNRhBhVMU6WqsLzpzqKvf4ofk WIe0JGEBaMxyrwU= =qPiw -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u5-priv.pgp000064400000000000000000000015561046102023000221300ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: FB00 C704 4A9D D164 243C EC46 0B48 AA8A DD29 A129 Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdARBdcCx0FDQkOr+orS/E2Vzi+tM/tLy4+x+go Tp5H0qIAAQDbRV+dESIL3eA8CIEgRfTGJJf7Q1AZbZRU8oJaGwRg0Q3RwsALBB8W CgB9BYJh8/avAwsJBwkQC0iqit0poSlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnDgdDW2f86kUPo454Vj5A9VDv8rd2A5YoB1gQBXcWp9cD FQoIApsBAh4BFiEE+wDHBEqd0WQkPOxGC0iqit0poSkAAPD4AQDMrUSML16jDUVQ WXY7VeOS3UpY7q8HQQCZ2022L9QZnwD7B15Gq4bJnxq3ZXBG8mEbHjRTntfTKoy9 GeesHWJotgDNEDx1NUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9q8DCwkHCRAL SKqK3SmhKUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeM +JDqYtw8x95MmVxR6IavVFFgWiQ0pqAI5sVW82ihygMVCggCmQECmwECHgEWIQT7 AMcESp3RZCQ87EYLSKqK3SmhKQAAtuIBAODXc+L9NZA5xMcBWi9GIAnCsXJ3ks63 0J45I4da+YobAQDfcqHVpFkzN9MHKicM6k7dNOSJ1YwCEojqpHk1jTUlBA== =TRt4 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u5.pgp000064400000000000000000000017561046102023000211540ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2rxYJKwYBBAHaRw8BAQdARBdcCx0FDQkOr+orS/E2Vzi+tM/tLy4+x+go Tp5H0qLCwAsEHxYKAH0FgmHz9q8DCwkHCRALSKqK3SmhKUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcOB0NbZ/zqRQ+jjnhWPkD1UO/yt3YD ligHWBAFdxan1wMVCggCmwECHgEWIQT7AMcESp3RZCQ87EYLSKqK3SmhKQAA8PgB AMytRIwvXqMNRVBZdjtV45LdSljurwdBAJnbTbYv1BmfAPsHXkarhsmfGrdlcEby YRseNFOe19MqjL0Z56wdYmi2AM0QPHU1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YfP2rwMLCQcJEAtIqordKaEpRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ4z4kOpi3DzH3kyZXFHohq9UUWBaJDSmoAjmxVbzaKHKAxUKCAKZ AQKbAQIeARYhBPsAxwRKndFkJDzsRgtIqordKaEpAAC24gEA4Ndz4v01kDnExwFa L0YgCcKxcneSzrfQnjkjh1r5ihsBAN9yodWkWTM30wcqJwzqTt005InVjAISiOqk eTWNNSUEwsABBBAWCgBzBYJh9AjnA4X/eAkQfpyZDCSXOLFHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnjGEQIsyLyEme6ODnTbjmyKl/mbO3 x4UPDzJpNLBktGsWIQTsRHXeW9dup91HmHd+nJkMJJc4sQAAcO0BAMXED+cb8FjO J8yNStGFsWQu0HXwEiAsRDnIU/Dj7bajAQDVC+WePMWy+Ax6Dez2jZmQ06jpkEk4 ePXH62sGm2AGDA== =FEfM -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u50-priv.pgp000064400000000000000000000015571046102023000222110ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5EE4 B68A 4828 F5C1 5DD8 7114 DC4A 8509 993D CFAB Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdA/YZU6vobvI0n4td+8Rg4ahcDWar3ZI/NLzi0 PljcWHoAAQCZsn6lj4Bs8aAnxGdOHa5+IZm7HESQAGuz7dNlyHUZAQ9jwsALBB8W CgB9BYJh8/axAwsJBwkQ3EqFCZk9z6tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnUIwaOIdhPt9zauLrvNERHdSJIaLb8jnb01KUOMWazqYD FQoIApsBAh4BFiEEXuS2ikgo9cFd2HEU3EqFCZk9z6sAALleAQD26r1Z5xwfx1fg uSdZDQUsOwdxiMktHJeliiB8ryhidgEAzghVpDcUSRKFw4KfyhDTDZCP/cfY7Uc1 yZGI2czHLgXNETx1NTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ 3EqFCZk9z6tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn iicCSMdGWRH8kSz4amrBy1r5CHHi3qeQPDuD1iBFgEkDFQoIApkBApsBAh4BFiEE XuS2ikgo9cFd2HEU3EqFCZk9z6sAAGQ1AQCBwd0/BxL/3VGQ8VmG5FqgNhmzNeQF VrpYtGroLj1PGAEAotYqq4+MFO0Uzj6h8/xU3JN7MZzAaRnKJwwcFWWLDwM= =9t78 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u50.pgp000064400000000000000000000017561046102023000212340ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdA/YZU6vobvI0n4td+8Rg4ahcDWar3ZI/NLzi0 PljcWHrCwAsEHxYKAH0FgmHz9rEDCwkHCRDcSoUJmT3Pq0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdQjBo4h2E+33Nq4uu80REd1Ikhotvy OdvTUpQ4xZrOpgMVCggCmwECHgEWIQRe5LaKSCj1wV3YcRTcSoUJmT3PqwAAuV4B APbqvVnnHB/HV+C5J1kNBSw7B3GIyS0cl6WKIHyvKGJ2AQDOCFWkNxRJEoXDgp/K ENMNkI/9x9jtRzXJkYjZzMcuBc0RPHU1MEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRDcSoUJmT3Pq0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeKJwJIx0ZZEfyRLPhqasHLWvkIceLep5A8O4PWIEWASQMVCggC mQECmwECHgEWIQRe5LaKSCj1wV3YcRTcSoUJmT3PqwAAZDUBAIHB3T8HEv/dUZDx WYbkWqA2GbM15AVWuli0auguPU8YAQCi1iqrj4wU7RTOPqHz/FTck3sxnMBpGcon DBwVZYsPA8LAAQQQFgoAcwWCYfQI6AOF/3gJEPJoq19qtEeCRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ//VdlO/29n1lP62qSkh5wHUJnFf f3kMDWyeOXnMnfUMFiEEsSVtmH8niWAfxdj68mirX2q0R4IAAJ7rAP0U7ZoceXmH rxHkRhpIsLCIucUCyNwezgSesOLKqG7E5gD/Xk8v5s+mq3FkYlh8gCOmdDC67B+g 3LhaTmn9dewVRAw= =Vy9W -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u51-priv.pgp000064400000000000000000000015571046102023000222120ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5C47 2E1C 68A9 A587 C2AF 9F00 BC59 B13A 9918 BBC1 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAxeVx32Mr3i9cuv18mh3TFI1pg7zNQQemkZfG Xal+OVIAAPsEY0LVqLJyEbaZditZEHKqpcnsHU8QxcrT9HhGKYVwcBBDwsALBB8W CgB9BYJh8/axAwsJBwkQvFmxOpkYu8FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnDNDLFxj4E2XFhEb9fDJckJ90UVw7FO2GLmAoR2Ba8LAD FQoIApsBAh4BFiEEXEcuHGippYfCr58AvFmxOpkYu8EAAPJ3AQDTyOM1AZPC86Aj 3Rs6HAeTIvOyRZEavXGk8n43HekhQAEAq6LD5rwaDhlIPtD1T9dWBxOup/C/lW9+ 2mHNt67qWwHNETx1NTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ vFmxOpkYu8FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 9Mtq5KnsA8dgIOhNrkI26A6oJiDCTIv44cgr4wNe1j4DFQoIApkBApsBAh4BFiEE XEcuHGippYfCr58AvFmxOpkYu8EAAMTQAP43HdeK280lQkSiU0mS5SUbnCSRdPIk SIAGZYQ6Onsy8QD/U0H524kGN3D+G6qW/PxMFK3LFbelWE3UDZdM0QWFRgY= =Wjnh -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u51.pgp000064400000000000000000000017561046102023000212350ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAxeVx32Mr3i9cuv18mh3TFI1pg7zNQQemkZfG Xal+OVLCwAsEHxYKAH0FgmHz9rEDCwkHCRC8WbE6mRi7wUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcM0MsXGPgTZcWERv18MlyQn3RRXDsU 7YYuYChHYFrwsAMVCggCmwECHgEWIQRcRy4caKmlh8KvnwC8WbE6mRi7wQAA8ncB ANPI4zUBk8LzoCPdGzocB5Mi87JFkRq9caTyfjcd6SFAAQCrosPmvBoOGUg+0PVP 11YHE66n8L+Vb37aYc23rupbAc0RPHU1MUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRC8WbE6mRi7wUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmf0y2rkqewDx2Ag6E2uQjboDqgmIMJMi/jhyCvjA17WPgMVCggC mQECmwECHgEWIQRcRy4caKmlh8KvnwC8WbE6mRi7wQAAxNAA/jcd14rbzSVCRKJT SZLlJRucJJF08iRIgAZlhDo6ezLxAP9TQfnbiQY3cP4bqpb8/EwUrcsVt6VYTdQN l0zRBYVGBsLAAQQQFgoAcwWCYfQI6AOF/3gJENxKhQmZPc+rRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZz0vuGOzQ2WvMjGfUwdCtX4/y8PU IsdV2tpm6/tLADW1FiEEXuS2ikgo9cFd2HEU3EqFCZk9z6sAANUNAP4qZpmf+p29 AtUUm4fcoUDqLQ8+Kgt1Xx1eWaIaiGCtvwEAkc7DNNIXm9m8A/0CfnSJTSx6K7E3 YV01Ul93AEo7jg0= =+bJn -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u52-priv.pgp000064400000000000000000000015571046102023000222130ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5320 4286 00FC DB9A 3AA3 2DA3 E14D 0128 D7C3 72EC Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAa9gsfzxUiOPq44TC0yWrw7a+qDtehAjdrR8l tw3sLiQAAQCYvl8nyeSQ6P9rY82aGQEQaHTlCIzUUh1GOcYvDywfNA36wsALBB8W CgB9BYJh8/axAwsJBwkQ4U0BKNfDcuxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnRdBm2IaVR3umu6CSw1VuhWppTc7KCgctC08ZKF7hMYsD FQoIApsBAh4BFiEEUyBChgD825o6oy2j4U0BKNfDcuwAAE+9AP41/1MIIhmmd04B vW5dfDZjMlACeheAMFr46Hod/0wEMQD/biiRPUO4hjkqUuejgqIOy2zkIpacccfl ruvCgAsXOg/NETx1NTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ 4U0BKNfDcuxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Ks+wJT5tFfWuYH9xvhZ/RDOgrUf6Eph972z+jGf1WvsDFQoIApkBApsBAh4BFiEE UyBChgD825o6oy2j4U0BKNfDcuwAAJlgAQDWECl62P4xPr5cL9/PR+mEe03+lYry d5MG291fivxqUgD6AtuJxsVSnep3xesSB4LDiIrDUXEYtrelNIk/tGVxkQg= =SR3Y -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u52.pgp000064400000000000000000000017561046102023000212360ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAa9gsfzxUiOPq44TC0yWrw7a+qDtehAjdrR8l tw3sLiTCwAsEHxYKAH0FgmHz9rEDCwkHCRDhTQEo18Ny7EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdF0GbYhpVHe6a7oJLDVW6FamlNzsoK By0LTxkoXuExiwMVCggCmwECHgEWIQRTIEKGAPzbmjqjLaPhTQEo18Ny7AAAT70A /jX/UwgiGaZ3TgG9bl18NmMyUAJ6F4AwWvjoeh3/TAQxAP9uKJE9Q7iGOSpS56OC og7LbOQilpxxx+Wu68KACxc6D80RPHU1MkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRDhTQEo18Ny7EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcqz7AlPm0V9a5gf3G+Fn9EM6CtR/oSmH3vbP6MZ/Va+wMVCggC mQECmwECHgEWIQRTIEKGAPzbmjqjLaPhTQEo18Ny7AAAmWABANYQKXrY/jE+vlwv 389H6YR7Tf6VivJ3kwbb3V+K/GpSAPoC24nGxVKd6nfF6xIHgsOIisNRcRi2t6U0 iT+0ZXGRCMLAAQQQFgoAcwWCYfQI6AOF/3gJELxZsTqZGLvBRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ80I7+/U1R4e97FQKOlrb4KAbAta z9sE0C0R7awRE4saFiEEXEcuHGippYfCr58AvFmxOpkYu8EAAEtEAP0fzdbWsKtE xFqXV0GV3oOBl3JClWr6mcRrNyvRM/fF9gD/ecj5SpIEUrAA2i6xO3giWfX0uBAO vgfLlPKHtgWkmAs= =VUut -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u53-priv.pgp000064400000000000000000000015571046102023000222140ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4195 8AAE 8E1E ED80 B680 F4DC D5AB FA33 A1DB 1C23 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdA4VIkv5zfg0WgS+9H8UG1B6K73AatVKfC5wZL y4SqzoQAAP9u0fJHvj17k+HkePD1X0yVWKaWytdd41TJI37fD4DAzBQPwsALBB8W CgB9BYJh8/axAwsJBwkQ1av6M6HbHCNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnKJxOrBD9JtvqzsI+wxogqOfOui+8cfqPDLlLQ/XsjGAD FQoIApsBAh4BFiEEQZWKro4e7YC2gPTc1av6M6HbHCMAAE19AP0f/t/JDuUhzgf8 LUWsxbpDPLhemtEgDyY2hC418fPTfAD+PlwNrblgK1LTtxL9BgpBgjOIqozw60oS 1k/xc7dAYgLNETx1NTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ 1av6M6HbHCNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn wZvTB7tE3P6TaKjv8g93dROIwJeBvJXKDyXdsKq4TjkDFQoIApkBApsBAh4BFiEE QZWKro4e7YC2gPTc1av6M6HbHCMAAEk6APwN+kesHrZC6gljZOR5Dm4yjpa18KSY q9fV3RY6bjgnxwEAplmnCIWWpCh3YbdAWT1BvP7doSgq/4BHzFnIjyZeSQo= =vaYK -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u53.pgp000064400000000000000000000017561046102023000212370ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdA4VIkv5zfg0WgS+9H8UG1B6K73AatVKfC5wZL y4SqzoTCwAsEHxYKAH0FgmHz9rEDCwkHCRDVq/ozodscI0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmconE6sEP0m2+rOwj7DGiCo5866L7xx +o8MuUtD9eyMYAMVCggCmwECHgEWIQRBlYqujh7tgLaA9NzVq/ozodscIwAATX0A /R/+38kO5SHOB/wtRazFukM8uF6a0SAPJjaELjXx89N8AP4+XA2tuWArUtO3Ev0G CkGCM4iqjPDrShLWT/Fzt0BiAs0RPHU1M0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRDVq/ozodscI0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfBm9MHu0Tc/pNoqO/yD3d1E4jAl4G8lcoPJd2wqrhOOQMVCggC mQECmwECHgEWIQRBlYqujh7tgLaA9NzVq/ozodscIwAASToA/A36R6wetkLqCWNk 5HkObjKOlrXwpJir19XdFjpuOCfHAQCmWacIhZakKHdht0BZPUG8/t2hKCr/gEfM WciPJl5JCsLAAQQQFgoAcwWCYfQI6QOF/3gJEOFNASjXw3LsRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6Rei8NhZNTolCQVpfZy0BW7yxW8 k1k0v8u7Bc8IYHWdFiEEUyBChgD825o6oy2j4U0BKNfDcuwAAJtbAP4g5hhRFbNf XvU4uvItO4oOzW41JLAUcQTbD8TXeKZ7qQEA1qTVc7bXrVpBP80ijWgrOBDu5NV5 N4ug4RZDIN+4RA8= =XZ7S -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u54-priv.pgp000064400000000000000000000015571046102023000222150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7F4D FF6F C276 995C 94C2 BF92 146B 7BED 3820 9DB9 Comment: xVgEYfP2sRYJKwYBBAHaRw8BAQdAdOOUwlnTBHx3yGlSUxb2h3C9aBRSc81X6kMw hFiPinEAAP0XJv5XSs4diJCJuyAfh8bqXrrtaNh+GmV4r+0FqCxDdxB/wsALBB8W CgB9BYJh8/axAwsJBwkQFGt77TggnblHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnCPHW6HLLNSstv+jVv+sugGTtpHz/nACIFcNDs+Mbg5oD FQoIApsBAh4BFiEEf03/b8J2mVyUwr+SFGt77TggnbkAAHYyAP42ffSmfcV6y22r BvycCMXPJQnfK8sy8IVfqp7yGbS57wEAv6QnGMq0a+Qf0RL2CCK3zfHJkmCosYz+ uExzqBwOrAbNETx1NTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ FGt77TggnblHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn XfYwER+K0xBkqJGG2GkXxy4hYBvoKGvrYDJnocCyMSIDFQoIApkBApsBAh4BFiEE f03/b8J2mVyUwr+SFGt77TggnbkAACM6AP90T91lblaMegEd9J5EgKl41DD9ndVA 35WaXw0XdFxnRQEAmYxJzgKNmE2j1as9v+7R07eQNBUsNbiAbgrcxHqvagk= =n3wl -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u54.pgp000064400000000000000000000017561046102023000212400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sRYJKwYBBAHaRw8BAQdAdOOUwlnTBHx3yGlSUxb2h3C9aBRSc81X6kMw hFiPinHCwAsEHxYKAH0FgmHz9rEDCwkHCRAUa3vtOCCduUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcI8dbocss1Ky2/6NW/6y6AZO2kfP+c AIgVw0Oz4xuDmgMVCggCmwECHgEWIQR/Tf9vwnaZXJTCv5IUa3vtOCCduQAAdjIA /jZ99KZ9xXrLbasG/JwIxc8lCd8ryzLwhV+qnvIZtLnvAQC/pCcYyrRr5B/REvYI IrfN8cmSYKixjP64THOoHA6sBs0RPHU1NEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rEDCwkHCRAUa3vtOCCduUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdd9jARH4rTEGSokYbYaRfHLiFgG+goa+tgMmehwLIxIgMVCggC mQECmwECHgEWIQR/Tf9vwnaZXJTCv5IUa3vtOCCduQAAIzoA/3RP3WVuVox6AR30 nkSAqXjUMP2d1UDflZpfDRd0XGdFAQCZjEnOAo2YTaPVqz2/7tHTt5A0FSw1uIBu CtzEeq9qCcLAAQQQFgoAcwWCYfQI6QOF/3gJENWr+jOh2xwjRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4m9w9jbViGTbG91YKan5VF2jzue f3iZtD18ap0KaoOnFiEEQZWKro4e7YC2gPTc1av6M6HbHCMAAO5rAQDSGut+0Z9k EYAtEE27/ka0P4syf0P75toyh4m8lV8onAD+O8ROHAlNdo1ErOoiCxjVgIvTPUef QD6Zlw92jUS6qwg= =Hjay -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u55-priv.pgp000064400000000000000000000015571046102023000222160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6DE3 3C37 3590 6B7E 69AE 593A 0CD7 24AF 410A 89CE Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdATgHiQlG7BMESacRY1StKuNFq6wmb/5KUiEkv /xFatH0AAP9+Q6Szeyi5/6ac9Ykq/bLpdlxpgh0ss7/e2CZm0QldbxJUwsALBB8W CgB9BYJh8/ayAwsJBwkQDNckr0EKic5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnjKHNi6+zXIPPgMbDflB3Kf4+96fHFMc7Pd5AnN6f3f4D FQoIApsBAh4BFiEEbeM8NzWQa35prlk6DNckr0EKic4AALOiAQCJrTgYD2YqNW0V 1bE/PkAv1ErrIwg85mJCFumEpiFUigEA2QmSoXPLLeByOLaQdlck1lTDJH1OLzTs hTbIp9xAlQPNETx1NTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ DNckr0EKic5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn /sa9CzrdULTCrlqYzO+qR7a/Iu9178SSxc7mM0Zbkt0DFQoIApkBApsBAh4BFiEE beM8NzWQa35prlk6DNckr0EKic4AAJ2LAP44GF9Buqbtr0AMckQ9uAHJwANlWZpV liyBG0wLIL5A0QD/cHVPQC/hK5sxep8KnWMVqBg4Gb1rUKOKffKzp3+j/w8= =t/Tq -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u55.pgp000064400000000000000000000017561046102023000212410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdATgHiQlG7BMESacRY1StKuNFq6wmb/5KUiEkv /xFatH3CwAsEHxYKAH0FgmHz9rIDCwkHCRAM1ySvQQqJzkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeMoc2Lr7Ncg8+AxsN+UHcp/j73p8cU xzs93kCc3p/d/gMVCggCmwECHgEWIQRt4zw3NZBrfmmuWToM1ySvQQqJzgAAs6IB AImtOBgPZio1bRXVsT8+QC/USusjCDzmYkIW6YSmIVSKAQDZCZKhc8st4HI4tpB2 VyTWVMMkfU4vNOyFNsin3ECVA80RPHU1NUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRAM1ySvQQqJzkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmf+xr0LOt1QtMKuWpjM76pHtr8i73XvxJLFzuYzRluS3QMVCggC mQECmwECHgEWIQRt4zw3NZBrfmmuWToM1ySvQQqJzgAAnYsA/jgYX0G6pu2vQAxy RD24AcnAA2VZmlWWLIEbTAsgvkDRAP9wdU9AL+ErmzF6nwqdYxWoGDgZvWtQo4p9 8rOnf6P/D8LAAQQQFgoAcwWCYfQI6QOF/3gJEBRre+04IJ25RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ00kyufwqVcGs8G8DCExmoHCnjHy XPN+B6MQC7f2K343FiEEf03/b8J2mVyUwr+SFGt77TggnbkAAPuIAQCnVNimwLsf znR/zSGc+JFKKDpjQzPqI3RJKtTBClO8MwD5AV1MeE53bpicUS+yPTxQkVL7oHG0 eP7v7aHO4R3gnQ4= =boPB -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u56-priv.pgp000064400000000000000000000015571046102023000222170ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 70F5 6B5B 0EA5 7CB9 ACDE B08B 5333 D900 488A 16B1 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAgMPOWFvnAjxO3OQKDqf5l6O9fp3v5oQSe2Wt LqgQjHoAAQCijzw6zqN4PzjESlbuGMQ8gvb9BlD6ePJekT+T/f2HFhD5wsALBB8W CgB9BYJh8/ayAwsJBwkQUzPZAEiKFrFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jny/P8EPYUuKJACZ01TqPtr8RH5/Hw45vWhL1ltKqCkFQD FQoIApsBAh4BFiEEcPVrWw6lfLms3rCLUzPZAEiKFrEAAKirAP9ok0ovxIVr+WOa 9Eb7b0+1xLLqpbiVpklTZ8sHjUEtrAEAtvdLvqtRkz+GKvLrjzhEdiNiuZi4h7+S b1MSNcaQzgLNETx1NTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ UzPZAEiKFrFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn q0Yi/Kx+vjwyG1w0z5qG2pC1Zz4Xkf21kpaTOCRw47MDFQoIApkBApsBAh4BFiEE cPVrWw6lfLms3rCLUzPZAEiKFrEAALR2AQClq0laRyd1Pae8R+KSb9plOpPyUg2H hrF70fPFCSm18gEAhCbTi5iahQ2iQHsqfd9p9Eq1JBcOBshb03HJjt4RtgM= =1ln2 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u56.pgp000064400000000000000000000017561046102023000212420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAgMPOWFvnAjxO3OQKDqf5l6O9fp3v5oQSe2Wt LqgQjHrCwAsEHxYKAH0FgmHz9rIDCwkHCRBTM9kASIoWsUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfL8/wQ9hS4okAJnTVOo+2vxEfn8fDj m9aEvWW0qoKQVAMVCggCmwECHgEWIQRw9WtbDqV8uazesItTM9kASIoWsQAAqKsA /2iTSi/EhWv5Y5r0RvtvT7XEsuqluJWmSVNnyweNQS2sAQC290u+q1GTP4Yq8uuP OER2I2K5mLiHv5JvUxI1xpDOAs0RPHU1NkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRBTM9kASIoWsUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmerRiL8rH6+PDIbXDTPmobakLVnPheR/bWSlpM4JHDjswMVCggC mQECmwECHgEWIQRw9WtbDqV8uazesItTM9kASIoWsQAAtHYBAKWrSVpHJ3U9p7xH 4pJv2mU6k/JSDYeGsXvR88UJKbXyAQCEJtOLmJqFDaJAeyp932n0SrUkFw4GyFvT ccmO3hG2A8LAAQQQFgoAcwWCYfQI6QOF/3gJEAzXJK9BConORxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/ISQCq1z2w+7OTN0wf0zUjMoQa+ ZWdpnDm1oKmaz8R4FiEEbeM8NzWQa35prlk6DNckr0EKic4AAP8IAP9ycwlnAEEp ItC1+mW0u0amSVvvW2LV88yA/msFKNLdcQD/XTGnonoWDlRMjiw4wY+kGeft3fhT 42vOgcUsTAmHDw0= =7JDP -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u57-priv.pgp000064400000000000000000000015571046102023000222200ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 02C9 977B FF7B A029 5AF6 71AA 3189 4E2C D88A 0F0D Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAo7xuGJIJ2ITODBaPpS+LqoMTQ+etoGWvFa2J ZIROQuYAAP4nGrvp/EsnvUfYVF/DC52xCYC+tabjDRETpju+05C1ARBqwsALBB8W CgB9BYJh8/ayAwsJBwkQMYlOLNiKDw1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnkSOkY2/4murMjgGOWjxE9lGHBjOkhtdNdIZ+LayO3q8D FQoIApsBAh4BFiEEAsmXe/97oCla9nGqMYlOLNiKDw0AAMTUAQDSFCzDVTw2KRed t47KJbXIp2pJBYAz3F8nAYY2Ri0/EgEAzhhgBLyyFNmpUg2zaxFPws4LhY4JHyLN EpDXge3lUAzNETx1NTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ MYlOLNiKDw1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn ZhP33xwzf0qR1bOVQbDruMwlor2GZE5vcL+PJzjN32wDFQoIApkBApsBAh4BFiEE AsmXe/97oCla9nGqMYlOLNiKDw0AANkXAP4i3jRqGXvZTvvvkz3SqFXXNgxGjmOc 9Iqwb9REvmv5uwEA4nYALBcPH8Od8QVIPUGOPcWtVRTjU40OiCJTYtkQgwE= =es7t -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u57.pgp000064400000000000000000000017561046102023000212430ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAo7xuGJIJ2ITODBaPpS+LqoMTQ+etoGWvFa2J ZIROQubCwAsEHxYKAH0FgmHz9rIDCwkHCRAxiU4s2IoPDUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeRI6Rjb/ia6syOAY5aPET2UYcGM6SG 1010hn4trI7erwMVCggCmwECHgEWIQQCyZd7/3ugKVr2caoxiU4s2IoPDQAAxNQB ANIULMNVPDYpF523jsoltcinakkFgDPcXycBhjZGLT8SAQDOGGAEvLIU2alSDbNr EU/CzguFjgkfIs0SkNeB7eVQDM0RPHU1N0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRAxiU4s2IoPDUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdmE/ffHDN/SpHVs5VBsOu4zCWivYZkTm9wv48nOM3fbAMVCggC mQECmwECHgEWIQQCyZd7/3ugKVr2caoxiU4s2IoPDQAA2RcA/iLeNGoZe9lO+++T PdKoVdc2DEaOY5z0irBv1ES+a/m7AQDidgAsFw8fw53xBUg9QY49xa1VFONTjQ6I IlNi2RCDAcLAAQQQFgoAcwWCYfQI6QOF/3gJEFMz2QBIihaxRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyQXwzm4cUpe73A/6xCN5eCT+nOb Qs//VwGOsQUmrKcCFiEEcPVrWw6lfLms3rCLUzPZAEiKFrEAANFOAQDda/Vzjc+Z fDphkDzxO9mn0tNmoXKxy24qRBJXqZIjbwD/QdVzhV/n9wiAfKWcEERExi5jggAQ ZjeHAdy2suZUKgk= =hXKd -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u58-priv.pgp000064400000000000000000000015571046102023000222210ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 81FF 1066 38AC E77B 0C10 39D5 E69B CC93 690A 6B8D Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAPOYAZCValLSLv/bNClt798sBL1FplqzPiVM3 XmkRo8IAAPwOMvzcr+X5QkoibHPk3aLc27bwS4gAFH9bMT3CuJhfWBHmwsALBB8W CgB9BYJh8/ayAwsJBwkQ5pvMk2kKa41HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnCWVl1EC5/VhF2UI1oJfCYrxPtp63WzecHgQW3BzSACUD FQoIApsBAh4BFiEEgf8QZjis53sMEDnV5pvMk2kKa40AAPk8APkBWYSD+PedFphI vvfr2HtIUnYgVTkQ/Ie2/U2iIsCqgAEAk50O0Ip41lKZQPNMs3b2szHoKm/aJxn4 JD7USUyrIw/NETx1NThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ 5pvMk2kKa41HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn k1FatJ6CJH6LU1Stus1RVjXckvhdouCHQirxupZ/v/8DFQoIApkBApsBAh4BFiEE gf8QZjis53sMEDnV5pvMk2kKa40AAFYqAP9/B7q5CjHIgmPDG6mkTOZhnULuq6RM WJatR4IYgRlVHgD9FlmtqTbvI5EKPQ0fkvIsoovx4ykANM/Q4F4xK4Ovvww= =24qF -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u58.pgp000064400000000000000000000017561046102023000212440ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAPOYAZCValLSLv/bNClt798sBL1FplqzPiVM3 XmkRo8LCwAsEHxYKAH0FgmHz9rIDCwkHCRDmm8yTaQprjUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcJZWXUQLn9WEXZQjWgl8JivE+2nrdb N5weBBbcHNIAJQMVCggCmwECHgEWIQSB/xBmOKznewwQOdXmm8yTaQprjQAA+TwA +QFZhIP4950WmEi+9+vYe0hSdiBVORD8h7b9TaIiwKqAAQCTnQ7QinjWUplA80yz dvazMegqb9onGfgkPtRJTKsjD80RPHU1OEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRDmm8yTaQprjUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeTUVq0noIkfotTVK26zVFWNdyS+F2i4IdCKvG6ln+//wMVCggC mQECmwECHgEWIQSB/xBmOKznewwQOdXmm8yTaQprjQAAVioA/38HurkKMciCY8Mb qaRM5mGdQu6rpExYlq1HghiBGVUeAP0WWa2pNu8jkQo9DR+S8iyii/HjKQA0z9Dg XjErg6+/DMLAAQQQFgoAcwWCYfQI6QOF/3gJEDGJTizYig8NRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6ywrdR2Mw1tQpBCxbSAReyApzBw jOyvWueCgaEasVqgFiEEAsmXe/97oCla9nGqMYlOLNiKDw0AAMoOAQCCM3IU9Zup HblLCoAe9qdGR4Vg+aMjVkbnr0bkZ2+pzAD+KNaGHMRDERwy/gMkxI8+GNQwW/QJ qXq7APVAUXifVwk= =fpfD -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u59-priv.pgp000064400000000000000000000015571046102023000222220ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 1363 68A8 4C7E 56A8 6515 ACC6 DCD0 744A BE10 225D Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAdz8xcw/k2m4e5yN+wcvaY57Z8ihrAT27sT2N K6pR7ZsAAQCt/cmQ9Ceb49Gi3cPscMp0mjHj4LNF1pqyjJvvIFbpeRTgwsALBB8W CgB9BYJh8/ayAwsJBwkQ3NB0Sr4QIl1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn+IwxvlXLXr/lkHG1XcVZYKjzCDsf8lMyeoesx8xBLaID FQoIApsBAh4BFiEEE2NoqEx+VqhlFazG3NB0Sr4QIl0AAFsjAP9J5lM6Rt4PmyFZ oKNV5CcUjzgwdEPd5LqiJZok19CCbgD/YvDthdBgwskMGmxGBVPosGO55OZDd6vB 3miC6DCf7gXNETx1NTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ 3NB0Sr4QIl1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 0fO9o0kgo4QfSH4O1QpTVRAu05NBpc0hNSACsmrq/8UDFQoIApkBApsBAh4BFiEE E2NoqEx+VqhlFazG3NB0Sr4QIl0AAKY/AQCdoR0rQg/L6Si28Epup3BdNiHs5Qxo NUdnRp/33VVHVQEA/aE7GB2+Co0wBM42pORs48DXc91YD2olyUgx3Oqqbgg= =TBp8 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u59.pgp000064400000000000000000000017561046102023000212450ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAdz8xcw/k2m4e5yN+wcvaY57Z8ihrAT27sT2N K6pR7ZvCwAsEHxYKAH0FgmHz9rIDCwkHCRDc0HRKvhAiXUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf4jDG+Vctev+WQcbVdxVlgqPMIOx/y UzJ6h6zHzEEtogMVCggCmwECHgEWIQQTY2ioTH5WqGUVrMbc0HRKvhAiXQAAWyMA /0nmUzpG3g+bIVmgo1XkJxSPODB0Q93kuqIlmiTX0IJuAP9i8O2F0GDCyQwabEYF U+iwY7nk5kN3q8HeaILoMJ/uBc0RPHU1OUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRDc0HRKvhAiXUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfR872jSSCjhB9Ifg7VClNVEC7Tk0GlzSE1IAKyaur/xQMVCggC mQECmwECHgEWIQQTY2ioTH5WqGUVrMbc0HRKvhAiXQAApj8BAJ2hHStCD8vpKLbw Sm6ncF02IezlDGg1R2dGn/fdVUdVAQD9oTsYHb4KjTAEzjak5GzjwNdz3VgPaiXJ SDHc6qpuCMLAAQQQFgoAcwWCYfQI6QOF/3gJEOabzJNpCmuNRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxcZrF7XL03CA2SR64IA3dLg46aO NsVFc7eIqplJ7Xd+FiEEgf8QZjis53sMEDnV5pvMk2kKa40AAPHlAQDi3kIb9PU+ oauV3wle0XrmnsaRbmflgR51pmFG+fu9lwD9H2N9LeLKKT0PRjGLTYdRSPJKn69H SPd0jCqKnwMh1Ac= =GQxL -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u6-priv.pgp000064400000000000000000000015561046102023000221310ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7DCB 823A B1B3 3C6D 22FC 84AC 3026 DA74 AEEB 4A6E Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdAoP5I8iqbbmxZgZqJl9FHSjY63g3hZUdsvKAo TCrMkVQAAP9/FYw5zP7nqPqJhrzRkGZSc9BuL5QMf/xpbFZ5gkYauRHJwsALBB8W CgB9BYJh8/avAwsJBwkQMCbadK7rSm5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnuVUbTqqpnSwAYKCf67YDvpDGCCF+a9lxuOGvVR/jspsD FQoIApsBAh4BFiEEfcuCOrGzPG0i/ISsMCbadK7rSm4AAO/zAQDxq9CG/8KLykND 5jpxpAwKeqwDKEDfN4nnh2bopkgElQEAqByx9+uHLazDEaaBJMCiw3+5Reb88zvX g14/RMl3hgrNEDx1NkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9q8DCwkHCRAw Jtp0rutKbkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdg aDaqLy760GP74JE/UTMV7VeA6J/7/bZaMJRx1kByiwMVCggCmQECmwECHgEWIQR9 y4I6sbM8bSL8hKwwJtp0rutKbgAAuH0A/RLi9tUoopwm5ibUC4/rT+FM+PJtSwa8 EQOdBNe5FM32AP4qiY7f/kmE9VwSmroUqA8DQFfG5A3s0NZNIyuBGFlRCg== =bLeh -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u6.pgp000064400000000000000000000017561046102023000211550ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2rxYJKwYBBAHaRw8BAQdAoP5I8iqbbmxZgZqJl9FHSjY63g3hZUdsvKAo TCrMkVTCwAsEHxYKAH0FgmHz9q8DCwkHCRAwJtp0rutKbkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme5VRtOqqmdLABgoJ/rtgO+kMYIIX5r 2XG44a9VH+OymwMVCggCmwECHgEWIQR9y4I6sbM8bSL8hKwwJtp0rutKbgAA7/MB APGr0Ib/wovKQ0PmOnGkDAp6rAMoQN83ieeHZuimSASVAQCoHLH364ctrMMRpoEk wKLDf7lF5vzzO9eDXj9EyXeGCs0QPHU2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YfP2rwMLCQcJEDAm2nSu60puRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ2BoNqovLvrQY/vgkT9RMxXtV4Don/v9tlowlHHWQHKLAxUKCAKZ AQKbAQIeARYhBH3LgjqxszxtIvyErDAm2nSu60puAAC4fQD9EuL21SiinCbmJtQL j+tP4Uz48m1LBrwRA50E17kUzfYA/iqJjt/+SYT1XBKauhSoDwNAV8bkDezQ1k0j K4EYWVEKwsABBBAWCgBzBYJh9AjnA4X/eAkQC0iqit0poSlHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnL26roI6kuUTc8ZIrr6ni+59Stk4x KxlTb/y/IU7x94IWIQT7AMcESp3RZCQ87EYLSKqK3SmhKQAAVV8A/jKYhToQe2Py dFscEvX1SoyM3ayqPRSz71mpUXtZBkdyAP9EipYpnpqVVGOlMYS32RSk2zqJz1DH gNe1uf/4fT8wCQ== =mr0q -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u60-priv.pgp000064400000000000000000000015571046102023000222120ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2B5E 1D94 813C ED1C D63A 3F28 FEF3 43EA 790E 2333 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdA8TODLiN7tkw3wYyeJO9xhgO6kSVpjYaGs2Fx spFfAqoAAQCzBP58erf+kGtdkzzEwNH4Hs32zgTm6HSFk+VoPOnwORN9wsALBB8W CgB9BYJh8/ayAwsJBwkQ/vND6nkOIzNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnv35Gvv1b16PeiRIZEIkh1mefqMPfLVU9RqxP92MUxXUD FQoIApsBAh4BFiEEK14dlIE87RzWOj8o/vND6nkOIzMAACbLAP47+olYdBZ9Ewql VzWCa8TUhlhBhZQubXUnQwGMEZnMcwD/UHDQOZQx7G4vcH80RVPUg2uSnsmHYY/x MohjfbMOBALNETx1NjBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ /vND6nkOIzNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 16f8s5A3aWBWM2XvZOFED2wCyv+taT2k11A2sUUEGGADFQoIApkBApsBAh4BFiEE K14dlIE87RzWOj8o/vND6nkOIzMAAPScAQDCVEtFdo8rWY4t/xX5qtCCBSEh7v0C 46vR8N0o4pmjNAD/Svzb5croJSAlUe7/PyKvecaIuLGyHmrDWALoM0krxQo= =mbHI -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u60.pgp000064400000000000000000000017561046102023000212350ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdA8TODLiN7tkw3wYyeJO9xhgO6kSVpjYaGs2Fx spFfAqrCwAsEHxYKAH0FgmHz9rIDCwkHCRD+80PqeQ4jM0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme/fka+/VvXo96JEhkQiSHWZ5+ow98t VT1GrE/3YxTFdQMVCggCmwECHgEWIQQrXh2UgTztHNY6Pyj+80PqeQ4jMwAAJssA /jv6iVh0Fn0TCqVXNYJrxNSGWEGFlC5tdSdDAYwRmcxzAP9QcNA5lDHsbi9wfzRF U9SDa5KeyYdhj/EyiGN9sw4EAs0RPHU2MEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRD+80PqeQ4jM0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfXp/yzkDdpYFYzZe9k4UQPbALK/61pPaTXUDaxRQQYYAMVCggC mQECmwECHgEWIQQrXh2UgTztHNY6Pyj+80PqeQ4jMwAA9JwBAMJUS0V2jytZji3/ Ffmq0IIFISHu/QLjq9Hw3SjimaM0AP9K/NvlyuglICVR7v8/Iq95xoi4sbIeasNY AugzSSvFCsLAAQQQFgoAcwWCYfQI6QOF/3gJENzQdEq+ECJdRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ28qOc0T8mEc4GjDRLbPa8JzwV1K bX2Gj+4RLCevkbN6FiEEE2NoqEx+VqhlFazG3NB0Sr4QIl0AAOt4AP0a4R+7XP8G ZimnxFdN9/ONUUfosGe82GgnuBpPeoF2ZwEA/LqJ7egcQJ7mY5BO1WRJ6W8Rkr6K 83WEcixL9chsvg0= =CMPl -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u61-priv.pgp000064400000000000000000000015571046102023000222130ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 680A DF11 82D0 0512 D298 417C 6DBF C908 4BFD B79D Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAiZPX4ZStexAxLEa+iKG30LOpoY3oTDK0O3wd ArDE6moAAP4/si31W1FQ+hqcrCHRqo/8XVDpT2vaNmJ4HIL20Smb7hHhwsALBB8W CgB9BYJh8/ayAwsJBwkQbb/JCEv9t51HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JngPzLcS1Gq/1WDHlOGpFAlMWuUlC3TnFm+HuvxhyvhRMD FQoIApsBAh4BFiEEaArfEYLQBRLSmEF8bb/JCEv9t50AAJNKAQCzSd0n+hQ6RLv3 QZT1iQoaSR/HOqj4GKd5OYZhUD6oEQD+O12AFnoGTI5+JCMoQ66u00E/WIv7VBbM 2MOu8wKgvQrNETx1NjFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ bb/JCEv9t51HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn B3I5mcDOtjH85912qixdikHbzedmnXeaE1o0UlvqUp4DFQoIApkBApsBAh4BFiEE aArfEYLQBRLSmEF8bb/JCEv9t50AANomAQCWw4ANxYAInLYnkWJ0zQRgyopdtn+y FT7VribMU6RekQD9HkTgnFARWBFGLKtFC0IkCrP4ZIZcQlyw+NNrDO3ZZA4= =xM2a -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u61.pgp000064400000000000000000000017561046102023000212360ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAiZPX4ZStexAxLEa+iKG30LOpoY3oTDK0O3wd ArDE6mrCwAsEHxYKAH0FgmHz9rIDCwkHCRBtv8kIS/23nUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeA/MtxLUar/VYMeU4akUCUxa5SULdO cWb4e6/GHK+FEwMVCggCmwECHgEWIQRoCt8RgtAFEtKYQXxtv8kIS/23nQAAk0oB ALNJ3Sf6FDpEu/dBlPWJChpJH8c6qPgYp3k5hmFQPqgRAP47XYAWegZMjn4kIyhD rq7TQT9Yi/tUFszYw67zAqC9Cs0RPHU2MUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRBtv8kIS/23nUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcHcjmZwM62Mfzn3XaqLF2KQdvN52add5oTWjRSW+pSngMVCggC mQECmwECHgEWIQRoCt8RgtAFEtKYQXxtv8kIS/23nQAA2iYBAJbDgA3FgAictieR YnTNBGDKil22f7IVPtWuJsxTpF6RAP0eROCcUBFYEUYsq0ULQiQKs/hkhlxCXLD4 02sM7dlkDsLAAQQQFgoAcwWCYfQI6QOF/3gJEP7zQ+p5DiMzRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/BPBlsdv/SDDxOs+81MXcQVY7F2 hLKcnIcEyife6PODFiEEK14dlIE87RzWOj8o/vND6nkOIzMAAJ5zAP4pqEw2hvWS Uw1Rrq8iydIYe+l9dTSkmPOnf4jMlVBoggEA7G7ig/lWABNXRfD3fwBUK2qXtRCr FSKLUzgifU4ImwI= =dl25 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u62-priv.pgp000064400000000000000000000015571046102023000222140ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 17DF BFB2 149A B4A8 2B1D E5E5 AE63 FBDC E687 4162 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdACGorT7NuxynScF79s6cQPyEKhz6aNQbo3ihT Ao7CKtwAAPwJwZv5VMnD3bVdSYeYCoK8C45s3LYKGGHF7GBov4K44RJGwsALBB8W CgB9BYJh8/ayAwsJBwkQrmP73OaHQWJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnHSwgeKB9CV0Iau/TKkj0+euh2oo0vgvhYugVdk2Gw7kD FQoIApsBAh4BFiEEF9+/shSatKgrHeXlrmP73OaHQWIAANCGAQDBuWgRRV7XVQo+ BCmp/C8Iva0J8LmEaVq7OXG2GxHpYwD/TwS1ijzAAtUhQh00I13g9qwuoAQrELES CHaRKSAmHwfNETx1NjJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ rmP73OaHQWJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn brrkTq76ZVYupb06ZkWFoyt8aaXe1U5pECir2q2UJ2cDFQoIApkBApsBAh4BFiEE F9+/shSatKgrHeXlrmP73OaHQWIAAEqHAQDRYce0tS1T0wYWQtK0iZzFbsdBUlVk JmoZQrggni5gZAEAuPHDw8qdbn/FAmztxkMH3ZBjLeoPDWP1t/uqlWJMhQI= =LPZ9 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u62.pgp000064400000000000000000000017561046102023000212370ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdACGorT7NuxynScF79s6cQPyEKhz6aNQbo3ihT Ao7CKtzCwAsEHxYKAH0FgmHz9rIDCwkHCRCuY/vc5odBYkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcdLCB4oH0JXQhq79MqSPT566HaijS+ C+Fi6BV2TYbDuQMVCggCmwECHgEWIQQX37+yFJq0qCsd5eWuY/vc5odBYgAA0IYB AMG5aBFFXtdVCj4EKan8Lwi9rQnwuYRpWrs5cbYbEeljAP9PBLWKPMAC1SFCHTQj XeD2rC6gBCsQsRIIdpEpICYfB80RPHU2MkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRCuY/vc5odBYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmduuuROrvplVi6lvTpmRYWjK3xppd7VTmkQKKvarZQnZwMVCggC mQECmwECHgEWIQQX37+yFJq0qCsd5eWuY/vc5odBYgAASocBANFhx7S1LVPTBhZC 0rSJnMVux0FSVWQmahlCuCCeLmBkAQC48cPDyp1uf8UCbO3GQwfdkGMt6g8NY/W3 +6qVYkyFAsLAAQQQFgoAcwWCYfQI6QOF/3gJEG2/yQhL/bedRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4xhBEyRU7OnSOSCx43yFBn0LfDf vCke3mYTS3OGw4NJFiEEaArfEYLQBRLSmEF8bb/JCEv9t50AAIiXAP4lnD61yETW uMB+wZO9hrFd2ZMypnZ1ABtvaZ80LzJMTgEAm9sf78e/T1rCoYl7yvEcaDsMb6gW W4laDuKbpjF+GQ8= =juI0 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u63-priv.pgp000064400000000000000000000015571046102023000222150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2FD6 D0F6 80B5 5F9A F128 DBCB A4C7 1E44 F433 B728 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAS7hnL35mxjW04iT9oCSPsU2BxhjEma7Ctd/I HLXbjIsAAP0TxTzDx7deccQSXxo5CUpD1IVEWVdQvqpTBLBO2yBL9A7TwsALBB8W CgB9BYJh8/ayAwsJBwkQpMceRPQztyhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnljfqer85IW3lcMXWJpLKBc4iAQsTLv24mRf2sbDq+e0D FQoIApsBAh4BFiEEL9bQ9oC1X5rxKNvLpMceRPQztygAANHPAP9bgFU5pJP9iPjL rfm/RE9XMUjCo917LTDsnzVO95TcXQEAh+oiWi5R8UV5eXbEQxNhIAWDx9Ghb5I6 5cEn9+g55gPNETx1NjNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ pMceRPQztyhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn SXXoV6IJbHFG/noamSa2aZUU6BNqraIVfCaXX1tQMwIDFQoIApkBApsBAh4BFiEE L9bQ9oC1X5rxKNvLpMceRPQztygAAIjGAQCHz/M67CssETABuOS8xO5/+BfhF2oh cvznaAKzjbGZBgEAiz5zqLT61D9Wc+ePb4pU1I2HMzKRj/Q1ISmBq5paFQ0= =6Pqo -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u63.pgp000064400000000000000000000017561046102023000212400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAS7hnL35mxjW04iT9oCSPsU2BxhjEma7Ctd/I HLXbjIvCwAsEHxYKAH0FgmHz9rIDCwkHCRCkxx5E9DO3KEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeWN+p6vzkhbeVwxdYmksoFziIBCxMu /biZF/axsOr57QMVCggCmwECHgEWIQQv1tD2gLVfmvEo28ukxx5E9DO3KAAA0c8A /1uAVTmkk/2I+Mut+b9ET1cxSMKj3XstMOyfNU73lNxdAQCH6iJaLlHxRXl5dsRD E2EgBYPH0aFvkjrlwSf36DnmA80RPHU2M0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRCkxx5E9DO3KEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdJdehXoglscUb+ehqZJrZplRToE2qtohV8JpdfW1AzAgMVCggC mQECmwECHgEWIQQv1tD2gLVfmvEo28ukxx5E9DO3KAAAiMYBAIfP8zrsKywRMAG4 5LzE7n/4F+EXaiFy/OdoArONsZkGAQCLPnOotPrUP1Zz549vilTUjYczMpGP9DUh KYGrmloVDcLAAQQQFgoAcwWCYfQI6QOF/3gJEK5j+9zmh0FiRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0JcROAeOkswJvZLygWNT7KQPvNJ Ain35XgkblVrA0jQFiEEF9+/shSatKgrHeXlrmP73OaHQWIAAPWfAQDua1VBbrd9 lUnQceGMhtkCgZyjBcu5XjJQYTEzyKInNAEAsvybOVOUzuBUZzB/gN9YnJvm9GHN 6zB4sAyEH/cFOQo= =MZuX -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u64-priv.pgp000064400000000000000000000015571046102023000222160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2655 1C85 DBFD DEA9 7B7E 7A00 68DB DE9E 792A 7A49 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdApJvgRjRK8OjUz3oxJo0WnFcjU8mH6mCj/zqH uT/v6tgAAQCOqAPIIeLcW1jPeDiYpG1Fpl+2Q0YqSk3X3bf8dsFw4hD2wsALBB8W CgB9BYJh8/ayAwsJBwkQaNvennkqeklHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnQQFXBYQPph0E4P52fIYi8XVuTFiHTM0BysgsGfdbcFoD FQoIApsBAh4BFiEEJlUchdv93ql7fnoAaNvennkqekkAAKszAP9wHCH8X4jOtM19 OrXDLNZ2G+1QPbGhns9ZAR4ucIQ1VgD/UO58tF7itV3AkhgXuvj1cyxO54ODBsN/ qAbPA7vJgAHNETx1NjRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ aNvennkqeklHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn XvBqjm6kt8YsnhK1NQOJDpYrRN8SRY2h4b86OXCayFwDFQoIApkBApsBAh4BFiEE JlUchdv93ql7fnoAaNvennkqekkAAHM/AP4vruSpvX7LDDtLPpYOFKgt3/bh2jZN I303U5PwMQJHPwEA3rQzPwqd83SmvOXMrtxPFbm7VQ6/kMQDMWR6VTgzbwM= =Dhjg -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u64.pgp000064400000000000000000000017561046102023000212410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdApJvgRjRK8OjUz3oxJo0WnFcjU8mH6mCj/zqH uT/v6tjCwAsEHxYKAH0FgmHz9rIDCwkHCRBo296eeSp6SUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdBAVcFhA+mHQTg/nZ8hiLxdW5MWIdM zQHKyCwZ91twWgMVCggCmwECHgEWIQQmVRyF2/3eqXt+egBo296eeSp6SQAAqzMA /3AcIfxfiM60zX06tcMs1nYb7VA9saGez1kBHi5whDVWAP9Q7ny0XuK1XcCSGBe6 +PVzLE7ng4MGw3+oBs8Du8mAAc0RPHU2NEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRBo296eeSp6SUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmde8GqObqS3xiyeErU1A4kOlitE3xJFjaHhvzo5cJrIXAMVCggC mQECmwECHgEWIQQmVRyF2/3eqXt+egBo296eeSp6SQAAcz8A/i+u5Km9fssMO0s+ lg4UqC3f9uHaNk0jfTdTk/AxAkc/AQDetDM/Cp3zdKa85cyu3E8VubtVDr+QxAMx ZHpVODNvA8LAAQQQFgoAcwWCYfQI6QOF/3gJEKTHHkT0M7coRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4kKt45/pntGMobAYlQPvuKKul+q vrlT4GtQMkcRwDheFiEEL9bQ9oC1X5rxKNvLpMceRPQztygAAIx9AP41fbVg1p67 n7OYd912AEB/KTL4X/pQEGB2xXRNoutmHQD/XfZPFkEWELn2uzCZ+6WkP9X/+poo UTTC8kX4xpnscQY= =k839 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u65-priv.pgp000064400000000000000000000015571046102023000222170ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 341B B68A 3695 B3D9 EE30 7D77 9431 7B14 5CEF CB60 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAWioy7i1o6tPVNZlZpr4zqj8oJLhd+k0dP3la hGR1Y/8AAPwMSXw7wgAqFNCM4h+esbemnBRSJTyZXke6KlW3byHdlg6lwsALBB8W CgB9BYJh8/ayAwsJBwkQlDF7FFzvy2BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnLUlXI3M6g3Y+3L/Yfe+Z1fzjlgAwTsw7qdUgD72jGFAD FQoIApsBAh4BFiEENBu2ijaVs9nuMH13lDF7FFzvy2AAADNxAP0TC0eiFOgTsSsm oHO1IBJUnSCGfgkaciv1ppD66bEBeAD/WMmioN0HjL6VXglUYkazvGaatoahywC9 0/aAimMF8wvNETx1NjVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ lDF7FFzvy2BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 4fgBeY/uxzBmv/6mm6fUYqTyeLc7C9EI7j5K5yl03AIDFQoIApkBApsBAh4BFiEE NBu2ijaVs9nuMH13lDF7FFzvy2AAAC2IAQDO1NTCwY4MoULc6xumfvhwXrcj2VA2 zh69OqIQlf2nJwD8De45DoIRYBgxutPiYjG5dwfSqi6UVEIsZ2ejTKk6MAE= =Zf5p -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u65.pgp000064400000000000000000000017561046102023000212420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAWioy7i1o6tPVNZlZpr4zqj8oJLhd+k0dP3la hGR1Y//CwAsEHxYKAH0FgmHz9rIDCwkHCRCUMXsUXO/LYEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmctSVcjczqDdj7cv9h975nV/OOWADBO zDup1SAPvaMYUAMVCggCmwECHgEWIQQ0G7aKNpWz2e4wfXeUMXsUXO/LYAAAM3EA /RMLR6IU6BOxKyagc7UgElSdIIZ+CRpyK/WmkPrpsQF4AP9YyaKg3QeMvpVeCVRi RrO8Zpq2hqHLAL3T9oCKYwXzC80RPHU2NUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRCUMXsUXO/LYEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfh+AF5j+7HMGa//qabp9RipPJ4tzsL0QjuPkrnKXTcAgMVCggC mQECmwECHgEWIQQ0G7aKNpWz2e4wfXeUMXsUXO/LYAAALYgBAM7U1MLBjgyhQtzr G6Z++HBetyPZUDbOHr06ohCV/acnAPwN7jkOghFgGDG60+JiMbl3B9KqLpRUQixn Z6NMqTowAcLAAQQQFgoAcwWCYfQI6QOF/3gJEGjb3p55KnpJRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/NojavYMuHJaNfPV0KgmClsNSO0 b4rIH1jYbuIGTwA/FiEEJlUchdv93ql7fnoAaNvennkqekkAAFSbAP4tVcFzBdjb fSUcYyLqWB1nYU/uLov9lmWOoIFb+w2kwgD/VKtGGZoAke21kGH9SVOdZ0VwK/33 3OQ0CULqlPVyPg8= =Oax8 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u66-priv.pgp000064400000000000000000000015571046102023000222200ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2E65 A5B2 F70D 16D5 D4D0 664D 360A E9BD 58C5 55C1 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAF3Ausjl5lJ0+0krrynBZkLIzP2FzMPWT7BlV Y4LK+HkAAQDG/zTo3Kqg1egA1+ha54UFJ3V2Tx+KyBRnQtBCL1F9sRCewsALBB8W CgB9BYJh8/ayAwsJBwkQNgrpvVjFVcFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnUwvjzQ+cc6N6H1mPv4W611P3G4qvTbnFlc3Tqf8C1DkD FQoIApsBAh4BFiEELmWlsvcNFtXU0GZNNgrpvVjFVcEAAGWgAP4lNFi+0NkVIzQH Q0uNUxF8r6LwduwSszBS728aA2Zd9AEAm5mCVx5Uxihh7h1VOPmAubDM//8cd3eR KORYREEbfAfNETx1NjZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ NgrpvVjFVcFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn H21yGrCjEhn5uL/aE3JBinrO3IFREVAfRLpmUIntpfEDFQoIApkBApsBAh4BFiEE LmWlsvcNFtXU0GZNNgrpvVjFVcEAAGfXAQCynE4UaF5G0owdkbWWTnsk2DZgu7R/ Na/CpenrWRHkPgEAoYUhTeynjuZ6ftqh/2zFRlxN3ognFfbtSB32RZbR0A4= =jT4G -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u66.pgp000064400000000000000000000017561046102023000212430ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAF3Ausjl5lJ0+0krrynBZkLIzP2FzMPWT7BlV Y4LK+HnCwAsEHxYKAH0FgmHz9rIDCwkHCRA2Cum9WMVVwUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdTC+PND5xzo3ofWY+/hbrXU/cbiq9N ucWVzdOp/wLUOQMVCggCmwECHgEWIQQuZaWy9w0W1dTQZk02Cum9WMVVwQAAZaAA /iU0WL7Q2RUjNAdDS41TEXyvovB27BKzMFLvbxoDZl30AQCbmYJXHlTGKGHuHVU4 +YC5sMz//xx3d5Eo5FhEQRt8B80RPHU2NkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRA2Cum9WMVVwUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcfbXIasKMSGfm4v9oTckGKes7cgVERUB9EumZQie2l8QMVCggC mQECmwECHgEWIQQuZaWy9w0W1dTQZk02Cum9WMVVwQAAZ9cBALKcThRoXkbSjB2R tZZOeyTYNmC7tH81r8Kl6etZEeQ+AQChhSFN7KeO5np+2qH/bMVGXE3eiCcV9u1I HfZFltHQDsLAAQQQFgoAcwWCYfQI6QOF/3gJEJQxexRc78tgRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8FAN6IsJAmirgESU08+ZuHbfUDc mWudH4JZztB1mH1wFiEENBu2ijaVs9nuMH13lDF7FFzvy2AAAMDOAQCCXsNNsspz kgj5mSkNWvuhYkB8TkRSgyihzAv+iifkmwD8C6hdOI4wyXCqTXoiDIrGXaxgTWpe sARZVVs9UlApngk= =b2r4 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u67-priv.pgp000064400000000000000000000015571046102023000222210ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: DEE7 D316 2919 AC8A C959 2051 BFAC F193 B344 DEF1 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAUC2u8eyJYJ2HF8/1T58eP+JGaH9uo2aHuX4X b24YdiMAAQC5cjL8CUVZfQjgb6i3IDrX+ZsBPuB3e9NGCWIvb1wG6A52wsALBB8W CgB9BYJh8/ayAwsJBwkQv6zxk7NE3vFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnS0q5aQlUdBiqS2xhsVjIbMvuOUuG8WxgIdRAe3JIQEkD FQoIApsBAh4BFiEE3ufTFikZrIrJWSBRv6zxk7NE3vEAAA0AAPsFyg5YoQ8D47Ma qcFPCkC0j6Bz/IQiCn0/PrQbjLIYpQEAzzuI5RnWnc9ctwskp5VQQZgHXNJZnC9g cShx0GWvnQbNETx1NjdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ v6zxk7NE3vFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn PxJ2WsdDBPiRw3NHVHrMZbgG9jXrrIN3JNBrcXFY2wgDFQoIApkBApsBAh4BFiEE 3ufTFikZrIrJWSBRv6zxk7NE3vEAALJpAP9wX9Lc5bruMbL63EzEcxrsEEOIJp3+ HFgobqhJ3iDxzQD+LF+mPhq0WBlVHwmAEAthH7BYr30n9psJKEXX+qZTdgk= =+N/I -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u67.pgp000064400000000000000000000017561046102023000212440ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAUC2u8eyJYJ2HF8/1T58eP+JGaH9uo2aHuX4X b24YdiPCwAsEHxYKAH0FgmHz9rIDCwkHCRC/rPGTs0Te8UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdLSrlpCVR0GKpLbGGxWMhsy+45S4bx bGAh1EB7ckhASQMVCggCmwECHgEWIQTe59MWKRmsislZIFG/rPGTs0Te8QAADQAA +wXKDlihDwPjsxqpwU8KQLSPoHP8hCIKfT8+tBuMshilAQDPO4jlGdadz1y3CySn lVBBmAdc0lmcL2BxKHHQZa+dBs0RPHU2N0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRC/rPGTs0Te8UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc/EnZax0ME+JHDc0dUesxluAb2Neusg3ck0GtxcVjbCAMVCggC mQECmwECHgEWIQTe59MWKRmsislZIFG/rPGTs0Te8QAAsmkA/3Bf0tzluu4xsvrc TMRzGuwQQ4gmnf4cWChuqEneIPHNAP4sX6Y+GrRYGVUfCYAQC2EfsFivfSf2mwko Rdf6plN2CcLAAQQQFgoAcwWCYfQI6QOF/3gJEDYK6b1YxVXBRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+8qhOs01vT8/1AeX2gAU5VAl4BZ PsiGhqQWCRuuutcPFiEELmWlsvcNFtXU0GZNNgrpvVjFVcEAAJXkAQD70WLxmrkC IXF65PXPAONQrf7HEkL5mjE5Q0Cdys8V7AEA6URwqhLtCA5UusOXAbucOHHKENbj zyJN+pQyxxuzlwM= =qOjV -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u68-priv.pgp000064400000000000000000000015571046102023000222220ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2A8C E469 DD78 3B95 C92A 6F32 94A5 A609 AA67 9F71 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAuuDDZMZcHDeZL0aN68ScJ4PldKy2WzMXglpx mVha2rsAAP4mkF6Z2VbtZA35HQi3FAMLYW1oKL8KEkP1CbbPVFHZpA5QwsALBB8W CgB9BYJh8/ayAwsJBwkQlKWmCapnn3FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jndki5IHmpkL2Tn4ExPUNZkGSQp3SnL+gDOp6iVfxkl8YD FQoIApsBAh4BFiEEKozkad14O5XJKm8ylKWmCapnn3EAACqmAQCH7bJK5M2ifuK6 YQ9lJuCpolN+34GyJfCyXv9t1bQG9gEA+nTxpP/sA/K2/MFw5ZtfLTHBMnUWeGr3 MT3rOxM7WQ/NETx1NjhAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ lKWmCapnn3FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn V3ALym5lws18gxwvVE6UqxBal8PRNmF0PwvFlgHePXoDFQoIApkBApsBAh4BFiEE Kozkad14O5XJKm8ylKWmCapnn3EAAD2sAP4vpKD2rtxJ56upRo3h0phu8H451kZK IaqGIcRHJDNFIQD/de0BcruTkCEjxr1omYEbAuIdEafqsusPbSWeKP8qyww= =e+Pt -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u68.pgp000064400000000000000000000017561046102023000212450ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAuuDDZMZcHDeZL0aN68ScJ4PldKy2WzMXglpx mVha2rvCwAsEHxYKAH0FgmHz9rIDCwkHCRCUpaYJqmefcUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd2SLkgeamQvZOfgTE9Q1mQZJCndKcv 6AM6nqJV/GSXxgMVCggCmwECHgEWIQQqjORp3Xg7lckqbzKUpaYJqmefcQAAKqYB AIftskrkzaJ+4rphD2Um4KmiU37fgbIl8LJe/23VtAb2AQD6dPGk/+wD8rb8wXDl m18tMcEydRZ4avcxPes7EztZD80RPHU2OEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRCUpaYJqmefcUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdXcAvKbmXCzXyDHC9UTpSrEFqXw9E2YXQ/C8WWAd49egMVCggC mQECmwECHgEWIQQqjORp3Xg7lckqbzKUpaYJqmefcQAAPawA/i+koPau3Ennq6lG jeHSmG7wfjnWRkohqoYhxEckM0UhAP917QFyu5OQISPGvWiZgRsC4h0Rp+qy6w9t JZ4o/yrLDMLAAQQQFgoAcwWCYfQI6QOF/3gJEL+s8ZOzRN7xRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3iCQMT4NfYGdM0dGgfJewk/RAEU jhdCmiLK0RwuVgkBFiEE3ufTFikZrIrJWSBRv6zxk7NE3vEAAA2IAQDQo2+M4Z/u UwvI+UPusXkyFFlYAspQDwL+hjW3qqcnEgEAxt6nVMqqAGhKWI/Xv5e2AFcUlS7A ewFu6SUe7/xBqg8= =uROh -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u69-priv.pgp000064400000000000000000000015571046102023000222230ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8A9F E07B 4048 2C55 59A6 770B 57B7 9188 B52B D346 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAOdB/Emd+UKJugCyrtbch3f1qDethQniz0ZWU c4iwhLEAAP9i+nixN4FT4DfFMdPoE8KuGXbRQTsMHEjY269axA3LxxFFwsALBB8W CgB9BYJh8/ayAwsJBwkQV7eRiLUr00ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnXYGkyp2hngF4zlHC8zjXE+JQ0R7tOgy6y+dgzmXbUZ4D FQoIApsBAh4BFiEEip/ge0BILFVZpncLV7eRiLUr00YAAMwPAQCG1xrWmOWu/e4h unZ0ue5xYF+TsyJWHpaJnFIABVhDtQEA4J0KQibZbuxEJLs4PXPwWvpUbWdtbJ+A WrDnLZxpHAnNETx1NjlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ V7eRiLUr00ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn X9qReeujuxzkaAwxdZgkZFPYq+4DSA1uNAc6TYTYsAQDFQoIApkBApsBAh4BFiEE ip/ge0BILFVZpncLV7eRiLUr00YAAAAJAPwKlXB6wZliO0w6tIl/+v8c2neS3vgr 4GNo4s63MDQIoQD/dueyFzx0wLZiSokm72blyFdeZHC/FXOOvsDVjojBUgY= =gMqr -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u69.pgp000064400000000000000000000017561046102023000212460ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAOdB/Emd+UKJugCyrtbch3f1qDethQniz0ZWU c4iwhLHCwAsEHxYKAH0FgmHz9rIDCwkHCRBXt5GItSvTRkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmddgaTKnaGeAXjOUcLzONcT4lDRHu06 DLrL52DOZdtRngMVCggCmwECHgEWIQSKn+B7QEgsVVmmdwtXt5GItSvTRgAAzA8B AIbXGtaY5a797iG6dnS57nFgX5OzIlYelomcUgAFWEO1AQDgnQpCJtlu7EQkuzg9 c/Ba+lRtZ21sn4BasOctnGkcCc0RPHU2OUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRBXt5GItSvTRkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdf2pF566O7HORoDDF1mCRkU9ir7gNIDW40BzpNhNiwBAMVCggC mQECmwECHgEWIQSKn+B7QEgsVVmmdwtXt5GItSvTRgAAAAkA/AqVcHrBmWI7TDq0 iX/6/xzad5Le+CvgY2jizrcwNAihAP9257IXPHTAtmJKiSbvZuXIV15kcL8Vc46+ wNWOiMFSBsLAAQQQFgoAcwWCYfQI6QOF/3gJEJSlpgmqZ59xRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+mm0L8iD7aIm0iVDJu2FwZVPgrF sprD1NS1DM4+MBBmFiEEKozkad14O5XJKm8ylKWmCapnn3EAAPlRAP9va/Q+DPA7 SidAPmuAGtvyvd14YPVsiEMnmzIXe9zctgEA28Q3wWAVEGAJ4SRjIpIuQ1qgS8t/ I15lMZrEjY014w0= =n7n6 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u7-priv.pgp000064400000000000000000000015561046102023000221320ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0058 DCF7 A7C6 C436 0DE9 095D B6F3 3843 D961 E818 Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdAgzQPHSdztypdi9vYuqKSICInk3eiLN+SWHoX boamTlYAAP9ABMzHCca80Si8OFklcVzl5YZGz3BuerJCqtSsLwyTABBCwsALBB8W CgB9BYJh8/avAwsJBwkQtvM4Q9lh6BhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnjc0Ao4s1B+ZpRxqg+9oskKi4ig0q9DukzV6sQbtc7nwD FQoIApsBAh4BFiEEAFjc96fGxDYN6QldtvM4Q9lh6BgAAEYnAQDJPiC8rXt6I+hx N51dOjDrYlM3GhkpItSrbVFOjrO6CAD+O0QxuqvTFacW/OxWqBV1+i+qnAJZuAkC zUkY2ogAQADNEDx1N0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9q8DCwkHCRC2 8zhD2WHoGEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmes 6r3SW27mIh2wbDw2HnalbVpuVj2IRZPVW2FFu8rB9AMVCggCmQECmwECHgEWIQQA WNz3p8bENg3pCV228zhD2WHoGAAAWicA/0dsmVlGf3VnQVyO0BqQWsuEUuuJKCfW R6y+HroMuG+jAQDL/AupngCTT887tdgz750XSbwV5euEfPDldzT5RsEhCQ== =jPgo -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u7.pgp000064400000000000000000000017561046102023000211560ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2rxYJKwYBBAHaRw8BAQdAgzQPHSdztypdi9vYuqKSICInk3eiLN+SWHoX boamTlbCwAsEHxYKAH0FgmHz9q8DCwkHCRC28zhD2WHoGEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeNzQCjizUH5mlHGqD72iyQqLiKDSr0 O6TNXqxBu1zufAMVCggCmwECHgEWIQQAWNz3p8bENg3pCV228zhD2WHoGAAARicB AMk+ILyte3oj6HE3nV06MOtiUzcaGSki1KttUU6Os7oIAP47RDG6q9MVpxb87Fao FXX6L6qcAlm4CQLNSRjaiABAAM0QPHU3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YfP2rwMLCQcJELbzOEPZYegYRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ6zqvdJbbuYiHbBsPDYedqVtWm5WPYhFk9VbYUW7ysH0AxUKCAKZ AQKbAQIeARYhBABY3PenxsQ2DekJXbbzOEPZYegYAABaJwD/R2yZWUZ/dWdBXI7Q GpBay4RS64koJ9ZHrL4eugy4b6MBAMv8C6meAJNPzzu12DPvnRdJvBXl64R88OV3 NPlGwSEJwsABBBAWCgBzBYJh9AjnA4X/eAkQMCbadK7rSm5HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn4MgT9susWD+0xGzCEPQJtvQwK2WR xCCM9hAKCk1nTjAWIQR9y4I6sbM8bSL8hKwwJtp0rutKbgAAlOYBAI6LRnkRxfBP okXxcho75ddODzHwR7BavvXDVWfNCJ9zAP4j/dDCORM73+Avss3Kx26FxGPrYMuN 5d9Vn+Z4OCqIAA== =JaMq -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u70-priv.pgp000064400000000000000000000015571046102023000222130ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6993 EE3E 5C46 53A0 3EAC BEC2 5604 E4A5 5B4F 75AB Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAw/JY1kFsytDsEO3LkX5daRVlpSRjwcKXsknw 387BB2QAAQDvYY2lnv14z9ur4uENDfUF/GXCEfvBXvRKqE9X/Tj0gRNGwsALBB8W CgB9BYJh8/ayAwsJBwkQVgTkpVtPdatHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnLkrZ1arnU6NzwGptv19gisdHk/i2jjdkOMJtYQ8sBuYD FQoIApsBAh4BFiEEaZPuPlxGU6A+rL7CVgTkpVtPdasAAGr/AP9wXUKxJB3NvLAX TtsTntkngyu+sLiO+mfgO8iiRqjPHAD6AzOfmI1EWOcCtPW7kDSRVQvEJH8Y4JZB 9tdhCFPmswjNETx1NzBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ VgTkpVtPdatHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn WtxI7rDe8TDGCzSWFojojljRE+J0uJuki5o4OgnWJvIDFQoIApkBApsBAh4BFiEE aZPuPlxGU6A+rL7CVgTkpVtPdasAADQ/AQCTAmSLpx8kkFSKPNB9CYaZkI+Ye1sD 2RlIrbb2aNflbAD+K0vO2KqsjHg/bEg9S3K51oOuKoUJI808SFqFmLOxeQg= =UgqL -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u70.pgp000064400000000000000000000017561046102023000212360ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAw/JY1kFsytDsEO3LkX5daRVlpSRjwcKXsknw 387BB2TCwAsEHxYKAH0FgmHz9rIDCwkHCRBWBOSlW091q0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcuStnVqudTo3PAam2/X2CKx0eT+LaO N2Q4wm1hDywG5gMVCggCmwECHgEWIQRpk+4+XEZToD6svsJWBOSlW091qwAAav8A /3BdQrEkHc28sBdO2xOe2SeDK76wuI76Z+A7yKJGqM8cAPoDM5+YjURY5wK09buQ NJFVC8QkfxjglkH212EIU+azCM0RPHU3MEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRBWBOSlW091q0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmda3EjusN7xMMYLNJYWiOiOWNET4nS4m6SLmjg6CdYm8gMVCggC mQECmwECHgEWIQRpk+4+XEZToD6svsJWBOSlW091qwAAND8BAJMCZIunHySQVIo8 0H0JhpmQj5h7WwPZGUittvZo1+VsAP4rS87YqqyMeD9sSD1LcrnWg64qhQkjzTxI WoWYs7F5CMLAAQQQFgoAcwWCYfQI6QOF/3gJEFe3kYi1K9NGRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9AdWjuHHP7zx2pTRV9PaFW8Mnx5 HQQ37BwBnheCNgsIFiEEip/ge0BILFVZpncLV7eRiLUr00YAAE6EAP9RBbawNSRo z++6CJdyyz9/cRIBNGHv70FyJIS2aJRXhQD/cX4UDGyndIjxbfdm2xnqoCDiGXXI F7OQyoH8foy++gw= =hXFR -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u71-priv.pgp000064400000000000000000000015571046102023000222140ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 66DF 2690 FEAC 606C 285A A4D9 8637 6ACD 1964 BE48 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdASwno3C/55ZqZzdkFkk/f8TUrlrhR0rlVfS2W +Yz5AEAAAP93KD3Rf71aDlFXu9k2qkzhDMhL3ToCRKok0266O6KjwhAgwsALBB8W CgB9BYJh8/ayAwsJBwkQhjdqzRlkvkhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnlV9cz2rq9E10bYbssEkC7HMLdJj8lgB3rAJ9CEMz01kD FQoIApsBAh4BFiEEZt8mkP6sYGwoWqTZhjdqzRlkvkgAAIbJAP45CmbVS8OLGSNg R3kQolHBeCVWIDTGTxIvxSDNKJlTLQEA7kZYRm8SM0nJiXB3If8K+nbYkzEBQo6v QAZafnqGjAfNETx1NzFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ hjdqzRlkvkhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn D944DXp60FnLVPuvaxWS9ucP7uAGNc8zSjDtp5acpE4DFQoIApkBApsBAh4BFiEE Zt8mkP6sYGwoWqTZhjdqzRlkvkgAAHHiAP4hNwLvfxB7KrHhFlalKwf0wo0jT6G3 A55DdP8a7ZhA+AD+JUNPAEVjr/8CNEJxv2IcbgsGwx1h05Kjp5OsD8ipXwQ= =zGTN -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u71.pgp000064400000000000000000000017561046102023000212370ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdASwno3C/55ZqZzdkFkk/f8TUrlrhR0rlVfS2W +Yz5AEDCwAsEHxYKAH0FgmHz9rIDCwkHCRCGN2rNGWS+SEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeVX1zPaur0TXRthuywSQLscwt0mPyW AHesAn0IQzPTWQMVCggCmwECHgEWIQRm3yaQ/qxgbChapNmGN2rNGWS+SAAAhskA /jkKZtVLw4sZI2BHeRCiUcF4JVYgNMZPEi/FIM0omVMtAQDuRlhGbxIzScmJcHch /wr6dtiTMQFCjq9ABlp+eoaMB80RPHU3MUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRCGN2rNGWS+SEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcP3jgNenrQWctU+69rFZL25w/u4AY1zzNKMO2nlpykTgMVCggC mQECmwECHgEWIQRm3yaQ/qxgbChapNmGN2rNGWS+SAAAceIA/iE3Au9/EHsqseEW VqUrB/TCjSNPobcDnkN0/xrtmED4AP4lQ08ARWOv/wI0QnG/YhxuCwbDHWHTkqOn k6wPyKlfBMLAAQQQFgoAcwWCYfQI6QOF/3gJEFYE5KVbT3WrRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwEuzDK279S+cpGMdUZ8SfFD+RNt vt5SxnUzo8DDnV/5FiEEaZPuPlxGU6A+rL7CVgTkpVtPdasAAKAaAP9urYBchS03 XpcNNVC0Lh0+96hoJwAjOfxd/NYmFfSQSgD/UigAhl2zGIj+NZs+kMpmGOOiVonl ZHO0wcs81/KmGw8= =sk8N -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u72-priv.pgp000064400000000000000000000015571046102023000222150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 29FD 7B1C 6B29 663C FA64 3066 70E6 7F3E 7F6F BCD4 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAAMLgCeqmpYRS1uniGaEQbdw59fTBgOtjBc5+ L6NMOzkAAP9F58ea9I7DAstlbVv1xgaP2Pn5YKTT2K51U25h88GgEBQ9wsALBB8W CgB9BYJh8/ayAwsJBwkQcOZ/Pn9vvNRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnpiJINsl75Ig3dfNVR3ynpeTyXualYblO/EecZmPHlWoD FQoIApsBAh4BFiEEKf17HGspZjz6ZDBmcOZ/Pn9vvNQAAIGTAQCRqKN91moYT0VT ERJiqRPzWGIVFuiFYkOj295e58pkpQD/bWm9nvUm/audk2wFmwN3HWK3tMvrOCZT /zZJ+lWdnwvNETx1NzJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ cOZ/Pn9vvNRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn D3RLr1p1UDDQlJFoRMRhwqSO59Hb07ADgSedYcOkgBMDFQoIApkBApsBAh4BFiEE Kf17HGspZjz6ZDBmcOZ/Pn9vvNQAACiiAQCUCMScEkzhJwtIwFArkdfIGI2CIg1Z DKsA2HM8M7b/rQD+OLptas/HWfAJyJP7VwedvWipD22uLejPzBxPRh7/BwE= =ME/F -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u72.pgp000064400000000000000000000017561046102023000212400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAAMLgCeqmpYRS1uniGaEQbdw59fTBgOtjBc5+ L6NMOznCwAsEHxYKAH0FgmHz9rIDCwkHCRBw5n8+f2+81EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmemIkg2yXvkiDd181VHfKel5PJe5qVh uU78R5xmY8eVagMVCggCmwECHgEWIQQp/XscaylmPPpkMGZw5n8+f2+81AAAgZMB AJGoo33WahhPRVMREmKpE/NYYhUW6IViQ6Pb3l7nymSlAP9tab2e9Sb9q52TbAWb A3cdYre0y+s4JlP/Nkn6VZ2fC80RPHU3MkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRBw5n8+f2+81EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcPdEuvWnVQMNCUkWhExGHCpI7n0dvTsAOBJ51hw6SAEwMVCggC mQECmwECHgEWIQQp/XscaylmPPpkMGZw5n8+f2+81AAAKKIBAJQIxJwSTOEnC0jA UCuR18gYjYIiDVkMqwDYczwztv+tAP44um1qz8dZ8AnIk/tXB529aKkPba4t6M/M HE9GHv8HAcLAAQQQFgoAcwWCYfQI6QOF/3gJEIY3as0ZZL5IRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3m3iN9bgCTyVP92QXgv2Cya4cmD Tl5j0M65T6JPkeWoFiEEZt8mkP6sYGwoWqTZhjdqzRlkvkgAAHnnAP9RVsNZ9k9Q a17teKCzgcBuWkBiON8SLRjakO+FjsfjhgD/cSgLxyMEBKyZKqHWn+RvRgC72Gj3 mj3f27eDiVX+ago= =Cpeb -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u73-priv.pgp000064400000000000000000000015571046102023000222160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2C6E 7C99 DE5F 5922 E05D 11D2 35C2 E562 CC52 8E76 Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdAoZ/jGblB53rElCi7lXEeQQn0GObNrDtqyVtJ /Njn8HQAAQCeyOVc3+A8JjH6K2Icd8NwdlvyxQBKbT1aAbRTDoZuIA5HwsALBB8W CgB9BYJh8/ayAwsJBwkQNcLlYsxSjnZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn1xlN+zt53M3f5bnGzt7ldTX2CIw/gTP9vZIAmrR+GI4D FQoIApsBAh4BFiEELG58md5fWSLgXRHSNcLlYsxSjnYAAOPWAQD+QHF4i3mhk/Dj u1yUhpxCHqGnIr75GGanrYM5auxCBwEA5LsITQTg8DQ5yM1ImjsBD4XdYybJp8Gl a1stpz7vKwrNETx1NzNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ NcLlYsxSjnZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn EOnyiOUqJ0VQ7L2lu+GeLE/w3VAKM1Ofcn2WMHnAoRcDFQoIApkBApsBAh4BFiEE LG58md5fWSLgXRHSNcLlYsxSjnYAANIrAQDK6N0EVlGv2w157JD+M5dSMVhjm6/T jDmO8aAotCeMjgD+IHNibfM52ylbwY5cyrmhCllsmIyDAVyUc1EBQp8XDwI= =0FOz -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u73.pgp000064400000000000000000000017561046102023000212410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdAoZ/jGblB53rElCi7lXEeQQn0GObNrDtqyVtJ /Njn8HTCwAsEHxYKAH0FgmHz9rIDCwkHCRA1wuVizFKOdkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfXGU37O3nczd/lucbO3uV1NfYIjD+B M/29kgCatH4YjgMVCggCmwECHgEWIQQsbnyZ3l9ZIuBdEdI1wuVizFKOdgAA49YB AP5AcXiLeaGT8OO7XJSGnEIeoacivvkYZqetgzlq7EIHAQDkuwhNBODwNDnIzUia OwEPhd1jJsmnwaVrWy2nPu8rCs0RPHU3M0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRA1wuVizFKOdkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcQ6fKI5SonRVDsvaW74Z4sT/DdUAozU59yfZYwecChFwMVCggC mQECmwECHgEWIQQsbnyZ3l9ZIuBdEdI1wuVizFKOdgAA0isBAMro3QRWUa/bDXns kP4zl1IxWGObr9OMOY7xoCi0J4yOAP4gc2Jt8znbKVvBjlzKuaEKWWyYjIMBXJRz UQFCnxcPAsLAAQQQFgoAcwWCYfQI6QOF/3gJEHDmfz5/b7zURxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxbNZ/QH0+ZWB9IkLfjqoEb4H8Qv 1cO334w2sL8TM8ixFiEEKf17HGspZjz6ZDBmcOZ/Pn9vvNQAAM7vAP9YPESMcoK7 XE5jqw3otkX9LAqVk6VGR3cT4+XPRVr0ywD+O4SCHvk7Dbebr09+17V6WaAAUDIw tvvrxPERQ0qPAQ0= =f3gV -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u74-priv.pgp000064400000000000000000000015571046102023000222170ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 88E9 9AC4 D5CB 6ACF 3CD3 96D5 D6AA 9961 B4F9 38AB Comment: xVgEYfP2shYJKwYBBAHaRw8BAQdA64MI2Ud3k5wkaPeFWpJ/6RMFnWy0dIx0u6vy SY5KUOMAAP9dUJXBfNH2sBFHJnziR8ziFmwW2NWLP46YRzvx2poxTxFiwsALBB8W CgB9BYJh8/ayAwsJBwkQ1qqZYbT5OKtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnYVyVhYjGvG7Y33Wt7YH3fUwBvitPu1Q/AWJE06ZdXYID FQoIApsBAh4BFiEEiOmaxNXLas8805bV1qqZYbT5OKsAAN90AQD7xq5nJkmoNj6m RWwEfncCl0+y1bVCDPsJ1eKmiYNmFQD9F5FON8GFx6O4CjbddoP09seHqZ8BKXEk upb/EKXzEgfNETx1NzRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ 1qqZYbT5OKtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 0R+RWW3/cyS2CpKcKlc2BS65ZGVHbWUdmD32a6NlrM0DFQoIApkBApsBAh4BFiEE iOmaxNXLas8805bV1qqZYbT5OKsAAFkRAQCse1S7EcJy0muK1EqijvM3R0gW1ygI j/CcSy/VI8I1ggEAthBWWMDKswnv0FlAiRcaDOA7TLCCL7EyggnbFFoguAA= =fKmr -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u74.pgp000064400000000000000000000017561046102023000212420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2shYJKwYBBAHaRw8BAQdA64MI2Ud3k5wkaPeFWpJ/6RMFnWy0dIx0u6vy SY5KUOPCwAsEHxYKAH0FgmHz9rIDCwkHCRDWqplhtPk4q0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdhXJWFiMa8btjfda3tgfd9TAG+K0+7 VD8BYkTTpl1dggMVCggCmwECHgEWIQSI6ZrE1ctqzzzTltXWqplhtPk4qwAA33QB APvGrmcmSag2PqZFbAR+dwKXT7LVtUIM+wnV4qaJg2YVAP0XkU43wYXHo7gKNt12 g/T2x4epnwEpcSS6lv8QpfMSB80RPHU3NEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rIDCwkHCRDWqplhtPk4q0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfRH5FZbf9zJLYKkpwqVzYFLrlkZUdtZR2YPfZro2WszQMVCggC mQECmwECHgEWIQSI6ZrE1ctqzzzTltXWqplhtPk4qwAAWREBAKx7VLsRwnLSa4rU SqKO8zdHSBbXKAiP8JxLL9UjwjWCAQC2EFZYwMqzCe/QWUCJFxoM4DtMsIIvsTKC CdsUWiC4AMLAAQQQFgoAcwWCYfQI6QOF/3gJEDXC5WLMUo52RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1BVSY/iYkL8Q1UJF9QnkEK+07w6 OM8xCTAWSOHAv6PKFiEELG58md5fWSLgXRHSNcLlYsxSjnYAANTaAP947G9eHVky f7GmNbbEe8ZkLGeUr3WFPxZ3z340C2WlhQD/fWznZK34N8vso0HcPXo3Zr0NIEf2 FPf3Kg78MEbF0Qo= =SyoK -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u75-priv.pgp000064400000000000000000000015571046102023000222200ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4471 A850 5921 5D23 1D47 B1D4 A109 C3F0 B6BD B258 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdAcjCJS3Xcw6utjLJ2b153ehv0OV896zfmxjAe U7+pulwAAQDy/qH1XEwWNxxSYSXHMbnKPE/aOVlnSPqDl3fRdARfwA+EwsALBB8W CgB9BYJh8/azAwsJBwkQoQnD8La9slhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn26ngMYtdBA6a6tjfxwfe+N0Njjv1914FsIUyY9XvxegD FQoIApsBAh4BFiEERHGoUFkhXSMdR7HUoQnD8La9slgAAAR4AQC2ts939HvcKtJO +XhA43DuBF2PAZYm2/1yA2/1MD89GgEA+Hridtcd92udHxtwb6iVRwydoGtTiXhf hjMsUNPkgwbNETx1NzVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ oQnD8La9slhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 0qwAFC5I20rtuekQdBGcsjzs+mL76wvYb0AFKjGQ5/IDFQoIApkBApsBAh4BFiEE RHGoUFkhXSMdR7HUoQnD8La9slgAAKbDAP9utbBfbp7XQBI40jviaWcKSW0b3zNj lPWt/m2U8JL3kwD9GDZXPEQfG3Yq4lpv8/44dVOQfUfFP9R7bbIup7VN0Qw= =iQMW -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u75.pgp000064400000000000000000000017561046102023000212430ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAcjCJS3Xcw6utjLJ2b153ehv0OV896zfmxjAe U7+pulzCwAsEHxYKAH0FgmHz9rMDCwkHCRChCcPwtr2yWEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfbqeAxi10EDprq2N/HB9743Q2OO/X3 XgWwhTJj1e/F6AMVCggCmwECHgEWIQREcahQWSFdIx1HsdShCcPwtr2yWAAABHgB ALa2z3f0e9wq0k75eEDjcO4EXY8Blibb/XIDb/UwPz0aAQD4euJ21x33a50fG3Bv qJVHDJ2ga1OJeF+GMyxQ0+SDBs0RPHU3NUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRChCcPwtr2yWEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfSrAAULkjbSu256RB0EZyyPOz6YvvrC9hvQAUqMZDn8gMVCggC mQECmwECHgEWIQREcahQWSFdIx1HsdShCcPwtr2yWAAApsMA/261sF9untdAEjjS O+JpZwpJbRvfM2OU9a3+bZTwkveTAP0YNlc8RB8bdiriWm/z/jh1U5B9R8U/1Htt si6ntU3RDMLAAQQQFgoAcwWCYfQI6QOF/3gJENaqmWG0+TirRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2pY+ZeAHMAPtIL77x4U2O/YODn2 opz5p1TMY2Ge9LD1FiEEiOmaxNXLas8805bV1qqZYbT5OKsAAIzhAQCYbokLQCkE PiWYczeSjJ8JGY2Pf/hZt6L6RlgeFu3DjwD/WcqBBx1ZqHq4hDcFXKtEY/vXLtzG RkPtRVRoF5/ZegQ= =a+Sq -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u76-priv.pgp000064400000000000000000000015571046102023000222210ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2C75 5244 C6B8 3CAA 7E48 BD23 4C7F DB86 4561 1B3B Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdARVjF/SooPNBSSqzpCKC3NqoamOxHCmpCPkyK /KzsCH8AAQCN0iT9RjVy6T+UF0b92O0HrqINXVfZbDH08ldZA3+mrxBEwsALBB8W CgB9BYJh8/azAwsJBwkQTH/bhkVhGztHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnmHzsW9kSKnHQWfWLAz00JTQc2J45CMr6Y7m5Z1ttGOgD FQoIApsBAh4BFiEELHVSRMa4PKp+SL0jTH/bhkVhGzsAAKrBAP9srjhlxlnTJhIv VaeMtrHbnCScu0H81d7UcEEK4/Xu5AEA8bHDx4is3aUtvMZFHV8MQ31LoZqfRPL1 6FXMiZwJbA/NETx1NzZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ TH/bhkVhGztHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn nOJ3bn4hvt7wlsF0OttyoEbtcSTtossE9Tgm2M+HqrYDFQoIApkBApsBAh4BFiEE LHVSRMa4PKp+SL0jTH/bhkVhGzsAAIDMAQD5EIR2Jo9mgxh5BCRjysM7hyYSvWTs hJNvr0fOOwq4vwEA8LlaK7yFLXibewaAkVsYiunqOq0UGtU/DD4/8uq44gs= =trJY -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u76.pgp000064400000000000000000000017561046102023000212440ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdARVjF/SooPNBSSqzpCKC3NqoamOxHCmpCPkyK /KzsCH/CwAsEHxYKAH0FgmHz9rMDCwkHCRBMf9uGRWEbO0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeYfOxb2RIqcdBZ9YsDPTQlNBzYnjkI yvpjublnW20Y6AMVCggCmwECHgEWIQQsdVJExrg8qn5IvSNMf9uGRWEbOwAAqsEA /2yuOGXGWdMmEi9Vp4y2sducJJy7QfzV3tRwQQrj9e7kAQDxscPHiKzdpS28xkUd XwxDfUuhmp9E8vXoVcyJnAlsD80RPHU3NkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRBMf9uGRWEbO0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmec4ndufiG+3vCWwXQ623KgRu1xJO2iywT1OCbYz4eqtgMVCggC mQECmwECHgEWIQQsdVJExrg8qn5IvSNMf9uGRWEbOwAAgMwBAPkQhHYmj2aDGHkE JGPKwzuHJhK9ZOyEk2+vR847Cri/AQDwuVorvIUteJt7BoCRWxiK6eo6rRQa1T8M Pj/y6rjiC8LAAQQQFgoAcwWCYfQI6QOF/3gJEKEJw/C2vbJYRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5KcheYhG1Y4W/QN8vnRWtTBlzZj xhU6onRsG4hhqPO1FiEERHGoUFkhXSMdR7HUoQnD8La9slgAAOLAAQCXAbb/jbHt JD1ar6UzEXVg37X8GDph3r5DadpWX8Q8KgD/WjJi+ZkZbt4VA0lkYhdUW93//5/Y ZzYfdB2tHnxnkAA= =cfw8 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u77-priv.pgp000064400000000000000000000015571046102023000222220ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9C01 5FEB D3D1 9A81 716E 7700 0520 58B4 7F88 9611 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdArl363FBwlnAAZH1bIwdZS0CVumUi09oaCJK/ 7SZTNnMAAQD8QuSRHmvuTCA2FPhvGCt1LwZ7gUM0FNlInt83CYLdAgz7wsALBB8W CgB9BYJh8/azAwsJBwkQBSBYtH+IlhFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn/fWBoh7XiK2rVXk9pcetcTTA5mMtY2FH5txJClCI55gD FQoIApsBAh4BFiEEnAFf69PRmoFxbncABSBYtH+IlhEAANCIAP44w4Szrc6P7KNd FHgH9yQMrARZaMp+vsd8rrbDsHfCBQD/dfRIAh02PtMQMDaoX2mDJYDmn1pe6qmi Fk4HmGqi8g3NETx1NzdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ BSBYtH+IlhFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn n2DHxw5+MMpPtlP6OmpVYjMAUJrcjvxSNARHoUYzOIUDFQoIApkBApsBAh4BFiEE nAFf69PRmoFxbncABSBYtH+IlhEAAIdOAP9mX+eGy/Eb5uyp0WHHc+4ZQ4tOCAsG D3QE/Prcs9cklgD/djIeHnWWnERdMzpb2KGehtq3HivjWMqs96ywMceiigE= =IULF -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u77.pgp000064400000000000000000000017561046102023000212450ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdArl363FBwlnAAZH1bIwdZS0CVumUi09oaCJK/ 7SZTNnPCwAsEHxYKAH0FgmHz9rMDCwkHCRAFIFi0f4iWEUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf99YGiHteIratVeT2lx61xNMDmYy1j YUfm3EkKUIjnmAMVCggCmwECHgEWIQScAV/r09GagXFudwAFIFi0f4iWEQAA0IgA /jjDhLOtzo/so10UeAf3JAysBFloyn6+x3yutsOwd8IFAP919EgCHTY+0xAwNqhf aYMlgOafWl7qqaIWTgeYaqLyDc0RPHU3N0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRAFIFi0f4iWEUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmefYMfHDn4wyk+2U/o6alViMwBQmtyO/FI0BEehRjM4hQMVCggC mQECmwECHgEWIQScAV/r09GagXFudwAFIFi0f4iWEQAAh04A/2Zf54bL8Rvm7KnR Ycdz7hlDi04ICwYPdAT8+tyz1ySWAP92Mh4edZacRF0zOlvYoZ6G2rceK+NYyqz3 rLAxx6KKAcLAAQQQFgoAcwWCYfQI6QOF/3gJEEx/24ZFYRs7RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ36P7Or/uMEDPSkfrXWWy4cSMkpd 1Izi6aw7BOvNTgULFiEELHVSRMa4PKp+SL0jTH/bhkVhGzsAAB/gAP95Lt897b/h M8rJ8jG+xjCmhaCERhGFMxKhy3DoHkXZbwD+LwL3vA/MHNUe6WQ7j94om2ogQDjz KNngfhHV0tiy6wY= =J7xE -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u78-priv.pgp000064400000000000000000000015571046102023000222230ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9014 E514 D677 C2ED 19D9 3329 C148 5FE5 5F1C 72D6 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdAQLgDD2QNBLBuYFPIfwzWYRkZA+bnWw5AaAJv l5t5noEAAP9B0j/DhpnoguIPzO3CuRlpbB9Z9j2AiDRCbnmUJL9UIBCrwsALBB8W CgB9BYJh8/azAwsJBwkQwUhf5V8cctZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnP8q0LraQt6Qc8wMIsbI5A8t+CiuTdW7VeWIJoP8/tTcD FQoIApsBAh4BFiEEkBTlFNZ3wu0Z2TMpwUhf5V8cctYAAEiKAQD13KMmliY82Ivm 3Lr6cURL2Q9YXGXUlX8XYHO3nlZyqQD8CWloBguleo2kXrFMTxsPwgNndrIoHPgR /CRDpQlvFwfNETx1NzhAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ wUhf5V8cctZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 4c+kBHbv1fjv7wJ/uy1utVFjKzqYMBpQbz/Mxt+ESyEDFQoIApkBApsBAh4BFiEE kBTlFNZ3wu0Z2TMpwUhf5V8cctYAANoMAPsEHScNiuYIkHXpCf1TZCc5gB0CTy0r GHbWwnAfnQu3dgD/XqPcCFCav0mc9Y6cjT0Na+R58tY53zsXpiY9DNtLUgI= =SLDB -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u78.pgp000064400000000000000000000017561046102023000212460ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAQLgDD2QNBLBuYFPIfwzWYRkZA+bnWw5AaAJv l5t5noHCwAsEHxYKAH0FgmHz9rMDCwkHCRDBSF/lXxxy1kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc/yrQutpC3pBzzAwixsjkDy34KK5N1 btV5Ygmg/z+1NwMVCggCmwECHgEWIQSQFOUU1nfC7RnZMynBSF/lXxxy1gAASIoB APXcoyaWJjzYi+bcuvpxREvZD1hcZdSVfxdgc7eeVnKpAPwJaWgGC6V6jaResUxP Gw/CA2d2sigc+BH8JEOlCW8XB80RPHU3OEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRDBSF/lXxxy1kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfhz6QEdu/V+O/vAn+7LW61UWMrOpgwGlBvP8zG34RLIQMVCggC mQECmwECHgEWIQSQFOUU1nfC7RnZMynBSF/lXxxy1gAA2gwA+wQdJw2K5giQdekJ /VNkJzmAHQJPLSsYdtbCcB+dC7d2AP9eo9wIUJq/SZz1jpyNPQ1r5Hny1jnfOxem Jj0M20tSAsLAAQQQFgoAcwWCYfQI6QOF/3gJEAUgWLR/iJYRRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7MLlafAZbRilpBUmQ9VSNPNCAis XadwicpXZbx7X75EFiEEnAFf69PRmoFxbncABSBYtH+IlhEAAIGvAQCHMT1wWTRH Ix4Dglidgp3TgRwGyC176C9ZaCaTecHstAD/SWYYKMD9HZixrf2trIDoxWA4Cms3 rgMtF0LNqTWrXws= =ssFF -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u79-priv.pgp000064400000000000000000000015571046102023000222240ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 343F 2C6F 9DB8 F9EE 4E59 F5C0 886B AE56 FA55 CE26 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdAIFiXeKpU9JLMgQIAgEUBRZf2+kBVl2xQlsKV 7ihm7lgAAPwK5ddic+RMLtnv0Muzl6TikU9MnGOg98d/7aiwGGyFSRPHwsALBB8W CgB9BYJh8/azAwsJBwkQiGuuVvpVziZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn4iTkNreibm3NM8mNS0o8EHPHsecnb87OB1GKaOGsx4ED FQoIApsBAh4BFiEEND8sb524+e5OWfXAiGuuVvpVziYAAFFMAP4l5n3aM8IKMvQl HVoQsBRDD1b5AI1Wy/DP5ls92b99fgD/bcrhN2kPAzsZeCmo+SFoU59gwUFa3KuH x7rm9pd61AbNETx1NzlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ iGuuVvpVziZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 00mWJg8E8R4G1R07FCAcHzmlNPNACY7SEvDnxfG/3AADFQoIApkBApsBAh4BFiEE ND8sb524+e5OWfXAiGuuVvpVziYAAAugAP9hu867MuZ9fHd5OCaFMJa3iKNAUyLK QIr20A6/GVNCGgEArfvIbDEF6rrfBMTR5WYD0vFOhYg3tbKb6FzA+IXSFgs= =v0ok -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u79.pgp000064400000000000000000000017561046102023000212470ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAIFiXeKpU9JLMgQIAgEUBRZf2+kBVl2xQlsKV 7ihm7ljCwAsEHxYKAH0FgmHz9rMDCwkHCRCIa65W+lXOJkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfiJOQ2t6Jubc0zyY1LSjwQc8ex5ydv zs4HUYpo4azHgQMVCggCmwECHgEWIQQ0Pyxvnbj57k5Z9cCIa65W+lXOJgAAUUwA /iXmfdozwgoy9CUdWhCwFEMPVvkAjVbL8M/mWz3Zv31+AP9tyuE3aQ8DOxl4Kaj5 IWhTn2DBQVrcq4fHuub2l3rUBs0RPHU3OUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRCIa65W+lXOJkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfTSZYmDwTxHgbVHTsUIBwfOaU080AJjtIS8OfF8b/cAAMVCggC mQECmwECHgEWIQQ0Pyxvnbj57k5Z9cCIa65W+lXOJgAAC6AA/2G7zrsy5n18d3k4 JoUwlreIo0BTIspAivbQDr8ZU0IaAQCt+8hsMQXqut8ExNHlZgPS8U6FiDe1spvo XMD4hdIWC8LAAQQQFgoAcwWCYfQI6gOF/3gJEMFIX+VfHHLWRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7AlyH4XTziewq3UN83UhnYylsj3 Ex3GeQzxkIlwpVcSFiEEkBTlFNZ3wu0Z2TMpwUhf5V8cctYAAFCIAQDoy6OvVNlW IUGM0ROdLciV3jw8ZOGAh1wYEF1fFf0KBwD/Zkrnh75p+OxPZfk5BdjoYZNV9Qko VZcTw1M82sFGowU= =I7rm -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u8-priv.pgp000064400000000000000000000015561046102023000221330ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D0BF 1856 B95A 6276 3DE4 9088 CE6F F96D 17E0 EAF0 Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdA4OOB5FXAVwPcZH7kkKKNpFVKwIntDRZUYHwC AJyJlwMAAP4hT/VtEqykQbLr97cyZmUbVCmZuDls+4NJbFJtCrmN2hBlwsALBB8W CgB9BYJh8/avAwsJBwkQzm/5bRfg6vBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn/gEWD7/WYog1ISYwgiNzZGVQOp+hBjtwg1RqtBW3sfQD FQoIApsBAh4BFiEE0L8YVrlaYnY95JCIzm/5bRfg6vAAAIMzAQCKH3AvTMLoYvl8 E1KXnOxehjSrx4SGfeiTRPzBMWS2CQEAk/lPoBApuFuGAe82u4KBLkXqyItvpOnf lUx1w/IXHADNEDx1OEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9q8DCwkHCRDO b/ltF+Dq8EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfQ YGxU+KmNQXpbdF0oXeU/zLlhc7xsvDHZQWGDqQwX4gMVCggCmQECmwECHgEWIQTQ vxhWuVpidj3kkIjOb/ltF+Dq8AAA1HsBANiP/XcJoo10Vu4jI8uj3RYbSLuVvBXF 1GuYkK/aCXKIAQCnR5y0EvB3GejIcoOse9YP8sA8R5CLzCqGRf2LzemTAw== =v2X6 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u8.pgp000064400000000000000000000017561046102023000211570ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2rxYJKwYBBAHaRw8BAQdA4OOB5FXAVwPcZH7kkKKNpFVKwIntDRZUYHwC AJyJlwPCwAsEHxYKAH0FgmHz9q8DCwkHCRDOb/ltF+Dq8EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf+ARYPv9ZiiDUhJjCCI3NkZVA6n6EG O3CDVGq0Fbex9AMVCggCmwECHgEWIQTQvxhWuVpidj3kkIjOb/ltF+Dq8AAAgzMB AIofcC9Mwuhi+XwTUpec7F6GNKvHhIZ96JNE/MExZLYJAQCT+U+gECm4W4YB7za7 goEuRerIi2+k6d+VTHXD8hccAM0QPHU4QGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YfP2rwMLCQcJEM5v+W0X4OrwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ9BgbFT4qY1Belt0XShd5T/MuWFzvGy8MdlBYYOpDBfiAxUKCAKZ AQKbAQIeARYhBNC/GFa5WmJ2PeSQiM5v+W0X4OrwAADUewEA2I/9dwmijXRW7iMj y6PdFhtIu5W8FcXUa5iQr9oJcogBAKdHnLQS8HcZ6Mhyg6x71g/ywDxHkIvMKoZF /YvN6ZMDwsABBBAWCgBzBYJh9AjnA4X/eAkQtvM4Q9lh6BhHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn41II+7yzNNab1tLIE70xzv0lwY14 eHy35d7M/hgmCOcWIQQAWNz3p8bENg3pCV228zhD2WHoGAAA6hMBAMT57gsSofR/ 7kH/C7KHgzrfQrou36DLbzxH25QKUmQ8AP9MpQNkH2s5M9JjcC3XmyrB7DNiKX1U 01Qx00c7yeTACA== =/O4L -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u80-priv.pgp000064400000000000000000000015571046102023000222140ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 13C3 7CE8 ED0A CC92 CF61 8087 5524 1D6D A163 3FA4 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdA7BKQOWvWtnSVEvfpjyjH06T3kYliU8KrSNk5 jHnn3UQAAQCYb6mt4kkvhggUTpHSKPU8P+bYTaSmpsmYi5OhfnTrYhD9wsALBB8W CgB9BYJh8/azAwsJBwkQVSQdbaFjP6RHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnIpUtcPxrCzJdZDjPbXRs2YHKeJ0vTFMxrYhoivwnQMkD FQoIApsBAh4BFiEEE8N86O0KzJLPYYCHVSQdbaFjP6QAADAPAP91bJkay5glU9RR R3ZtfLLw8HJ0MmHB6ulxxG1+oDUb0QD/XuhHRXTSxuhiMEXugxOt8BdtNsuXIKTv EAkrs1dLWAbNETx1ODBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ VSQdbaFjP6RHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn wphqKaOwV7brFPh5DfNjqUuEAvr8dBXJE4VhBMbK+oMDFQoIApkBApsBAh4BFiEE E8N86O0KzJLPYYCHVSQdbaFjP6QAAPhAAP9VQkKvWuWsuoZ+LPAmkotPRtctc9mI APTG3LrVJfCOsgD/fLQiz50ymccMBFRTDVQ94EW3SkvjaGaWZEObakBCAwk= =D/H7 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u80.pgp000064400000000000000000000017561046102023000212370ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdA7BKQOWvWtnSVEvfpjyjH06T3kYliU8KrSNk5 jHnn3UTCwAsEHxYKAH0FgmHz9rMDCwkHCRBVJB1toWM/pEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcilS1w/GsLMl1kOM9tdGzZgcp4nS9M UzGtiGiK/CdAyQMVCggCmwECHgEWIQQTw3zo7QrMks9hgIdVJB1toWM/pAAAMA8A /3VsmRrLmCVT1FFHdm18svDwcnQyYcHq6XHEbX6gNRvRAP9e6EdFdNLG6GIwRe6D E63wF202y5cgpO8QCSuzV0tYBs0RPHU4MEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRBVJB1toWM/pEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfCmGopo7BXtusU+HkN82OpS4QC+vx0FckThWEExsr6gwMVCggC mQECmwECHgEWIQQTw3zo7QrMks9hgIdVJB1toWM/pAAA+EAA/1VCQq9a5ay6hn4s 8CaSi09G1y1z2YgA9MbcutUl8I6yAP98tCLPnTKZxwwEVFMNVD3gRbdKS+NoZpZk Q5tqQEIDCcLAAQQQFgoAcwWCYfQI6gOF/3gJEIhrrlb6Vc4mRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2vzib5T9UiBHqOEXXJYvw9U5Uiv 66RqCDNQeBl6mLL3FiEEND8sb524+e5OWfXAiGuuVvpVziYAAI1kAP9XxD9g+pYj yZiFgfpLvkdqWr1XhwB4MqCKh+JPqS3shgEAkQcoSzv2AmfD2yuSJvzFQA38FTWA BHibYa+Kx3tacQE= =mrb2 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u81-priv.pgp000064400000000000000000000015571046102023000222150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: ED5C 07A8 20DC B2AA 6DAF DE9C 8562 765D 88A4 BB36 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdAQEgNpYGmJXenvjIlGqeTuwEa/D2pjkElvIEN Ut7b4KkAAP909aiTWok1+a9N6zetVRCTje2JlzXgA0dnvCk8o3mNnhE/wsALBB8W CgB9BYJh8/azAwsJBwkQhWJ2XYikuzZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JndEOpUq3xydHSMIewhrm3iS6rQ/+ivBTbDTmOeeJNioMD FQoIApsBAh4BFiEE7VwHqCDcsqptr96chWJ2XYikuzYAAJznAP9q8eeMPN2MMkcD 08nmOrwNqLLpL4Mkh/+qFVFNsNfPGQEA2zVbXTbxvYoF/psgK6vNTowN8jQq36fm rv7UyzkxygrNETx1ODFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ hWJ2XYikuzZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn ipc67Xrv91p1Geq/bjB71ppNRkFbBnfeqflePS22IlEDFQoIApkBApsBAh4BFiEE 7VwHqCDcsqptr96chWJ2XYikuzYAAO+4AQCKp1L8IG7IPuUYx5iO/W9+nBIChKmi 45IrUI7562+L2AEA3cypCU9TkQHKuWJu3jiI8jUKmo++UDIj0dfmwdqThgg= =OEnz -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u81.pgp000064400000000000000000000017561046102023000212400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAQEgNpYGmJXenvjIlGqeTuwEa/D2pjkElvIEN Ut7b4KnCwAsEHxYKAH0FgmHz9rMDCwkHCRCFYnZdiKS7NkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd0Q6lSrfHJ0dIwh7CGubeJLqtD/6K8 FNsNOY554k2KgwMVCggCmwECHgEWIQTtXAeoINyyqm2v3pyFYnZdiKS7NgAAnOcA /2rx54w83YwyRwPTyeY6vA2osukvgySH/6oVUU2w188ZAQDbNVtdNvG9igX+myAr q81OjA3yNCrfp+au/tTLOTHKCs0RPHU4MUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRCFYnZdiKS7NkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeKlzrteu/3WnUZ6r9uMHvWmk1GQVsGd96p+V49LbYiUQMVCggC mQECmwECHgEWIQTtXAeoINyyqm2v3pyFYnZdiKS7NgAA77gBAIqnUvwgbsg+5RjH mI79b36cEgKEqaLjkitQjvnrb4vYAQDdzKkJT1ORAcq5Ym7eOIjyNQqaj75QMiPR 1+bB2pOGCMLAAQQQFgoAcwWCYfQI6gOF/3gJEFUkHW2hYz+kRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7i3bXZqkOPIQ1sA6AxSODYWzqGR BaSrK79mQtpe25eEFiEEE8N86O0KzJLPYYCHVSQdbaFjP6QAAO7XAP4o6zujSYb/ Zm+MjZSDgLOe835p1CGE+yTiM8RQYtUZQQD/Rxkcc7BSYkrAElOeqCpFZR3UZt+G 9Jc2kt6EytTQIA4= =yocA -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u82-priv.pgp000064400000000000000000000015571046102023000222160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2165 5669 D7B3 6A2E B500 7B31 442F CE19 7ADC C8D8 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdAOHbdz23D7wV1t9PVTgqjiHzHPDc7BMM68Dec 2knROQwAAQCj/1stCuBw2tHX0+MeHd0XFxYQdb4lAFTfVYL2QSOKwA8vwsALBB8W CgB9BYJh8/azAwsJBwkQRC/OGXrcyNhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnpH1VvgXEi8uzN1E9PVYnZQJQdSn/a3q/Uxfo/ojHDUED FQoIApsBAh4BFiEEIWVWadezai61AHsxRC/OGXrcyNgAAK8EAQCV/ZskmHdxLTNI RKQTaSRYBL/WtzY0IOma7mL506lvIgEA8dyoo61Y0PnNSp4Iv9Exn2i4IYpbr6zI dUGdUDTk4Q3NETx1ODJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ RC/OGXrcyNhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Ox60L3PLjXGN/K5H76mhfIozL9eXUX5UVY10vv344eQDFQoIApkBApsBAh4BFiEE IWVWadezai61AHsxRC/OGXrcyNgAAL5SAP4ysGenGUsycpDZyKEB+Bgsm2RerYjg VGzTFUqdpMwcMwEA6r51YfNTihmzPJyi43wl4CzXrBE6R68TvuTpWt32JQQ= =GDo7 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u82.pgp000064400000000000000000000017561046102023000212410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAOHbdz23D7wV1t9PVTgqjiHzHPDc7BMM68Dec 2knROQzCwAsEHxYKAH0FgmHz9rMDCwkHCRBEL84ZetzI2EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmekfVW+BcSLy7M3UT09VidlAlB1Kf9r er9TF+j+iMcNQQMVCggCmwECHgEWIQQhZVZp17NqLrUAezFEL84ZetzI2AAArwQB AJX9mySYd3EtM0hEpBNpJFgEv9a3NjQg6ZruYvnTqW8iAQDx3KijrVjQ+c1Kngi/ 0TGfaLghiluvrMh1QZ1QNOThDc0RPHU4MkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRBEL84ZetzI2EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc7HrQvc8uNcY38rkfvqaF8ijMv15dRflRVjXS+/fjh5AMVCggC mQECmwECHgEWIQQhZVZp17NqLrUAezFEL84ZetzI2AAAvlIA/jKwZ6cZSzJykNnI oQH4GCybZF6tiOBUbNMVSp2kzBwzAQDqvnVh81OKGbM8nKLjfCXgLNesETpHrxO+ 5Ola3fYlBMLAAQQQFgoAcwWCYfQI6gOF/3gJEIVidl2IpLs2RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0GdUKcQbfjrbARI36SzdLmJfLTH XZNfHhWBEe9Jw392FiEE7VwHqCDcsqptr96chWJ2XYikuzYAAO1IAQD5NXg8dQjS 5dyr14VuuxtomdUm6w4H/P4H0KCZQYblWQEA1Mo/R3ZDT3sFmA49XLsrPb6fZKkC MjNaOxQRs3eCxAw= =PGzj -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u83-priv.pgp000064400000000000000000000015571046102023000222170ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CD22 0E58 B30D 2D1C BBC5 B921 555C 92A7 0B30 3860 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdAVIxVIviOeTLxk8LJAuEdMsYE7DKkxnPgmWr8 9vqBAIcAAP9kTNiqZBvjqqy596T41FX6EE55YXIYgA7xwJgUBIMLgBEXwsALBB8W CgB9BYJh8/azAwsJBwkQVVySpwswOGBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnB8lyIU3w/XONlSZiLhxVhZT/1xhyI8tvcYlbwZHY1rQD FQoIApsBAh4BFiEEzSIOWLMNLRy7xbkhVVySpwswOGAAAMnrAQCYREKh1PsiXrCm nVKZirZ4wDCsfNytF0FbBVM3fIbsEQD/aTrlL9iONbgSoubezEa+WDGV62QZlfBA ZuVCXbRzcADNETx1ODNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ VVySpwswOGBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn gC0XTIXSF3m4kJ+LGtWr+8UHpgXUeSvYmcO8JSMeWgYDFQoIApkBApsBAh4BFiEE zSIOWLMNLRy7xbkhVVySpwswOGAAANDLAP4udWNOiPli6yGEVEiCOKG4LTepC1mU v0Yj2AwTHmf7BwD/U4lJ5zpSENrAsGrKsfMfrcUrOJypzYicdx9oRYNC6ww= =R1QR -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u83.pgp000064400000000000000000000017561046102023000212420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAVIxVIviOeTLxk8LJAuEdMsYE7DKkxnPgmWr8 9vqBAIfCwAsEHxYKAH0FgmHz9rMDCwkHCRBVXJKnCzA4YEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcHyXIhTfD9c42VJmIuHFWFlP/XGHIj y29xiVvBkdjWtAMVCggCmwECHgEWIQTNIg5Ysw0tHLvFuSFVXJKnCzA4YAAAyesB AJhEQqHU+yJesKadUpmKtnjAMKx83K0XQVsFUzd8huwRAP9pOuUv2I41uBKi5t7M Rr5YMZXrZBmV8EBm5UJdtHNwAM0RPHU4M0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRBVXJKnCzA4YEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeALRdMhdIXebiQn4sa1av7xQemBdR5K9iZw7wlIx5aBgMVCggC mQECmwECHgEWIQTNIg5Ysw0tHLvFuSFVXJKnCzA4YAAA0MsA/i51Y06I+WLrIYRU SII4obgtN6kLWZS/RiPYDBMeZ/sHAP9TiUnnOlIQ2sCwasqx8x+txSs4nKnNiJx3 H2hFg0LrDMLAAQQQFgoAcwWCYfQI6gOF/3gJEEQvzhl63MjYRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3eob6aUIzIvIdp6uT6ca5weTaVE 2p/dQyyD8yNLobebFiEEIWVWadezai61AHsxRC/OGXrcyNgAAGNMAP0VQRx6+hDR au03FhoB8VESlUMG9eADp+B1VAOJ3oNYXQD8D9P5RgazydzJWDcaSMWfuqfHq+r7 F9uApI8/k+V/zQE= =m2cM -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u84-priv.pgp000064400000000000000000000015571046102023000222200ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5FF5 C8CB D8D6 7056 5B30 0519 887E 3ED2 F9E0 DDA9 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdADI33FcCHfNjy2ynniQeZRkuBxS9yBXMtjVuP eGadE2EAAQChXErTgTu3V7IjewKPwymSukcAoMxUEBA3thk5aDREXwyjwsALBB8W CgB9BYJh8/azAwsJBwkQiH4+0vng3alHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JneTb6qiEJJnr08Wy1StuufCAARl/qKzhD0mNKuTU9XjQD FQoIApsBAh4BFiEEX/XIy9jWcFZbMAUZiH4+0vng3akAAGx1AQDIqaIm5ZayOzL5 5VLVpzgOJQN/GDrEhK3FX54VM++H6wEAsXURPlw/aUSzjTI9qaEpMVRtd4pm+vnJ lkOYQDOlsw3NETx1ODRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ iH4+0vng3alHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 1UOxvwXClNai/QDvYWThU9HrRlk46E6ey+3OOcfK7bYDFQoIApkBApsBAh4BFiEE X/XIy9jWcFZbMAUZiH4+0vng3akAAMl0AQCrRkzuRe0aNuWzaiaHcxYT6OVIjMch dPA0UH5x45I4KQEA536Vk5p4UypFEOYUpOm2F9eDq9Mu+kGu3wDI89Yt9Q8= =eejX -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u84.pgp000064400000000000000000000017561046102023000212430ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdADI33FcCHfNjy2ynniQeZRkuBxS9yBXMtjVuP eGadE2HCwAsEHxYKAH0FgmHz9rMDCwkHCRCIfj7S+eDdqUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd5NvqqIQkmevTxbLVK2658IABGX+or OEPSY0q5NT1eNAMVCggCmwECHgEWIQRf9cjL2NZwVlswBRmIfj7S+eDdqQAAbHUB AMipoibllrI7MvnlUtWnOA4lA38YOsSErcVfnhUz74frAQCxdRE+XD9pRLONMj2p oSkxVG13imb6+cmWQ5hAM6WzDc0RPHU4NEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRCIfj7S+eDdqUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfVQ7G/BcKU1qL9AO9hZOFT0etGWTjoTp7L7c45x8rttgMVCggC mQECmwECHgEWIQRf9cjL2NZwVlswBRmIfj7S+eDdqQAAyXQBAKtGTO5F7Ro25bNq JodzFhPo5UiMxyF08DRQfnHjkjgpAQDnfpWTmnhTKkUQ5hSk6bYX14Or0y76Qa7f AMjz1i31D8LAAQQQFgoAcwWCYfQI6gOF/3gJEFVckqcLMDhgRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/8sPF5OJAPx72exqvncV1SpiR/9 gvjVZ3a3HxR2pAhDFiEEzSIOWLMNLRy7xbkhVVySpwswOGAAAKdLAQCniIBNqNJ8 Eyxizgvb/KPZm0TnFxO2nOAi3Qa63Iy0egEA60mWTnqdqPF+L3ZqYB0jn7r/3hWQ bwG0MPw+AxxMMQk= =P+lh -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u85-priv.pgp000064400000000000000000000015571046102023000222210ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B47F F2EF 9DEB 08C7 FC55 532C 746F 0F2D B723 C462 Comment: xVcEYfP2sxYJKwYBBAHaRw8BAQdAFjsUNrbjittv1Ecsp4Euu9XByzc+jDQf9Jrh 1GevUycAAPYgwwEF/Vufpi8M4dbU0SNof6vJCH+wZ5TM8an95+0dEhfCwAsEHxYK AH0FgmHz9rMDCwkHCRB0bw8ttyPEYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmcpaS2Z2APFEimFzPbNDq46nCQxF0KncAB+GIoEnOjKRQMV CggCmwECHgEWIQS0f/LvnesIx/xVUyx0bw8ttyPEYgAA1yIA/1vCc22QqvvlqgAE B7vkSLfY7wOUdtvf4Br+rVSnk6z1AP4ziBET/wgSjsS7ePal/7s5Ukqws/02yRa/ 7umbuN6xC80RPHU4NUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rMDCwkHCRB0 bw8ttyPEYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmez 2n5k/m9VT+9GK1w6ydZwE75AC1oQ20HRJKhxtzYTYwMVCggCmQECmwECHgEWIQS0 f/LvnesIx/xVUyx0bw8ttyPEYgAASiwBAPOUIPBLfzSuV8OV5HWZaIQixs8mdfqm z//YCgOkvObVAQDk//4TxBlc9RkS4Ch8v1EMG/WSNxx30/V8qs/NGtCiBw== =/LmV -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u85.pgp000064400000000000000000000017561046102023000212440ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAFjsUNrbjittv1Ecsp4Euu9XByzc+jDQf9Jrh 1GevUyfCwAsEHxYKAH0FgmHz9rMDCwkHCRB0bw8ttyPEYkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcpaS2Z2APFEimFzPbNDq46nCQxF0Kn cAB+GIoEnOjKRQMVCggCmwECHgEWIQS0f/LvnesIx/xVUyx0bw8ttyPEYgAA1yIA /1vCc22QqvvlqgAEB7vkSLfY7wOUdtvf4Br+rVSnk6z1AP4ziBET/wgSjsS7ePal /7s5Ukqws/02yRa/7umbuN6xC80RPHU4NUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRB0bw8ttyPEYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmez2n5k/m9VT+9GK1w6ydZwE75AC1oQ20HRJKhxtzYTYwMVCggC mQECmwECHgEWIQS0f/LvnesIx/xVUyx0bw8ttyPEYgAASiwBAPOUIPBLfzSuV8OV 5HWZaIQixs8mdfqmz//YCgOkvObVAQDk//4TxBlc9RkS4Ch8v1EMG/WSNxx30/V8 qs/NGtCiB8LAAQQQFgoAcwWCYfQI6gOF/3gJEIh+PtL54N2pRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwYiGp87nEkt/nMZGt7qZjNKNI8t +MLVlW5Ov0jub4hqFiEEX/XIy9jWcFZbMAUZiH4+0vng3akAACuEAP914O8X6+2N UiUkyg8RV9rCYYL6rNa3+LAoRrU01UrPAAD+Jq3obND9Ij1GmEYPu2HaotP6a9jY Or5eQVhZnNrxJQw= =lWzD -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u86-priv.pgp000064400000000000000000000015571046102023000222220ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: F8F8 F309 31EE B93C 2FDE 9363 F9EE 3284 02F3 3860 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdApq9yPRd9d32b9oE4gwMKm/j89MKDM0xZyGt+ N3R7qPgAAP9L1Ur5kR/bZ7KdD4/09qz7gp9iWG4N9kGhObHNuWziERLPwsALBB8W CgB9BYJh8/azAwsJBwkQ+e4yhALzOGBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnw9z5XIQ0+MTyZtiy+fj/RYv27Z9lj3jR5/nEdPXuxMAD FQoIApsBAh4BFiEE+PjzCTHuuTwv3pNj+e4yhALzOGAAAJ4kAQCeNcnuaS80HfJ6 +/xHk9pty79FKXGUcSGI3n2JR/OpSAEAsOm1CG5dAqqNjjNd6QKxe+ddXFWFCDBu T6lt+S4LAQnNETx1ODZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ +e4yhALzOGBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 6gp5/cQJOcu3DG2xELBeRrCelucArTvkpYHBySn2uUQDFQoIApkBApsBAh4BFiEE +PjzCTHuuTwv3pNj+e4yhALzOGAAAJ1bAP449hj0C6oei/MuUJe8lLdazf5NuSNc gJwSD4+uuHzXPAEAuZLKxzh+KYgMLaHmLapTx33DdN3nZ2AU54NKWImU5ww= =AYOI -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u86.pgp000064400000000000000000000017561046102023000212450ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdApq9yPRd9d32b9oE4gwMKm/j89MKDM0xZyGt+ N3R7qPjCwAsEHxYKAH0FgmHz9rMDCwkHCRD57jKEAvM4YEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfD3PlchDT4xPJm2LL5+P9Fi/btn2WP eNHn+cR09e7EwAMVCggCmwECHgEWIQT4+PMJMe65PC/ek2P57jKEAvM4YAAAniQB AJ41ye5pLzQd8nr7/EeT2m3Lv0UpcZRxIYjefYlH86lIAQCw6bUIbl0Cqo2OM13p ArF7511cVYUIMG5PqW35LgsBCc0RPHU4NkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRD57jKEAvM4YEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfqCnn9xAk5y7cMbbEQsF5GsJ6W5wCtO+SlgcHJKfa5RAMVCggC mQECmwECHgEWIQT4+PMJMe65PC/ek2P57jKEAvM4YAAAnVsA/jj2GPQLqh6L8y5Q l7yUt1rN/k25I1yAnBIPj664fNc8AQC5ksrHOH4piAwtoeYtqlPHfcN03ednYBTn g0pYiZTnDMLAAQQQFgoAcwWCYfQI6gOF/3gJEHRvDy23I8RiRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5T8F48ZuaUJx8djyCCEEXsIE0pQ Rc0i/BPDdOeJ36UqFiEEtH/y753rCMf8VVMsdG8PLbcjxGIAAAqGAQDJ2Rs+O1wC 3HYNUqSVJqqLp08z5CSdasq+uQZQ1AoleAEA8Gg9isKGrys7yhNC2HdNTp41gPmb b8LFoeYnS8iLyg8= =X3v/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u87-priv.pgp000064400000000000000000000015571046102023000222230ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3714 D9CB 0A8A 0B4E E695 B21A B052 CAE6 9A2A 7689 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdAajcRAl/n53gPSah8kmgwln6qXMmGro1ehq7+ UxY3QOsAAP0e1oJmlrvfTVdzhuPyakRvB8q9RxTLOjNk/V3tKA0MGg+/wsALBB8W CgB9BYJh8/azAwsJBwkQsFLK5poqdolHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jns/YI5a6PimQoQvg+vFySpFk1EuAzVXgWpu9TRS/VnfYD FQoIApsBAh4BFiEENxTZywqKC07mlbIasFLK5poqdokAALtkAP9PFnQ7AKLJb/oR UnmhQckk6pqCeOi1TZjFdIga8u9JXQD/R4NHvjwv4/RB7rgPbjBGxOezR6ecdimP RsxOVn1rPQnNETx1ODdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ sFLK5poqdolHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn k+mHzCyQlTmXK7qdZLMVsVKkFNRDDPC6K6X1u2KOy7oDFQoIApkBApsBAh4BFiEE NxTZywqKC07mlbIasFLK5poqdokAAOO6APkBOBUeg0/7jGQyALVB4Xjvi4wbKO1O u38r5ssvGO62kQD+N1mo1mCcvSMYXoqrC9hnqAEIZY6JGsjLqXO76n3EQA4= =zdv/ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u87.pgp000064400000000000000000000017561046102023000212460ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAajcRAl/n53gPSah8kmgwln6qXMmGro1ehq7+ UxY3QOvCwAsEHxYKAH0FgmHz9rMDCwkHCRCwUsrmmip2iUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmez9gjlro+KZChC+D68XJKkWTUS4DNV eBam71NFL9Wd9gMVCggCmwECHgEWIQQ3FNnLCooLTuaVshqwUsrmmip2iQAAu2QA /08WdDsAoslv+hFSeaFBySTqmoJ46LVNmMV0iBry70ldAP9Hg0e+PC/j9EHuuA9u MEbE57NHp5x2KY9GzE5WfWs9Cc0RPHU4N0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRCwUsrmmip2iUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeT6YfMLJCVOZcrup1ksxWxUqQU1EMM8LorpfW7Yo7LugMVCggC mQECmwECHgEWIQQ3FNnLCooLTuaVshqwUsrmmip2iQAA47oA+QE4FR6DT/uMZDIA tUHheO+LjBso7U67fyvmyy8Y7raRAP43WajWYJy9IxheiqsL2GeoAQhljokayMup c7vqfcRADsLAAQQQFgoAcwWCYfQI6gOF/3gJEPnuMoQC8zhgRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7Uwrut/IWexOt5CuxnqzgSxk75o TUZRtD0hXwox9ftqFiEE+PjzCTHuuTwv3pNj+e4yhALzOGAAAFp4AP98poINUk6J As29iT0cfxSwHmgnkXlvKLGjQJ4ztlJ64AEA2hipGf5zKIgzeWG2uKfDXDzVNPbe +Wm8nIQa6lf+uQs= =R3eT -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u88-priv.pgp000064400000000000000000000015571046102023000222240ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: FF09 3E66 CCFB 8804 1931 1505 8643 E0CB 52C5 A793 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdAzrsl1Iii2rXPfh4EdFGAQhgjINqQT8294Xia 6TVkytYAAP9MmznvT5BfaNgJZW/xHF8c12DlPDnkXx5EUAyPipTjqg+9wsALBB8W CgB9BYJh8/azAwsJBwkQhkPgy1LFp5NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn49gexGg2DMIl2vG7sLczOO9llCpzo/6+HSXTNmd5QhgD FQoIApsBAh4BFiEE/wk+Zsz7iAQZMRUFhkPgy1LFp5MAACDIAQC74c/EnpAglBig tj41bBw31i8NGQstn8bbs0dittKtbgEAs4aVA74gSkU4SoQJLB3Zkw2c6HuFT74B 73Hd/bc+3wbNETx1ODhAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ hkPgy1LFp5NHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn BVshlx61D6D0IQMK93zw+xVcHKbI7CxMFrglupzAlQoDFQoIApkBApsBAh4BFiEE /wk+Zsz7iAQZMRUFhkPgy1LFp5MAAC7MAQD9PkcWJRHK0bNcsIGKync4Nr+lqk8l mZ9WHTWbTIVjBgD+J+5X+bqx15KmT+BAyTiw26jq7nqkLpqiyvuaGL3uCwQ= =Syp1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u88.pgp000064400000000000000000000017561046102023000212470ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAzrsl1Iii2rXPfh4EdFGAQhgjINqQT8294Xia 6TVkytbCwAsEHxYKAH0FgmHz9rMDCwkHCRCGQ+DLUsWnk0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfj2B7EaDYMwiXa8buwtzM472WUKnOj /r4dJdM2Z3lCGAMVCggCmwECHgEWIQT/CT5mzPuIBBkxFQWGQ+DLUsWnkwAAIMgB ALvhz8SekCCUGKC2PjVsHDfWLw0ZCy2fxtuzR2K20q1uAQCzhpUDviBKRThKhAks HdmTDZzoe4VPvgHvcd39tz7fBs0RPHU4OEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRCGQ+DLUsWnk0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcFWyGXHrUPoPQhAwr3fPD7FVwcpsjsLEwWuCW6nMCVCgMVCggC mQECmwECHgEWIQT/CT5mzPuIBBkxFQWGQ+DLUsWnkwAALswBAP0+RxYlEcrRs1yw gYrKdzg2v6WqTyWZn1YdNZtMhWMGAP4n7lf5urHXkqZP4EDJOLDbqOrueqQumqLK +5oYve4LBMLAAQQQFgoAcwWCYfQI6gOF/3gJELBSyuaaKnaJRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyf6LXafr/OX3CnAfI1umUloMUHH AFIQ+7Cz7v3usYr4FiEENxTZywqKC07mlbIasFLK5poqdokAAFvRAQDmYYPxL8Ig zm3jzWkG5TOMJFkh/CWrByqN7JY6hTHfAQD7BeHQj9gWVDr7r9vOExFhb2fOuE4V qAB9VlENh6gtQA4= =NjZf -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u89-priv.pgp000064400000000000000000000015571046102023000222250ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0A55 5320 9858 B36F 3EA0 EFA4 63FD 6758 FF11 6167 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdAqdHTcaax8bs8NmOwEctFLY7zlJhvwNnWsQX0 j48508MAAQD72NcT+1ejea/qh3ieMIwsjhr+O965dxOAay/uKGR7bhDJwsALBB8W CgB9BYJh8/azAwsJBwkQY/1nWP8RYWdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnaQUaWxqHAIeoeC6D7SFxsuYfayPweuFh0bJ8DOfiRRYD FQoIApsBAh4BFiEEClVTIJhYs28+oO+kY/1nWP8RYWcAAB2JAP9+20vlXpEEgqID hd2FJk5xGH7+4Y12ekXRHnpPD4wnIQD/aSFr/rN98QPikwb+PEjx0xLv/LZR9WuX yGc6FQ786wTNETx1ODlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ Y/1nWP8RYWdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn JRIFxpb5ltkTR988WxxeMOmK9FqxD3DA7QKJp9sr09ADFQoIApkBApsBAh4BFiEE ClVTIJhYs28+oO+kY/1nWP8RYWcAAGTXAP473zew+xPSDc9P3sCp0Q/b1+fkInjY jYGKBxabHOqzNAD/bdOR+Zv7m3Nhaot1lrIrhaOijlsAvhkvIhelLyOOTg8= =ipOD -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u89.pgp000064400000000000000000000017561046102023000212500ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAqdHTcaax8bs8NmOwEctFLY7zlJhvwNnWsQX0 j48508PCwAsEHxYKAH0FgmHz9rMDCwkHCRBj/WdY/xFhZ0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdpBRpbGocAh6h4LoPtIXGy5h9rI/B6 4WHRsnwM5+JFFgMVCggCmwECHgEWIQQKVVMgmFizbz6g76Rj/WdY/xFhZwAAHYkA /37bS+VekQSCogOF3YUmTnEYfv7hjXZ6RdEeek8PjCchAP9pIWv+s33xA+KTBv48 SPHTEu/8tlH1a5fIZzoVDvzrBM0RPHU4OUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRBj/WdY/xFhZ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmclEgXGlvmW2RNH3zxbHF4w6Yr0WrEPcMDtAomn2yvT0AMVCggC mQECmwECHgEWIQQKVVMgmFizbz6g76Rj/WdY/xFhZwAAZNcA/jvfN7D7E9INz0/e wKnRD9vX5+QieNiNgYoHFpsc6rM0AP9t05H5m/ubc2Fqi3WWsiuFo6KOWwC+GS8i F6UvI45OD8LAAQQQFgoAcwWCYfQI6gOF/3gJEIZD4MtSxaeTRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzVKC/Q7QUKXa2ps8kCHblsLk5hv rmcdPbLRgo0Lr0ULFiEE/wk+Zsz7iAQZMRUFhkPgy1LFp5MAAIoWAQCisulN4ppv EIbYCA0dhJzsdcypYHw+wd/BQOiEV2rd2QEAm51okerOJ/gr2+KovwX735vfeVgk aSlsfsl02N31OAI= =bQM6 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u9-priv.pgp000064400000000000000000000015521046102023000221300ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7F94 5244 A20A 74E1 BA50 BE73 E917 BC24 D2D5 3F79 Comment: xVgEYfP2rxYJKwYBBAHaRw8BAQdAI9GUgYz2DzKUMip6iu3EZfOTJoH7qhUfBahn HrLwS5QAAQCUoDn7yff+fgNHLQYmBft0NSK2GCaQYTtsDW3YBZHAag2xwsALBB8W CgB9BYJh8/avAwsJBwkQ6Re8JNLVP3lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnFYP00IrsOjJnR5S4KYNjAp3WBMNzD56ezZ9fzloC6DMD FQoIApsBAh4BFiEEf5RSRKIKdOG6UL5z6Re8JNLVP3kAAHlNAP9aoTuOvC4NKQgq niK8WVWBuNXydmGhpFoZe8cYSujQcwD/XRQffZ4YaghthVc4qz76M9pPIrBb9lf1 zNQtYLDbAQ3NEDx1OUBleGFtcGxlLm9yZz7CwA0EExYKAIAFgmHz9q8DCwkHCRDp F7wk0tU/eUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfl s+VKhhBAhqj4oAZlmKeVKBERBjWUyazvb12IC5lmewMVCggCmQECmwECHgEWIQR/ lFJEogp04bpQvnPpF7wk0tU/eQAA63cA/RxIQY/78fXF6FgeZ6Veu2O55SAyfWa0 QkiWLNKIz82VAPdYSJsuCXh0Iy3Pr+RaDdDIB3IsGOHVce3TnvcyyfAP =ob7Z -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u9.pgp000064400000000000000000000017521046102023000211540ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2rxYJKwYBBAHaRw8BAQdAI9GUgYz2DzKUMip6iu3EZfOTJoH7qhUfBahn HrLwS5TCwAsEHxYKAH0FgmHz9q8DCwkHCRDpF7wk0tU/eUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcVg/TQiuw6MmdHlLgpg2MCndYEw3MP np7Nn1/OWgLoMwMVCggCmwECHgEWIQR/lFJEogp04bpQvnPpF7wk0tU/eQAAeU0A /1qhO468Lg0pCCqeIrxZVYG41fJ2YaGkWhl7xxhK6NBzAP9dFB99nhhqCG2FVzir Pvoz2k8isFv2V/XM1C1gsNsBDc0QPHU5QGV4YW1wbGUub3JnPsLADQQTFgoAgAWC YfP2rwMLCQcJEOkXvCTS1T95RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ+Wz5UqGEECGqPigBmWYp5UoEREGNZTJrO9vXYgLmWZ7AxUKCAKZ AQKbAQIeARYhBH+UUkSiCnThulC+c+kXvCTS1T95AADrdwD9HEhBj/vx9cXoWB5n pV67Y7nlIDJ9ZrRCSJYs0ojPzZUA91hImy4JeHQjLc+v5FoN0MgHciwY4dVx7dOe 9zLJ8A/CwAEEEBYKAHMFgmH0COcDhf94CRDOb/ltF+Dq8EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfd4tV/N980r8tXnRiE3wTObhFHQ02W Pq1u34olVk7B4RYhBNC/GFa5WmJ2PeSQiM5v+W0X4OrwAAAsGwEA53uhAMFr8KHM Jwsw/JrPkzv7rWKtLoNBBoR0Kumc2ZYA/R68O5VtVKF2AJOUzYMZvtrSdHojYTdr Gs5ytNCmHxgK =uPEn -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u90-priv.pgp000064400000000000000000000015571046102023000222150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D9C0 6C9D 1008 13BE BD35 427D F65F 7634 EB2E AD6A Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdA6KFzccL3m1Mui4MlvFTAPYUa0VY0NlDfbh5k C3HItg8AAPwKOqE2B5GG8d1cvupG9ncB/JlZCEQz+2hOKkERykDsXw+qwsALBB8W CgB9BYJh8/azAwsJBwkQ9l92NOsurWpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnGr3rqGndBzTZyCtUIR64mpZtFch76piqZDineh2cqsAD FQoIApsBAh4BFiEE2cBsnRAIE769NUJ99l92NOsurWoAALjDAQDTXevcTr9xuQzp lm2pjwVl/Q1RR4Di7dHycoq/xTc48wD/eumv7CAjQwNcHq+NpS4X5XlbTp17tGZE RsEoJW0WcQrNETx1OTBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ 9l92NOsurWpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn vJTzzSFDj1w/Nmlp49Ak1R49Hxo+hOWiShuCEB8y4JEDFQoIApkBApsBAh4BFiEE 2cBsnRAIE769NUJ99l92NOsurWoAALq3AQCfg7jLWz3oCuStTYzyj0XYs8d3oI5G 9923EJXdJkylhAD/R4gakO772aodXGlFDViqb6UzDyCasLIUJFlqnYJJ4As= =CbSy -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u90.pgp000064400000000000000000000017561046102023000212400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdA6KFzccL3m1Mui4MlvFTAPYUa0VY0NlDfbh5k C3HItg/CwAsEHxYKAH0FgmHz9rMDCwkHCRD2X3Y06y6takcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcaveuoad0HNNnIK1QhHrialm0VyHvq mKpkOKd6HZyqwAMVCggCmwECHgEWIQTZwGydEAgTvr01Qn32X3Y06y6tagAAuMMB ANNd69xOv3G5DOmWbamPBWX9DVFHgOLt0fJyir/FNzjzAP966a/sICNDA1wer42l LhfleVtOnXu0ZkRGwSglbRZxCs0RPHU5MEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRD2X3Y06y6takcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcme8lPPNIUOPXD82aWnj0CTVHj0fGj6E5aJKG4IQHzLgkQMVCggC mQECmwECHgEWIQTZwGydEAgTvr01Qn32X3Y06y6tagAAurcBAJ+DuMtbPegK5K1N jPKPRdizx3egjkb33bcQld0mTKWEAP9HiBqQ7vvZqh1caUUNWKpvpTMPIJqwshQk WWqdgkngC8LAAQQQFgoAcwWCYfQI6gOF/3gJEGP9Z1j/EWFnRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8uWhSzg9Z5bQfocgXbWkbGIlz25 /AgCm1/t25eRQYBpFiEEClVTIJhYs28+oO+kY/1nWP8RYWcAANliAP9pGvUUdYOM UzGeVKhGXaepXyiL/nRv4VvZ6OfGXPs01gD/bla7b5pAsW2xTR992wtrmkR6Q5nT RL1hWNSB4Ini7wo= =DhYO -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u91-priv.pgp000064400000000000000000000015571046102023000222160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 05CA 2D38 8297 E826 B9C3 B431 A8B1 5D93 8952 57F9 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdA9gi+bCuC37MRNlAaLhkrUk2P3jZF4PNljWuz xUEXKQ0AAQDxMU7gQViEg+XvaH0ToT5PHpA7BjHN8CMSZ0iX92qC+w8hwsALBB8W CgB9BYJh8/azAwsJBwkQqLFdk4lSV/lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnGpDwM13LL0zfORFqxhNmAJKlrWyUJy8PmBzHl6xSU8YD FQoIApsBAh4BFiEEBcotOIKX6Ca5w7QxqLFdk4lSV/kAALARAP9UzgE3yGR1Cj0s KhGnaxLAg37psZfkaz5mW7WqO3ghWQEAuqGs7UA7I1LUKM0ZA6XvF6adYacljoGP V5e4t0htHQfNETx1OTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ qLFdk4lSV/lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 5ne0WnOLIqwxrenU318INw6uC7WatfdE4J+ksQNLpwoDFQoIApkBApsBAh4BFiEE BcotOIKX6Ca5w7QxqLFdk4lSV/kAAHk1AQDi6f5qUYLd8KSIkmaO6U1W8SYnwiQx Z+ZY4MkNBgb2KQEA94tKoX1Q6lxNxB03MpPhy3hBTHDiboAS/1dYNIteRQ8= =sUeL -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u91.pgp000064400000000000000000000017561046102023000212410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdA9gi+bCuC37MRNlAaLhkrUk2P3jZF4PNljWuz xUEXKQ3CwAsEHxYKAH0FgmHz9rMDCwkHCRCosV2TiVJX+UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcakPAzXcsvTN85EWrGE2YAkqWtbJQn Lw+YHMeXrFJTxgMVCggCmwECHgEWIQQFyi04gpfoJrnDtDGosV2TiVJX+QAAsBEA /1TOATfIZHUKPSwqEadrEsCDfumxl+RrPmZbtao7eCFZAQC6oaztQDsjUtQozRkD pe8Xpp1hpyWOgY9Xl7i3SG0dB80RPHU5MUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRCosV2TiVJX+UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfmd7Rac4sirDGt6dTfXwg3Dq4LtZq190Tgn6SxA0unCgMVCggC mQECmwECHgEWIQQFyi04gpfoJrnDtDGosV2TiVJX+QAAeTUBAOLp/mpRgt3wpIiS Zo7pTVbxJifCJDFn5ljgyQ0GBvYpAQD3i0qhfVDqXE3EHTcyk+HLeEFMcOJugBL/ V1g0i15FD8LAAQQQFgoAcwWCYfQI6gOF/3gJEPZfdjTrLq1qRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyesxFKf+iYF2ejr/bcJKyG//eK/ ToSMG5iDz1IbYPYFFiEE2cBsnRAIE769NUJ99l92NOsurWoAAFOjAQDcdunytRKd 9Li98cQL8P0PzvLwr/pWKKi0YRJYdR++mgD/XM8bKGqpu6h1CMgU3bDz5xA3pFeP 3gIuObS78hF3dA0= =wGvL -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u92-priv.pgp000064400000000000000000000015571046102023000222170ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BF79 DD51 D462 1800 14D2 AD71 D246 2BE4 CF36 F625 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdATxJcea7MA3mxLN7Ln2U1QeLMpkxDrvyhx8Ze XGHttTQAAP0em1I8bZNxuzIUuwMtMtkfW4cy537uNOnFupJRh8Va7hBFwsALBB8W CgB9BYJh8/azAwsJBwkQ0kYr5M829iVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JntwpaG0Zh0YXwplfZaUzfZjD2FAXiH4ANsPTKgLMUCIYD FQoIApsBAh4BFiEEv3ndUdRiGAAU0q1x0kYr5M829iUAACctAQDzE3R/9OKBRjnE avAiL/Nf0Mkr3C/6esWYL2hWgZzYUAEAj/z7H/8w5ljidUxmKkaz05mUXMw28sbI unicUeeOkg3NETx1OTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ 0kYr5M829iVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn g4Y8n5wc87KsJQAM2lhQXUzmPSDO197PfoI+Suj2Aa0DFQoIApkBApsBAh4BFiEE v3ndUdRiGAAU0q1x0kYr5M829iUAANYnAP4z97DZ70eMYjN4LD1YJQtKI//s/VXW 9MWB27FxR7241AEA0M67csQO2UjrVTap+1pKvefSyCjNu/Qv7g1L57CubQg= =5TMH -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u92.pgp000064400000000000000000000017561046102023000212420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdATxJcea7MA3mxLN7Ln2U1QeLMpkxDrvyhx8Ze XGHttTTCwAsEHxYKAH0FgmHz9rMDCwkHCRDSRivkzzb2JUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme3ClobRmHRhfCmV9lpTN9mMPYUBeIf gA2w9MqAsxQIhgMVCggCmwECHgEWIQS/ed1R1GIYABTSrXHSRivkzzb2JQAAJy0B APMTdH/04oFGOcRq8CIv81/QySvcL/p6xZgvaFaBnNhQAQCP/Psf/zDmWOJ1TGYq RrPTmZRczDbyxsi6eJxR546SDc0RPHU5MkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRDSRivkzzb2JUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeDhjyfnBzzsqwlAAzaWFBdTOY9IM7X3s9+gj5K6PYBrQMVCggC mQECmwECHgEWIQS/ed1R1GIYABTSrXHSRivkzzb2JQAA1icA/jP3sNnvR4xiM3gs PVglC0oj/+z9Vdb0xYHbsXFHvbjUAQDQzrtyxA7ZSOtVNqn7Wkq959LIKM279C/u DUvnsK5tCMLAAQQQFgoAcwWCYfQI6gOF/3gJEKixXZOJUlf5RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6g2Q9dbytmj4xBIkDWUiSEBZ1IX bXLYGk8PoCk/9oEGFiEEBcotOIKX6Ca5w7QxqLFdk4lSV/kAANJKAQDghIzCkkQH XmuIgycLcuLFDIEFtXumJMdmWYSfAdyw/AEAx1md8rJYLz4W4jLBYT42d6LrXt6w eF9UxbHcY8cuyQw= =RW3C -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u93-priv.pgp000064400000000000000000000015571046102023000222200ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: FC0D E4AD 683B E64F 47E8 642F 7472 D7BB 781E 5C76 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdAbIoJ0Eidc0+tbA0JFfHe9O7WrHFP6fy1ouh1 Qq9I7PYAAP0Vlazi5eFcA67WvPJYpEtEmQlfXiONQ7rYq7aT0JGHeBJPwsALBB8W CgB9BYJh8/azAwsJBwkQdHLXu3geXHZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnmatI4EylN8YrQk9Gm3Z6To3kJPIjWREYVpXA3erDYzcD FQoIApsBAh4BFiEE/A3krWg75k9H6GQvdHLXu3geXHYAABndAQCdo7HUiY127/qZ KnsFe3VYzyO8yT1wYJ+wg1EhZMNq5AD+NOJQ2TL0ttK0tws1P2m4HiwqmaN/0IjJ eUp2U3iRuQDNETx1OTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ dHLXu3geXHZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn aTUpn1cuNQdvUTBNVzifG7InOgzkCZfSwazXgLJE5zYDFQoIApkBApsBAh4BFiEE /A3krWg75k9H6GQvdHLXu3geXHYAAEheAP9ivcU9stKm5u7RXixdD/LiEaB6u7c+ GWYUD7LVTgvv7gEAszt6Pz//7MrVtzpfhRug+I2ayWfG0JYbROTD3A4wAg4= =Tl4I -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u93.pgp000064400000000000000000000017561046102023000212430ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAbIoJ0Eidc0+tbA0JFfHe9O7WrHFP6fy1ouh1 Qq9I7PbCwAsEHxYKAH0FgmHz9rMDCwkHCRB0cte7eB5cdkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeZq0jgTKU3xitCT0abdnpOjeQk8iNZ ERhWlcDd6sNjNwMVCggCmwECHgEWIQT8DeStaDvmT0foZC90cte7eB5cdgAAGd0B AJ2jsdSJjXbv+pkqewV7dVjPI7zJPXBgn7CDUSFkw2rkAP404lDZMvS20rS3CzU/ abgeLCqZo3/QiMl5SnZTeJG5AM0RPHU5M0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRB0cte7eB5cdkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdpNSmfVy41B29RME1XOJ8bsic6DOQJl9LBrNeAskTnNgMVCggC mQECmwECHgEWIQT8DeStaDvmT0foZC90cte7eB5cdgAASF4A/2K9xT2y0qbm7tFe LF0P8uIRoHq7tz4ZZhQPstVOC+/uAQCzO3o/P//sytW3Ol+FG6D4jZrJZ8bQlhtE 5MPcDjACDsLAAQQQFgoAcwWCYfQI6gOF/3gJENJGK+TPNvYlRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1qVDeQJWgdL80J+B2bj+uFwdjOa jm9/BjN34ixf+Ce7FiEEv3ndUdRiGAAU0q1x0kYr5M829iUAAFszAQCsbSlkAJxN bc35nLlvwmtwikmMrs8JivLYrmejHpbDoAEAm348abvvkQUMYcu0ngU49bhok+r8 0xWmkQDdzztVTQU= =cE46 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u94-priv.pgp000064400000000000000000000015571046102023000222210ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: F1FE 0993 6F39 A4E7 A907 D909 CDFA 4993 BE41 24AF Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdANBNiqP8Mlaw4uNzZkWpuONL9R93Le7WWYbcg 90O1jXUAAP9lbzN6mf0vD9UIS1fSya/CKxHijvWerWp39lehxqr6ExIXwsALBB8W CgB9BYJh8/azAwsJBwkQzfpJk75BJK9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnS8XOlT/G4j2c7AZg5vKl6E4BypcU93KO9dzjaCLZrL0D FQoIApsBAh4BFiEE8f4Jk285pOepB9kJzfpJk75BJK8AAK/DAP9RlR5JAhlnGEK2 I0/pF+c53x/2WnjoG+5RUzg4Y1355QEA7C7wkWwt11ZjjAG8eJId+pkBQ1RIKbzY vsTQBWdX3gzNETx1OTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ zfpJk75BJK9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn gPQZsVsHO83G15TxTqTtGvsuINEOh47qn02/rdyZm1gDFQoIApkBApsBAh4BFiEE 8f4Jk285pOepB9kJzfpJk75BJK8AAGh9AQCLNIkmAR6NChJvkfcd1nFeF8Wlq6Nm BDW56NyuWX70OQD9EbItbER4+RxrpvEjbBaCU3C9NZ2pif3222k0/ZukSg0= =9S8s -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u94.pgp000064400000000000000000000017561046102023000212440ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdANBNiqP8Mlaw4uNzZkWpuONL9R93Le7WWYbcg 90O1jXXCwAsEHxYKAH0FgmHz9rMDCwkHCRDN+kmTvkEkr0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdLxc6VP8biPZzsBmDm8qXoTgHKlxT3 co713ONoItmsvQMVCggCmwECHgEWIQTx/gmTbzmk56kH2QnN+kmTvkEkrwAAr8MA /1GVHkkCGWcYQrYjT+kX5znfH/ZaeOgb7lFTODhjXfnlAQDsLvCRbC3XVmOMAbx4 kh36mQFDVEgpvNi+xNAFZ1feDM0RPHU5NEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRDN+kmTvkEkr0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeA9BmxWwc7zcbXlPFOpO0a+y4g0Q6HjuqfTb+t3JmbWAMVCggC mQECmwECHgEWIQTx/gmTbzmk56kH2QnN+kmTvkEkrwAAaH0BAIs0iSYBHo0KEm+R 9x3WcV4XxaWro2YENbno3K5ZfvQ5AP0Rsi1sRHj5HGum8SNsFoJTcL01namJ/fbb aTT9m6RKDcLAAQQQFgoAcwWCYfQI6gOF/3gJEHRy17t4Hlx2RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3vsNDOqwBhbO7wdasB9DBZZc0Yt ul2tRrChkDiEsm6HFiEE/A3krWg75k9H6GQvdHLXu3geXHYAAL0AAQCadMf4aKLy bDjXLSBm2F6rHsXrWA3wWro9zuptQC3OpQEAze1iIuvdLePrHuB+FE/Z8hXucvEK l3LIYZCfjqe0bAY= =2tZh -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u95-priv.pgp000064400000000000000000000015571046102023000222220ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 465C D9AD 11B5 003A 48BB 2811 8DB2 CEBD 29D4 F603 Comment: xVgEYfP2sxYJKwYBBAHaRw8BAQdAyxGYK326JyafNLuTKPNNMNO2LqEbMgaUjb1x qOCvOdsAAP9yRWm8Xgv5diFOCWQkfP3Ur6VH9iLd3M231HuYc1CEmBG2wsALBB8W CgB9BYJh8/azAwsJBwkQjbLOvSnU9gNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnlNEVTZfrc4i8RcKGJKA3nTUahEBu2PL0UHaOwNra8hkD FQoIApsBAh4BFiEERlzZrRG1ADpIuygRjbLOvSnU9gMAAOjLAQDpZ2JQqIy13Bs3 gnJuK5OC62P7VGdusWtZGW4F/5NKcQEAvljQk1UskplIzKN+MHRFm/BFQryY3qZq VXNm26+lkQXNETx1OTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQ jbLOvSnU9gNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn bDpqW69CtoyScqnyIwef2RkhiQb2f0O75QyRX4x5W8kDFQoIApkBApsBAh4BFiEE RlzZrRG1ADpIuygRjbLOvSnU9gMAAOIMAQCcJlVNqUvgL6m2sc4bnUK1X28EWgJH IpblQaj2ckGaqwEA1YoF09sa2e722lwM7Rdh9wwMbSd68hi/FbwJsiO0JQg= =HSag -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u95.pgp000064400000000000000000000017561046102023000212450ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2sxYJKwYBBAHaRw8BAQdAyxGYK326JyafNLuTKPNNMNO2LqEbMgaUjb1x qOCvOdvCwAsEHxYKAH0FgmHz9rMDCwkHCRCNss69KdT2A0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeU0RVNl+tziLxFwoYkoDedNRqEQG7Y 8vRQdo7A2tryGQMVCggCmwECHgEWIQRGXNmtEbUAOki7KBGNss69KdT2AwAA6MsB AOlnYlCojLXcGzeCcm4rk4LrY/tUZ26xa1kZbgX/k0pxAQC+WNCTVSySmUjMo34w dEWb8EVCvJjepmpVc2bbr6WRBc0RPHU5NUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rMDCwkHCRCNss69KdT2A0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdsOmpbr0K2jJJyqfIjB5/ZGSGJBvZ/Q7vlDJFfjHlbyQMVCggC mQECmwECHgEWIQRGXNmtEbUAOki7KBGNss69KdT2AwAA4gwBAJwmVU2pS+Avqbax zhudQrVfbwRaAkciluVBqPZyQZqrAQDVigXT2xrZ7vbaXAztF2H3DAxtJ3ryGL8V vAmyI7QlCMLAAQQQFgoAcwWCYfQI6gOF/3gJEM36SZO+QSSvRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9gYApWKMkBOh0ShOXdlqPUwCduA BbLQzt80de1yDDAEFiEE8f4Jk285pOepB9kJzfpJk75BJK8AAB7eAP9a5jITF4UJ Egyem5rcWIOFGg6ap33ywvuu1K57kAefWgD+IXEn/tIfsRHvAm8KpFY9urFAds/+ LsiEiEjJeqvU9AI= =U4nv -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u96-priv.pgp000064400000000000000000000015571046102023000222230ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9DF9 9BDB 7078 BE13 CE3F 66D9 7F21 2BF6 69F9 95C6 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAB32huafeK2yX17GsMceM8B+jboeGt0lfP0H1 ijRO1igAAQDq8Pr0pvDTLwMk+yr8IFkbyhym5QNuO7fZzyc8ipEBsxDrwsALBB8W CgB9BYJh8/a0AwsJBwkQfyEr9mn5lcZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn4Je/106cuahnbGkPSFqNuDMT8kPs/mI+2j7/KCapdFED FQoIApsBAh4BFiEEnfmb23B4vhPOP2bZfyEr9mn5lcYAAAPOAQDierLG34Ug65bw sgb7SVppEA1T06m18vEPjAMWvtpF0wD/eh/TknAHPEoAuvgahGCPQOTocWUY6Av5 RcFw7TybEAzNETx1OTZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a0AwsJBwkQ fyEr9mn5lcZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 2L1Xzj3kG2gXYJf92UnqCqpuqUd2y8Le2Yg4unphMucDFQoIApkBApsBAh4BFiEE nfmb23B4vhPOP2bZfyEr9mn5lcYAAFGZAQCKhqh+SHdMajzjEfOf8C7Qqi4n7niR p1lU79zfX+9FxQEAgVOws8o47xhJGEWhnv9bEHuygyXRiXnSpJPa4g8eNwY= =6dYL -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u96.pgp000064400000000000000000000017561046102023000212460ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAB32huafeK2yX17GsMceM8B+jboeGt0lfP0H1 ijRO1ijCwAsEHxYKAH0FgmHz9rQDCwkHCRB/ISv2afmVxkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfgl7/XTpy5qGdsaQ9IWo24MxPyQ+z+ Yj7aPv8oJql0UQMVCggCmwECHgEWIQSd+ZvbcHi+E84/Ztl/ISv2afmVxgAAA84B AOJ6ssbfhSDrlvCyBvtJWmkQDVPTqbXy8Q+MAxa+2kXTAP96H9OScAc8SgC6+BqE YI9A5OhxZRjoC/lFwXDtPJsQDM0RPHU5NkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rQDCwkHCRB/ISv2afmVxkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfYvVfOPeQbaBdgl/3ZSeoKqm6pR3bLwt7ZiDi6emEy5wMVCggC mQECmwECHgEWIQSd+ZvbcHi+E84/Ztl/ISv2afmVxgAAUZkBAIqGqH5Id0xqPOMR 85/wLtCqLifueJGnWVTv3N9f70XFAQCBU7CzyjjvGEkYRaGe/1sQe7KDJdGJedKk k9riDx43BsLAAQQQFgoAcwWCYfQI6gOF/3gJEI2yzr0p1PYDRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ08zcvlZOdXFSeZyW8ss6BTcuwAn TMqE0DsF+8xDLwZsFiEERlzZrRG1ADpIuygRjbLOvSnU9gMAABajAQDXaiVyaW3W GTMIbCvuBLDY8s4pxSlhlfDpZjy4Ijy5fgD+L4vWwZ6ncYIxUb+N7V5SHo8nY9DD 8RSmjbXPCIh7vww= =XFcp -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u97-priv.pgp000064400000000000000000000015571046102023000222240ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5707 1A60 EFBB FFA6 DDCE 7796 F14A 1B2C 681A 8A83 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAcFZtHc4w/RRHt65qVi54i8/zdspsmPlMjTKM t4E7nIkAAP0ddLKKa3XxU1ZpuUTuy24QFU7vtvjzbH6YALMebSdyWhCHwsALBB8W CgB9BYJh8/a0AwsJBwkQ8UobLGgaioNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnm+l8bHX1fY1Ebfgbk4xnAatdLQ3f5dXz/AnWF3sGbaoD FQoIApsBAh4BFiEEVwcaYO+7/6bdzneW8UobLGgaioMAANTYAQClbqOSMAayWq4+ yPANma+hYrlBV7XGJa+x2czZs2cuBwD+MkHG+bq+AdeJ1F03ei/UrLON/ORBtogJ /xt5VIjayg/NETx1OTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a0AwsJBwkQ 8UobLGgaioNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn uryKIc5waj7AJ24bnbpERTYduaiQoLnkuCTnj1FPo2ADFQoIApkBApsBAh4BFiEE VwcaYO+7/6bdzneW8UobLGgaioMAABswAQD/jIbdtHTy51eJBKurdypztqDCoJXo VZW9EJVEr7blmgD+P42RhQqRoArRk53iSXEcxzq5bbuACCalgNdDrjuGOws= =hwDr -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u97.pgp000064400000000000000000000017561046102023000212470ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAcFZtHc4w/RRHt65qVi54i8/zdspsmPlMjTKM t4E7nInCwAsEHxYKAH0FgmHz9rQDCwkHCRDxShssaBqKg0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeb6XxsdfV9jURt+BuTjGcBq10tDd/l 1fP8CdYXewZtqgMVCggCmwECHgEWIQRXBxpg77v/pt3Od5bxShssaBqKgwAA1NgB AKVuo5IwBrJarj7I8A2Zr6FiuUFXtcYlr7HZzNmzZy4HAP4yQcb5ur4B14nUXTd6 L9Sss4385EG2iAn/G3lUiNrKD80RPHU5N0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rQDCwkHCRDxShssaBqKg0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcme6vIohznBqPsAnbhudukRFNh25qJCgueS4JOePUU+jYAMVCggC mQECmwECHgEWIQRXBxpg77v/pt3Od5bxShssaBqKgwAAGzABAP+Mht20dPLnV4kE q6t3KnO2oMKglehVlb0QlUSvtuWaAP4/jZGFCpGgCtGTneJJcRzHOrltu4AIJqWA 10OuO4Y7C8LAAQQQFgoAcwWCYfQI6gOF/3gJEH8hK/Zp+ZXGRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ++4QCXSXR8qOt918N1G487VuOxB mFu/3n2NQvkptCIbFiEEnfmb23B4vhPOP2bZfyEr9mn5lcYAAIlbAP9O7rGj2t6o HdbBCM3Re+Q8H5TLQdFb4PGYCpFwYh9BhwEA9svIG9eGIRXvCDRGe/PwWOF5C0hW oUzxPzGJvZ2xawQ= =vshI -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u98-priv.pgp000064400000000000000000000015571046102023000222250ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8AB1 1E4F 18DC 57F2 BA40 0B8D 7B5F D899 0C1C CAC5 Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAgvlI0gFBwhXgBVE7W2lDuQTw0GJbA1CRo6LE siwVbA4AAQCjQ4w1wd8uiNhBOB18HanUFt7/sv1T20n8xXz2B/myKhGqwsALBB8W CgB9BYJh8/a0AwsJBwkQe1/YmQwcysVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnkkhbriRLTBkyFr8Q84E2qV9bgc9kNPNwZlXRjKplGBkD FQoIApsBAh4BFiEEirEeTxjcV/K6QAuNe1/YmQwcysUAAAf1AP9eGM2qnqqKpjUq qZYXpRhdCx1PxP5+UiWw0aJhwIjXfwEA7FYCtvl0Y2e81MFrPt4P8TDm8mozF/3+ YA8hwuAGZwfNETx1OThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a0AwsJBwkQ e1/YmQwcysVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn YMYh5kDtI04Gm+jkLN+X4fOWlb/xTuBhJFJKHkRXiN0DFQoIApkBApsBAh4BFiEE irEeTxjcV/K6QAuNe1/YmQwcysUAAHV4AQD1Zejgnj4+/10lDQhQdA719jWuF1Pb R7XXyYI2za8oQAD/bd+CE1hmaKG5iV3smJdFvCglEOWao+5RW74/Mqnc+As= =/Jp0 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u98.pgp000064400000000000000000000017561046102023000212500ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAgvlI0gFBwhXgBVE7W2lDuQTw0GJbA1CRo6LE siwVbA7CwAsEHxYKAH0FgmHz9rQDCwkHCRB7X9iZDBzKxUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeSSFuuJEtMGTIWvxDzgTapX1uBz2Q0 83BmVdGMqmUYGQMVCggCmwECHgEWIQSKsR5PGNxX8rpAC417X9iZDBzKxQAAB/UA /14YzaqeqoqmNSqplhelGF0LHU/E/n5SJbDRomHAiNd/AQDsVgK2+XRjZ7zUwWs+ 3g/xMObyajMX/f5gDyHC4AZnB80RPHU5OEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rQDCwkHCRB7X9iZDBzKxUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdgxiHmQO0jTgab6OQs35fh85aVv/FO4GEkUkoeRFeI3QMVCggC mQECmwECHgEWIQSKsR5PGNxX8rpAC417X9iZDBzKxQAAdXgBAPVl6OCePj7/XSUN CFB0DvX2Na4XU9tHtdfJgjbNryhAAP9t34ITWGZoobmJXeyYl0W8KCUQ5Zqj7lFb vj8yqdz4C8LAAQQQFgoAcwWCYfQI6gOF/3gJEPFKGyxoGoqDRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5loavsevwQ2LktjYYFtrT4ZPnP/ zPyEJXVnF5/9TZtHFiEEVwcaYO+7/6bdzneW8UobLGgaioMAACZHAP4zwqFZNIzA 5L/TDNy+yunPXp1FQEN51Cnpo9d27hADewD9GkrKW1zeI3iM2a5UDzMxMouUwHVO 9sQpbz2Es9gL6w4= =oIGh -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u99-priv.pgp000064400000000000000000000015571046102023000222260ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 286E C5D4 E5D1 D136 E54C 996F E2D9 E350 B7CF 3D8A Comment: xVgEYfP2tBYJKwYBBAHaRw8BAQdAgVYZsAft0pk93Q3lxPxlD0BNlkh+8gIoH3NM 7EOyUscAAP9aDxwWr5y+vIqxvO35ny+hbeXgUu9nCmtJM2zldmFiYxFjwsALBB8W CgB9BYJh8/a0AwsJBwkQ4tnjULfPPYpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnaPceIJlzaAAok/RB0txj+P9DeXz9wgvmaDpvMt8u2M8D FQoIApsBAh4BFiEEKG7F1OXR0TblTJlv4tnjULfPPYoAADTLAP9xRIn9Ssi9wJeo 4S5GluVayRuLF4SNQ2NypmY+/YZs0gD/fhR04goKcZtTpnYy2A8eOaBiZyulCxxd +fZTUKnzPgPNETx1OTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a0AwsJBwkQ 4tnjULfPPYpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn dyeNWkU6oHm+hotb8HmK8L4w3zbPyfPnJZ9zV1koix0DFQoIApkBApsBAh4BFiEE KG7F1OXR0TblTJlv4tnjULfPPYoAAC1+AQCKbgPur8aYETa3KuotXX47kQKHSdsk uwOYnJ/2JXcNNAD/Zbdwg9V0rtHXyfgR39Ows/Uy+ZciSCHUmr8Xi4VgOg4= =Iog0 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond/u99.pgp000064400000000000000000000017561046102023000212510ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2tBYJKwYBBAHaRw8BAQdAgVYZsAft0pk93Q3lxPxlD0BNlkh+8gIoH3NM 7EOyUsfCwAsEHxYKAH0FgmHz9rQDCwkHCRDi2eNQt889ikcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdo9x4gmXNoACiT9EHS3GP4/0N5fP3C C+ZoOm8y3y7YzwMVCggCmwECHgEWIQQobsXU5dHRNuVMmW/i2eNQt889igAANMsA /3FEif1KyL3Al6jhLkaW5VrJG4sXhI1DY3KmZj79hmzSAP9+FHTiCgpxm1OmdjLY Dx45oGJnK6ULHF359lNQqfM+A80RPHU5OUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rQDCwkHCRDi2eNQt889ikcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmd3J41aRTqgeb6Gi1vweYrwvjDfNs/J8+cln3NXWSiLHQMVCggC mQECmwECHgEWIQQobsXU5dHRNuVMmW/i2eNQt889igAALX4BAIpuA+6vxpgRNrcq 6i1dfjuRAodJ2yS7A5icn/Yldw00AP9lt3CD1XSu0dfJ+BHf07Cz9TL5lyJIIdSa vxeLhWA6DsLAAQQQFgoAcwWCYfQI6gOF/3gJEHtf2JkMHMrFRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzERzKWKoMre4t315nrwigBv5VoH UTi7nIAIo0FdbWsjFiEEirEeTxjcV/K6QAuNe1/YmQwcysUAAKEaAP9/G87AdrNr xtRd8yCPla9S7tOJMJeVehVUjdRm1qu9rQD/X6lgkIgSrx/RkIIaQdzNC5Mo2D8e ZPiHU866s+bWwQM= =o/8R -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond.pgp000064400000000000000000007255461046102023000206350ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYfP2txYJKwYBBAHaRw8BAQdASOOO4mB8f/pan8Sk5gO0h92UVFjA5mduLFUS tq44k4/CwAsEHxYKAH0FgmHz9rcDCwkHCRDCxDZCog4UlkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmet5AhSuK9xxfTrvpzsFDtpSO8zpASQ FKl0mzx5arJzawMVCggCmwECHgEWIQQAPpxanauGJv0WlKrCxDZCog4UlgAAoMYB AJ6njKc7lgoMA0Lo2kd3qP42EQgIWFpbGiPfxU5/FzCcAQCcckFZtv3Yq4jVaJX0 vphabEFJRIWRygbhrhq1g2bpCM0SPHUxNjhAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a3AwsJBwkQwsQ2QqIOFJZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnVXOuZlMrpWe2RCdBH59YNK1VAw14I1Gr2Jzjt9IutB0DFQoI ApkBApsBAh4BFiEEAD6cWp2rhib9FpSqwsQ2QqIOFJYAAHrBAP4s7hjP13dNV/m9 qu56uXQyscOwq5yPqopuh+ydfXj1OgD9HE1LkcblR0ZgjeKm59PCKVXm2DdpFUvU vcOALKngeQLCwAEEEBYKAHMFgmH0CO0Dhf94CRDzxiOlxSo7kkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfaH9eaI5BtpCZ3r8Xsa0e+Cjha 5uSP5QbE13fIWR3FRRYhBFgDXFe2aw6/sGn5t/PGI6XFKjuSAABg5QEA86xtynCf ou0zUm7eILPAOuSH4nuUCoh+gxcMXhMKrUcBAPokPl8gVyihLukR7f6fUhqWL97G zjmD/HBBZ7GDk9QHxjMEYfP2rxYJKwYBBAHaRw8BAQdAgzQPHSdztypdi9vYuqKS ICInk3eiLN+SWHoXboamTlbCwAsEHxYKAH0FgmHz9q8DCwkHCRC28zhD2WHoGEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeNzQCjizUH5mlH GqD72iyQqLiKDSr0O6TNXqxBu1zufAMVCggCmwECHgEWIQQAWNz3p8bENg3pCV22 8zhD2WHoGAAARicBAMk+ILyte3oj6HE3nV06MOtiUzcaGSki1KttUU6Os7oIAP47 RDG6q9MVpxb87FaoFXX6L6qcAlm4CQLNSRjaiABAAM0QPHU3QGV4YW1wbGUub3Jn PsLADgQTFgoAgAWCYfP2rwMLCQcJELbzOEPZYegYRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6zqvdJbbuYiHbBsPDYedqVtWm5WPYhFk9Vb YUW7ysH0AxUKCAKZAQKbAQIeARYhBABY3PenxsQ2DekJXbbzOEPZYegYAABaJwD/ R2yZWUZ/dWdBXI7QGpBay4RS64koJ9ZHrL4eugy4b6MBAMv8C6meAJNPzzu12DPv nRdJvBXl64R88OV3NPlGwSEJwsABBBAWCgBzBYJh9AjnA4X/eAkQMCbadK7rSm5H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn4MgT9susWD+0 xGzCEPQJtvQwK2WRxCCM9hAKCk1nTjAWIQR9y4I6sbM8bSL8hKwwJtp0rutKbgAA lOYBAI6LRnkRxfBPokXxcho75ddODzHwR7BavvXDVWfNCJ9zAP4j/dDCORM73+Av ss3Kx26FxGPrYMuN5d9Vn+Z4OCqIAMYzBGHz9rsWCSsGAQQB2kcPAQEHQDrauRZv NVJ0AkmLD7NCPa0hCBkqQISo9d9ayztOYwNKwsALBB8WCgB9BYJh8/a7AwsJBwkQ xSRR/bcihfxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 34oG/TW1o/3zdS/mFFkuKwbeJUqfZ+GKlz8XKy/N2E0DFQoIApsBAh4BFiEEATsj HxOaRjElULvLxSRR/bcihfwAAJ4qAQDFabf6v8R2ZT42S5JSHIv9HnbV5LS5BqN0 ciYtquft1AEAvO2xVJKYFDLaZInGbV+smA+a92TyUSSNtcx7Dn1biwHNEjx1MjQw QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJEMUkUf23IoX8RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxhcx5lL6pAiGLhgQYv3 4DvAIO97pxqsnjKm6tRlo/JiAxUKCAKZAQKbAQIeARYhBAE7Ix8TmkYxJVC7y8Uk Uf23IoX8AAA/OQEA4vXLFrBXnSa2jDFIbwSU7a1uC1Ifn6I6yzdGgXkmPkcA/22C 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 X/bnaXECgCK72EytxlTgsHrx4mbkuiX1JykNzRI8dTI1NUBleGFtcGxlLm9yZz7C wA4EExYKAIAFgmHz9rwDCwkHCRCATK0wzawkPEcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcme6U+k5UhzjwoRomjfCUBk0au+Sjxws5axdDVGn ifKPPAMVCggCmQECmwECHgEWIQQC32yydY12lZQLaTeATK0wzawkPAAA+dcA/3Mc qevRU+yn67oGDIYaTym5K4rCjbMaiYNii7rcJvlDAP0XLUKaK3+66pEa0KM66hYG 8T7grGajtBy4lkXFhAxaDMLAAQQQFgoAcwWCYfQI8AOF/3gJECWms4G2IcCCRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4oECnql9m9wDR9d zvdn2jkZHhDWIKuuMrr5OvKoIoi+FiEErwl9pNtcDiEW71g7JaazgbYhwIIAAGTS AQCbGst15LFCB8JtzDtiQaH5l3Or76YaBoF/Lfm1sJ1NPQEAv25rP1EJMDm6Fy4Q cpHPB7njpYYJN+IQB67BBbfr8gDGMwRh8/a0FgkrBgEEAdpHDwEBB0A26XpntBDd PpnnRtmca+JNJv+7JcgPcsMixqkecirHPsLACwQfFgoAfQWCYfP2tAMLCQcJECQe s3o+kxZ4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZw7a vCCKdKaBkSRryTdlPojHcYn9xxKgL38nocTs/hvvAxUKCAKbAQIeARYhBANvCVbj Q2uxDQMMiSQes3o+kxZ4AABepgD7B75TSCFgGmO3LRvWv/uWdFaQFRxGLD/4Qxiq i5oQun4A/0tE7gwMfKtLRc+hsxrSoBhOnAlGqbi88CgTqzrXCFwKzRI8dTEwMUBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rQDCwkHCRAkHrN6PpMWeEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdj8iLrMwI31rjgf38tWEaE SU2xsXTV1w/Vamb+QsQoGwMVCggCmQECmwECHgEWIQQDbwlW40NrsQ0DDIkkHrN6 PpMWeAAAwSQA/0eC3XOJU+f0vTNtfvw+5x6gZ7OhQ5H/9i0sWTtmrQktAP465Oxo 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 Dzey2m3qPh8LCE/vy729mpUVLQyhQoYUgQPNEDx1MkBleGFtcGxlLm9yZz7CwA4E ExYKAIAFgmHz9q8DCwkHCRCrPa7YCaNfeEcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcVQnipSbCKCCdkGK0noBjwSUOhB+JRnHqPWGs0cZUF vgMVCggCmQECmwECHgEWIQQGGPhQttDEjb9Aa7+rPa7YCaNfeAAACIoBAI/iHVtb lWxbt8bSvAVMlezrqntj4mZ6Yg0mDKzA93cMAQCqO7AkHSGxqohZ6VGRkpjv35m3 DuTFclO8NTaXEdWEBMLAAQQQFgoAcwWCYfQI5wOF/3gJEBSRqcK95vHcRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7U7oYYSPTW422x1X9QF T7Uf/YujVsoqSfHgl3JK1MUGFiEEtVeGJ4CpdnbMMvS7FJGpwr3m8dwAALODAP4n d3RovCXervVP88AFjJsRy+FU/8oLzpMNJcO0vL64uQD+O64WvE1+PlhEAICE8dNN IzmYUXFvCkHHI/7HVgDP7gzGMwRh8/axFgkrBgEEAdpHDwEBB0BOKRMiFiHc2WkF s/PfGFY2xe96lt5wFnIx2NZwSVKGyMLACwQfFgoAfQWCYfP2sQMLCQcJEIZepxI5 Er5TRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7LFYz9d K6b/amlgRmz5VaxjJvKbWWiRNgMvvQiA7cfaAxUKCAKbAQIeARYhBAdOCDYn0e1h hIb7GIZepxI5Er5TAACdKgEA/m9DEtU1OoztH9NgadL5mswVMATSX+oqnJrujmVW He4BAONel1lOBhprnZYA3BUexw7TgVsznnmG+235IzZMe7cDzRE8dTQxQGV4YW1w bGUub3JnPsLADgQTFgoAgAWCYfP2sQMLCQcJEIZepxI5Er5TRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9RFMsw2JJAXej9MWJYI8Wbgt5+y coGrc4/h60DknnX+AxUKCAKZAQKbAQIeARYhBAdOCDYn0e1hhIb7GIZepxI5Er5T AACRPQEA5GAMR6nW8FiakFg42I2S0bdIJiIQVmrblVMjUVcPgskA/0Gk3Pdp3jlK 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 Bv48SPHTEu/8tlH1a5fIZzoVDvzrBM0RPHU4OUBleGFtcGxlLm9yZz7CwA4EExYK AIAFgmHz9rMDCwkHCRBj/WdY/xFhZ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmclEgXGlvmW2RNH3zxbHF4w6Yr0WrEPcMDtAomn2yvT0AMV CggCmQECmwECHgEWIQQKVVMgmFizbz6g76Rj/WdY/xFhZwAAZNcA/jvfN7D7E9IN z0/ewKnRD9vX5+QieNiNgYoHFpsc6rM0AP9t05H5m/ubc2Fqi3WWsiuFo6KOWwC+ GS8iF6UvI45OD8LAAQQQFgoAcwWCYfQI6gOF/3gJEIZD4MtSxaeTRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzVKC/Q7QUKXa2ps8kCHblsL k5hvrmcdPbLRgo0Lr0ULFiEE/wk+Zsz7iAQZMRUFhkPgy1LFp5MAAIoWAQCisulN 4ppvEIbYCA0dhJzsdcypYHw+wd/BQOiEV2rd2QEAm51okerOJ/gr2+KovwX735vf eVgkaSlsfsl02N31OALGMwRh8/a1FgkrBgEEAdpHDwEBB0DENLlqYlj7YmtY0IdZ LMBvKuQKk+tbyKaJDAcMh7OMg8LACwQfFgoAfQWCYfP2tQMLCQcJEEA3AtiaPNhS RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ39CbU78o7dy EHdCx9cwxJkowHV1bCQ9mS/e/fOBpQOQAxUKCAKbAQIeARYhBAqyBjOm1ja4Azfv 40A3AtiaPNhSAAClQQEArWdosXH/xVQd1oCk2XSwKGi/NB4EppKf2B1+liSyC5MB AMkSLy+OvdmvFUMtYGkx0VdiYA/QAccAfdAoF9Jay/kHzRI8dTEzMEBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmHz9rUDCwkHCRBANwLYmjzYUkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfRQoivXb6UVq+ZJcdmhCo67SIW76kj 5Sv2mHw+koAsdAMVCggCmQECmwECHgEWIQQKsgYzptY2uAM37+NANwLYmjzYUgAA YiUBAM4ou5WJmYTZOocIHUxwXYDYXNjI3h1mHlk1wbpzbkK3AP9lSxCN2VhU/cAZ WpPGZgHqrS0dioHGu7sypm4h7QvjBMLAAQQQFgoAcwWCYfQI6wOF/3gJEIpKpsS0 et4iRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1byKsTy SphaSKh2VmE3bL2DzzHxxs4nYtNtre15TCOUFiEENjKNqerIXbRoQ/oWikqmxLR6 3iIAAKFkAQCAFVNXKFAXCvHckoBsKddFSfL7vXsoU+ePo4istcGv5gEA+szAspgL alrmKqV8Fl0XckloKheiL+5ffDCFt0LqewDGMwRh8/a6FgkrBgEEAdpHDwEBB0Av srsuuiozIswc+avCQziHcCpTpHbk2piFqg+jaX2JB8LACwQfFgoAfQWCYfP2ugML CQcJEG7UesnnuGUYRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZws79LiG4lx8UgHkD+xQySGFCL2qQF5nlVTpZ+jDCIb9AxUKCAKbAQIeARYh BAubGPsH8p6J0zqgqG7UesnnuGUYAABAkAEAqxIMeEHSmY+6IMKwGOha+QKPZszt pfpEwNOQGXp7HogBAODG2bZmCrr1W9KoQS/Ggd/bsCF41MmnzDop8xkzGOYGzRI8 dTIxN0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9roDCwkHCRBu1HrJ57hlGEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcXaofhbQ99COU6 gamEbSYYPI8B8gJNqXkpkQUNU4dsLAMVCggCmQECmwECHgEWIQQLmxj7B/KeidM6 oKhu1HrJ57hlGAAAuFEBAONgp1iwZaUyh0BiFxOvCXOkLhxlrMX/srJsuV82IEH3 AP4yX7P7Br081ET+5DhwcOMt3S42f5lcx3lc31qBQ9z6CMLAAQQQFgoAcwWCYfQI 7wOF/3gJENIr1We2C+QeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ/ob8Zf1brM7Xd53/utoL4btdXSX6ukckHJ3Uz4BxdmyFiEE86lUcv22 XZZewsTj0ivVZ7YL5B4AABhiAQDQhVpe2FNj5+64QJOep+zRdwNguO8SER5rWLbm KuQbEAD/d87L0cinidyz55GRBHEwo084PRk54VpMsAAAzfqoAwTGMwRh8/a3Fgkr BgEEAdpHDwEBB0Cc0c3ddSCbysDnileDRG1K6u4unHWJV63I9MAP5WVYWMLACwQf FgoAfQWCYfP2twMLCQcJENlbNwggriF2RxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZyIQ3lREy8kTQF9xspzxoracE+jSXerdyO5J+KroU8/v AxUKCAKbAQIeARYhBA69lvQZWLE/j2m1/9lbNwggriF2AACEiQD/R16PcnXxFHWB KTRDV+YpiSxyPnlCZByRm1/pX0e+0+AA/RlE+rRq+q24tiUAdcJpgCXfkmf6bwqn 96pZYDPRcpADzRI8dTE1NEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rcDCwkH CRDZWzcIIK4hdkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcoHqpA4CJOwYuovT01DGs+pD/mCG5oLNoHUFAMuQ1fzgMVCggCmQECmwECHgEW IQQOvZb0GVixP49ptf/ZWzcIIK4hdgAAaOYBANK0bz46mqAVon91f+t3mOL9aShE Triav8o2P5qFkbxOAP9mcAJ3CIfMHzTg4t7t+oHr1GuISIyi6Kzq3N01N+T3CsLA AQQQFgoAcwWCYfQI7AOF/3gJEMQuO62q+pGaRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ4Htnf6MenhnYhHaT+iDhHs2FHOThe2MyydjYcD5 ZBezFiEEkf5WviXMs89UOd+qxC47rar6kZoAAEKsAQDBrjFnop1g/ZYjOiSsjnff wuaFtG/BHoIm8HdFAVvnzgEA/RpG16TK3u0XmjeM1MRxUOmjx/rR9zJ4t6PB5JCW xwLGMwRh8/axFgkrBgEEAdpHDwEBB0B+oadf4l398/IIDpOJ1ujQDmLXr19Dt0QD BymvTBjPnsLACwQfFgoAfQWCYfP2sQMLCQcJECT4DJXVuDEORxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyQTP7pcw6VF/OSkSBxaSE0Bxqje CmFdcjmvICxOUdKyAxUKCAKbAQIeARYhBA/fr2Rga2xyvxyUDST4DJXVuDEOAABT JAD8CUqru6adcmYN2BVuHK6vLw7yArJEKybBkL6gUybB1ZwA/2aqI1du5AEWIDoz Ma7M0sMwANmfU0A1T/bYsx0jCDUKzRE8dTM2QGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYfP2sQMLCQcJECT4DJXVuDEORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZwMlf4hJaYKyyPgq9JtWvmVQuAiQHY5KTVOQ36o99RhOAxUK CAKZAQKbAQIeARYhBA/fr2Rga2xyvxyUDST4DJXVuDEOAAAZ7gD8C/M+txJsDtoK J4KVAEuejBE6jXBSSeXI/U3DcBHshcUBANtlC4WcbNsnyo2E82HTVd0ygoVWWj/y rCUAiMSG1v0DwsABBBAWCgBzBYJh9AjoA4X/eAkQK2SDpYJ1bG5HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnKDMFnl/yG7mDsKZyWxVNzhGg ZwBiEMs9VOSThh9+9bsWIQR8P+36sILSNqkYG44rZIOlgnVsbgAAS9UA/AuLUjFq zNw2mSMrb0bYIzKD4aVBxJRcCuW3CMVhoZ5bAQD7TVhYqyEAmIi6pk3yUj+HVC1A xf1P7PnHJlSaqgc1AcYzBGHz9rEWCSsGAQQB2kcPAQEHQD8P5VvP6TGpRrUI3Wpp 6SetFpKZY2KTDaWDiMEDaJqMwsALBB8WCgB9BYJh8/axAwsJBwkQMm/+vVBb5NNH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnrT0FgQT/Ky7W dtpYsIoO8MQP4GFLRHIqSSqvMM8BstsDFQoIApsBAh4BFiEEEkdgEB75SLDp7CTZ Mm/+vVBb5NMAAN0sAP9/BLybNdeVAm+GbQG3aMQdsfJm6FMwNsaNrTDMmpAhlQEA 4YpzNZZzr9J+QfWH5F+cmeWx2JgmTFkrncAMTshHXgHNETx1NDBAZXhhbXBsZS5v cmc+wsAOBBMWCgCABYJh8/axAwsJBwkQMm/+vVBb5NNHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnVTT/4YdthTHUnoONPsUe5TBkOGzCNnur /Fa4yWDGIE0DFQoIApkBApsBAh4BFiEEEkdgEB75SLDp7CTZMm/+vVBb5NMAAEPh AQCy+ttYdJm7MAyOx2FC+Jzdx4urEKZVupccVwuxCe0NpQD9H5j8+XAbJZyiBFvD jRs9ANpz/qw5L3GwOXom0eiegAzCwAEEEBYKAHMFgmH0COgDhf94CRDpOIhFbTPx SUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc7dswv96So /WmP2HuXA1EGNbWF3bZyx+tWGmc0+/WM8hYhBCvyQ5keW2REhh/GYuk4iEVtM/FJ AABLmQEAnUNpXUbdDhv1mBuEzQgphuW/fITuBBh/FQGpb6ARlpIBALiJzyq/lEEb qTv3INv3DP2OmIBTY9A6RDzzep7qf9UFxjMEYfP2rxYJKwYBBAHaRw8BAQdA5dHB DkjwLCS3cFkX9fKB0Nj2+7ZCa5v9W37XmbKj6OPCwAsEHxYKAH0FgmHz9q8DCwkH CRArLVbPC5QwTkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdLBZVCrZk4lnEZcgslkb9OrxwPlivgkTSMS7TjpmKjpgMVCggCmwECHgEWIQQS ySaFyiqGe5P9eXYrLVbPC5QwTgAAskcA/1n4uSpGFSOm7L0O7KikNTNE9JZqChzc EAKz1la7Pj4rAQDjffcY9t5DcQ2ZYwXEDu6lac0FvwShU6/EJCEqiyR2Bs0RPHUx MEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9q8DCwkHCRArLVbPC5QwTkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcgIHO/tCXcREMLV8qK M0Yfhr0WxChl9eDcChGnKlPoNgMVCggCmQECmwECHgEWIQQSySaFyiqGe5P9eXYr LVbPC5QwTgAAXJUBANTSrc8/UO7Nvh1KHwL9529ZCqFv+UR15igQIWE0l4JDAP97 /k/uDHYP9NzOLLjR+bnLP6lQ9TaJm9HCTIrrQCovC8LAAQQQFgoAcwWCYfQI5wOF /3gJEOkXvCTS1T95RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ/JGss+9J+AZ+Aka2eLRPKoKINJOls2x49VRJtcoZn4PFiEEf5RSRKIKdOG6 UL5z6Re8JNLVP3kAAJ43AP4ojqa8c07K75Uyi7SxQ0SWdmfRKYAKK5uA+x4h6Mba KAEA9LaRbVDjpEOEiMRbuYGswNR0V5PlW0C6j4UTO3aqrwzGMwRh8/ayFgkrBgEE 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 4EW3SkvjaGaWZEObakBCAwnCwAEEEBYKAHMFgmH0COoDhf94CRCIa65W+lXOJkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdr84m+U/VIgR6j hF1yWL8PVOVIr+ukaggzUHgZepiy9xYhBDQ/LG+duPnuTln1wIhrrlb6Vc4mAACN ZAD/V8Q/YPqWI8mYhYH6S75Halq9V4cAeDKgiofiT6kt7IYBAJEHKEs79gJnw9sr kib8xUAN/BU1gAR4m2Gvisd7WnEBxjMEYfP2uhYJKwYBBAHaRw8BAQdAGYrcOQV4 O51BTSnUf4wmMEmgp64aE4hrIAn015ZbBRzCwAsEHxYKAH0FgmHz9roDCwkHCRCV 80UTuoh+wEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeF MuFu3lSyJbi3CX7egh7iilueOVownHrWhHQckE7dtgMVCggCmwECHgEWIQQUqntb fZCIy71f+MuV80UTuoh+wAAArWMBAMfx7PQsNgzQQKUkcdZvbJbwn4PVrq3bYKNM 6Cl2zEeXAP4wR1ql9qndi3gFMY5/kABDDx92Avn5VTxYbJUUSjnaAs0SPHUyMjRA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a6AwsJBwkQlfNFE7qIfsBHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnIA522ksZVzQxTiTyZPLz o16tzkGUuvsFYGC+gukU8toDFQoIApkBApsBAh4BFiEEFKp7W32QiMu9X/jLlfNF E7qIfsAAAH+dAQDJUMHJZnGKU7G44pf1CYEEfcfvNCVvjgDd4rooXAi9pQEA8Dps kyaRfIcnKyMhDtTkqOv48sltfn4zg4MaqW+UVgrCwAEEEBYKAHMFgmH0CO8Dhf94 CRDbC4Jkvklld0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmchKmjmvRbY4Rx2MxhyqdX88GihpJajnWeUp1h85kTtMhYhBPKkrjq8beBHXiK4 NtsLgmS+SWV3AAAJ3QD/Sfs/95Q4D26CFIrccHNe075wqkCY3+aY+W3IjBYZEyoA /0oNgHgKR0oDokxcPfq/xhRvsY87/KrHjuqCwPJX4ssPxjMEYfP2uBYJKwYBBAHa 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 DbBL15W6n0/OXSbTjjnsGw7CwAEEEBYKAHMFgmH0CO0Dhf94CRAB78nZALVUDEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmenW++SuXLQcw0R L6n8xmWowM8Q8BfaXVtIVA1OvbdWaxYhBOeUfjgrEv5ii9oTAgHvydkAtVQMAAB3 1AEA7P8xr/XztXpRCUZOxFwiYbULgm3MfKWuBFnrc64NisEBAPFfO7tK7b9xQHPZ l1RMP272ROk0v6QQBvUpcMCfiC0BxjMEYfP2thYJKwYBBAHaRw8BAQdA/iTfAbvj Uxi44GWAigiKlZXJjsOAHQWVKec0ngzsJSHCwAsEHxYKAH0FgmHz9rYDCwkHCRC1 yxe1UMwN4kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme1 1OycuiE2zp6kf7jaujcu9/l1KVl0ufhMR3uKXZErUQMVCggCmwECHgEWIQQX3kOS oWXcgs9Q6Hm1yxe1UMwN4gAAnsMA/054WYa670KSmmZJ9KJgDuFJgKHfSYe5l2Jj kjQUy8B7AQCUFygLitTk0WbbHot21qSBJFyfsHg64PK/RZOebQtmCs0SPHUxNDZA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a2AwsJBwkQtcsXtVDMDeJHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn5hvlvQuN1wioxW4AdLJT dqu/zafYWoVqlQpif0IvM2oDFQoIApkBApsBAh4BFiEEF95DkqFl3ILPUOh5tcsX tVDMDeIAADarAQDXqJskkQHjEoHPcnQELXBrdfX6uNxbGG6x3HiiSfTnigD+M/Ia eI3rmGg3wkwGBe9zZiOi7DxoLygKJRHAklABugfCwAEEEBYKAHMFgmH0COwDhf94 CRBlPoEgTDChGUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfR/f5N2O729jvg75W9aDUHcmjeYy3yhSACfk3hc6hppBYhBLzR+5p1JOay0a25 IGU+gSBMMKEZAAAMOQD/QBWn3WSlnbVoyKb98rgwlPXYvEbdtOXOvoVtWODzJa8B ANTki728q/RT0lG9JTuD22ux/yqrmAmxqTbUrSO4wcEExjMEYfP2shYJKwYBBAHa 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 Bm8xUZQSy5Gv1EK0WiwOwsABBBAWCgBzBYJh9AjnA4X/eAkQ+QW/h+j2CjZHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnexsQMsem+j1AAGkL oMUbufbtfLgTGesOc2MLWj4e69MWIQQnDj2eh8oJmdQizSL5Bb+H6PYKNgAA4dsB AIZq80SVcfu+1xZAVhSuXcKjBh7GlUYgRKvMryF9p5XfAQCLo0qkS/kgb1aB4lR2 QuRiUfmnATIYgb/0FeFHoW0gDMYzBGHz9rYWCSsGAQQB2kcPAQEHQCs+tLlqPfbY ubwg0aXPBzgdjvwpZY130l4F2EYjpFaUwsALBB8WCgB9BYJh8/a2AwsJBwkQmJUZ /rFvtLFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnrq/G IqqF4THpUR5XlBLBpRJxvPl9ihOehwjcg3ILaHsDFQoIApsBAh4BFiEEHb+mg/J0 T8z89G01mJUZ/rFvtLEAACmxAQDVP3CLDr2gpY+leBfsJYtoGoLJt8pFI8Id07ur nk+qdgEA9ZFEVo/vwZvypBXfL/kgBtJwAytHgqs11Eprq9WDsw3NEjx1MTQ5QGV4 YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJEJiVGf6xb7SxRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1SXX0BnHqmF6YYd+4VEa/sA nygT2M9WAGz3Xh8Hk07VAxUKCAKZAQKbAQIeARYhBB2/poPydE/M/PRtNZiVGf6x b7SxAADCSwEAmGTdDdIS1ozy3R5E/JE9bimULvUi4ofPnL7NjO8DgQ8A/jS0g934 sgb13XACPfp154rQoRsm02CkE+04aJU2U0kPwsABBBAWCgBzBYJh9AjsA4X/eAkQ dkB2pJWNAuZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn vWLnhRg4OWs7pmXC+uO9++ODfPrrAqGK2Bn7EgBbbwUWIQSDe1JMSMgh+yPEMxp2 QHaklY0C5gAASPsA/2L6d+YMIUg/Js5mPedOcIR1GkFrkSEtSxuTqLLifTB/APoC v42rm4H/+Bw9lh8DaQTxwnISvRs/+Jhv+agbc5+XBsYzBGHz9rAWCSsGAQQB2kcP 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 ETpHrxO+5Ola3fYlBMLAAQQQFgoAcwWCYfQI6gOF/3gJEIVidl2IpLs2RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0GdUKcQbfjrbARI36Sz dLmJfLTHXZNfHhWBEe9Jw392FiEE7VwHqCDcsqptr96chWJ2XYikuzYAAO1IAQD5 NXg8dQjS5dyr14VuuxtomdUm6w4H/P4H0KCZQYblWQEA1Mo/R3ZDT3sFmA49XLsr Pb6fZKkCMjNaOxQRs3eCxAzGMwRh8/a4FgkrBgEEAdpHDwEBB0CZs51fTcR0cnoF Wl/TPvL4BH/AbGLGzTAJsBBnPXgzx8LACwQfFgoAfQWCYfP2uAMLCQcJEDgI76kl iDf4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ32WeLw/ vKADNwFL5BcbRu3Yu/q4gL56klOByN6XcGW0AxUKCAKbAQIeARYhBCMWBa7jR2Lz u8js9zgI76kliDf4AAAHbgEAsoIgmUwcfl9EVYvwqvzr2KIwJDa5T8LINXKqcAdf JtgA/j+2yk0JMlQNPju+l3IilyxMUOHBdsDDPg1Xa822jCsLzRI8dTE3NUBleGFt cGxlLm9yZz7CwA4EExYKAIAFgmHz9rgDCwkHCRA4CO+pJYg3+EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc9CLlqpJKHXuKnTHwJWYRJZDtp Ky2TTtRLKpmSfqwRSQMVCggCmQECmwECHgEWIQQjFgWu40di87vI7Pc4CO+pJYg3 +AAAqMwA/1wAIIU9XgV1BHMvcnm76zlcRutp81QLoLVvBlwsKbHQAPoDCA5+HXhB L1mZWwabc1k3gcz5mwPe9ZBx4sGKZK8LB8LAAQQQFgoAcwWCYfQI7QOF/3gJEMbT g2xugXeJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1pk 2FQeNIs3kQZ9BjorRtjvMnz2dyRpwOI+ZGFh7isCFiEEP+qwj8Y4KcCAQSy/xtOD bG6Bd4kAAFIaAQCpWJbg6pp3oWhCP5wu7nulvMaxG9L3KWNz/dXuUr/hUQEAm/uO MW5SUNG8cbp+UXkv6liYKLa0scmVP04ZZICYyArGMwRh8/a7FgkrBgEEAdpHDwEB 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 v5DEAzFkelU4M28DwsABBBAWCgBzBYJh9AjpA4X/eAkQpMceRPQztyhHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JniQq3jn+me0YyhsBiVA++ 4oq6X6q+uVPga1AyRxHAOF4WIQQv1tD2gLVfmvEo28ukxx5E9DO3KAAAjH0A/jV9 tWDWnrufs5h33XYAQH8pMvhf+lAQYHbFdE2i62YdAP9d9k8WQRYQufa7MJn7paQ/ 1f/6mihRNMLyRfjGmexxBsYzBGHz9rAWCSsGAQQB2kcPAQEHQE0IX9HAkqg4w71w evteVNTBgTe/ezeYPeB/1bV0c8/zwsALBB8WCgB9BYJh8/awAwsJBwkQ+QW/h+j2 CjZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnoTd9DSEx kmce7jCWeEfDUw3Cw/piAHqpYceGkHe/PeYDFQoIApsBAh4BFiEEJw49nofKCZnU Is0i+QW/h+j2CjYAAEXaAP4voknB8KWfiYC6DutrRcI2VGSxi+RLkszEVVPSEYH2 GgD/eCReYEjL53+7SrcA39wJ3veklGCxEu+vxvqIbBPNlArNETx1MTlAZXhhbXBs ZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQ+QW/h+j2CjZHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnRPL15mhyi3eZKABvMbmtYKNEphUk 6ttD1EticJJNP38DFQoIApkBApsBAh4BFiEEJw49nofKCZnUIs0i+QW/h+j2CjYA AKOkAQCzYn6XPf56Sym74BZ0/HQobg9T+SgpRy5q4TxKvXBFSgD+JgDUfFxAGBsB bxHbnfInQyX1wCos8pqRep4iuuFLtQ7CwAEEEBYKAHMFgmH0COcDhf94CRBsjjW1 x5o+QUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdFZW62 +IGyod6GNubcI6oa2xlQ4V+4m3T3i9gkfiqAVxYhBCC0gf+3ty9ngbpJgGyONbXH mj5BAAB7FgD+OaCV2OlIqwFhrfe5HQpwx18qzXSpQx+Ckc+l8H9NGEcA/Rr/XGlq ISNVuUeJhTNNKF/vSB+I7Cym4OqF6ham37MBxjMEYfP2txYJKwYBBAHaRw8BAQdA KEk7DZBlHyr8rqvtDbLtIWyZajEFmUE1Boh/LhMS8m/CwAsEHxYKAH0FgmHz9rcD CwkHCRDUqRnm9Z5NC0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmcANHNqwBRV+AE62ytIZhlOZKPi8tul65BhDHS9xpQJ5AMVCggCmwECHgEW IQQnzoPWjGaf5PG4yTjUqRnm9Z5NCwAAMZwA/3Nd1TF5f8/FItBOa6g/sXie/zAY 8HAipQAy27e6YpzSAQDKn3Vhpol7GVJ97XLoUqTRpw2D94ABbuudua0S5l6KC80S PHUxNzFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a3AwsJBwkQ1KkZ5vWeTQtH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn27ju29iPp33t IWzqb4UVu2KFSEZqa8s7C3n3fwRgTbYDFQoIApkBApsBAh4BFiEEJ86D1oxmn+Tx uMk41KkZ5vWeTQsAAOdcAQClrjm2cBaYYENDRDtl+K9o8N2Wg4bmXTGJURH2QUE8 VAEA6Tp7CvC336K9DI1j4SLiGG/9F8GHSJcfe2A6AhSKeQ/CwAEEEBYKAHMFgmH0 CO0Dhf94CRCH+rU3rq/mbEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmcnERbFMvhqkp8/wXb3fkP/L1PpXW0ulb+n5LcL5Ksg8hYhBBe1WxB4 0oLHP6LnYof6tTeur+ZsAACKyAD9HlhW8o8TdTdlZUwtJ6nJf5pSHNw8bkcLL2bJ FvXNpF8BAO3Gloxj8otiTXHsu1lU8NSZD79MA97r/ceGU8BL+20FxjMEYfP2sBYJ KwYBBAHaRw8BAQdAyT1LxjsYA+MW1j/eqkZmhoT+cKrorT9rv93D3rq24kDCwAsE HxYKAH0FgmHz9rADCwkHCRBDR02aTKZN40cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmeDzoTY1nMYdKLIXgQsBxQWecdFt+Vp7R91DhfzLWLV 6QMVCggCmwECHgEWIQQn32Wa7lc+MNOmW25DR02aTKZN4wAApj8A/0lXZtaFAhRP chWOmCrzUaAOT+bicS//nSf418IshSUbAP9w8tpM8zmlWF1vtBYRFIJg8RK6EK/Q fOxEYGKFxI9ZBM0RPHUxNkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rADCwkH CRBDR02aTKZN40cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcMxlfSrS0RcRSY0KAql5gWVyJlbvbqGDtLadxH+QPJfQMVCggCmQECmwECHgEW IQQn32Wa7lc+MNOmW25DR02aTKZN4wAA79YA/i9cCQbUrC4y+RydpgRT4Igq796b E86YCK3ucFC77NpCAQC/yiwXT0lWkPGE7fNcDnALG67k5m8nXevvHOI6aoI/BcLA AQQQFgoAcwWCYfQI5wOF/3gJEAIRUt8MofhqRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ3RCYSOGwWXWM+Pdyl7PiOKKT/edYJlEyz8gslPa Fw6fFiEEKRq7ddc1vFtiXiIbAhFS3wyh+GoAAB/KAQCndg29g/CeU120YCp/uyuy AY6pVTum2DOFUSa7OKRnBgEAqZ90gz1LAmYqAv8VHjJy8hKlhrSo82SBuvbwOrjy +QXGMwRh8/a0FgkrBgEEAdpHDwEBB0CBVhmwB+3SmT3dDeXE/GUPQE2WSH7yAigf c0zsQ7JSx8LACwQfFgoAfQWCYfP2tAMLCQcJEOLZ41C3zz2KRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2j3HiCZc2gAKJP0QdLcY/j/Q3l8 /cIL5mg6bzLfLtjPAxUKCAKbAQIeARYhBChuxdTl0dE25UyZb+LZ41C3zz2KAAA0 ywD/cUSJ/UrIvcCXqOEuRpblWskbixeEjUNjcqZmPv2GbNIA/34UdOIKCnGbU6Z2 MtgPHjmgYmcrpQscXfn2U1Cp8z4DzRE8dTk5QGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYfP2tAMLCQcJEOLZ41C3zz2KRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ3cnjVpFOqB5voaLW/B5ivC+MN82z8nz5yWfc1dZKIsdAxUK CAKZAQKbAQIeARYhBChuxdTl0dE25UyZb+LZ41C3zz2KAAAtfgEAim4D7q/GmBE2 tyrqLV1+O5ECh0nbJLsDmJyf9iV3DTQA/2W3cIPVdK7R18n4Ed/TsLP1MvmXIkgh 1Jq/F4uFYDoOwsABBBAWCgBzBYJh9AjqA4X/eAkQe1/YmQwcysVHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnMRHMpYqgyt7i3fXmevCKAG/l WgdROLucgAijQV1tayMWIQSKsR5PGNxX8rpAC417X9iZDBzKxQAAoRoA/38bzsB2 s2vG1F3zII+Vr1Lu04kwl5V6FVSN1GbWq72tAP9fqWCQiBKvH9GQghpB3M0LkyjY Px5k+IdTzrqz5tbBA8YzBGHz9rAWCSsGAQQB2kcPAQEHQP2HJSINrt1nZtQV5bNr 4Z6rqWkYo87j5MWbhuo33FipwsALBB8WCgB9BYJh8/awAwsJBwkQAhFS3wyh+GpH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnVAfqTXEjAiGR 3x2136ZJ7+QG4ncdVQbJitcV8ys6qS4DFQoIApsBAh4BFiEEKRq7ddc1vFtiXiIb AhFS3wyh+GoAAG0SAPkB4G6bl1nD3Qs91/qBcmldWbx8wdmFl9OAcDOiQHtl4AEA gvjlPRwtA7cHRj+MezuoQbGnaFsgWZVnm2aOxlGPmQ/NETx1MTVAZXhhbXBsZS5v cmc+wsAOBBMWCgCABYJh8/awAwsJBwkQAhFS3wyh+GpHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn887fbLVIju+zF4Vr5EP0I4H+UiNTod12 dmPCQI5En4sDFQoIApkBApsBAh4BFiEEKRq7ddc1vFtiXiIbAhFS3wyh+GoAAAXQ AP4hskg5/QqdqWj0ISqGPFv/vHWtEJKCvCz0ji9rxoDUMgD/dT/fOQnBvLznkRAG 9lBAMjneOo1QJVDi2m2JX3cbkADCwAEEEBYKAHMFgmH0COcDhf94CRD9JHWEzKPI ukcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfMAi8Q/WQf WITwkxkIKCAHK0mrTAnZFY94F8xwmsYDfxYhBGbQ+VMl1KAqNsFCZf0kdYTMo8i6 AAAFmAD8DYhn2FbqJfCNtONV3hNEwAQujABj9TucWzReIxd7jzQBAPNBtG8jj+Tw JvZHiEonVzu1sOs53VndpwsgutjD8AkOxjMEYfP2uRYJKwYBBAHaRw8BAQdA0j5M EC+sYktQMIyCxFnMnuF1Ac1udY8LNK/SGq/ajX7CwAsEHxYKAH0FgmHz9rkDCwkH CRC9nmkNWf5Tg0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfOI74Ee9eNhI1PfCQPPymlbpWeKciwQlTROOJBCWI5bQMVCggCmwECHgEWIQQp qqWvfPlB9DB96Wa9nmkNWf5TgwAAy1YBAIFDVusHjP/spAFxi8MJ9JLWJh7LsJiv UgakeAU0v23rAQD1HRpYgxWlNj/kzrk7piKrl0Qs96DkfAZOzwO/xCxxD80SPHUx OTVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a5AwsJBwkQvZ5pDVn+U4NHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnTVI9mwCQTQh3nvy7 p0JLcgXpYpiug3OcnlhKhiW9Q3gDFQoIApkBApsBAh4BFiEEKaqlr3z5QfQwfelm vZ5pDVn+U4MAAFF4AQDKOfYhDEl5WuN5mUtUNRJFTs3SIATdJGvHF3tDrd8kewD/ eP9PQYfldBcFwGQi57zpmtLZWpmWAYY6uqOc2w+ongfCwAEEEBYKAHMFgmH0CO4D hf94CRALFJY3H9wr5kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmcafwiyDmVXTVCwZ+OaUAfIwnvewjaRBNWWOz68/jV4iRYhBAmXPfYzRnMl m3dLhAsUljcf3CvmAAAwPgEAnwI+wUJt9+FVIdiT0s3zStK8Z/xLP9Oi3HcKKDhM TssBAKsZo3U/sOZaH9dGvhg6h/21Jl1bxVrmCp2sSjY4dhMDxjMEYfP2shYJKwYB BAHaRw8BAQdAAMLgCeqmpYRS1uniGaEQbdw59fTBgOtjBc5+L6NMOznCwAsEHxYK AH0FgmHz9rIDCwkHCRBw5n8+f2+81EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmemIkg2yXvkiDd181VHfKel5PJe5qVhuU78R5xmY8eVagMV CggCmwECHgEWIQQp/XscaylmPPpkMGZw5n8+f2+81AAAgZMBAJGoo33WahhPRVMR EmKpE/NYYhUW6IViQ6Pb3l7nymSlAP9tab2e9Sb9q52TbAWbA3cdYre0y+s4JlP/ Nkn6VZ2fC80RPHU3MkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rIDCwkHCRBw 5n8+f2+81EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcP dEuvWnVQMNCUkWhExGHCpI7n0dvTsAOBJ51hw6SAEwMVCggCmQECmwECHgEWIQQp /XscaylmPPpkMGZw5n8+f2+81AAAKKIBAJQIxJwSTOEnC0jAUCuR18gYjYIiDVkM qwDYczwztv+tAP44um1qz8dZ8AnIk/tXB529aKkPba4t6M/MHE9GHv8HAcLAAQQQ FgoAcwWCYfQI6QOF/3gJEIY3as0ZZL5IRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ3m3iN9bgCTyVP92QXgv2Cya4cmDTl5j0M65T6JPkeWo FiEEZt8mkP6sYGwoWqTZhjdqzRlkvkgAAHnnAP9RVsNZ9k9Qa17teKCzgcBuWkBi ON8SLRjakO+FjsfjhgD/cSgLxyMEBKyZKqHWn+RvRgC72Gj3mj3f27eDiVX+agrG MwRh8/a6FgkrBgEEAdpHDwEBB0AkH0gCV3oKM+BgbHO6yqug/n1DdZalJ22xErnz lbcSscLACwQfFgoAfQWCYfP2ugMLCQcJEAwwQTCoQ/UyRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8bB/ptg6S4lU0NAPLiqB5NTUHA1kcBC fTCms+h6y3cRAxUKCAKbAQIeARYhBCoRtlgy6X5l2qadaQwwQTCoQ/UyAAB7wAEA j2k00GRDvo0CcSTI1s9F5BM2saW6CN1SZBsY5wwMoOEBAPzD0uwVpNKdiByJIWl1 MydSQm8zVKltwKCb7E/tXoAFzRI8dTIxOEBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9roDCwkHCRAMMEEwqEP1MkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfwI7QviFtUB+VFc2OcU1iPK0jLKDZFTJSDhrTjvhO/LAMVCggC mQECmwECHgEWIQQqEbZYMul+ZdqmnWkMMEEwqEP1MgAAoqsBAJZKrIuJfQ41qRcf hxXj5MjbgFSEAVVyTRh1Ga3LxfmOAQCOcWA08Mhy24URXkSQuKsqBktFKu509Aug HHnUuWRaDsLAAQQQFgoAcwWCYfQI7wOF/3gJEG7UesnnuGUYRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZycx7cRTndvTffxG1KXFpAwgHewc +jCkyNsPwK5J5xmcFiEEC5sY+wfynonTOqCobtR6yee4ZRgAALJdAQCp4KbRSeJE HcclEn3DVb+Jxtogsac0d5c7Ydo3/9TvZgEApprTvog7BsrovHUrxnvK+b79d9u8 A5RIlo2yjIVnjgrGMwRh8/ayFgkrBgEEAdpHDwEBB0C64MNkxlwcN5kvRo3rxJwn g+V0rLZbMxeCWnGZWFrau8LACwQfFgoAfQWCYfP2sgMLCQcJEJSlpgmqZ59xRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3ZIuSB5qZC9k5+B MT1DWZBkkKd0py/oAzqeolX8ZJfGAxUKCAKbAQIeARYhBCqM5GndeDuVySpvMpSl pgmqZ59xAAAqpgEAh+2ySuTNon7iumEPZSbgqaJTft+BsiXwsl7/bdW0BvYBAPp0 8aT/7APytvzBcOWbXy0xwTJ1Fnhq9zE96zsTO1kPzRE8dTY4QGV4YW1wbGUub3Jn PsLADgQTFgoAgAWCYfP2sgMLCQcJEJSlpgmqZ59xRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1dwC8puZcLNfIMcL1ROlKsQWpfD0TZhdD8L xZYB3j16AxUKCAKZAQKbAQIeARYhBCqM5GndeDuVySpvMpSlpgmqZ59xAAA9rAD+ L6Sg9q7cSeerqUaN4dKYbvB+OdZGSiGqhiHERyQzRSEA/3XtAXK7k5AhI8a9aJmB GwLiHRGn6rLrD20lnij/KssMwsABBBAWCgBzBYJh9AjpA4X/eAkQv6zxk7NE3vFH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JneIJAxPg19gZ0 zR0aB8l7CT9EARSOF0KaIsrRHC5WCQEWIQTe59MWKRmsislZIFG/rPGTs0Te8QAA DYgBANCjb4zhn+5TC8j5Q+6xeTIUWVgCylAPAv6GNbeqpycSAQDG3qdUyqoAaEpY j9e/l7YAVxSVLsB7AW7pJR7v/EGqD8YzBGHz9rkWCSsGAQQB2kcPAQEHQBqDvLGZ Ur/iRjTDoLt8lVSzOW+sdzw/Gth5s2ly/ADVwsALBB8WCgB9BYJh8/a5AwsJBwkQ amsKcqZXHEVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn e8u01Xb7cKRU3twZjZ94g03wQ+FroOa/fpz+f1VrujwDFQoIApsBAh4BFiEEKwtv 2wS56P86MevhamsKcqZXHEUAAFBWAQCZAEUYk0WgFkY8heJVPvi4PB/D8GxIzE1u VZsoiKQy+QEA4jW6O4W8ry+iLMDxnaBNrfY9gBkNBSA3X19fpkgZ+AfNEjx1MTk3 QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJEGprCnKmVxxFRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwEsI+4ILAeNmI49rr43 gEEyWmEtF4sCjJVJfts0Z4+PAxUKCAKZAQKbAQIeARYhBCsLb9sEuej/OjHr4Wpr CnKmVxxFAAANUgD/W5Lfd314VRrIq6nRXvPfwpKw6EFBc5NlBGqkROOc1WcBALz8 owxwMRcfdcwijZU7tsXNRgC1VpA7Cz2rnG1EoAEDwsABBBAWCgBzBYJh9AjuA4X/ eAkQzCZZQCLH1K5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JngIn5Clx36Br9yCEWgQ4PL0iK7dT7gm3Xqzonk6ONkxUWIQSb2lDYpseFJQUa rgfMJllAIsfUrgAAyaUA/jLeia2h/BfCBnppjicz/NxBrrOtBKnoqXMGfHcOCMBs AP93Dkp9227cigH+jy43WVexUik83B0P9ODwkyme2PxhA8YzBGHz9rIWCSsGAQQB 2kcPAQEHQPEzgy4je7ZMN8GMniTvcYYDupElaY2GhrNhcbKRXwKqwsALBB8WCgB9 BYJh8/ayAwsJBwkQ/vND6nkOIzNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnv35Gvv1b16PeiRIZEIkh1mefqMPfLVU9RqxP92MUxXUDFQoI ApsBAh4BFiEEK14dlIE87RzWOj8o/vND6nkOIzMAACbLAP47+olYdBZ9EwqlVzWC a8TUhlhBhZQubXUnQwGMEZnMcwD/UHDQOZQx7G4vcH80RVPUg2uSnsmHYY/xMohj fbMOBALNETx1NjBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQ/vND 6nkOIzNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn16f8 s5A3aWBWM2XvZOFED2wCyv+taT2k11A2sUUEGGADFQoIApkBApsBAh4BFiEEK14d lIE87RzWOj8o/vND6nkOIzMAAPScAQDCVEtFdo8rWY4t/xX5qtCCBSEh7v0C46vR 8N0o4pmjNAD/Svzb5croJSAlUe7/PyKvecaIuLGyHmrDWALoM0krxQrCwAEEEBYK AHMFgmH0COkDhf94CRDc0HRKvhAiXUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdvKjnNE/JhHOBow0S2z2vCc8FdSm19ho/uESwnr5GzehYh BBNjaKhMflaoZRWsxtzQdEq+ECJdAADreAD9GuEfu1z/BmYpp8RXTffzjVFH6LBn vNhoJ7gaT3qBdmcBAPy6ie3oHECe5mOQTtVkSelvEZK+ivN1hHIsS/XIbL4NxjME YfP2sRYJKwYBBAHaRw8BAQdAg1ZvmgNG63oOmSVAB1a3bD3nFBn8f6tZ+9LjTa3M gyjCwAsEHxYKAH0FgmHz9rEDCwkHCRDpOIhFbTPxSUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmc44XwJHFIh4s8YaEtyp+vsncO2XMPLa7wo XFFr2m9eZwMVCggCmwECHgEWIQQr8kOZHltkRIYfxmLpOIhFbTPxSQAACRMA/1cA az1L3Ud/QzsQM/vZ7BWtGACRwOE3u/EZfSgXG7QEAP9E6EtfGt85Pn8W584kN5W0 9MWYdjeIh5+tEycmrGhUCs0RPHUzOUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz 9rEDCwkHCRDpOIhFbTPxSUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmcgPrMAQ7ewLkOWYur6r1PYKTBVPKAVYB/+ucDtP+CN8wMVCggCmQEC mwECHgEWIQQr8kOZHltkRIYfxmLpOIhFbTPxSQAAnxgBAK1WF0/zAq36FivPotdT m54CN7NIkqr5IOBVfM0YgvjbAQD6M5BVWj46jwfQ90lrXPox0vP5qfJDXFUxvG86 pk7DDsLAAQQQFgoAcwWCYfQI6AOF/3gJEJw0044IpDYKRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+3aQnbIeRerpEq4njnqUEN9zDUngRoh JCAaJ56cm1oxFiEEOBTkZd3c2381LlE9nDTTjgikNgoAAOFrAP44Xoe28QUm+6G5 hqqdNLM64axRkf24dZP8p80XHVQLXAD9FcHT6a0AyrCtV4wLVoP9j11vfbHhG9FS O4WhZKz+eAzGMwRh8/a3FgkrBgEEAdpHDwEBB0C+kBNK5azfUuRO6h+CXwik8ykF v7RDFK2eZKytTu0frMLACwQfFgoAfQWCYfP2twMLCQcJEBtYS6sv2GV1RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwTxbHXj0FAZ4Oxt1Nz5 nH5O6/fb+8oicsTGAPj3U8RhAxUKCAKbAQIeARYhBCv+ENf+6eXfWDO29htYS6sv 2GV1AAAWpwEAz/wiT2k43yUw4zPFw6l+P87y8MxFFZlJPXLaRJ7uMDMBALkPVAfB /kRs77fazpaKKXNv9nqaWZD1eVri8eLa6nAPzRI8dTE2NUBleGFtcGxlLm9yZz7C wA0EExYKAIAFgmHz9rcDCwkHCRAbWEurL9hldUcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmfjZjZXh5Bfjp9ikMNONUv2xBfbQRw/dJKMs0ey SQOoAwMVCggCmQECmwECHgEWIQQr/hDX/unl31gztvYbWEurL9hldQAA/J8BAMG1 MMtRhE0lP5OzNcAfYL2CbXTtwZlVU9hMAyu0lmr+APdeperlrT874PrkJ91HeFdf U8vC/zxMG7t4dTOgU80KwsABBBAWCgBzBYJh9AjtA4X/eAkQ+PDBHZYVJpNHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JneDfzcf5uuNJBVTv6 HgQRvffncbg2DXGqOJZvE//l0KwWIQSpoaOw8SIz1hIICdb48MEdlhUmkwAA/JsB AP5B/lAyeZpCyvAsiyNs4haLLPVGudMTBxUx1M28oACJAQDYlDHor/dJttGgWxlZ CnXpkT6uNI2Syyx0ELQpjiO3CMYzBGHz9rIWCSsGAQQB2kcPAQEHQKGf4xm5Qed6 xJQou5VxHkEJ9Bjmzaw7aslbSfzY5/B0wsALBB8WCgB9BYJh8/ayAwsJBwkQNcLl YsxSjnZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1xlN +zt53M3f5bnGzt7ldTX2CIw/gTP9vZIAmrR+GI4DFQoIApsBAh4BFiEELG58md5f WSLgXRHSNcLlYsxSjnYAAOPWAQD+QHF4i3mhk/Dju1yUhpxCHqGnIr75GGanrYM5 auxCBwEA5LsITQTg8DQ5yM1ImjsBD4XdYybJp8Gla1stpz7vKwrNETx1NzNAZXhh bXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJBwkQNcLlYsxSjnZHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEOnyiOUqJ0VQ7L2lu+GeLE/w 3VAKM1Ofcn2WMHnAoRcDFQoIApkBApsBAh4BFiEELG58md5fWSLgXRHSNcLlYsxS jnYAANIrAQDK6N0EVlGv2w157JD+M5dSMVhjm6/TjDmO8aAotCeMjgD+IHNibfM5 2ylbwY5cyrmhCllsmIyDAVyUc1EBQp8XDwLCwAEEEBYKAHMFgmH0COkDhf94CRBw 5n8+f2+81EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcW zWf0B9PmVgfSJC346qBG+B/EL9XDt9+MNrC/EzPIsRYhBCn9exxrKWY8+mQwZnDm fz5/b7zUAADO7wD/WDxEjHKCu1xOY6sN6LZF/SwKlZOlRkd3E+Plz0Va9MsA/juE gh75Ow23m69Pfte1elmgAFAyMLb768TxEUNKjwENxjMEYfP2sxYJKwYBBAHaRw8B AQdARVjF/SooPNBSSqzpCKC3NqoamOxHCmpCPkyK/KzsCH/CwAsEHxYKAH0FgmHz 9rMDCwkHCRBMf9uGRWEbO0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmeYfOxb2RIqcdBZ9YsDPTQlNBzYnjkIyvpjublnW20Y6AMVCggCmwEC HgEWIQQsdVJExrg8qn5IvSNMf9uGRWEbOwAAqsEA/2yuOGXGWdMmEi9Vp4y2sduc JJy7QfzV3tRwQQrj9e7kAQDxscPHiKzdpS28xkUdXwxDfUuhmp9E8vXoVcyJnAls D80RPHU3NkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rMDCwkHCRBMf9uGRWEb O0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmec4ndufiG+ 3vCWwXQ623KgRu1xJO2iywT1OCbYz4eqtgMVCggCmQECmwECHgEWIQQsdVJExrg8 qn5IvSNMf9uGRWEbOwAAgMwBAPkQhHYmj2aDGHkEJGPKwzuHJhK9ZOyEk2+vR847 Cri/AQDwuVorvIUteJt7BoCRWxiK6eo6rRQa1T8MPj/y6rjiC8LAAQQQFgoAcwWC YfQI6QOF/3gJEKEJw/C2vbJYRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ5KcheYhG1Y4W/QN8vnRWtTBlzZjxhU6onRsG4hhqPO1FiEERHGo UFkhXSMdR7HUoQnD8La9slgAAOLAAQCXAbb/jbHtJD1ar6UzEXVg37X8GDph3r5D adpWX8Q8KgD/WjJi+ZkZbt4VA0lkYhdUW93//5/YZzYfdB2tHnxnkADGMwRh8/aw FgkrBgEEAdpHDwEBB0DOYC0Ea9Dw4lipdS3yypbpeFdgddUr6axkU02Dr07kgsLA CwQfFgoAfQWCYfP2sAMLCQcJEB6tEduygUcqRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ4ZFEdFzQu8ulneuTbT5MFAqvmdbZ2AYTBaYXSNY EY9eAxUKCAKbAQIeARYhBCx7dNE4jODyxAAs5B6tEduygUcqAABXAwEAgnM5b2PC iHO90cDfrFFXi8BWQGaGp523hqIVGNebQ5QA/iHfL/aOSghjMwO5QGroHw/G/iIq p46/N0kPlT7aeQYLzRE8dTI3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2sAML CQcJEB6tEduygUcqRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ9PWUk8MeoVj4YH55dKsGQfot2BHAIvbrnTf9GewSgN1AxUKCAKZAQKbAQIe ARYhBCx7dNE4jODyxAAs5B6tEduygUcqAAAXlwD7Bp/MJhMERIkwdezW94jXQuv0 kOLRxYXNzJpGb6oVd4cA/2yiuxyFtU4ozIzSV7nb3281x9eGmuYOBk9CRBuFdLIF wsABBBAWCgBzBYJh9AjoA4X/eAkQCTRe8QRbMEpHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnhqDTFB9p4bGu56yuZ3yibw0jSO8zYUkiFXVn +w0di3UWIQRex0AKc55Xm3BOYYgJNF7xBFswSgAATNABAMOX60Sm9pEhfy2nXoH+ 1P2y1ny/scduN3/ja8zDelHjAP44z8s+FPVX3xFkkKDA2uwe8O5GR6K9rmEyVrhD ISz4CsYzBGHz9rIWCSsGAQQB2kcPAQEHQBdwLrI5eZSdPtJK68pwWZCyMz9hczD1 k+wZVWOCyvh5wsALBB8WCgB9BYJh8/ayAwsJBwkQNgrpvVjFVcFHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnUwvjzQ+cc6N6H1mPv4W611P3 G4qvTbnFlc3Tqf8C1DkDFQoIApsBAh4BFiEELmWlsvcNFtXU0GZNNgrpvVjFVcEA AGWgAP4lNFi+0NkVIzQHQ0uNUxF8r6LwduwSszBS728aA2Zd9AEAm5mCVx5Uxihh 7h1VOPmAubDM//8cd3eRKORYREEbfAfNETx1NjZAZXhhbXBsZS5vcmc+wsAOBBMW CgCABYJh8/ayAwsJBwkQNgrpvVjFVcFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnH21yGrCjEhn5uL/aE3JBinrO3IFREVAfRLpmUIntpfED FQoIApkBApsBAh4BFiEELmWlsvcNFtXU0GZNNgrpvVjFVcEAAGfXAQCynE4UaF5G 0owdkbWWTnsk2DZgu7R/Na/CpenrWRHkPgEAoYUhTeynjuZ6ftqh/2zFRlxN3ogn FfbtSB32RZbR0A7CwAEEEBYKAHMFgmH0COkDhf94CRCUMXsUXO/LYEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfBQDeiLCQJoq4BElNPPmbh 231A3JlrnR+CWc7QdZh9cBYhBDQbtoo2lbPZ7jB9d5QxexRc78tgAADAzgEAgl7D TbLKc5II+ZkpDVr7oWJAfE5EUoMoocwL/oon5JsA/AuoXTiOMMlwqk16IgyKxl2s YE1qXrAEWVVbPVJQKZ4JxjMEYfP2shYJKwYBBAHaRw8BAQdAS7hnL35mxjW04iT9 oCSPsU2BxhjEma7Ctd/IHLXbjIvCwAsEHxYKAH0FgmHz9rIDCwkHCRCkxx5E9DO3 KEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeWN+p6vzkh beVwxdYmksoFziIBCxMu/biZF/axsOr57QMVCggCmwECHgEWIQQv1tD2gLVfmvEo 28ukxx5E9DO3KAAA0c8A/1uAVTmkk/2I+Mut+b9ET1cxSMKj3XstMOyfNU73lNxd AQCH6iJaLlHxRXl5dsRDE2EgBYPH0aFvkjrlwSf36DnmA80RPHU2M0BleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmHz9rIDCwkHCRCkxx5E9DO3KEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJdehXoglscUb+ehqZJrZplRToE2qt ohV8JpdfW1AzAgMVCggCmQECmwECHgEWIQQv1tD2gLVfmvEo28ukxx5E9DO3KAAA iMYBAIfP8zrsKywRMAG45LzE7n/4F+EXaiFy/OdoArONsZkGAQCLPnOotPrUP1Zz 549vilTUjYczMpGP9DUhKYGrmloVDcLAAQQQFgoAcwWCYfQI6QOF/3gJEK5j+9zm h0FiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0JcROAe OkswJvZLygWNT7KQPvNJAin35XgkblVrA0jQFiEEF9+/shSatKgrHeXlrmP73OaH QWIAAPWfAQDua1VBbrd9lUnQceGMhtkCgZyjBcu5XjJQYTEzyKInNAEAsvybOVOU zuBUZzB/gN9YnJvm9GHN6zB4sAyEH/cFOQrGMwRh8/a4FgkrBgEEAdpHDwEBB0A7 NuiASkIesvmKiKxX3ApqaU29/rKd8/nfK7m227H7S8LACwQfFgoAfQWCYfP2uAML CQcJENAathNCkAARRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ+vISQ68v64HrdCdzHa9sIDb/Letw46m5CGKEK1ii+NOAxUKCAKbAQIeARYh BDBGtQdbna9WRfUXF9AathNCkAARAAAgYwEA8rQ1CEQY9oXosHBWo/aSfwaIeyy8 PRI6VCJT5Ner/eYA/2hU4eAFbDTCbGK5GZjXBN2RXMXiJ841u5zvlUviMCkFzRI8 dTE4NEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rgDCwkHCRDQGrYTQpAAEUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmffYc8ZOWeKwOCi HGQUFtHolkixsFB8IWbzmY4bvxYwKgMVCggCmQECmwECHgEWIQQwRrUHW52vVkX1 FxfQGrYTQpAAEQAARXsBAKKwlNIIBUZmV6+uRmy1LolXYtLUAyMb/0vir3sVykvH AQCb6XusKUUZ/v2bARf3yKwJs5Vav6OvLF3FXDMxDjv5AsLAAQQQFgoAcwWCYfQI 7QOF/3gJEARoemB44A+/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ7+F4vPIGsxFKcKY3M7uhwQ2vi2fX9dNyb7lqrbQSzhIFiEESYg/bKaL n0UvKl8vBGh6YHjgD78AALV0APsEForQyu4yJRwipiDlFLdJY910jq+76vyIp86p jJrAhwEAtWaw0fG8OfbJK1lsoGXl04SIHEYbQtZJQli6GKoG+wrGMwRh8/a1Fgkr BgEEAdpHDwEBB0BtWdI9OXT303uvmdmQNjSxifVWlrZ7cyYDqQsu8Oi20cLACwQf FgoAfQWCYfP2tQMLCQcJEGhAb/PQtnM6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ0GQByo9URYn+uMLkLFkyjsyvOkAkLG/00xTX+qTm+M0 AxUKCAKbAQIeARYhBDGNoaio6SaY6qwKtGhAb/PQtnM6AAC31wEAqszzrixxS79w 6cR+zEYG9qeEWVVt0iftLxG2h3eN1S4BAKOcLTcKl4ONZj8X9djF9aGgjjuOZI1i DtjTHeutJfUIzRI8dTEyNEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rUDCwkH CRBoQG/z0LZzOkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmenX8XtKOQNZDubHuZFfFCTBhM8K0nDVje/7NymCC1N6QMVCggCmQECmwECHgEW IQQxjaGoqOkmmOqsCrRoQG/z0LZzOgAA4aYA/RkZ0e5xGV9sy1LYzC4ZrGwH4kUA G2jtOyEMvvFPdn47AQCpOZoXoRJ4NMHlz+w/3ahWjLHZWfuRX8Z9o9wbi44rDsLA AQQQFgoAcwWCYfQI6wOF/3gJEF9SUJ/Gf0B2RxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ+p+DskegWEf8D8idYtYRpLCjI+/WKLwy65i2GIz NeeqFiEEU6trzOERHc0VHmZiX1JQn8Z/QHYAAMzbAP918cbVitWrn5rILJefZTxs /YZcp0qx+ZHyZ7B+0LNgjQEAygQA4zL493g9PCZDeVaCcmprSbfijELp4dalYk3k IQvGMwRh8/a0FgkrBgEEAdpHDwEBB0D9ns4puLo9aoD0igpzzkEANmAJgMPpa02A FYZKlJk4Q8LACwQfFgoAfQWCYfP2tAMLCQcJEMRsZ9CZuSaARxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZw6kFL13lE/qTm0wv3RTUromJsFP lz6dMVe/TiysAQMfAxUKCAKbAQIeARYhBDPCdXVyMSMEaCvdYsRsZ9CZuSaAAACL CQD/aTcV3ISctg9Z5oOGLQUWFPz6sO0rL0MpfU/NBR+eJyABAL11YOYPs6UVcUpW j+9LvEM82NUUCaEurCQqORjztlUKzRI8dTEwMkBleGFtcGxlLm9yZz7CwA4EExYK AIAFgmHz9rQDCwkHCRDEbGfQmbkmgEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdwS69ppN7RVtpJ/zxIeL8+yFlqiYn29DBrhuPlH+A2UQMV CggCmQECmwECHgEWIQQzwnV1cjEjBGgr3WLEbGfQmbkmgAAAW1cA/28KV+l+sUbT +7usNmCNcXx4/am11q+aGenAbsfsBtpUAQDLFcc13rNTgOOST8V7sIt0N41i23GG 3B06qaV4Bi4vDcLAAQQQFgoAcwWCYfQI6gOF/3gJECQes3o+kxZ4RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ55QZY5LmHbTpnSBvmYPmtL8 5bqkg5SuKa1rdZjDHC1zFiEEA28JVuNDa7ENAwyJJB6zej6TFngAAN0nAQCkbBTb 1nmxRzz9InP3onn7KIvnwPgL0+fHT3eaMEeVLQD/YLgLyAOkXz2/fw/VFWE9/Z4t 6pjvw9H2EA3fe7u/4AbGMwRh8/a0FgkrBgEEAdpHDwEBB0CAySk7pU5lwR/l3zst 8DRuragWMVS2VuBzbilQQ5bVV8LACwQfFgoAfQWCYfP2tAMLCQcJEPZLJmjfCd6O RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZy+rD9PTeDnP BF1bwWRuOvGkVyJv8spe1bWpsS6SIhSHAxUKCAKbAQIeARYhBDPHWFxkDnSXR5Dz SfZLJmjfCd6OAAAhGQD+Iz+uCZ/WZxI7SlMgmo8Qqhz0G/fiAYF/ygqzEHc5JlMB ALo/5un+06tTl5XXB2JySJHC84l9uLyAFDcRPdPDWecNzRI8dTExNkBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmHz9rQDCwkHCRD2SyZo3wnejkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmexY/6dKs72KkQj9A40qKAkBy5uVfVk CaxWjqyKbpm8YwMVCggCmQECmwECHgEWIQQzx1hcZA50l0eQ80n2SyZo3wnejgAA 2v4A/3swZW6RW/RqQg3XLk1Zq7b7Zi0IAXOjGR3sViCCEInPAQCzAMlBiRbXNyKL 3I5uT1xaxvKBWKq9cXK0oVUJr19tDcLAAQQQFgoAcwWCYfQI6wOF/3gJEIKdH0ZB 4NubRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+9GP7Xz iEA6zaOeJSxdBlo1h6ZiwfG0yg5RQg61BaemFiEE3CgHqeHM2Dt5eh6ygp0fRkHg 25sAAFhrAQDx81jVlhy2pHBbG60M/HJgXpoyJ20Lu4coLWw2SNl+OgD/eGoSIc1e 8//zw2SgYDHKt7z685z58hwOo8b/EkrgKATGMwRh8/ayFgkrBgEEAdpHDwEBB0Ba KjLuLWjq09U1mVmmvjOqPygkuF36TR0/eVqEZHVj/8LACwQfFgoAfQWCYfP2sgML CQcJEJQxexRc78tgRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZy1JVyNzOoN2Pty/2H3vmdX845YAME7MO6nVIA+9oxhQAxUKCAKbAQIeARYh BDQbtoo2lbPZ7jB9d5QxexRc78tgAAAzcQD9EwtHohToE7ErJqBztSASVJ0ghn4J GnIr9aaQ+umxAXgA/1jJoqDdB4y+lV4JVGJGs7xmmraGocsAvdP2gIpjBfMLzRE8 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 ZSRimPfOlywmRXIDxAv0vHvCwAsEHxYKAH0FgmHz9rUDCwkHCRAGD8vRUXWtskcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf3c7aEc23Z24/E 0aZgxZkFdo4eaa3VCrcJX4ro3L+IQwMVCggCmwECHgEWIQQ1AGjMzSldfrgMapcG D8vRUXWtsgAAF+0A/iYmcygkeVYY4cjy7m0Y4xuHrDZpY9Awxsn1ZolyiJNgAQDK f4ZaLwOihcp+HYbVvYSyaLkO+FfM7UHFbZf9IuDECM0SPHUxMjVAZXhhbXBsZS5v cmc+wsAOBBMWCgCABYJh8/a1AwsJBwkQBg/L0VF1rbJHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnCafqwbK1w86+wvkefEKuKktWeubox+Y4 ZJPxQEn4HFoDFQoIApkBApsBAh4BFiEENQBozM0pXX64DGqXBg/L0VF1rbIAAAhC AQClmtDLMrYA1OMTH1ZZdcjWQkd9SPnAthphghlR93A3OwEAvQuSTnE97EN7Q+tU QFSYxg2E/W82oGH3vCkIi0u/zAHCwAEEEBYKAHMFgmH0COsDhf94CRBoQG/z0LZz OkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme/hTVvnA8a zyqbzmM+LC4BXzXgGDNkbTMJtxjX2aTjWxYhBDGNoaio6SaY6qwKtGhAb/PQtnM6 AABBnwD/XVHlEUqcxwCTPBfpiGazISE4oW413SCcMcfvf+Sdyw8BANqFa+TI299J JsOzQ9CteBtryMPARDG4OecShdp95fkAxjMEYfP2tRYJKwYBBAHaRw8BAQdAG01R 0xEZ08w4Lx9uzPjv2bdpLNQB0NXvzG0sSDPfnSzCwAsEHxYKAH0FgmHz9rUDCwkH CRCKSqbEtHreIkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cme+QnANy/Qg6GWnCozWEkrEzaqOAiWnaFFHZrOFrEXChwMVCggCmwECHgEWIQQ2 Mo2p6shdtGhD+haKSqbEtHreIgAAiyEA/Ayku8sOlquZxq9GpcgMGmdMprpinP1c i0CZaTWOtuJ6AP9hI2/iCHySHccOAmo3oPcLy7NhbiiHAPZLYcunR4lvA80SPHUx MjlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a1AwsJBwkQikqmxLR63iJHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn3tFo6OixfxKmTmpq MXx0qKSQ15TV8Ux63WHdYTVHSjMDFQoIApkBApsBAh4BFiEENjKNqerIXbRoQ/oW ikqmxLR63iIAAD9sAPsHfKGsO7ZDB71uSwL9cmE9Kt8czV/SfXKVnthDNCs51wEA qoW5a/s3SWwcgnhwTRMKid2zZUlGKGVQfkfNpr31WATCwAEEEBYKAHMFgmH0COsD hf94CRA2LGaCjl5GIUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmcE6YqqQMChACJQOOPKeznBdhaLsEz9VqausKcc8Xw6FhYhBE6eXi4ahocG 2q39WjYsZoKOXkYhAADCHwD+Ixir06Px7h7XY8rwZWCHkZh7iaVhymEXhqsD4+k/ L8wBAIpmydzUkNFTCf9fFniz2bR0GaMekAbYbVOHk6WuPbIAxjMEYfP2vBYJKwYB BAHaRw8BAQdAc48fEKTlpAxNiGJgK7UI/6ePlShQwIvCNrMeDjbfHrrCwAsEHxYK AH0FgmHz9rwDCwkHCRBqj2g7SLxfM0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdl4aJHxoY11JH+NwLfvWbPbPG7oGnUE8LgnMc5Yr6GNgMV CggCmwECHgEWIQQ2SFTDah7/3Kx7gClqj2g7SLxfMwAAXukBANio8mKCrEbzZHhx iJRskbAlP/wkR612Bwd2Nyzp/3lvAP0YOLiThxULoyI00bDBk5pzO2kLfvE/zadx Ujq2fRyRBs0SPHUyNTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a8AwsJBwkQ ao9oO0i8XzNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn cA/vnVSJtR3RlsxAAoVnq/gQ8IaFdK7+5CVvr4F840YDFQoIApkBApsBAh4BFiEE NkhUw2oe/9yse4Apao9oO0i8XzMAALTSAP9KZHyNBTifdeiMfdP6BI39kXxfD8Hy +UmNg/08is6JrwD+L0TGp4DvDlTHlOLiQtJ4/motqaxWlSRZhSpzeI1NqQrCwAEE EBYKAHMFgmH0CPADhf94CRDJhK9SVGMIz0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmduw9oNjQkBMXC0w04gmjqtJ1F/fwitZu5oBhgNQORs aBYhBK/emaAI6bx2HfpjZ8mEr1JUYwjPAAAE6AEAjkK5LF1pAo3j9EeFvzvQD+4m wG4SQGVZ6zbMiJmODFkA/jyXPt97d9+fe7jXhypt0HAzYxhnphE0BWsmJ2SKv8YM xjMEYfP2thYJKwYBBAHaRw8BAQdAfZVMdLthX+o3a1rP4smbMnYICnNOpBqngqOb 3LtvLr7CwAsEHxYKAH0FgmHz9rYDCwkHCRCj3fMX3+3zL0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcrF94QkE2EhiWC3MqontJFbu1ok08u zE0NvDEGvzEZAAMVCggCmwECHgEWIQQ26zfhWYF6htDU9Qaj3fMX3+3zLwAAiwUB ALi7IWaw3zOc5NWD1B3ShZpsj7/xFFSlT8ZrWsuhzyL3AP9IvKWSzJLzt08dwbVQ 8akyiTc7aRootgFHbJ/Hq4dOAs0SPHUxMzdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a2AwsJBwkQo93zF9/t8y9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn9HhCNtouSfJ0QmL+8fhdQFOq0bT/LFSFoLFuNnZC/gcDFQoI ApkBApsBAh4BFiEENus34VmBeobQ1PUGo93zF9/t8y8AAHXyAQCrox0BqOh7zlvj ELLZqGxpgVwyoQNTvH9LbsLHUcxn4QEA4bS3OeZXqPmhomuzEE4JmLKDQ1AVwa+1 3gnxfloOmAvCwAEEEBYKAHMFgmH0COwDhf94CRB7gaSmfLon8EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdGgZ61ILaMC3KxS2tHZSA5JCYh LlhfLsmosvcAcBoL0xYhBEGfo9dKkXtU9TryFXuBpKZ8uifwAADdqQD9Fsrg+W/J JPSqFD0/I8avUwCld/XiXAEC6DwQFHj/vasBAOQ9Yg//gEHS80zladOugJIPruLG CZfpc7C+YvVatsMHxjMEYfP2sxYJKwYBBAHaRw8BAQdAajcRAl/n53gPSah8kmgw ln6qXMmGro1ehq7+UxY3QOvCwAsEHxYKAH0FgmHz9rMDCwkHCRCwUsrmmip2iUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmez9gjlro+KZChC +D68XJKkWTUS4DNVeBam71NFL9Wd9gMVCggCmwECHgEWIQQ3FNnLCooLTuaVshqw Usrmmip2iQAAu2QA/08WdDsAoslv+hFSeaFBySTqmoJ46LVNmMV0iBry70ldAP9H g0e+PC/j9EHuuA9uMEbE57NHp5x2KY9GzE5WfWs9Cc0RPHU4N0BleGFtcGxlLm9y Zz7CwA4EExYKAIAFgmHz9rMDCwkHCRCwUsrmmip2iUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmeT6YfMLJCVOZcrup1ksxWxUqQU1EMM8Lor pfW7Yo7LugMVCggCmQECmwECHgEWIQQ3FNnLCooLTuaVshqwUsrmmip2iQAA47oA +QE4FR6DT/uMZDIAtUHheO+LjBso7U67fyvmyy8Y7raRAP43WajWYJy9IxheiqsL 2GeoAQhljokayMupc7vqfcRADsLAAQQQFgoAcwWCYfQI6gOF/3gJEPnuMoQC8zhg RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7Uwrut/IWex Ot5CuxnqzgSxk75oTUZRtD0hXwox9ftqFiEE+PjzCTHuuTwv3pNj+e4yhALzOGAA AFp4AP98poINUk6JAs29iT0cfxSwHmgnkXlvKLGjQJ4ztlJ64AEA2hipGf5zKIgz eWG2uKfDXDzVNPbe+Wm8nIQa6lf+uQvGMwRh8/axFgkrBgEEAdpHDwEBB0AM9Zo5 3LYszqEfDKhoQ1cdS4SwNXVE4nUkwej+CckJTsLACwQfFgoAfQWCYfP2sQMLCQcJ EGEcQz0o2EBxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZzyigUVCn4Emy8WGpb/gU1zV20oECSeQlwlOqS/DDtbQAxUKCAKbAQIeARYhBDdi 60ePR/6oSK2p4WEcQz0o2EBxAACBCgEA4QR6/A4tX4xUNZjHZnd4zXiTVrfoIm68 Y9VFO6a8rKYA/1KQ5cTzlaY5LVyS4z/6VlJudB4iJZ19WJrqC1NBBhoIzRE8dTQ3 QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2sQMLCQcJEGEcQz0o2EBxRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0cnY9D6hpKtGN5HJITI PVhv+GnYQDsjIBMC19cDi0QKAxUKCAKZAQKbAQIeARYhBDdi60ePR/6oSK2p4WEc Qz0o2EBxAAATsQD/Y7cDdRs6HMTSA5vpmrbh7c0VK8VLTLwEDsTbxTATx3AA/01y FkMfFOARIK3dXJKOqRf+78ANOCa5UzV8PTq6WawPwsABBBAWCgBzBYJh9AjoA4X/ eAkQcZLXmhEqDOZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn8Dl6rTJHp5v/MnA8bkXenqJ1h42zUAEQ/VdpCSmz7wMWIQSQupGcF+1CUvjw 7TJxkteaESoM5gAAXqEBAKXE7RpjCqXNyQR6LZGraODYn9FyK4LP1IxCtMdJIOKe AP0Yq4dDJwsrgTO42CbfKeptz5VtMLnZsYjJcrTPBGVjBcYzBGHz9rEWCSsGAQQB 2kcPAQEHQI7uzVTsGGy1HMyYW9qUm1Cm02grBade2pRBoVXEhGoqwsALBB8WCgB9 BYJh8/axAwsJBwkQnDTTjgikNgpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn6srBidKKZ2slt1trtOBquEkYCvArn62bHcn1+EK1AgADFQoI ApsBAh4BFiEEOBTkZd3c2381LlE9nDTTjgikNgoAALt2AP42VvpcNPm181VHo1g3 ZANnsEzfoz/Od0/8vqwcGJ1c1AD5AVE31gICeK3nbV7w4Yo3MXKkli7YxtWovNw6 F/G6iwvNETx1MzhAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQnDTT jgikNgpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnyzEb GjiT9uX+LGWs3Zmhny62Y9/DeEJ4zN+MCcvOzi8DFQoIApkBApsBAh4BFiEEOBTk Zd3c2381LlE9nDTTjgikNgoAAD70AQCAowWrVcXHcKvn1B0+mntTbvlMgcQQpzu4 2bXhLuvJLAEAyEl9KNvuDu2YsO5nB5ZMsWZ8tPabx2irVcaZWtLLnQ/CwAEEEBYK AHMFgmH0COgDhf94CRAVwz7xO51/6EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmd/P82PW8rPgPBtynHrwIGFHCH7mlOpHzoBMOrqKznbzRYh BGtaJcLdQK5YJy+xfRXDPvE7nX/oAADRyQEAuDHbcsdSMEY8qYYHV3mICysT0yTW X4+1DbZgOc+jylcA/1cPcpJEg3nyDMQmjW30IimZ7xxhfE4amV099b5ssg4ExjME YfP2tRYJKwYBBAHaRw8BAQdAiPEauq30ElhdgGvuHzGOGBuTvPXAkMlUJsC7/Rd8 lJTCwAsEHxYKAH0FgmHz9rUDCwkHCRAZ2OowJCfJEEcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfluqgy5KQSd173uNMmtf4FF9mzXj4Qbueg uxQCFC1xYAMVCggCmwECHgEWIQQ6ffA5zMo7PJKGsBYZ2OowJCfJEAAAmIkA/2wp 84ynGYI5ww+s4iKqZW0IzSPNXYNt4Hd3TfI/EJvhAQC0Nrc6c9fgoKV0B23AJjYQ aCrOB6q2qhOnfHCYsNlaBM0SPHUxMjZAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh 8/a1AwsJBwkQGdjqMCQnyRBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn9IJCK2d8jirCfms01lRbL6mjf/MlKrtzQJ2k3LNE910DFQoIApkB ApsBAh4BFiEEOn3wOczKOzyShrAWGdjqMCQnyRAAAIuLAQCR9WflQC4LateJkBcy FHTFt3hiXoSKp3V+a55f1/iOCwD9HNKlMp555u5m89z12Qh2MHDVpLF9c0k1Azth /zr1wg7CwAEEEBYKAHMFgmH0COsDhf94CRAGD8vRUXWtskcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcJ8NlQ/JsUOEdYjlamA3z0GY7ko3NI tFtLx0CwiG+kDhYhBDUAaMzNKV1+uAxqlwYPy9FRda2yAADeSgD/ckOYdpqkOimx l7eMYREgioRNY4ZkCY5cl6kzSzT3RZkA/2X0eHGQtBKtg86T8UBnDla8U3lZ0fX1 9XV47QtpYoMBxjMEYfP2tRYJKwYBBAHaRw8BAQdAhZp1VSwAf//ZC3aFIMIioKCc IojZKZpq/4HidUOC7/3CwAsEHxYKAH0FgmHz9rUDCwkHCRC0n8AZdEADB0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf4lBBwfFqwxT31BEfp oJjb65tXCgDGKpegimuwJ90LIwMVCggCmwECHgEWIQQ8lk8+nFczB1PuWSO0n8AZ dEADBwAAqSUBANfurAVw/0sIx1YouwXdDfieYfP2V4IT/aFuggWNme1XAQC5odnw sM1Tf5RIkd9WbYmnSSkaC7el8R+aTZw+TeDsDs0SPHUxMjdAZXhhbXBsZS5vcmc+ wsAOBBMWCgCABYJh8/a1AwsJBwkQtJ/AGXRAAwdHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jn48QwGuVw6B5nA9g/B2mpsStt5iOOmoXOTXO8 HYoBcCYDFQoIApkBApsBAh4BFiEEPJZPPpxXMwdT7lkjtJ/AGXRAAwcAANdHAP9+ zZhnEQHnn7C2IHg+yigo/n55F99ysNPXVMTezhlRtQD+OTPjSV2sU554Ie0t0D6w mgw7i8Nh5lb9S8srY0WlNw7CwAEEEBYKAHMFgmH0COsDhf94CRAZ2OowJCfJEEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcDqrlOFoREFBlX xAOBK4sUZ87iTqvOLzIqAufMrwoskBYhBDp98DnMyjs8koawFhnY6jAkJ8kQAADU BgEAz+zQFrVCP67JB49zmYePeukmPPGTKk5wky/noCRzDA0BAIJQgCb2Lq/gC3qW 1iYIle1v6pddbhjqbAf//YBIVE8ExjMEYfP2uBYJKwYBBAHaRw8BAQdACXS9C6ix ipTwDMtzQ3mFzvagtSr3F+Qopb1+nulDi1PCwAsEHxYKAH0FgmHz9rgDCwkHCRDG 04NsboF3iUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeC Mb+ofOpbywpQygT3HCR7wm6l3pKMvZlkw0uzB8SHqQMVCggCmwECHgEWIQQ/6rCP xjgpwIBBLL/G04NsboF3iQAAZSIA/iCSSnspNoh4mIhH7PPBNS8mtYc4GxysF1v1 b1MlQSqtAP9E694F0WNhSTSo+T/YaibFxk56LfChkTa3frZLID40DM0SPHUxNzRA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a4AwsJBwkQxtODbG6Bd4lHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnmgLQUf70UjyJRE/Otzxi PP8JqgCQPbX4eqEppY2RqL8DFQoIApkBApsBAh4BFiEEP+qwj8Y4KcCAQSy/xtOD bG6Bd4kAAOzFAP9OgMNxwisE5vZBvshf+GmMtzr8DdFxqNq++vDMoNVZhgD/d1J3 krTuTF8eLUgfR1FHpvYkYf1SOStrFsb6vwuLWQvCwAEEEBYKAHMFgmH0CO0Dhf94 CRAe1L8jnZwQ8kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cme5Lizu3+idRMlAK03LVUQrtox2J4DAJ0iDWpalZWWDzRYhBFuKisUhMGSuhMl9 5B7UvyOdnBDyAADmQQEA8E4N4BR8IMDQdgJByiuwi+tMN0pAFQccbP7VAseYxtAA /2LpCkRI2UnmJsUN2e5wraxD76PQ6eXX5pJEWwFpds4MxjMEYfP2thYJKwYBBAHa Rw8BAQdAV+UZBsDXwSzmyvBdFux1yFsJf9XiVynOEzDoSs7/VtLCwAsEHxYKAH0F gmHz9rYDCwkHCRCVc1q5ZR04mUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcKNTKxF9nQRelSMs8j6rIMq6Fxrlma8cvnvwEkYutS2QMVCggC mwECHgEWIQRAkD2QOGBPnwMl9PWVc1q5ZR04mQAA5+4A/RsVXK7yxD6xnhpL3V4i x0T7IucfHW719mapsgAapfcGAQC3Lbq0ufi12/PbgcWnA6iBzr7MToG1BeaxdsVm HFAiAM0SPHUxNTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a2AwsJBwkQlXNa uWUdOJlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnuw6/ AW6vhdhuWdsvFdtOPeu1bIt9BQd8m7+J23tOe3QDFQoIApkBApsBAh4BFiEEQJA9 kDhgT58DJfT1lXNauWUdOJkAAKpIAP934Nnr2XD85O52OKzOHpkrNxvaDa53pSgY 5nN3qMK/owD/WZ+H5eyl3DGqpne77OP1qbRzpI9vSFY+2qcIcVGD8wHCwAEEEBYK AHMFgmH0COwDhf94CRCyYUZVEt+EHUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcme5P/vLLkFNEaptgXdxdENhjqe6x2Co6F+QIUE5MmF0tBYh BBZWHIUDeL2zh/bmILJhRlUS34QdAACdlAEA09H1qSFg+iI9bqK3o0GA7TPBTZ+Z iDIXIQChOlb+lX4BALvk+zAwv1cnGR+tXhcy0FEOd17vvKxQZjV1VAodBWoCxjME YfP2sRYJKwYBBAHaRw8BAQdA4VIkv5zfg0WgS+9H8UG1B6K73AatVKfC5wZLy4Sq zoTCwAsEHxYKAH0FgmHz9rEDCwkHCRDVq/ozodscI0cUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmconE6sEP0m2+rOwj7DGiCo5866L7xx+o8M uUtD9eyMYAMVCggCmwECHgEWIQRBlYqujh7tgLaA9NzVq/ozodscIwAATX0A/R/+ 38kO5SHOB/wtRazFukM8uF6a0SAPJjaELjXx89N8AP4+XA2tuWArUtO3Ev0GCkGC M4iqjPDrShLWT/Fzt0BiAs0RPHU1M0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz 9rEDCwkHCRDVq/ozodscI0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfBm9MHu0Tc/pNoqO/yD3d1E4jAl4G8lcoPJd2wqrhOOQMVCggCmQEC mwECHgEWIQRBlYqujh7tgLaA9NzVq/ozodscIwAASToA/A36R6wetkLqCWNk5HkO bjKOlrXwpJir19XdFjpuOCfHAQCmWacIhZakKHdht0BZPUG8/t2hKCr/gEfMWciP Jl5JCsLAAQQQFgoAcwWCYfQI6QOF/3gJEOFNASjXw3LsRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6Rei8NhZNTolCQVpfZy0BW7yxW8k1k0 v8u7Bc8IYHWdFiEEUyBChgD825o6oy2j4U0BKNfDcuwAAJtbAP4g5hhRFbNfXvU4 uvItO4oOzW41JLAUcQTbD8TXeKZ7qQEA1qTVc7bXrVpBP80ijWgrOBDu5NV5N4ug 4RZDIN+4RA/GMwRh8/a2FgkrBgEEAdpHDwEBB0BSbNlHd4LxpNj/RDR5BU8astv1 St4a4F9pXBD/TBDrSsLACwQfFgoAfQWCYfP2tgMLCQcJEHuBpKZ8uifwRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzeDAym5Z3p/3vwJ/HNf 0v0NhIHeWk0EZRarHK03QR/0AxUKCAKbAQIeARYhBEGfo9dKkXtU9TryFXuBpKZ8 uifwAAD73wEAuWfuD9/ZH2S8dITb7cBakRJSb/5WsKL8lf5XpVn8aQEBAJuV1ilY aCsEWt+6ntaU2791iHKCjUvigoKxHEJpywIJzRI8dTEzNkBleGFtcGxlLm9yZz7C wA4EExYKAIAFgmHz9rYDCwkHCRB7gaSmfLon8EcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmf/sqkzQ4an/mQ/aAsq2V1o/MYhv5FERUzlxXqT VUd1ywMVCggCmQECmwECHgEWIQRBn6PXSpF7VPU68hV7gaSmfLon8AAASdYBAOtu EnBMFbnYXxzGx8GRXUzFZ1CWacjQU5qmHvvtvf7tAP9ZT8ReXuCs6unMqzcGKRSL QKkXRnndYHkE2n0zAxx4AMLAAQQQFgoAcwWCYfQI7AOF/3gJEDxu9IQLR82CRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9FpKWx4x9JIIYFV NcWppmj1U67iXru4ky1edkx1YlstFiEERPVEbb5kEY1V0AdFPG70hAtHzYIAABzV AP9IcypxcTQBF9G0svOZycd5/tF43WJxb1PUnX1QWNqiPgEA93DImX8bzMUyfS4h iPmU7YXbO2VYT6p6iuYtUZrT5gnGMwRh8/a0FgkrBgEEAdpHDwEBB0DLJyg64yGx O3yBUa7RxyNGDzqnPs29XCl558uWT43yksLACwQfFgoAfQWCYfP2tAMLCQcJEDep ijHPS2KtRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4B/ iVWCFbV1XHbq02MlH77HX5oBFitn1ShN7948owp6AxUKCAKbAQIeARYhBEOVDIsL Rmk+nkhnZjepijHPS2KtAACdpwEAo+PtZZ2R13mIMCBXX3xXv0zMCX5KfOuF5NZt 0P4zMN4A/jzT65dsbZdmkl39YaHs1/Gvf5EBzYQ+g4kH2QltNAYCzRI8dTEwNEBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rQDCwkHCRA3qYoxz0tirUcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcuMX0pQ8/kl3079UHXb8nn +U/B0xCaIpymVnEorf+XVQMVCggCmQECmwECHgEWIQRDlQyLC0ZpPp5IZ2Y3qYox z0tirQAAwigA/i3NgOnRwvHrff1jU6+4l/uYz8V60UWaYN4dx67t+dofAP0ZBdt8 TMFyRfT+hBOMEEC2yWslAmJWRuEwyLIZU8icCcLAAQQQFgoAcwWCYfQI6gOF/3gJ EKp1+puEAeJXRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2fhTBHLFz85MNme5heN2CTOMBuyPIj19DOm1f8XuSoKFiEER6RY7OV4TnrxHCKG qnX6m4QB4lcAAPbsAP46kxrEgOtp9Ij5wKo3QSEF/N17+3rNo3PzxizlZRFwkQEA 8u4mT0gLvaQu/dEpJiSwj3cYMyBZxpK8PgOQLn3wDAHGMwRh8/awFgkrBgEEAdpH DwEBB0C/NQjuvXyMUvnPKzV6wuCV93Tn4oN3l4fyM65VCHeLVsLACwQfFgoAfQWC YfP2sAMLCQcJEIOqv5H+SuXvRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZxr+HV+2lDbfGpRhn33uPI8pQfGm7+QniWOoP8JU/5udAxUKCAKb AQIeARYhBEQ1BZHyCkBp8TEVYoOqv5H+SuXvAADr5QD+NVbwvEimr1egUIzS+HB8 U4+d1m79IPSDPlFFMcKa0/cA/0IZT34jS3ileM54LBJjDZEX/VkEyo2Z50hJ3FIp V6UCzRE8dTMyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2sAMLCQcJEIOqv5H+ SuXvRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1PohUZ4 bPc/RA+b1GS3rDTvdGky8jEvqeE2eyaAKixJAxUKCAKZAQKbAQIeARYhBEQ1BZHy CkBp8TEVYoOqv5H+SuXvAAAxJwEAml0KWquWmPM/TALHcYFe0KfO35SpNErhU44B sQKj130BALLSk4S3mgUu5/qSBDlKsyypgStozRZb2/G0Fu7oUywGwsABBBAWCgBz BYJh9AjoA4X/eAkQXQGV7DxuDWVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn0BTDnpGhqhDSr76vhMAxlzrw8APVl7pYEWhNeOfEAgsWIQTe cKdF8JjrzEW0o7JdAZXsPG4NZQAAgK0A/R2zSVHVgAOFfzd+9xqdiukzfce9DvZ2 mcWAn6zJVzG/AQDejbS98CVhFXUQjQw609y+ff/JbfNyMEbywYIjT0nXBMYzBGHz 9rMWCSsGAQQB2kcPAQEHQHIwiUt13MOrrYyydm9ed3ob9DlfPes35sYwHlO/qbpc wsALBB8WCgB9BYJh8/azAwsJBwkQoQnD8La9slhHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jn26ngMYtdBA6a6tjfxwfe+N0Njjv1914FsIUy Y9XvxegDFQoIApsBAh4BFiEERHGoUFkhXSMdR7HUoQnD8La9slgAAAR4AQC2ts93 9HvcKtJO+XhA43DuBF2PAZYm2/1yA2/1MD89GgEA+Hridtcd92udHxtwb6iVRwyd oGtTiXhfhjMsUNPkgwbNETx1NzVAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/az AwsJBwkQoQnD8La9slhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn0qwAFC5I20rtuekQdBGcsjzs+mL76wvYb0AFKjGQ5/IDFQoIApkBApsB Ah4BFiEERHGoUFkhXSMdR7HUoQnD8La9slgAAKbDAP9utbBfbp7XQBI40jviaWcK SW0b3zNjlPWt/m2U8JL3kwD9GDZXPEQfG3Yq4lpv8/44dVOQfUfFP9R7bbIup7VN 0QzCwAEEEBYKAHMFgmH0COkDhf94CRDWqplhtPk4q0cUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmdqWPmXgBzAD7SC++8eFNjv2Dg59qKc+adU zGNhnvSw9RYhBIjpmsTVy2rPPNOW1daqmWG0+TirAACM4QEAmG6JC0ApBD4lmHM3 koyfCRmNj3/4Wbei+kZYHhbtw48A/1nKgQcdWah6uIQ3BVyrRGP71y7cxkZD7UVU aBef2XoExjMEYfP2thYJKwYBBAHaRw8BAQdAxIqIIUXT1Ud7ea3qS72UA/4KNng4 9X8sJ4KWjq9pccvCwAsEHxYKAH0FgmHz9rYDCwkHCRA8bvSEC0fNgkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmciDDkC8FLObGCNVq5JRRKd GPFA8LIT0ojD6rUW7TOFlgMVCggCmwECHgEWIQRE9URtvmQRjVXQB0U8bvSEC0fN ggAAaLkA/2C1ITSu0kI8uv1vc7MfKrpnKCjyapYBlRDhFHRXyP7rAQDtI0+AUemL xsZwfvQqIWM5FpGx4vOh1JgSXCEQSUy2Dc0SPHUxMzVAZXhhbXBsZS5vcmc+wsAO BBMWCgCABYJh8/a2AwsJBwkQPG70hAtHzYJHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnSsb768cQomLVgF+fUsip21Jql7x/iVH6oEpisMpC p2cDFQoIApkBApsBAh4BFiEERPVEbb5kEY1V0AdFPG70hAtHzYIAAB6aAP9D/OOO 0Bj+BA2DOFfACHS9bp6NKAhAkIDhiKreFiuwCgD9ETLMAhdLzyFbwlpIBDJ0dSIx SPWxYKclOubKDawyxAfCwAEEEBYKAHMFgmH0COwDhf94CRCGsMY1chV1e0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfMpW5HsRCWxKSDg9My SEa0A1Mn1pLIjJNV0xVFTzBmQBYhBH0uDgnhS1urCEomh4awxjVyFXV7AABBjwD+ IcPLqr4J+aNabAK+PJVM8B5QkEgkrq1ficKw89FEyoMBALC0Ewpt4AxlGpDTDldJ wBr6xFTQvny13eVbYu7f2vUHxjMEYfP2txYJKwYBBAHaRw8BAQdAXVrE29VvRxz9 oOJHseuP5yESfOmLeea5Xr8jSfii4JTCwAsEHxYKAH0FgmHz9rcDCwkHCRDbdYDR t407xkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfSPy54 NZT9oijzB1nDG7Pa5f7yGvIUIfuAh8SZipItjgMVCggCmwECHgEWIQRFBG6Ymy4b kKHa61rbdYDRt407xgAA+jEBAOplN+ZhPS5HlU3FgQ3FWXlhINCsckvJr7j9qI7t DjyMAQDJHhW9voOJDS5TQnDM0Aa/yaEs5Y27sxd5UGAi2RowDM0SPHUxNTdAZXhh bXBsZS5vcmc+wsAOBBMWCgCABYJh8/a3AwsJBwkQ23WA0beNO8ZHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnvULjxtfaXBNM/V49fVpRGdje ssk1t2LZTABeaEDWncQDFQoIApkBApsBAh4BFiEERQRumJsuG5Ch2uta23WA0beN O8YAAArvAQCsihpJVeAar9iSYY35Uk0u8nNyfxVCnN+nviYSCttTBwEAjFJFSBxK 2gAsVHuDvhkCI9S8RYi3RjgahXYWKkpzpQ7CwAEEEBYKAHMFgmH0COwDhf94CRCi /nAdkm8JOkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeU rmqhzCB3e4dfEOvRO3OBQ3aiO1WrvMFYebWJRTd4xxYhBDTpbKRgk838Jazmo6L+ cB2Sbwk6AADFOgEArKZNTYT57sa18ibAmoWzbyvVtF4M99w2jA5Y21ltc/0BAJAC PJsGk3RlQSy7Ma4q2RPVMayEkDZTJ7f5o81X1w0IxjMEYfP2sxYJKwYBBAHaRw8B AQdAyxGYK326JyafNLuTKPNNMNO2LqEbMgaUjb1xqOCvOdvCwAsEHxYKAH0FgmHz 9rMDCwkHCRCNss69KdT2A0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmeU0RVNl+tziLxFwoYkoDedNRqEQG7Y8vRQdo7A2tryGQMVCggCmwEC HgEWIQRGXNmtEbUAOki7KBGNss69KdT2AwAA6MsBAOlnYlCojLXcGzeCcm4rk4Lr Y/tUZ26xa1kZbgX/k0pxAQC+WNCTVSySmUjMo34wdEWb8EVCvJjepmpVc2bbr6WR Bc0RPHU5NUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rMDCwkHCRCNss69KdT2 A0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdsOmpbr0K2 jJJyqfIjB5/ZGSGJBvZ/Q7vlDJFfjHlbyQMVCggCmQECmwECHgEWIQRGXNmtEbUA Oki7KBGNss69KdT2AwAA4gwBAJwmVU2pS+AvqbaxzhudQrVfbwRaAkciluVBqPZy QZqrAQDVigXT2xrZ7vbaXAztF2H3DAxtJ3ryGL8VvAmyI7QlCMLAAQQQFgoAcwWC YfQI6gOF/3gJEM36SZO+QSSvRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ9gYApWKMkBOh0ShOXdlqPUwCduABbLQzt80de1yDDAEFiEE8f4J k285pOepB9kJzfpJk75BJK8AAB7eAP9a5jITF4UJEgyem5rcWIOFGg6ap33ywvuu 1K57kAefWgD+IXEn/tIfsRHvAm8KpFY9urFAds/+LsiEiEjJeqvU9ALGMwRh8/a4 FgkrBgEEAdpHDwEBB0A6CLzxS5mDMSlunYk7IpcfQcHdguOFAbif3pzXTsdRzsLA CwQfFgoAfQWCYfP2uAMLCQcJEPEGkY2H4VR2RxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ29d8fTts1VlfixOHO54oh5EoDmTmanT5e3gjc+Z 2Q0NAxUKCAKbAQIeARYhBEdaRAkVeMAqDFwtYvEGkY2H4VR2AAAzFwD6A7FLvFNX bHq2QOCx9m99S4a6Bet9tbiCwCbZnUNBP3MA/jFxo+PHq+L4lGxQixQu4rYfi9cn RsJgwwT94xzDvhILzRI8dTE3OUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rgD CwkHCRDxBpGNh+FUdkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmdgc5JNfmGM8hhQTGQtu75OXJqGTacdGxP+94CtsSYsFgMVCggCmQECmwEC HgEWIQRHWkQJFXjAKgxcLWLxBpGNh+FUdgAAZU8BAJPqhkFMOi3l0pk6Ivhk9vOb sycdXVV//XgtjIL1EoW6AP9apS2vOgl+rW+F7Z78ws+tOu0shOxnGXfkq4AqHmzn DsLAAQQQFgoAcwWCYfQI7QOF/3gJEExvAPeupzrVRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9euCBs5EsPNw9Qwsqj1UMZD7dTmsUDLHVxy r0nAV/hLFiEEzzIFkDUajEHJ6gwfTG8A966nOtUAALprAQDeMQRYZOm6qhWAFSTs +jeMOfgCHOT93XtAhljoiz+IUAEA2PIKCBxlO2jlOrL+MxcFlBySejinLV36i4/R qDzcSAHGMwRh8/a0FgkrBgEEAdpHDwEBB0Awuu2l2RdU+U9ue7J+fEk8dHRzfWxL pkjZDv7puvGxz8LACwQfFgoAfQWCYfP2tAMLCQcJEKp1+puEAeJXRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9XNYowWt1vblSx+Q0QfwjXP FKLiFalgDx2X12C+eapXAxUKCAKbAQIeARYhBEekWOzleE568Rwihqp1+puEAeJX AACu+AEAwpde9ID1qqVpPKbBCmoBrgQi+a6wTyu9jHLmLgUXQ/8A/0puqRkAEF62 Axvuq8bxWAJFszHFEDzrN4ztY8Vq5wIOzRI8dTEwM0BleGFtcGxlLm9yZz7CwA4E ExYKAIAFgmHz9rQDCwkHCRCqdfqbhAHiV0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmchMip9zNTBG3LlmS4wZkqQRP0kWuYIpvIwfBDecihO 7AMVCggCmQECmwECHgEWIQRHpFjs5XhOevEcIoaqdfqbhAHiVwAA0vEA/2UXJU2+ 5TWDwNr4t/mKYiQr/UOW1QLbbgF/3tirLnWIAQCxwazLp1mEytgqgXHIBx/hpTSu BA7zLkoUypGPYm5uA8LAAQQQFgoAcwWCYfQI6gOF/3gJEMRsZ9CZuSaARxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2J922QUXflUQaVZZ1Li GzhMTdOLsVA17u6J11dlcr4vFiEEM8J1dXIxIwRoK91ixGxn0Jm5JoAAANBPAP9G mw7pyiz98Zd5Dm3vuJUBYgM4vlAqoZMituo+OAmacgEAtUUrXs6jCUkomdUBETvB rmncBh5qQHoatZopb4K97AXGMwRh8/a0FgkrBgEEAdpHDwEBB0BNQbt6IHeuknYB GvEQlTd2TBlGZR3VujJYjCn/OGsy5MLACwQfFgoAfQWCYfP2tAMLCQcJEHL7WLnp eYt+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6huekmw 7yz2YJQEQZXnHLDha0IvGWwvPRuAW8wWjyDwAxUKCAKbAQIeARYhBEituhF7bThw MkjXrnL7WLnpeYt+AABWZwEAgyaQFmqRN1imogHXRV/0AowCiz/Z78+8JcxdWZDp SZIBANTA7usQxsytBl6EPE69r/WCPoKUJfud8/014X8eCQ8LzRI8dTExMEBleGFt cGxlLm9yZz7CwA4EExYKAIAFgmHz9rQDCwkHCRBy+1i56XmLfkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdQ5VWh7hd438g4UKp5+vl9ZwA5 Npic0Tdm99OgOj3eZwMVCggCmQECmwECHgEWIQRIrboRe204cDJI165y+1i56XmL fgAAQMUA/1RM5LcgLDSTdgtJqEbEEzU5LJY/GGofDWA3KaXYyxRbAQCShLLsGxSm itA6+RCGwZNDcppnIzHpT/zBerTVfWcNDsLAAQQQFgoAcwWCYfQI6wOF/3gJEHo/ UjpN1iUhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2lv AaJp8tDDEDgKUOJfCAK7OZg0KlVWLW6cG/7iKaAyFiEEmbJpz/RYx4AQizcMej9S Ok3WJSEAAI29AQCdb8DSA8Jzick51XMnIXA4iEK4aQ9PNUcGuWjy6opp/gD9EBuy GaNN8JMBrPZnA566Zwzwvk9BAi7BI4i5PEad8gXGMwRh8/a4FgkrBgEEAdpHDwEB B0BcVvAPvlKV20yyBYRhK3DfIKbwZSJWoPkDDFl4pcGu+MLACwQfFgoAfQWCYfP2 uAMLCQcJEARoemB44A+/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ/Gm6QSotKwId+dWMOgVnZbCO/TR7Nq5zeL/JmOY6AFMAxUKCAKbAQIe ARYhBEmIP2ymi59FLypfLwRoemB44A+/AABqWwEAh3mopiRiwPqTJUrJ74feEIDn 6EubnmGzpDEXaST9ndoBAOTcQkrRSJd9BO+9UqozYrZ+BhFnv6PKSKF6pd646QQL zRI8dTE4M0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rgDCwkHCRAEaHpgeOAP v0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme5lnfNXpea gX1XUZ5vR4pvxmq54T0LkkTqqcFN1/04qAMVCggCmQECmwECHgEWIQRJiD9spouf RS8qXy8EaHpgeOAPvwAA/FYBAIzxk3SLW/rnAElL1WB6SJu3iFOq3C6XqGQubr+1 vdTCAP9j6VcZJ/Dq2Xf3T2xWhH0Nkrc8vKBESooZzCp0AeyfBcLAAQQQFgoAcwWC YfQI7QOF/3gJEExygPffnabmRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ+Lr9xWl3UDzjA8cNkw5iCRAgRWU+h7Jpaj5/80gM2AfFiEEbWuE a4Zh8QE+e8jWTHKA99+dpuYAAIRFAQDEwGnSj0GAQDk2jQjOGX2Y/jrXAcAoS0yh JufGFPnaawD+IfoptlV5a4NFBeuL7kg8Xx1JWF2KP60J1ZFaar3dEADGMwRh8/a2 FgkrBgEEAdpHDwEBB0AVrO/H80FP89LfYgB6FJ63Rz6QEQHnnrtDBguw7Tl5ycLA CwQfFgoAfQWCYfP2tgMLCQcJEMr0qjEmFW+LRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ6DcbCpOoy+oA1frSywIM3bZ3qgOatykgD4pWNgh XM/aAxUKCAKbAQIeARYhBEr4MrMgjbPdEmwh48r0qjEmFW+LAADHewD/dR2oYCyk A7GIGvTDpYuSV/9gKOalncspUVYXXfHN1ssA/0oI/s90HQghTcGC9t2qiHyy8Luf eKlkzHQ6l2i1mmMMzRI8dTE0MEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rYD CwkHCRDK9KoxJhVvi0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmftiiW1Fp5teQX0bmQe16m0AapoeIDuzSAWI2yNunjLuAMVCggCmQECmwEC HgEWIQRK+DKzII2z3RJsIePK9KoxJhVviwAAhTMBANWePqqHkmJlYByKB+xIWGYi KljaLNFV1dW3HhZEvKlZAQCpLlBbQR72b1ssLXz7vU8O8QYbi9bLDsZnTfbcfdqE AcLAAQQQFgoAcwWCYfQI7AOF/3gJEGp8Xch5KipVRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7lQzZyftVaXG0883fKiX0a2HWCASr6Aw5sr yOjUkFPQFiEEJO/bIlMxjhG3O2F8anxdyHkqKlUAAAl+AP9Jgpi/NuMIQOgIPau/ gluoM5gqWq1t+3ddvkrTtjcocQEAvPv4ITuDC1b7lTHz+3Cfeb4czqUnXA1BJYrK 2rWZNA/GMwRh8/a6FgkrBgEEAdpHDwEBB0DZvpVQsPAyOptgl4Uj6bJw7rYvcMoh 7OEfp/W8ZKp0hcLACwQfFgoAfQWCYfP2ugMLCQcJEO0vJeZQ2CRERxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3PuhPlEJ9s+luVHwfXvRsiS rRu+WgLUW0dQFqxrQVySAxUKCAKbAQIeARYhBEtSbifapBlh+diUBO0vJeZQ2CRE AADjLgD8CBcCeLWfPC/nFV9b3+EY9O8ZijivV+iWJyedO+pjr/QBANjxMlcB3srC 4cLQzN+IlmHf7EwPR0shVg16X9mu7Q8BzRI8dTIyMEBleGFtcGxlLm9yZz7CwA4E ExYKAIAFgmHz9roDCwkHCRDtLyXmUNgkREcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmduPsTIuPXfDJ0okknsq1akegGmv8KN5KXhg8QvOg5D JAMVCggCmQECmwECHgEWIQRLUm4n2qQZYfnYlATtLyXmUNgkRAAAZM8A/1PLTk6w lfKan/X7wH3vE35pEW5RbnM9YIO9xNBP9SLIAP4n80fd+04oG8LOcmR7V9FOOAhi NJaMpVjL3nbTV/jNDsLAAQQQFgoAcwWCYfQI7wOF/3gJEFOkGTNFqhfHRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ55PRJzWUalKMEnDvBeh 6eCHovDcU8SlSwbzp+IYviEcFiEEuxsvk65MTUG0OFq2U6QZM0WqF8cAALOQAP9V 6NXjUo4xz1D/I1zuJOsWFmKK18ET3KxD8arLNgsKlgD9G6DJFLD7ZrGISf930HyH fXdEaVfBiLw4YVKlCEJ/agbGMwRh8/a7FgkrBgEEAdpHDwEBB0Cr9XIlXEa4J7ZW CJD1HYB2OCt0dwCQV+9F8Qi8YrYVC8LACwQfFgoAfQWCYfP2uwMLCQcJEKpUnwhv t3ABRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+T9T31i q7kI/k0bN1+Od7MZKu7iFVzunIcjFp0K6AN+AxUKCAKbAQIeARYhBEwBHw+eTFgC Lb0uH6pUnwhvt3ABAABOPgEA0pcQ3F3qczA6q4WjnaVkuV1hbM249VLxUEvft7VU GhEBAP4p9OFaEOJ0BtRArN2Kz4CKvlC8+ZeVZMgMMwOUhegGzRI8dTIzOEBleGFt cGxlLm9yZz7CwA4EExYKAIAFgmHz9rsDCwkHCRCqVJ8Ib7dwAUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeJPXuMwN9f1Jv6JAPFNq1ZoyhZ AsZSdnfv/4FS4o5qyAMVCggCmQECmwECHgEWIQRMAR8PnkxYAi29Lh+qVJ8Ib7dw AQAAFiEBAJApSk9Zjh9fERIspwSD7HdGj9OrwrsFmLc7F/epF/R/AP9lRbBSJf+t KlJbmjfGrtbo4Qjny/zjAt8id1IotRjvC8LAAQQQFgoAcwWCYfQI7wOF/3gJEL4W u4441tjrRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ026 LLXUdt4VjN3uvpmHWIjhlEPwqV6qJkMAv3GzQ9oxFiEEl3lL4f1XKUcNBJ2Gvha7 jjjW2OsAAEnzAP9KS+kulVVVkdJgWVVKFttSAzrNlk9FDK7MbqHkTAi6WQD+M5GE /Yx/rMR2xihDHp8HV0HJAkV0HJJwUx9LNEZOcgzGMwRh8/a7FgkrBgEEAdpHDwEB B0CvxbLjDjxWLjWaFvDE4OUxBk2mUZlY3/zHplNQzOygJcLACwQfFgoAfQWCYfP2 uwMLCQcJEMmF/TUECMeRRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ/hut8zZRVL+dGjDFBUlhm3h2NNBcjOBBkTOWqmUmiTAAxUKCAKbAQIe ARYhBE2I6bMU9OyvmeAmEcmF/TUECMeRAABgOAD/ZHdHXnSgcPjfNLyjNrtdMvzq Z+grmeVGMukT3s62UM4A/0ofF86mpL3Wo9Rznb8hp4fjK3h1ewD407DtQTFE0wcG zRI8dTI0M0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rsDCwkHCRDJhf01BAjH kUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdjBlD2p/FT 4ZEN1T3saPzAch873OT2XyRM9sRKUQojNgMVCggCmQECmwECHgEWIQRNiOmzFPTs r5ngJhHJhf01BAjHkQAA4K0A/2qg/88cMR1vdON+YJJApTHISNJ8QQ/s8Xu2Z/Vs fUO0AQCxfpKDJNNDVZL7D7oTmKm3VAiIeeIhtBSI4BKJeMKoAsLAAQQQFgoAcwWC YfQI8AOF/3gJEMP/4UN3KoWHRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ0tIprU1n/i1hafqJACwvDNO4xlwSbkzbmjJKq7XNBcCFiEEo64U fbyIf6MlhSpNw//hQ3cqhYcAAK2ZAQDI+QroQS3h7zGEAzQA1pTIuFPz8yxJ9z2e Q7otRZ2XLgD/RlNB6AzI9O1X3wxUbst3bgVtZIcygiDcxnKJc25uEw7GMwRh8/a1 FgkrBgEEAdpHDwEBB0Ah4nTrtMB+nXJw13vFA37v/y2wqv4UGtzi3izn0MiS38LA CwQfFgoAfQWCYfP2tQMLCQcJEDYsZoKOXkYhRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ1nraLvICTHinyuMx1Z08qvrx/n9IfZQDsLOk0/C Rq5eAxUKCAKbAQIeARYhBE6eXi4ahocG2q39WjYsZoKOXkYhAACCbAEA2L4ZdbPs tAzJcVrXJbMZgifhyScgrzKfWPr/cMI79wcBAOsvIdfIEwgQNtXyuod0At9FPeec NgS5YTIoWppXjEsPzRI8dTEyOEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rUD CwkHCRA2LGaCjl5GIUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmd42TViSiNAemCam2fveaHojYAaLh8/Tf5iYTt2oeR4GwMVCggCmQECmwEC HgEWIQROnl4uGoaHBtqt/Vo2LGaCjl5GIQAAWx8BAMdXxBmHtTym397DRuX1agnR GQ91Tu6TKVFA/7xLuFjXAP96hWeO2izqV4ToyrAFLMJ6cNbD1j9LH+F7MP4v0RMG DsLAAQQQFgoAcwWCYfQI6wOF/3gJELSfwBl0QAMHRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4hEiluE5/fisDYPJ/reP9TuHz7hMqFlgY/n PYvj3YY2FiEEPJZPPpxXMwdT7lkjtJ/AGXRAAwcAAIE+AQCYD0QRjRlKFP3i/S5s FG+JBXaLOtWKbAuXjEf/bZfQFAEAyd5nOBwxFgnpQnxVPOXi3MPPCNAamP7TLYHD BzxEcw3GMwRh8/awFgkrBgEEAdpHDwEBB0ALwNrwSbx9v2MwZPhZLiiJgp20TPzo gOQcDYYEustM6sLACwQfFgoAfQWCYfP2sAMLCQcJEL8aHGtnifmDRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/ZIAgiKWes7WlTa7G4uR74F G3Gx/FN+L2fPdEz3g+vmAxUKCAKbAQIeARYhBE/ZTCiPOcRjP7vRIL8aHGtnifmD AABtDwD/SEu2Ypn/sncJ7rwrPjjOlrS3j1SSCbP0Q9gr+Wh9U+YA/RzM26/Gk9LO tRk2lvRf6xPiKg83+mbiA3FQcJUrEU4CzRE8dTMwQGV4YW1wbGUub3JnPsLADgQT FgoAgAWCYfP2sAMLCQcJEL8aHGtnifmDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ9iOcDmbb6zkeN/4+eRJVsMiwWoTiPKyALHPZa9vSGkK AxUKCAKZAQKbAQIeARYhBE/ZTCiPOcRjP7vRIL8aHGtnifmDAADEbQD/RCqc8eug tQaAWpiRgjr9czVRtUKunEzfCqaipJYa7fwBAI2z8LYSlYAAG/LEZ/G0k3hrFFpN wMMeUXe6dbvwFhQKwsABBBAWCgBzBYJh9AjoA4X/eAkQqRGH/i29Uf9HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnWBMaF89nBoBLdCGIO8YV 1aY4HZCqRCGrl/Qp6IXaJFQWIQTBsRUJgCVDU1ONnMWpEYf+Lb1R/wAA1vYA/2Yh 9t99uYNexuWTGcJ58prlXXqcPXcy+z9yv5VsugxqAQDU8tWCdfsUpvE5UoX4n5hS j88RQtfgAL4G+zMOP8SgD8YzBGHz9rEWCSsGAQQB2kcPAQEHQGvYLH88VIjj6uOE wtMlq8O2vqg7XoQI3a0fJbcN7C4kwsALBB8WCgB9BYJh8/axAwsJBwkQ4U0BKNfD cuxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnRdBm2IaV R3umu6CSw1VuhWppTc7KCgctC08ZKF7hMYsDFQoIApsBAh4BFiEEUyBChgD825o6 oy2j4U0BKNfDcuwAAE+9AP41/1MIIhmmd04BvW5dfDZjMlACeheAMFr46Hod/0wE MQD/biiRPUO4hjkqUuejgqIOy2zkIpacccflruvCgAsXOg/NETx1NTJAZXhhbXBs ZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ4U0BKNfDcuxHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnKs+wJT5tFfWuYH9xvhZ/RDOgrUf6 Eph972z+jGf1WvsDFQoIApkBApsBAh4BFiEEUyBChgD825o6oy2j4U0BKNfDcuwA AJlgAQDWECl62P4xPr5cL9/PR+mEe03+lYryd5MG291fivxqUgD6AtuJxsVSnep3 xesSB4LDiIrDUXEYtrelNIk/tGVxkQjCwAEEEBYKAHMFgmH0COgDhf94CRC8WbE6 mRi7wUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfNCO/v 1NUeHvexUCjpa2+CgGwLWs/bBNAtEe2sEROLGhYhBFxHLhxoqaWHwq+fALxZsTqZ GLvBAABLRAD9H83W1rCrRMRal1dBld6DgZdyQpVq+pnEazcr0TP3xfYA/3nI+UqS BFKwANousTt4Iln19LgQDr4Hy5Tyh7YFpJgLxjMEYfP2tRYJKwYBBAHaRw8BAQdA qlJEnzUOl5wYn+20F7Fz5UwWJOXW7fMdL2CmGuXJbHHCwAsEHxYKAH0FgmHz9rUD CwkHCRBfUlCfxn9AdkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmc50t/dvfJ75KxHGtJ3OuWra0TuNpnwl2KxhPvQTB4SzQMVCggCmwECHgEW IQRTq2vM4REdzRUeZmJfUlCfxn9AdgAAL8ABAMT7g4KcRF8nqvAOw7uk0beOHSHw 7hX2pujnD4SXUtmIAP4rb5wT/QTYily2pdqwC7d8i+GMaOgGDH/avPxkLniYAc0S PHUxMjNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a1AwsJBwkQX1JQn8Z/QHZH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnlam+RaOJeqXX 8HcPAgMM8AhtanTJt4stDvX2pFyef+4DFQoIApkBApsBAh4BFiEEU6trzOERHc0V HmZiX1JQn8Z/QHYAAAVwAP4hWU9dXLILp0ijR896bln63AAfwfMdm6zUK0ePWuYd xAEA67CJoEgQYTz4mei78bwilk6UBNzSz1Psnw192BZS7A/CwAEEEBYKAHMFgmH0 COsDhf94CRBPIdWro2dn8kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmdzz/CLyr42gVFhHICAkUt60Fe0Ze8OAy6FiGfgIl8PDhYhBFuHVmuq LI7HjH1EWU8h1aujZ2fyAACmfQEA0mulNYhuCeqlDhn5KDV9tyGSmJSkCljZx8KQ WJbLlXUBAMviT0Crnbhi9t5nEfnUuLRd9fVcRuPM08pZNzjrrkwNxjMEYfP2thYJ KwYBBAHaRw8BAQdAKIAYvLOxKhPPZ4Hh/2OIFfuZ1DDTJPllyp1LNWHnjE/CwAsE HxYKAH0FgmHz9rYDCwkHCRA7YUU13Kce70cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmflw99TNJpL6eCDX3CRzwtp90dVQRxOeJx98VyafZJf 4gMVCggCmwECHgEWIQRULORi4aZs7s3koV47YUU13Kce7wAAQt0A/1Q4K2/Livvz YdQflYTbV0Elaof50dcnQ9lgy4+jOQQJAP9R2FrNLspTJYnVjvaTL8avpYP2PShG c9swXdUyU3L8Cs0SPHUxNTJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a2AwsJ BwkQO2FFNdynHu9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnfFNexCIFSELOGBE4ROsieyPPUGCRJIXvsBUTwXH4enUDFQoIApkBApsBAh4B FiEEVCzkYuGmbO7N5KFeO2FFNdynHu8AACYtAP0WluFI/OgJHRlyC4y2gPBzc8bV IQ8gb0FX6nzK6QhMzgEAvdBQOVjyI7YjqtyWfXzKaQAuQU/6DPiAMYzCmbJ9Iw3C wAEEEBYKAHMFgmH0COwDhf94CRCVc1q5ZR04mUcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmfhuqTF172rrw4eDGoxT+hpUffMCU2N0MyWFUYN w9kS1hYhBECQPZA4YE+fAyX09ZVzWrllHTiZAAD6QwD/ZQDAFsYfSvxb5qKFozmR 8wVIDJbxpF1SBMiZm8WTVskA/RVzvddv41549gqqENJ9983FfYSpvtgz/QPpYXUv yfcBxjMEYfP2uhYJKwYBBAHaRw8BAQdAapJCLz99/Ac+y/nDjCN7uaoitjtPIPqz 8Ph4C+8hAjbCwAsEHxYKAH0FgmHz9roDCwkHCRAgR5oRt91eHUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdSM3ci9TdNcme8MWy2bS3aFlgv W82PWhO/zRKro+p6swMVCggCmwECHgEWIQRWEA0Y6UNof3z7w8sgR5oRt91eHQAA HGkBAO6rB2InN4QwVihDH8X5mp2H+uwM/DtgfUx9/qYlkLogAQDmdWziXVi1rebv z6UPuz2dggm2czakdERwmCPzosoSAc0SPHUyMTBAZXhhbXBsZS5vcmc+wsAOBBMW CgCABYJh8/a6AwsJBwkQIEeaEbfdXh1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnB7WEYCGXZb6IIJ0MNzI4JOMC4ozOymXXKX9LShtzsAID FQoIApkBApsBAh4BFiEEVhANGOlDaH98+8PLIEeaEbfdXh0AAFrnAQDWp59edSzD B5T3xeeCWC2st5uqaVVIRTfKaQCX8C2QKAD8DsM9UjtGJEmJs0js5ENnXaWHsDpw klijLmPylvGfSQrCwAEEEBYKAHMFgmH0CO4Dhf94CRARd8EOJ/fSNUcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeiDRuEoayeDAn5cf/IvTI0 c4uYXMaNuYB39XTgHhvAKBYhBNVEAdu94ygF2vCMThF3wQ4n99I1AAB0lAEAvXqX VIK5ZJDYdWVXIBMU1TD8n7s2WjDvUJr92X/60+gA/ifIQqKpH2ZrsC3gYVq1Fk/b 0o2pgrQe5BPvk2D1358HxjMEYfP2tBYJKwYBBAHaRw8BAQdAcFZtHc4w/RRHt65q Vi54i8/zdspsmPlMjTKMt4E7nInCwAsEHxYKAH0FgmHz9rQDCwkHCRDxShssaBqK g0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeb6XxsdfV9 jURt+BuTjGcBq10tDd/l1fP8CdYXewZtqgMVCggCmwECHgEWIQRXBxpg77v/pt3O d5bxShssaBqKgwAA1NgBAKVuo5IwBrJarj7I8A2Zr6FiuUFXtcYlr7HZzNmzZy4H AP4yQcb5ur4B14nUXTd6L9Sss4385EG2iAn/G3lUiNrKD80RPHU5N0BleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmHz9rQDCwkHCRDxShssaBqKg0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme6vIohznBqPsAnbhudukRFNh25qJCg ueS4JOePUU+jYAMVCggCmQECmwECHgEWIQRXBxpg77v/pt3Od5bxShssaBqKgwAA GzABAP+Mht20dPLnV4kEq6t3KnO2oMKglehVlb0QlUSvtuWaAP4/jZGFCpGgCtGT neJJcRzHOrltu4AIJqWA10OuO4Y7C8LAAQQQFgoAcwWCYfQI6gOF/3gJEH8hK/Zp +ZXGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ++4QCXS XR8qOt918N1G487VuOxBmFu/3n2NQvkptCIbFiEEnfmb23B4vhPOP2bZfyEr9mn5 lcYAAIlbAP9O7rGj2t6oHdbBCM3Re+Q8H5TLQdFb4PGYCpFwYh9BhwEA9svIG9eG IRXvCDRGe/PwWOF5C0hWoUzxPzGJvZ2xawTGMwRh8/a7FgkrBgEEAdpHDwEBB0Bl //MtTfL8/6O7+GQyP3/4066ZNwOVYD/fxoeernE+bcLACwQfFgoAfQWCYfP2uwML CQcJEJHbKUb47jqMRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ5f6KgJ9RSNjGc7fFnsNE4m0q3nApy3+c+IVRfocsrN8AxUKCAKbAQIeARYh BFddtSfXjVoGOrQZeJHbKUb47jqMAABDiAD/fUFGbiZtZeezUC7xtaJP6fAbVKE3 qMbDfNyl1wNX/M0BAI84MWsYhXaw+JSWtF1pG4qyDBC7UKo96Sv4yjuUFmYAzRI8 dTIzNUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rsDCwkHCRCR2ylG+O46jEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc5xh6x4wcLZCZ+ fPlwbOHdzfuymUhklVs04YJl2ChHXAMVCggCmQECmwECHgEWIQRXXbUn141aBjq0 GXiR2ylG+O46jAAAQMoBANsoTZ+TswjHF62CIS/MErHzf+psE28sN8pbVY0vas/f AP42g5flrsawWunZxwetef2EzrS1ihtxImM01DauyN6MDsLAAQQQFgoAcwWCYfQI 7wOF/3gJEOJa39zAAS9IRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ58rnWtCGC5vLCE/tPucOZcoX0RCv2OGo3/KTb04oE/yFiEE5AUGAijU m6Q8btmj4lrf3MABL0gAAJ1IAQDMMVHMOVUpT7mhzMB9x18kaJ8MfL7sDdqV9aem zNmDqwD/eYkNJiOCPpLT6WxrlVdl+jovJsLo5LkVgP51m/i5agXGMwRh8/a3Fgkr BgEEAdpHDwEBB0BSyDo7+wNCESfmBtWtcZK/wR1dMc5jXhwKyiDsn08ssMLACgQf FgoAfQWCYfP2twMLCQcJEPPGI6XFKjuSRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ+zqNjqsZV7k0j+ignJ4c0cdaEopneF2edMDD7q/W7rh AxUKCAKbAQIeARYhBFgDXFe2aw6/sGn5t/PGI6XFKjuSAAAerwEAnJ1GLFnfjtSd SwoSveg01uZsJcxFn7yT1Cm9/Ok5aiQA+OGNdl1gKJZq1dsDu7usI1b7dT9Dn2IY O8OQivM+fwPNEjx1MTY3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJ EPPGI6XFKjuSRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z107fasZNqMW+OixAZqrxvOvWsrSfUPvK4FeigONeer3AxUKCAKZAQKbAQIeARYh BFgDXFe2aw6/sGn5t/PGI6XFKjuSAAAKfwEAuAo/7uqqZsnHb9y8SDtBiggglkYh Qd7x9vH1+hCzyH8A/0Bgus/hSYlsSXN5n0kibA5YqALfZw8zAvl5O/ymeTMLwsAB BBAWCgBzBYJh9AjtA4X/eAkQ6SAg/bPoEJ5HFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnQJhP5oniQre424zN7tY3uotCrxZeVk9OSBYyFH4n h08WIQTl87F9VFUh+bU5WxDpICD9s+gQngAA3AIA/iG7HJCRW7iZJSu5sr82sKi9 7VRi0CA2n9cBDmyqqyGXAQCht8C/pB0Jbx6/4LA6A6NADWMDueWRPn57a8btQ4WU CMYzBGHz9rAWCSsGAQQB2kcPAQEHQDDFT5tKaBclpM1DXaSTII4pTxXR1PDC/bEB 8RLhelBnwsALBB8WCgB9BYJh8/awAwsJBwkQr7mvJkO4mjpHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn8dr35UP9Oreq4I9mNCPgBeRUKtu7 fvscYN5f69wO+P0DFQoIApsBAh4BFiEEWRSSyvUcBlFieHI+r7mvJkO4mjoAALZa AQD0Rj6GaNK5RYfJed9OBlzX7dHEfqOXIwz/sRXjN+5EigEAuG6AzvPKQLYAQTyM twm4X4wsk8eZ0wbsJp2ZZ7kvcgHNETx1MTdAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/awAwsJBwkQr7mvJkO4mjpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnnz3/9h6JyYsgRycoMJxPv2xG+HlnOva5TqGKgCuGy/kDFQoI ApkBApsBAh4BFiEEWRSSyvUcBlFieHI+r7mvJkO4mjoAAKmbAP9wLS5y0dMyCJF8 ijVD2l3MFoQZxZQwOvr7Ovi9B3XD2wEA+U/56RCzb1ZTzrYbf8VGs5isSDOAuFly bQ/0xbv6eQHCwAEEEBYKAHMFgmH0COcDhf94CRBDR02aTKZN40cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmed+OqCE+b3xiwcDZ8XuK/Zv1fn lxcJrG7r0WNFQsalPxYhBCffZZruVz4w06ZbbkNHTZpMpk3jAACChQD9EuCWD8SP i4sHsHa3gKGd3c17HYm8xLwJkwH6Zah903MBANHf2AigF3OGLJWWZAKCJ8Y/gUph CAITTn90jekEFiYBxjMEYfP2uhYJKwYBBAHaRw8BAQdA5vZsReCEDYLhBKVM3Irz ROCfEnduG340mEncbc6BtY/CwAsEHxYKAH0FgmHz9roDCwkHCRDAI+0SoPf1VkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdJAYaVjRBh5dWl bUUPtvWEhOk28LCO1BkaucTjmeU19gMVCggCmwECHgEWIQRZWcrH65wcfZ7PELjA I+0SoPf1VgAAwy8A/jW1gRXUtiuBLGZRwGszMCn81p2sYRgnPz0wRxVzcH02AQDH zVppNP002+av6zvsxGY8+MNRjxw8Tw5VDYOvkLtCAc0SPHUyMTNAZXhhbXBsZS5v cmc+wsAOBBMWCgCABYJh8/a6AwsJBwkQwCPtEqD39VZHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnMPBAqkOTaY1bJSmAVY17p5/2zndAuGK8 SUb1DE03FjUDFQoIApkBApsBAh4BFiEEWVnKx+ucHH2ezxC4wCPtEqD39VYAABpH AQCJk6zAxR681k85ZIPRo2Xrw3zEVZyESDcztXphYBtYAgEAu49iQ0qisomV1NhK E4iyuy0ZHclWYvIw7iaxvuuefwPCwAEEEBYKAHMFgmH0CO4Dhf94CRA3XdRNgVoE gUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc69SiTGoFo 0i6agp35p03EpbJLSyGwNoXVviLd/TZ6/xYhBF3Kq3cZjRN4XDQNezdd1E2BWgSB AADj2AD+L0/jkLNm3nO7C3NXIpCNZIgPSzITHccnklNwqblJgoQBAILyBiB1Q/O6 VMWfUpAS1UCk58rCTegY7aH3Z+9TxQEFxjMEYfP2uRYJKwYBBAHaRw8BAQdA31E+ XSK/x5PGCJo3TlF1ZDuiNAWEJnQlRZizm2apaUDCwAsEHxYKAH0FgmHz9rkDCwkH CRAE57gdZ60foEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfE2DF2/KBskrjBRlSdgjdKgornd02HbSNC4pmtAKdZ6wMVCggCmwECHgEWIQRZ xOQcMdHhbxG89RME57gdZ60foAAAqocA/jL5w5Qt+tvSXtPxKSlwFj0qoLfIgDOH Q7Zusd74jIGuAP43qA35GnweSIUzY57UeYGB0LJmw4yTRaBvw+0k8qYWA80SPHUy MDRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a5AwsJBwkQBOe4HWetH6BHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEmZSJ/34C0k8ViGb b7Bgb3JbLEn88f17FMAIOa1u3lYDFQoIApkBApsBAh4BFiEEWcTkHDHR4W8RvPUT BOe4HWetH6AAAFDNAQCrAh+Vay3WWe1DqnzXmNMeZTIymUAF0jkOxEcwu1F9UQD/ Q+FmrutY6qKhBs/4Dimc/2wkQcsEkIjpqkSIYkiVlgHCwAEEEBYKAHMFgmH0CO4D hf94CRCW5AsEE/G0xUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmfSrC9yMfugRmWjpHk8+3gfvtDIqUDVhW/Yxu9g6EIvwBYhBCDf7vQvQYzO sC2z6JbkCwQT8bTFAAChjQEA/XAgHyOX0dSlUELlVx0DMN/MRj2vlWJwWhiWDm3R fUsBALtGs7pAKKd6regl7jZm/lKPkGOi+/9brw8zSz58UtcLxjMEYfP2thYJKwYB BAHaRw8BAQdA/vgmhLIh9Qga+XqnwW/Wi+6iwjkRZqo6g3JpEvYkGjLCwAsEHxYK AH0FgmHz9rYDCwkHCRBGsvKOUTRXP0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmeQ0tBDbUsRX9pxN1jQ8sXOIuRLZ/HAJBnFQKTXbieeHAMV CggCmwECHgEWIQRalisJ72SfQmff2uBGsvKOUTRXPwAA2jQBAIxUtM+ad7QTRNI3 rSxLJ2W80yuFtJm6qMnGgz0MMHwtAQCSI60wvtEkDjw1/IJqxy0Up82zxWV27VGK ytzSrNRdDc0SPHUxNDJAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a2AwsJBwkQ RrLyjlE0Vz9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn FtSJqWZ/RYN9VlmSbyYJFkN6qRrtL28mBLQaywT6ZHEDFQoIApkBApsBAh4BFiEE WpYrCe9kn0Jn39rgRrLyjlE0Vz8AANJKAQDr64xulbdXWLaPiW88WREHSyZOOJrP eG1isK3WJaTgtQD/b3cCsiipLjtvwD9oOUG+jt0T+3bxWvNpxzaU/9J0OgnCwAEE EBYKAHMFgmH0COwDhf94CRCteZ9NWXONVEcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcDg0raaqOyTtO1H9yF2S6lOd6V0F4o6RpXM3wC/0hv LBYhBOAO5uXQecqB43+WTq15n01Zc41UAAAsLwEA75KhOr2jhAjchuTipidMcQQT CWcPi9UMMUBw+JcWT7kBAM3acnmLpPDU/lFh76o8LNVT6YgHHPlw6iQENOqK3uUK xjMEYfP2tRYJKwYBBAHaRw8BAQdARnqkzVArtc5Nk7REOmDVdYqYuaycc1S4mmmh LOM5wDfCwAsEHxYKAH0FgmHz9rUDCwkHCRBPIdWro2dn8kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfy4EH0Cu6FNZ6T7F19DNeheXLXDBU5 DyoJ2WqEKMXQugMVCggCmwECHgEWIQRbh1ZrqiyOx4x9RFlPIdWro2dn8gAAiCgB AKyukSZaknCFnsRNwftPIRqzn1pFI123sIiFHNhYSb2oAQDkR7X8wk8ZszGfa9kw yDzY/sEv7X8e6rp0pm9/r17aDc0SPHUxMjJAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a1AwsJBwkQTyHVq6NnZ/JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnZ9xdmdOkoNG+vYkKUtS962D+xF61VM2LxqQ8To9PVtADFQoI ApkBApsBAh4BFiEEW4dWa6osjseMfURZTyHVq6NnZ/IAABOQAP4o5Cz67WcGuJLo yFkXb9PdmL02kqtPR7/cItqjq3w/1AD/eiE6jiAs2tbnKKs7jGlMFNCCTHLpknMV OLzt1k8o8AjCwAEEEBYKAHMFgmH0COsDhf94CRCNf+jZDwcO+0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd3heivdGj5eP1r/Cr5fupzVeml SOziBiPAeEaYpytdvRYhBIwZ8SqDhtDvP8Cv0o1/6NkPBw77AAAMmgD9HcsW5v1b 9CzS22PDfmUD3fAQgNpqruAsB3cgwyQdFaIBALuSxwYSE8DvLalhqoShsTW+8Fre U50xS1d44pHjLnsBxjMEYfP2uBYJKwYBBAHaRw8BAQdAkUqQF2ZAvg4+FaD2wU6L Ygv7+TyLV2VEM25sSJPcghXCwAsEHxYKAH0FgmHz9rgDCwkHCRDCrQ/kPUc+/kcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcDrnrRa9riAlnD BQgV2SOnoTxgA5WXncJLxef3HMQ6GwMVCggCmwECHgEWIQRbiL8ucWPQWUzg4wLC rQ/kPUc+/gAAu6YBANhEdC6oj63k0/R8w6X4ZYZMTfQgk9R0pwvIcrqWRQQ3AP97 gexOUELVIafy6W+IZmPIFBDZKrk4n1mWen0QxFogA80SPHUxODBAZXhhbXBsZS5v cmc+wsAOBBMWCgCABYJh8/a4AwsJBwkQwq0P5D1HPv5HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnZAocNTBboCu3BcBTUNu+mZhHOw+23yDV Qi4m3p35TrsDFQoIApkBApsBAh4BFiEEW4i/LnFj0FlM4OMCwq0P5D1HPv4AAHUV AQDktP5WQMyjPNFSJ1rAyjCvEHYnjbeHQL8Wb03i97uz5gEA3H/kSJiU5Kux5FZj Svcs9nQYR4nQx8zX8+sL/5sPFwjCwAEEEBYKAHMFgmH0CO0Dhf94CRDxBpGNh+FU dkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeo1Itp+oTe unIKuH8DDYXD38ZuZNRJRnjStzdVlr7sGBYhBEdaRAkVeMAqDFwtYvEGkY2H4VR2 AADVdAD+OEinXKXH/5L8jeSDTkMES2B6airMuAGe03piB6GMUG0BAOjulnzoM/Tp ZpkEIyBZAfh1UVbX9X2AIE1uJUVQuhgLxjMEYfP2txYJKwYBBAHaRw8BAQdA4sWI 11vKb6Iklr7bn5ft3mDd08HhcqUCWb02Hp94HXbCwAsEHxYKAH0FgmHz9rcDCwkH CRAe1L8jnZwQ8kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcKcqlWK2jJuwGFX/zgPa/TBu13plp8st0gUqPvdABL/wMVCggCmwECHgEWIQRb iorFITBkroTJfeQe1L8jnZwQ8gAASP4A/RWnUofT1PESXg86+YUbTxwJL0wULT95 sEVLh8P3OaNXAP9s6NJbryl1Cj1+vQHu0Yr+6OKq6kRMsi4Dae0Ic6bgD80SPHUx NzNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a3AwsJBwkQHtS/I52cEPJHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnaSzhIgw87+tI3LEB mXvkOPAH9p/cnIk73CWy24vhQLwDFQoIApkBApsBAh4BFiEEW4qKxSEwZK6EyX3k HtS/I52cEPIAAFc5AQCxQkHLDjlfgPSVejNMiOpEqf58mjR1MJveeJiUTAyPtAEA 44KUqnA5cr2C8VbwpOwEWirnqioI8QML95ai/CHrsgvCwAEEEBYKAHMFgmH0CO0D hf94CRBSS0B5z1foUEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmeXQcQ22a55LxbzR7OLbsLJVVkJPCG3HrqKivuZTfA8bxYhBIax6YaS9Mo0 EiASwVJLQHnPV+hQAAA4PAEA9DFPoj1SEHLylV42oz15adMzks8Bmqxu5OwP/U67 EG4BAOaZSHdioalHH3LbvK/jMa93kD21G//JSn9WjRUGyPAFxjMEYfP2uRYJKwYB BAHaRw8BAQdAtzCeEfxLV2Xa4NPLzXlZLDtQhLFMOiMwafGPT/3R0XrCwAsEHxYK AH0FgmHz9rkDCwkHCRAJ5zqwYDC060cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfMsKbTkUC9lr4FqKMIvqeUbuFf2BjZ+l73BAwuFVd+WgMV CggCmwECHgEWIQRb4oiw99zYkgDREtAJ5zqwYDC06wAA+18A/02zM13IH6Ru3B0q XvusA/yC6YywvjwQZztyfvrpKdk3AQDchU0BvIauYx6AY+sjXp7pjymH/OYeG+WD fuNkaAiqAM0SPHUyMDdAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a5AwsJBwkQ Cec6sGAwtOtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Ciy1i8pCh2/ldrKySriIpbN1ls0DMyd00KykilUxZb0DFQoIApkBApsBAh4BFiEE W+KIsPfc2JIA0RLQCec6sGAwtOsAADZpAP9aa6NCOr0Pq3hzp9pcw8A9iiKy5Hfr P5RzkQXqr95r8gD/fFtU3cyBLwAiPd+r5pvtR1+T/XF6F6cUuZULjyA56AfCwAEE EBYKAHMFgmH0CO4Dhf94CRALkjSfJ25O4EcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcwStTX9pFlQuwYFLuN+1kWqwDfek/vq22Rl3MoOmOO aRYhBIky1BfTwMTjaU6QSAuSNJ8nbk7gAAD4JAD9GKD5MztpYwc7Swm2+z2tRIr5 RuieGDGDQyhKextAePcBAOt4wTsvAkwbPaNM74Xeuv8OfiRR2oUfDfxCG0EDMY8N xjMEYfP2uRYJKwYBBAHaRw8BAQdAs1yEEm3yjcXuJL9dU6oxd9IRXEnrP0x5bL4g KO+JD7fCwAsEHxYKAH0FgmHz9rkDCwkHCRCIgFJEYzxoa0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmehPdNKc93wck2DJv7Q8HBWzjbvUJ2i HYXFOq8Bv88VvwMVCggCmwECHgEWIQRcJlDY2phClRYUAmKIgFJEYzxoawAA9m4B AL4JYwwLP236Rvdf0HVqtgXKK0vYF2Ywy0N2M7maBN6VAP93WskZopjwhxWsvWZ/ RyNCFOvhXhErF7js+i9OjWzpDM0SPHUxOThAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh8/a5AwsJBwkQiIBSRGM8aGtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnzixwXeeGWLUWKAi5XOau8ZsqO4D0y2zyXl7dYVZWaIYDFQoI ApkBApsBAh4BFiEEXCZQ2NqYQpUWFAJiiIBSRGM8aGsAAOkeAP4z+uCQ9pN4nLof h/pU9LDL9Hf6WJYAmI6+813ui6vHUQD8CQP1i2ADQenI/xptC8m+33Emw5L49Bfj E4/mwo64pQLCwAEEEBYKAHMFgmH0CO4Dhf94CRBqawpyplccRUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfqQC2gzowUzdRFV3C0DCslmmcg 1SFeY1tRoxDvkBm3OxYhBCsLb9sEuej/OjHr4WprCnKmVxxFAAAM3gD9HiuVN3KR 7HJ/DtT9k+YBDFIwUNAUrI6SGq0MujKmEBkA/RooWtznCDF3AbNM3uzAOuIE3ldq Vb0Xj68g0K0KON4BxjMEYfP2sRYJKwYBBAHaRw8BAQdAxeVx32Mr3i9cuv18mh3T FI1pg7zNQQemkZfGXal+OVLCwAsEHxYKAH0FgmHz9rEDCwkHCRC8WbE6mRi7wUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcM0MsXGPgTZcWE Rv18MlyQn3RRXDsU7YYuYChHYFrwsAMVCggCmwECHgEWIQRcRy4caKmlh8KvnwC8 WbE6mRi7wQAA8ncBANPI4zUBk8LzoCPdGzocB5Mi87JFkRq9caTyfjcd6SFAAQCr osPmvBoOGUg+0PVP11YHE66n8L+Vb37aYc23rupbAc0RPHU1MUBleGFtcGxlLm9y Zz7CwA4EExYKAIAFgmHz9rEDCwkHCRC8WbE6mRi7wUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmf0y2rkqewDx2Ag6E2uQjboDqgmIMJMi/jh yCvjA17WPgMVCggCmQECmwECHgEWIQRcRy4caKmlh8KvnwC8WbE6mRi7wQAAxNAA /jcd14rbzSVCRKJTSZLlJRucJJF08iRIgAZlhDo6ezLxAP9TQfnbiQY3cP4bqpb8 /EwUrcsVt6VYTdQNl0zRBYVGBsLAAQQQFgoAcwWCYfQI6AOF/3gJENxKhQmZPc+r RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZz0vuGOzQ2Wv MjGfUwdCtX4/y8PUIsdV2tpm6/tLADW1FiEEXuS2ikgo9cFd2HEU3EqFCZk9z6sA ANUNAP4qZpmf+p29AtUUm4fcoUDqLQ8+Kgt1Xx1eWaIaiGCtvwEAkc7DNNIXm9m8 A/0CfnSJTSx6K7E3YV01Ul93AEo7jg3GMwRh8/a4FgkrBgEEAdpHDwEBB0A02I1I 3x1nN6VoTyFffnndm/5iR6ORYmGYzu6EBZAlvsLACwQfFgoAfQWCYfP2uAMLCQcJ EPt65sKsmVn7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7UvsMOw1JJ671j4rbTvGURKOyKm7Bs4lA0uiqbXlhSEAxUKCAKbAQIeARYhBF0z VRkD4U+qv3Xp7Pt65sKsmVn7AACK3gEAlfQWl/x1ZaOLeaHGC9OrYXOO0DUNyPI+ N4Yp4MCCAfAA/3MTBe+xR6S2Tk/S/cOQbwz+TsIfTY3Aj4Hli2KY9osJzRI8dTE5 MEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rgDCwkHCRD7eubCrJlZ+0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdsl2D8CEu2Z+6gg4aU DjRykNMfG/V9S2DRdv+sw3xYVwMVCggCmQECmwECHgEWIQRdM1UZA+FPqr916ez7 eubCrJlZ+wAAMxkBAPRAy9RpA7SWY57FbIjHWZB7BX4r6j5AbZxEP5YbeqHCAP9y DDjRcawyEjlhCJyQdU4Hc8e75slp73EWuYdYjvxiCcLAAQQQFgoAcwWCYfQI7gOF /3gJEE9FguJ9jXUnRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ5lkhnRKX/aaUJANtYuzKll1b+IDUJF5bgGmtqo1I1Q6FiEEoBowoasZGvnB SMNwT0WC4n2NdScAAGccAQCsVUIb1ANAVw8oXNrTc2NaqI6kYHen+Wq7cKzoTT9T HQD/XYBQ0kev6swZHZJVLaHZzinIoEIR7guqttVRsdyP/QPGMwRh8/a6FgkrBgEE AdpHDwEBB0Dr6gAGxM883rUnB436S0y/AZtfigoSvCLJwcy7SBjVI8LACwQfFgoA fQWCYfP2ugMLCQcJEDdd1E2BWgSBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZyK79pUHJqwVUknrIzALOL/r9SXhwdYO8x/haLKkMiNkAxUK CAKbAQIeARYhBF3Kq3cZjRN4XDQNezdd1E2BWgSBAADgRQEAzoL+evIuNfVvM4h2 xdKsS3WjF33R3RHX66FG1XiyBH0A/jdLMkmF6c4O7h5HEn33V1aMEK4y75WoQ5a9 DTQNM4cIzRI8dTIxMkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9roDCwkHCRA3 XdRNgVoEgUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfz KhKSf/p6I0aJyDdkFhKWa1R1nDNeEQNw+yrUTvkNAQMVCggCmQECmwECHgEWIQRd yqt3GY0TeFw0DXs3XdRNgVoEgQAAyoEBAJFqFNZITEgKng5Si7Gxap4c8Q6wCIMw 4JaSYH4roj9YAQDmfrF4yTjwkffkIcBJ8peStXNeKGhAkFSPVUOinf2TAMLAAQQQ FgoAcwWCYfQI7gOF/3gJECHagXIQLsTNRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ8nVbS2QKDY6Ol0abiMOztRRIDaYJPEU6hZMs0U6LvGw FiEEk0lwOneb03JcXIIuIdqBchAuxM0AAJBGAQDmst4czWBp+Uci+hFkA9EuL/78 2onv9pRe3FhVw4l5+wD/akahzrXf3Q6+gV1RmokBQbSLl3MwtIP8NeszRVED0gvG MwRh8/a2FgkrBgEEAdpHDwEBB0DBBzQQZ2/AbSABthNBuTOS3SY9MAgLmuBJ/QMe sJNcCcLACwQfFgoAfQWCYfP2tgMLCQcJEOEGoydtg//RRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8ny9Drq3jzks+Rja3i8kFNiCzxsFlwX 5W9yhzUZo3oqAxUKCAKbAQIeARYhBF6cEoJZuVs8kMZR4+EGoydtg//RAAA8IwD/ bGBJrkTuxfq17elkJ95GDlhoqguqezpBxx63rnfowgQBAJmf7dZO5Xc4mHMa3ymc a1vQ45RimJVWT16Pen4sYEUEzRI8dTE0N0BleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rYDCwkHCRDhBqMnbYP/0UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmel04CLixGVWWZbcbVug8qot7cxpO/817LilmAwOz1utQMVCggC mQECmwECHgEWIQRenBKCWblbPJDGUePhBqMnbYP/0QAAIF8A/10osdOcuEUs1Hig NF86YbKW+njKG6YrUPjM75AylcZ4APwO1mizID+3JZeBdstKO54w8clTsYYhlmA2 blhvpDvlCcLAAQQQFgoAcwWCYfQI7AOF/3gJELXLF7VQzA3iRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8ZHkY5B1Q2FaojY0i9vooJemC7n bR14HFhFThKQwCfDFiEEF95DkqFl3ILPUOh5tcsXtVDMDeIAAN/9AQCUTX+nZjIj rEZeTpgbIUlS4bDquBE8T0Z/A/9oBEkr2AD/Q/yWUPqUNknmzPQhTs2zZXSvNMSa TbGl/GDrcL6SDwzGMwRh8/awFgkrBgEEAdpHDwEBB0CxZettNHiowNAuxEGqcAGX Mz++4mLqim4YtkU0rTKwbsLACwQfFgoAfQWCYfP2sAMLCQcJEAk0XvEEWzBKRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyXKgy/dblIfC7Ai JSJL8zRBlSfka+WtQRJxIGLvvY+FAxUKCAKbAQIeARYhBF7HQApznlebcE5hiAk0 XvEEWzBKAACa0QEAm1FxPsrstYcW1uRumSTzW5+yKhz5U/AW9q5GrdE2kUgA/ArE udH0nTm8qu744FdYv/EqVGQJTvY7rtBWVFKdEt4JzRE8dTI2QGV4YW1wbGUub3Jn PsLADgQTFgoAgAWCYfP2sAMLCQcJEAk0XvEEWzBKRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7ioENZONiYCHK8TIfOyruGvpPJ92goXDS/y Kc1A823aAxUKCAKZAQKbAQIeARYhBF7HQApznlebcE5hiAk0XvEEWzBKAAD8QQEA q75V4+jGdr/HSatpygaVxcpaMzRChp4uqI+6f77CnL0A/iMXG9jUV+AC9ZCVO90Y 2nu7BFlzcUab9kwTz2P8IWMHwsAABBAWCgBzBYJh9AjoA4X/eAkQDOM3WvqTmKFH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnrqCNueFS7Ss1 P1BhztExruXTS/2tlGj6s6XxG1gVjMcWIQSb+JM/ylMG9Wf19XUM4zda+pOYoQAA hmIA/iNN5rBoXjszPNWazhNLTqe+qIteWSerCZsaYOtP5UHwAPjRnAM1LcktfnWO RjBSrFWV4I1dgCnFeUA1autrJT0CxjMEYfP2sRYJKwYBBAHaRw8BAQdA/YZU6vob vI0n4td+8Rg4ahcDWar3ZI/NLzi0PljcWHrCwAsEHxYKAH0FgmHz9rEDCwkHCRDc SoUJmT3Pq0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdQ jBo4h2E+33Nq4uu80REd1IkhotvyOdvTUpQ4xZrOpgMVCggCmwECHgEWIQRe5LaK SCj1wV3YcRTcSoUJmT3PqwAAuV4BAPbqvVnnHB/HV+C5J1kNBSw7B3GIyS0cl6WK IHyvKGJ2AQDOCFWkNxRJEoXDgp/KENMNkI/9x9jtRzXJkYjZzMcuBc0RPHU1MEBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rEDCwkHCRDcSoUJmT3Pq0cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeKJwJIx0ZZEfyRLPhqasHL WvkIceLep5A8O4PWIEWASQMVCggCmQECmwECHgEWIQRe5LaKSCj1wV3YcRTcSoUJ mT3PqwAAZDUBAIHB3T8HEv/dUZDxWYbkWqA2GbM15AVWuli0auguPU8YAQCi1iqr j4wU7RTOPqHz/FTck3sxnMBpGconDBwVZYsPA8LAAQQQFgoAcwWCYfQI6AOF/3gJ EPJoq19qtEeCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z//VdlO/29n1lP62qSkh5wHUJnFff3kMDWyeOXnMnfUMFiEEsSVtmH8niWAfxdj6 8mirX2q0R4IAAJ7rAP0U7ZoceXmHrxHkRhpIsLCIucUCyNwezgSesOLKqG7E5gD/ Xk8v5s+mq3FkYlh8gCOmdDC67B+g3LhaTmn9dewVRAzGMwRh8/azFgkrBgEEAdpH DwEBB0AMjfcVwId82PLbKeeJB5lGS4HFL3IFcy2NW494Zp0TYcLACwQfFgoAfQWC YfP2swMLCQcJEIh+PtL54N2pRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ3k2+qohCSZ69PFstUrbrnwgAEZf6is4Q9JjSrk1PV40AxUKCAKb AQIeARYhBF/1yMvY1nBWWzAFGYh+PtL54N2pAABsdQEAyKmiJuWWsjsy+eVS1ac4 DiUDfxg6xIStxV+eFTPvh+sBALF1ET5cP2lEs40yPamhKTFUbXeKZvr5yZZDmEAz pbMNzRE8dTg0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2swMLCQcJEIh+PtL5 4N2pRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9VDsb8F wpTWov0A72Fk4VPR60ZZOOhOnsvtzjnHyu22AxUKCAKZAQKbAQIeARYhBF/1yMvY 1nBWWzAFGYh+PtL54N2pAADJdAEAq0ZM7kXtGjbls2omh3MWE+jlSIzHIXTwNFB+ ceOSOCkBAOd+lZOaeFMqRRDmFKTpthfXg6vTLvpBrt8AyPPWLfUPwsABBBAWCgBz BYJh9AjqA4X/eAkQVVySpwswOGBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn/yw8Xk4kA/HvZ7Gq+dxXVKmJH/2C+NVndrcfFHakCEMWIQTN Ig5Ysw0tHLvFuSFVXJKnCzA4YAAAp0sBAKeIgE2o0nwTLGLOC9v8o9mbROcXE7ac 4CLdBrrcjLR6AQDrSZZOep2o8X4vdmpgHSOfuv/eFZBvAbQw/D4DHEwxCcYzBGHz 9rkWCSsGAQQB2kcPAQEHQM8z8Rd/GtllRZ1qwU189HA/3HAEWPDpAXBHNVBXOiUE wsALBB8WCgB9BYJh8/a5AwsJBwkQEHWSncbaZ0xHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnHv8/VuQRPQEj4U72Hkn9fxVFaD8P3f4yDL/r MNvFVbgDFQoIApsBAh4BFiEEYbANzcAgafRvINf5EHWSncbaZ0wAALv1AQDaUE49 Wmis023pl0AzrwB0/cz71hi5/Cxtz2xNZlcu+AEA+12k7yu7C8gAXu5JamwOLSYi bZzMKvzzvB3AQQ+9zgXNEjx1MjAwQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2 uQMLCQcJEBB1kp3G2mdMRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZy5uTCjUD5afdBtSe5MWeMWiBk0lVG3d9lgukfxDGPqtAxUKCAKZAQKb AQIeARYhBGGwDc3AIGn0byDX+RB1kp3G2mdMAAB4tQEAtka9sooSXiV9ca1jf9JV dllUt0LN1wqqDXks6g2mJd0BAO7zWWUsrG+/Y6GaL7DIIH+USRCrwmlDMM6j5oKp XJgGwsABBBAWCgBzBYJh9AjuA4X/eAkQNVrCm22LZ/pHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnOZ/oHLN6IQ9HFymYlI+vwEfMmPVFIvSI qh5uQ9/8qc4WIQTuplArNKsI+i872h41WsKbbYtn+gAA87gBAKrXNTjPpm2yl7Q4 B3SxzugUt0AR1uGh2YmjINUrdoG5AP9LjLpb7ddNFj+lSS5KjzeuVfNmThVgO9SS N9KY7bpvDcYzBGHz9rcWCSsGAQQB2kcPAQEHQPa/TYWuCstbdhwS+JUhQz0PkEif Fhs8z78swH4DgEIkwsALBB8WCgB9BYJh8/a3AwsJBwkQqmCUHmMZnZ1HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnRLHuMVkRPtAkcg5UaSZO gGtDlyPlxY3afbLlASa0oFgDFQoIApsBAh4BFiEEZKmFk0T1BzsYO9XIqmCUHmMZ nZ0AADoeAQD7ZYaZQ9VhhW9VbWzFL2FI24AY8Sl/RHQvdohdT5yzXQEA+Emc1JQz WSktR3Yq/d2EDT/SZAz+b1RyWRfrx5Jy1w3NEjx1MTU4QGV4YW1wbGUub3JnPsLA DgQTFgoAgAWCYfP2twMLCQcJEKpglB5jGZ2dRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZyY1+0lpf5Oouhh8/7+7AvSfl/OMW0DVAPFqB9ib GV8jAxUKCAKZAQKbAQIeARYhBGSphZNE9Qc7GDvVyKpglB5jGZ2dAACL3QD+L85u 0LynTZPY8hLTjsXVvo0VRWw8O94fMICUfWpnsQ0BANg6fzesq5n+yk320l6LJddY FowRjDszLflNx5/cp6UPwsABBBAWCgBzBYJh9AjsA4X/eAkQ23WA0beNO8ZHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnpc5GsuXUgJLOXiKx IqWEQ/JHw431yiJO2zgAdWg+fPoWIQRFBG6Ymy4bkKHa61rbdYDRt407xgAA72kA /jWhICMGImsvooNV8TLL7WI34jEWIppOB97EWp5q/xGTAP0cgBREkpNrhey+zxRn Esw3YUHR7Riaf/fb/dxsCFtSCcYzBGHz9rgWCSsGAQQB2kcPAQEHQCEpd6yp3mZi Zt1f+UjlSe5n3CojXuTOD915hFDVDhJ7wsALBB8WCgB9BYJh8/a4AwsJBwkQhfm6 S2iqUXRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnQizO HuTp6cg5UWlW4OPGn7UnA3un1PdSmbYiWSC6LnoDFQoIApsBAh4BFiEEZbLNnmpv ajZJa1Sihfm6S2iqUXQAAF3RAP9oH27BOqFvkwixZRcxaKx0proCW6Or31hsljfF X2RDzQD+Jd0Qt8ewDvlmhV0bT5jd9Mo/4dhpWddmSxtZRQ4rPgPNEjx1MTkyQGV4 YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJEIX5uktoqlF0RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwAPnII+feMCVqFZ+svnk4D4 fFXNPHd98NhIS610ZhExAxUKCAKZAQKbAQIeARYhBGWyzZ5qb2o2SWtUooX5ukto qlF0AADc9gEA/ZIDyMpJL4JrThtFDdLBRe7b+jSr6FszEmUioyUaKq8A/iBnyTS2 RI933rK72BdAI/ySvL/+LZw1D2Je51YUwcYFwsABBBAWCgBzBYJh9AjuA4X/eAkQ D3xUP5WiHu9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 8T6+Yj1f0AygQw7UEZN4kUDvhW2u/RmfEP8lMIzvfXMWIQSzeuhPsLQib7k1owkP fFQ/laIe7wAAXUUBAM7IYLMclz9H0a9ADfI60L/w1Df2SWeg0EEPPP5UmKJbAQDh Kbo9k6a3+LQ4ViX5/HH0ypvz4S4Ut3ME2JxPE4uBDMYzBGHz9rUWCSsGAQQB2kcP AQEHQP7VNPuKVgyFNcitVVWyujepZWSyKfKUcsxK+H8jOtXxwsALBB8WCgB9BYJh 8/a1AwsJBwkQXtrTI2Dt/GpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnEbr8Je2vQzeSRBVp7xGP831b0k5kmV7XKhAw8BJ6eqwDFQoIApsB Ah4BFiEEZgPqgjvGQaRl2OXEXtrTI2Dt/GoAAOjIAQCOmqPf6xBpMd881iTap+iv 33UWcIP1p+bbYLnfmzMJLgEAr5c5wuKOaokYgLQ6YeQMmkEjTA3AdO2+IXwACa+L ygLNEjx1MTMzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tQMLCQcJEF7a0yNg 7fxqRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/jfCzJL lwrveody9exbAhog+aOTgiTMahpudwz/rlSaAxUKCAKZAQKbAQIeARYhBGYD6oI7 xkGkZdjlxF7a0yNg7fxqAADD5AEAgAR5NoYLFHjZKTHaGZHx88ITtC1lyV10Qj4T KqIl26YBAO7Wxc7vSmw8RvGNCVsFxD5XAVYyv3LBgM+qLkqTde0OwsABBBAWCgBz BYJh9AjsA4X/eAkQnuHqLov4gCZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnPbe0QWkK6QrqXaAsOWd3Bzm1uz4g3+K9hs7dGuFR47oWIQTg UjY73Ke7N0Vwd0+e4eoui/iAJgAARJUBAJV6gjpCjeAhs5XtO1CPOk3Q/Xn5RL7B qn4LDKvDMm6lAP9Y+uz3Wa3fe08IE/wpCptb3uCJZkXjhWhUIEa22VQzA8YzBGHz 9rAWCSsGAQQB2kcPAQEHQIN3iJt6hJf14TTOMn/iOvyHKMt97b3YTmkCklRs+fxt wsALBB8WCgB9BYJh8/awAwsJBwkQ/SR1hMyjyLpHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnSDLLudF3qpneU9q42TuWBNyzQ8Y4KbKdiHz2 4slQmnEDFQoIApsBAh4BFiEEZtD5UyXUoCo2wUJl/SR1hMyjyLoAAF0wAQC3MEh7 GSFC5UVy3DbrlKBZGLYeyDYFOxiVRF1fVy90TgEA7trtVu/TmUNcsZ+jezUTNk9p Lpf/LjGBJn8vwmjkKw/NETx1MTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/aw AwsJBwkQ/SR1hMyjyLpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn0Pl2ELK7CjBmuOLEgnGvwTBpI5z/u7+ZBl8dk3s/X/YDFQoIApkBApsB Ah4BFiEEZtD5UyXUoCo2wUJl/SR1hMyjyLoAAI8sAP9fxExxlIgIpX1JC6Luobyx RkIiYrwUlqqcv4B6rh7VBwD8CQciJH4r4gNi5B6Y00lJgnn+Y3VfMmyPkkZPeVWo KwbCwAEEEBYKAHMFgmH0COcDhf94CRDdGTqWUXV53EcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmeqHFKNdkOSQfcf9B6XrN19kYYcProfAaR1 PQbSo+LjRxYhBMt8bT/LuNoLPX9uwN0ZOpZRdXncAAByyQEA7rrBR5PqHU3TAZ41 W60MHL2CanAnqmlbN5Cu5uGNXd4A/0kis9xCoNgjG7Aelkmt+kYnlseEhs+GYjBt nnj9DxYPxjMEYfP2shYJKwYBBAHaRw8BAQdASwno3C/55ZqZzdkFkk/f8TUrlrhR 0rlVfS2W+Yz5AEDCwAsEHxYKAH0FgmHz9rIDCwkHCRCGN2rNGWS+SEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeVX1zPaur0TXRthuywSQLs cwt0mPyWAHesAn0IQzPTWQMVCggCmwECHgEWIQRm3yaQ/qxgbChapNmGN2rNGWS+ SAAAhskA/jkKZtVLw4sZI2BHeRCiUcF4JVYgNMZPEi/FIM0omVMtAQDuRlhGbxIz ScmJcHch/wr6dtiTMQFCjq9ABlp+eoaMB80RPHU3MUBleGFtcGxlLm9yZz7CwA4E ExYKAIAFgmHz9rIDCwkHCRCGN2rNGWS+SEcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcP3jgNenrQWctU+69rFZL25w/u4AY1zzNKMO2nlpyk TgMVCggCmQECmwECHgEWIQRm3yaQ/qxgbChapNmGN2rNGWS+SAAAceIA/iE3Au9/ EHsqseEWVqUrB/TCjSNPobcDnkN0/xrtmED4AP4lQ08ARWOv/wI0QnG/YhxuCwbD HWHTkqOnk6wPyKlfBMLAAQQQFgoAcwWCYfQI6QOF/3gJEFYE5KVbT3WrRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwEuzDK279S+cpGMdUZ8 SfFD+RNtvt5SxnUzo8DDnV/5FiEEaZPuPlxGU6A+rL7CVgTkpVtPdasAAKAaAP9u rYBchS03XpcNNVC0Lh0+96hoJwAjOfxd/NYmFfSQSgD/UigAhl2zGIj+NZs+kMpm GOOiVonlZHO0wcs81/KmGw/GMwRh8/ayFgkrBgEEAdpHDwEBB0CJk9fhlK17EDEs Rr6IobfQs6mhjehMMrQ7fB0CsMTqasLACwQfFgoAfQWCYfP2sgMLCQcJEG2/yQhL /bedRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4D8y3Et Rqv9Vgx5ThqRQJTFrlJQt05xZvh7r8Ycr4UTAxUKCAKbAQIeARYhBGgK3xGC0AUS 0phBfG2/yQhL/bedAACTSgEAs0ndJ/oUOkS790GU9YkKGkkfxzqo+BineTmGYVA+ qBEA/jtdgBZ6BkyOfiQjKEOurtNBP1iL+1QWzNjDrvMCoL0KzRE8dTYxQGV4YW1w bGUub3JnPsLADgQTFgoAgAWCYfP2sgMLCQcJEG2/yQhL/bedRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwdyOZnAzrYx/OfddqosXYpB283n Zp13mhNaNFJb6lKeAxUKCAKZAQKbAQIeARYhBGgK3xGC0AUS0phBfG2/yQhL/bed AADaJgEAlsOADcWACJy2J5FidM0EYMqKXbZ/shU+1a4mzFOkXpEA/R5E4JxQEVgR RiyrRQtCJAqz+GSGXEJcsPjTawzt2WQOwsABBBAWCgBzBYJh9AjpA4X/eAkQ/vND 6nkOIzNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn8E8G Wx2/9IMPE6z7zUxdxBVjsXaEspychwTKJ97o84MWIQQrXh2UgTztHNY6Pyj+80Pq eQ4jMwAAnnMA/imoTDaG9ZJTDVGuryLJ0hh76X11NKSY86d/iMyVUGiCAQDsbuKD +VYAE1dF8Pd/AFQrape1EKsVIotTOCJ9TgibAsYzBGHz9rQWCSsGAQQB2kcPAQEH QEnr1+UNjQk2TpI0Y54w6npu+oosLwQ5vPj+Lk3BTb0ywsALBB8WCgB9BYJh8/a0 AwsJBwkQf2UrwYLwh11HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnWABVwTY6KiiTPVTxHSPafbKs6gOQPV3YIIE+Uz6bkJEDFQoIApsBAh4B FiEEaESw2KsddKV2YxEVf2UrwYLwh10AAEl9AP0XK5LBZcqgCHnedTg8ITS6QWHf C1gzA1fwH7EVl2MnDAEA/TCIci0Xz7jKr3ZH3eniVzSdkpAckQ0KUNUiXGOwDwLN Ejx1MTA3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJEH9lK8GC8Idd RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1L2yV0aB6y1 UXlqWl1yIyhobuLuOqoBmFUNb0C5+4eJAxUKCAKZAQKbAQIeARYhBGhEsNirHXSl dmMRFX9lK8GC8IddAACvdwD/UQxTPQP+aX/LoTmVE/bF3ax9NZfJIHsixZuWFSdR zfYBAJNRXl1Mqcn4IH3Bw+QiuQ1NCDeGWoViMwHfFofATIkBwsABBBAWCgBzBYJh 9AjrA4X/eAkQbnVmdOjeVfNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnKnTxK59DivLqkfINlqRjd7TMb31y3kiV2iNqS5ylRzkWIQSqlqtK apioOWdmIeZudWZ06N5V8wAALwMA+wYwwEDtBOinCFxZNPZ/we21Ir4pktOgxlM/ A68yS3zZAQD7/QKXE4DYpce/ahgT9l1LzqwgMsNjqNXVshyWDv8yD8YzBGHz9rIW CSsGAQQB2kcPAQEHQMPyWNZBbMrQ7BDty5F+XWkVZaUkY8HCl7JJ8N/OwQdkwsAL BB8WCgB9BYJh8/ayAwsJBwkQVgTkpVtPdatHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnLkrZ1arnU6NzwGptv19gisdHk/i2jjdkOMJtYQ8s BuYDFQoIApsBAh4BFiEEaZPuPlxGU6A+rL7CVgTkpVtPdasAAGr/AP9wXUKxJB3N vLAXTtsTntkngyu+sLiO+mfgO8iiRqjPHAD6AzOfmI1EWOcCtPW7kDSRVQvEJH8Y 4JZB9tdhCFPmswjNETx1NzBAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/ayAwsJ BwkQVgTkpVtPdatHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnWtxI7rDe8TDGCzSWFojojljRE+J0uJuki5o4OgnWJvIDFQoIApkBApsBAh4B FiEEaZPuPlxGU6A+rL7CVgTkpVtPdasAADQ/AQCTAmSLpx8kkFSKPNB9CYaZkI+Y e1sD2RlIrbb2aNflbAD+K0vO2KqsjHg/bEg9S3K51oOuKoUJI808SFqFmLOxeQjC wAEEEBYKAHMFgmH0COkDhf94CRBXt5GItSvTRkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmfQHVo7hxz+88dqU0VfT2hVvDJ8eR0EN+wcAZ4X gjYLCBYhBIqf4HtASCxVWaZ3C1e3kYi1K9NGAABOhAD/UQW2sDUkaM/vugiXcss/ f3ESATRh7+9BciSEtmiUV4UA/3F+FAxsp3SI8W33ZtsZ6qAg4hl1yBezkMqB/H6M vvoMxjMEYfP2sRYJKwYBBAHaRw8BAQdAO5MJYbyHzkvmWSndWAwHUmpEUNLZXSpp 8CfwHEh2xYXCwAsEHxYKAH0FgmHz9rEDCwkHCRAVwz7xO51/6EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeFennL178FUs/C7kOJJbcUMy7w WmfyaAC687de6hZZowMVCggCmwECHgEWIQRrWiXC3UCuWCcvsX0Vwz7xO51/6AAA +isBAIB1pEnHAJu82LhLxTlpntgjLPCufWWeBKSvtL+OdF/jAP92OvqdsMpui4Ew 7RpahdZlGrUNxCQtkmVNNMWvi2h/CM0RPHUzN0BleGFtcGxlLm9yZz7CwA4EExYK AIAFgmHz9rEDCwkHCRAVwz7xO51/6EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmc72FvfEIdTt9IMW5AE+g7qQzclbHPVgJJCp1giybZr2QMV CggCmQECmwECHgEWIQRrWiXC3UCuWCcvsX0Vwz7xO51/6AAA2uIBAJELemp1qJXx yl+iDU3QnUvbNuq3ZHEk0+dJeld08UsLAQDAI+9A8hzFI4M0E0S8j62otyYcKuzZ CGLJGxLrs3E5AcLAAQQQFgoAcwWCYfQI6AOF/3gJECT4DJXVuDEORxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ53TR4LxnW2PrIyBg0pms+qI TGL/jgwsDsjH81d8ZS0qFiEED9+vZGBrbHK/HJQNJPgMldW4MQ4AAIkNAP9Gvk// Vf3lT1ZZ2UMveIPW0wlzZOQrLsZqlSiSS/72kwEA8DJa4W94WIRBB34RYgH9eBOQ GX2u+b25ROvbNcvfhAjGMwRh8/a4FgkrBgEEAdpHDwEBB0BtGrOwYM8morOy+KLo OxXEqOA49YoNqbCetKKYdOUH5MLACwQfFgoAfQWCYfP2uAMLCQcJEExygPffnabm RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9VPV+PDCwlB gvwW6D6Y/tWAkumBcjDatZPGWW3LWF87AxUKCAKbAQIeARYhBG1rhGuGYfEBPnvI 1kxygPffnabmAACpJAD9GotMMquiYw/BEMsOi8wSZz78xCp3IgwIdWSEX6efAgkB ALcPEca3ugmXeviO1h0xgCpwfS0aeSACiJ3IVJf5LKUNzRI8dTE4MkBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmHz9rgDCwkHCRBMcoD3352m5kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfBC+JkyZWj85tl2byebZ5RPcMRl+zj 5tXsI2bWiA5O/gMVCggCmQECmwECHgEWIQRta4RrhmHxAT57yNZMcoD3352m5gAA Bm4A/RnTr8e8V7QxXeiKRBN0qpMcrSktL+CexGzEE1Gt77/xAP48oeMZcwqVhIbA r4lPl8o/csoidx1I6L36g3dF/HEACsLAAQQQFgoAcwWCYfQI7QOF/3gJEDFpUK10 KcH6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5ETKxPN C1O3U5K2ZMKmjNH6mIuRShmCWhkBP7+bYDixFiEE5K2k9dcCrVEML3oZMWlQrXQp wfoAAEndAP4nDXh0BiWRRrftKAKKNSgSe1GRUM1nn+Xo4gn+Od4RiwD/ebt0aNpU GYsxtsIbAetZNOL9J4B625e1Ybxq4AfqkQzGMwRh8/ayFgkrBgEEAdpHDwEBB0BO AeJCUbsEwRJpxFjVK0q40WrrCZv/kpSISS//EVq0fcLACwQfFgoAfQWCYfP2sgML CQcJEAzXJK9BConORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ4yhzYuvs1yDz4DGw35Qdyn+PvenxxTHOz3eQJzen93+AxUKCAKbAQIeARYh BG3jPDc1kGt+aa5ZOgzXJK9BConOAACzogEAia04GA9mKjVtFdWxPz5AL9RK6yMI POZiQhbphKYhVIoBANkJkqFzyy3gcji2kHZXJNZUwyR9Ti807IU2yKfcQJUDzRE8 dTU1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2sgMLCQcJEAzXJK9BConORxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/7GvQs63VC0wq5a mMzvqke2vyLvde/EksXO5jNGW5LdAxUKCAKZAQKbAQIeARYhBG3jPDc1kGt+aa5Z OgzXJK9BConOAACdiwD+OBhfQbqm7a9ADHJEPbgBycADZVmaVZYsgRtMCyC+QNEA /3B1T0Av4SubMXqfCp1jFagYOBm9a1Cjin3ys6d/o/8PwsABBBAWCgBzBYJh9Ajp A4X/eAkQFGt77TggnblHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnTSTK5/CpVwazwbwMITGagcKeMfJc834HoxALt/YrfjcWIQR/Tf9vwnaZ XJTCv5IUa3vtOCCduQAA+4gBAKdU2KbAux/OdH/NIZz4kUooOmNDM+ojdEkq1MEK U7wzAPkBXUx4TndumJxRL7I9PFCRUvugcbR4/u/toc7hHeCdDsYzBGHz9rgWCSsG AQQB2kcPAQEHQJy9Kou2Lsfo9jNq3x7O5gH7zd1fh9aHkLJSacdD4rPywsALBB8W CgB9BYJh8/a4AwsJBwkQdLC+g2/TgtZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnckWlaGPodZ964Be7r5WoSHxQRHWJDZtGBueJrFBt0SMD FQoIApsBAh4BFiEEbsOhCqC2tw3FQIyudLC+g2/TgtYAAKsJAP9mkAVOVwRp4Qoz I7ZBLPB/K4U7Qbhi3c2kTxq1nY1UlQD/Wkj07O28EuR375bW7bPY1znxeuskG7fA LNa1GkmxowDNEjx1MTg3QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJ EHSwvoNv04LWRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zxw8nsnYadqkRpH+Yrt0f+ZBGRya/MWSu1dLw0hKmk1RAxUKCAKZAQKbAQIeARYh BG7DoQqgtrcNxUCMrnSwvoNv04LWAABoWQD9FfSdEODv/hjBrF7c5DuEN9XWF+y+ EIyCiCsqWQIUNCYA/jnTo/jRN0KpvpifDq/nG/osoY8O1O1/ytmcu4ZhQ3oKwsAB BBAWCgBzBYJh9AjuA4X/eAkQy606Rlx2OWtHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jn47+PfYb+yahmnvatgBPNbavCnl12k2e3tluRrwHs n1EWIQScaOmBmP+ZZPojZq3LrTpGXHY5awAAmnYA/iJkPdnXXcbGztN5Nmoqt0s6 H9Kffev2Edw8JT6+RYpgAP9IkvzigNHg6BamyuDcfnb4VwSSoNf/TIls+FjdXGz4 AcYzBGHz9rsWCSsGAQQB2kcPAQEHQDbcCpx9HQ2x3OCFFKL0RCQxpvEXb1fHcQQ8 TVblSkkFwsALBB8WCgB9BYJh8/a7AwsJBwkQvAPWqPzGzWhHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnmStoNR+U2cF2x1q9WHBXsdXlACDH wB5ZQyHOGdp/JKkDFQoIApsBAh4BFiEEb3V8Y27U4VfW9lcNvAPWqPzGzWgAAOjy APsH4/WWsTPDuHQRTS+SjD4nVoKo7SKWjmXuKgCAL+Kd2QEAqSrSYa1NvtsLxg/a ai1wG9hdBZwlIZDccE0eUKKJtAbNEjx1MjI5QGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYfP2uwMLCQcJELwD1qj8xs1oRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ1YXZwIorqMnXJAHjmxY9dAKkZ4KDXnf7nIcgtCebOBiAxUK CAKZAQKbAQIeARYhBG91fGNu1OFX1vZXDbwD1qj8xs1oAAAc6AEA0izBWAtOXvpk KJfdME/dc4jWFbhI2SCv8Z2KQzC7RvYBAK+G4QvCz8pvPQoRY0WZW7lUULnMeByv S3HcmYJUVD0CwsABBBAWCgBzBYJh9AjvA4X/eAkQAtRWeeNeVVpHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnBnVrvvTtIH51cSFeChGUkKPr tcojb1tHdf95QSE8D/YWIQTSIOsPgz25eYPyIdkC1FZ5415VWgAAhl4BAJjDn0v5 aKYKxfp+Hi9KQgi96vl2cJfGXObUcpelOB1QAQCcBuZXFXNe8664D7eSSJ2pys5E Oji6slpqZgJ/GZllAMYzBGHz9roWCSsGAQQB2kcPAQEHQOnU7wds2vfYW5B26nSU GHCRtdz/Zge+2sfp7CDuDaRRwsALBB8WCgB9BYJh8/a6AwsJBwkQUfq5EPEA9qtH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnXSGV/J2NeInk g60u/yU989dJ8auXImvtZmYSefdeZUcDFQoIApsBAh4BFiEEb4DcgNH0wUgQdQyv Ufq5EPEA9qsAAK8IAP9jUmWG4vs+ma4l99eN8+5I1tNHSqvrE38t/Wu3JS5n1AEA 9hkRHuD6KyUCYQChpGYWr8rCWPCWBYaHGw58YDkNjAPNEjx1MjI3QGV4YW1wbGUu b3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJEFH6uRDxAParRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4iGDtQeVmJqI5Hrzr246Q3iFRX4bHIe /XXgSA3cKsniAxUKCAKZAQKbAQIeARYhBG+A3IDR9MFIEHUMr1H6uRDxAParAAC6 iQEA3SwuZ9n0srQihxgCaxhQ2YopmVY9+N/xutK40t1+n7wBALIErD3l6M6c5Ejg vJY9iG9O9wIEkRS9XMEupMJLbaEDwsABBBAWCgBzBYJh9AjvA4X/eAkQntcHkCBk z3FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEQZOOE28 aTivB0doH0J3io7sAmooiLydZq7yRGZs4koWIQS/zHWPa1Z/9ImAG1Oe1weQIGTP cQAAzD8BAPsxKFsf/jfBuAbJvjaumZiJcrAauwlAIa5cheCAu48PAQDRp/i3Wp9+ d7Ow2njMY1ZWSCkU11MtQLnXC6PyLyJtDsYzBGHz9q8WCSsGAQQB2kcPAQEHQFUg bAXbPc9U0klYOnVg59uLhM7dOofBTyN06HIRlW3ZwsALBB8WCgB9BYJh8/avAwsJ BwkQViEkbRbWeF5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn9CsQf3qd089I3MirCNTjQWRQkdfdspZWTxxQRjS9cCkDFQoIApsBAh4BFiEE cLDF/v/mtV8s7oVFViEkbRbWeF4AAAs8AP0YO4sVpJq89ZsWWmOoyiUbQJEdemqJ I7diTaeT3gq2XAD/QCzyBRCnBvbNRKRBENXvJ8ex/sliEINUGv7BR9MkyQTNEDx1 M0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9q8DCwkHCRBWISRtFtZ4XkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmezeu42/ovOCXkK2XJN Th+vXUo1LD351k0h3kqCinFrmwMVCggCmQECmwECHgEWIQRwsMX+/+a1XyzuhUVW ISRtFtZ4XgAAefEBAK5u1Uns+1Dwk0/6+pDty6FnqTDOSQFmw8ziePpprhFjAPsH un1YEFBpNvLyFDDTo9YLjQ8fHPUufzbbxwv0R6arCcLAAQQQFgoAcwWCYfQI5wOF /3gJEKs9rtgJo194RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ9zX9dfVUAEkTVAsq/ywo9c5ojHJSLNkfMhWO8AjcVWUFiEEBhj4ULbQxI2/ QGu/qz2u2AmjX3gAAO+kAQD+6ojjB/IIAtIlJI298UBq/mo1rp8qFnD60dyoYeWM QAD/SrwJxbqC+nuQ+RRgbL/D8yawMgRMvwqGHdqNOAstBwPGMwRh8/ayFgkrBgEE AdpHDwEBB0CAw85YW+cCPE7c5AoOp/mXo71+ne/mhBJ7Za0uqBCMesLACwQfFgoA fQWCYfP2sgMLCQcJEFMz2QBIihaxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ8vz/BD2FLiiQAmdNU6j7a/ER+fx8OOb1oS9ZbSqgpBUAxUK CAKbAQIeARYhBHD1a1sOpXy5rN6wi1Mz2QBIihaxAACoqwD/aJNKL8SFa/ljmvRG +29PtcSy6qW4laZJU2fLB41BLawBALb3S76rUZM/hiry6484RHYjYrmYuIe/km9T EjXGkM4CzRE8dTU2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2sgMLCQcJEFMz 2QBIihaxRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6tG Ivysfr48MhtcNM+ahtqQtWc+F5H9tZKWkzgkcOOzAxUKCAKZAQKbAQIeARYhBHD1 a1sOpXy5rN6wi1Mz2QBIihaxAAC0dgEApatJWkcndT2nvEfikm/aZTqT8lINh4ax e9HzxQkptfIBAIQm04uYmoUNokB7Kn3fafRKtSQXDgbIW9NxyY7eEbYDwsABBBAW CgBzBYJh9AjpA4X/eAkQDNckr0EKic5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn8hJAKrXPbD7s5M3TB/TNSMyhBr5lZ2mcObWgqZrPxHgW IQRt4zw3NZBrfmmuWToM1ySvQQqJzgAA/wgA/3JzCWcAQSki0LX6ZbS7RqZJW+9b YtXzzID+awUo0t1xAP9dMaeiehYOVEyOLDjBj6QZ5+3d+FPja86BxSxMCYcPDcYz BGHz9rcWCSsGAQQB2kcPAQEHQIVJJ/ldsztRIGZKGwg0S4U+eKALVs1LDX+6NU7U iJY+wsALBB8WCgB9BYJh8/a3AwsJBwkQfKJOlVD30KdHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnqhG5HQeWEI03CUKQOKSOCUoR1/wkyUNb p5YkU+CF0SYDFQoIApsBAh4BFiEEcp7aSipjTndngOGEfKJOlVD30KcAANeYAP0d 5LDnOQKQSiWneKlyd1mIi45WGLnES0pd52pnKfwikgEAph4+OL4hWURLJajtgt+D GDmU7k6QBBCt97hbImH/AgDNEjx1MTU5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YfP2twMLCQcJEHyiTpVQ99CnRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZzNKMXC7ZIexAvH1JQ3KJnKu0N0Eb9u42OaPZbw3ZMheAxUKCAKZ AQKbAQIeARYhBHKe2koqY053Z4DhhHyiTpVQ99CnAACucAD/ZHiQh5Ug7ZoIUgV2 ezqFltdx7i0kmAyWS0fUNiCjHjoBANyekfJmcF54VMGN/2hkHdVnSUN7vsHFcHSW 1RZvlrYOwsABBBAWCgBzBYJh9AjsA4X/eAkQqmCUHmMZnZ1HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnm8tu4laO5f4Jb2a6/YS6FlUXMp1C 9+DMvlTZcQbzJGkWIQRkqYWTRPUHOxg71ciqYJQeYxmdnQAA4z8A/i4YD+pajGvP SIrgS9RiQ7amU0inJD7dGqogsWimVMK1AP9zvFCgqZrmSugYyeYy5qKd4j9s7NkZ dVbh/uT+JMC/AcYzBGHz9rAWCSsGAQQB2kcPAQEHQCIknsbWc0+Xkk3hdomn5XrX gkCjWsERZQrhEpiUh+KkwsALBB8WCgB9BYJh8/awAwsJBwkQ3z+buWIqr8dHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnphuHLgHGni45JGyB TLx85ms9u8Ve7gBwSN7vONr6QCMDFQoIApsBAh4BFiEEdunSE8X2fy2+QQ9X3z+b uWIqr8cAAPoJAQDWl28KdCvPGHqpPQgAWdsOBmtaMMxKfCaLiS2e8DwxUQD/Wz23 4YEn+0Z1dpQUtU776r0hRGHH3/ZqupxSPQHxDA7NETx1MzNAZXhhbXBsZS5vcmc+ wsAOBBMWCgCABYJh8/awAwsJBwkQ3z+buWIqr8dHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jnq66RVkn2xL9dYyRzJCpzwaS8Zv87e7lQ1ZTj nkYYA34DFQoIApkBApsBAh4BFiEEdunSE8X2fy2+QQ9X3z+buWIqr8cAALiHAQD6 U2m+iLKVRWSXIOiPcPVTsDrSqK5f5vY9fCamxcilXwD+LfHcDfmoe/7UriSsSXtP H8vZJ6QxD3mwUrOWbOkSYgPCwAEEEBYKAHMFgmH0COgDhf94CRCDqr+R/krl70cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmehHy580VFQIzo0 gmjs0JhhjZKtR+2OJ7iyDKq/mOuuTxYhBEQ1BZHyCkBp8TEVYoOqv5H+SuXvAADY ewD/THmNRRZ/GsyHNSTQtV3gMxagX9a8WkNRmv8+sUeXaa8A/iN/km9jWjqHNj8g eP0mh3qULBVRaFSY7Mc/LOU0hS4ExjMEYfP2vBYJKwYBBAHaRw8BAQdAtILMZsfh BXx7Bv3BePKn++fWrA1I2CdxVY7tfA0dYPbCwAsEHxYKAH0FgmHz9rwDCwkHCRCh XufV7zIzP0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfY 6a7cwqYWBFv1io5JoAIhoMTr/L6SUbHhrv7MlPHMYAMVCggCmwECHgEWIQR3w3MN thFZHnHuRSihXufV7zIzPwAAxGEBAIAgVF1jqxfkQyLXmQVj02VrJgMR5pFiL/Eo 8nSSRw4wAP9han0DnyCwnoeXH76vBPwJyH2RaqJuc78qWuv4wKKlBs0SPHUyNTJA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a8AwsJBwkQoV7n1e8yMz9HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnW0v5cbKl0rKhTAtK3HWW FAT/0Ak3lv2tSQ9xbwrCXlMDFQoIApkBApsBAh4BFiEEd8NzDbYRWR5x7kUooV7n 1e8yMz8AAKTMAQC0FQqaCSQx78vLcXarFMMLZTaX1B/rMOQpHK1aObJz5gD+LXZ2 oKz5OXjKJDm/sd5+Pz0lSrTQZt8oRXCRwdActwjCwAEEEBYKAHMFgmH0CPADhf94 CRBqj2g7SLxfM0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeE16/sF4M75YLnc5m4vW6t4AsETbBHDOlIAv7FX/HgbRYhBDZIVMNqHv/crHuA KWqPaDtIvF8zAACaUgEAypzbAt+FqyaaOofhskUF6CyRpbQL+d4JXNOBTZ/REFgA /1jCtq4icauuQCaJOPSL/UiAmIZo66XqI/Z7fnw4dl8FxjMEYfP2tBYJKwYBBAHa Rw8BAQdAFjteBIyoHdOBSE4flb2L959edLRPWCV77y/uk9vlzFjCwAsEHxYKAH0F gmHz9rQDCwkHCRBKL6dbZIjW00cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcfb/rR3sv3nJKfAQi1EPapqb35O5JB0RI89fysUD87gAMVCggC mwECHgEWIQR7R+aO+wOgyDRr2A5KL6dbZIjW0wAAFi0A/RJJOi8dM5SqrC9o9kDv bd52pRyiecakxRNADNTIvpukAP4icKkqiRR3+Mc5xApDTpPFZA8Cfs6Azhb/dSaB nsnQAs0SPHUxMTRAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a0AwsJBwkQSi+n W2SI1tNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnIe50 9Dd7HwU1al6fokXhEWzlJCbHQ5Nj70E3kkdfXpsDFQoIApkBApsBAh4BFiEEe0fm jvsDoMg0a9gOSi+nW2SI1tMAAHrhAQCcrkXhGJqCHhKaAaLR1t2TGA0z3SCaV9rb X60EF8MASwEA3nag3otJ7TLNpyTP7BEPkhc6gKBnV5+/7Cx0v3r6kwnCwAEEEBYK AHMFgmH0COsDhf94CRAsL8qwnAnCUkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmcJS96Y+avctxTJqJ0Ot1FjEkt9S5cCnlXh74YbGZrcCRYh BLx4LENX2ecgda89vywvyrCcCcJSAACbiAD/atDTrY90XpHHORuSEWlwq7CX5lYX 08783MpZ4/QIUdIA/0e0PrW+24d/YMadtNr/8RXq+uhxxpNTIw6GDNstk4sFxjME YfP2sRYJKwYBBAHaRw8BAQdAcSiUwKvgGzgsFif+G/VM4CZHkQW+krY+ygyDUV7r PirCwAsEHxYKAH0FgmHz9rEDCwkHCRArZIOlgnVsbkcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfOAQm4DqgY0+QAljQtJ71ubF5/4+7WSVR1 CCgzsMj27wMVCggCmwECHgEWIQR8P+36sILSNqkYG44rZIOlgnVsbgAA1uwBAM4g TdbDi7L2xyXS0eKtIvB3Ao/+8ErkyBmEBZSP4Lc8AQClT1akizlEBGqvy1d+WS2R tZlxjhasAzWOldMKbCUNCc0RPHUzNUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz 9rEDCwkHCRArZIOlgnVsbkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmc4JJBT6a0xk7L4kpNcDdcUnuBUNjdeZcdzvm8ce9T3SAMVCggCmQEC mwECHgEWIQR8P+36sILSNqkYG44rZIOlgnVsbgAAFboBAP/3rxIlstGFCoJpk+/X 8ItfqbMPq3u+w1Ka5291kljQAQD0dMkIDRl/sbA/qb90EMiIf3FhCCewvIB/qaIS inUqCsLAAQQQFgoAcwWCYfQI6AOF/3gJEMBbZ1uHOxOdRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2oCcCrOZOh4dYHlglzfxSTtE7SqNtEg lOQD10xfIJpAFiEEpI9TbDTUpJPNIzhwwFtnW4c7E50AAHt/AQD2stYSef6cumbf 8um5LzdwGZt+Y/ZTapizfchSlw9BMQEAy1Xw9vXUQWf4o5DbXWtuuP7GrR749uBg Vy+MtwgCzQXGMwRh8/a1FgkrBgEEAdpHDwEBB0DVEPX5+WXiSg3PIl/nTgomIoyz KT3l0LNfwFs+5m5TdsLACwQfFgoAfQWCYfP2tQMLCQcJEIawxjVyFXV7RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwHmS95YYtGKNN/OM7EB S53ViPjrGxG5kv2/o0k42ppkAxUKCAKbAQIeARYhBH0uDgnhS1urCEomh4awxjVy FXV7AABCigEAjIiX0pwD8Ueaddh3zTU0dZj50usaseivc2Qnwre522EBAOkIMW+3 Z/ZyrL9SHB+RDCQx/EmsLMIuoMft4HC9L1gFzRI8dTEzNEBleGFtcGxlLm9yZz7C wA4EExYKAIAFgmHz9rUDCwkHCRCGsMY1chV1e0cUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmfkJ2zaIB9hcofTRA2t63uxTCOcKbecmnNTqi9r YSTCOAMVCggCmQECmwECHgEWIQR9Lg4J4UtbqwhKJoeGsMY1chV1ewAAEAoBAPvN fH1zeiN1W83jrkUyMcFi5cYBqrfypM1vcQGpi8ylAP9FiT8dZf1MKjRve+0alYzB JdU7i79UK7OBz14Il2m/AMLAAQQQFgoAcwWCYfQI7AOF/3gJEF7a0yNg7fxqRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+FWqZsQmgUg3ooe uDI62XAwyLbM/AdYCuXOsqq6dUiBFiEEZgPqgjvGQaRl2OXEXtrTI2Dt/GoAAGAH AQDoTbylD9JUMx6MLL1u0IFJ7qyS7ATScf0acmYl4E1gnAEA8wB/3jo56/obUSSa 8wCHqEYNwLuegTohzkWT0HSHSgHGMwRh8/a6FgkrBgEEAdpHDwEBB0DAOgQEuo7W 0SOK/0CmwoIJUgC5nhyxNbMjbNiVAnlIysLACwQfFgoAfQWCYfP2ugMLCQcJEEgW 0ol3U1KoRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1H9 Tj/Ez42ch1pVYaeXzGfbVgdM/lTF8kWL/Z4DFCQ2AxUKCAKbAQIeARYhBH1OolxP NkrxthtkFkgW0ol3U1KoAAATlAD/Xu+E/PAEuTqTBZpvREI7rLzLfBlzJPSBwL3+ 2IXT7mQBAPFC0nGI6FIIZ/owaFZzzbui1C2Uu0vJti5IOM8CV1IIzRI8dTIxNEBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9roDCwkHCRBIFtKJd1NSqEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeKKCwdVVzgowwBQg0vURkc gp6GTSRJGYZTJln1YTABIQMVCggCmQECmwECHgEWIQR9TqJcTzZK8bYbZBZIFtKJ d1NSqAAAlSQBANHD3TBjT/eZXR3l/D/Y29FiREo1sr6bqlYZwux5Yt2+AQCUKl7d 1pR5bN/UG/ZVHbwTNqbGlsc3rVhHqvXpFw3eCsLAAQQQFgoAcwWCYfQI7wOF/3gJ EMAj7RKg9/VWRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z1GmpXbcvRrw1mR2i8JFp2W+TbKVosvLNFrn/ViEzTQRFiEEWVnKx+ucHH2ezxC4 wCPtEqD39VYAAMU8AP95pYhoSr+3cGhINUA+6OTNORJ08QjLN4FMYYuzWRkKmQD9 EZHAjPB045OYVXvJjhS1Nsy9OdR14KY6Vvf8a0dZiAHGMwRh8/avFgkrBgEEAdpH DwEBB0Cg/kjyKptubFmBmomX0UdKNjreDeFlR2y8oChMKsyRVMLACwQfFgoAfQWC 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 AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5bLB+W6i6ZxOWYaNpar /3OUCEnfBkkk6HWaFVgkSN3jFiEEAt9ssnWNdpWUC2k3gEytMM2sJDwAAJd8AP4w zMrUtzX9gjE2gqam0k8ZiSU8f1752rAgTbzLSPpcaQD/cv/bWV2ahaDWRgQe61Wq IFVxtpq1VNyYPbOJ5CsrNATGMwRh8/avFgkrBgEEAdpHDwEBB0Aj0ZSBjPYPMpQy KnqK7cRl85MmgfuqFR8FqGcesvBLlMLACwQfFgoAfQWCYfP2rwMLCQcJEOkXvCTS 1T95RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxWD9NCK 7DoyZ0eUuCmDYwKd1gTDcw+ens2fX85aAugzAxUKCAKbAQIeARYhBH+UUkSiCnTh ulC+c+kXvCTS1T95AAB5TQD/WqE7jrwuDSkIKp4ivFlVgbjV8nZhoaRaGXvHGEro 0HMA/10UH32eGGoIbYVXOKs++jPaTyKwW/ZX9czULWCw2wENzRA8dTlAZXhhbXBs ZS5vcmc+wsANBBMWCgCABYJh8/avAwsJBwkQ6Re8JNLVP3lHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn5bPlSoYQQIao+KAGZZinlSgREQY1 lMms729diAuZZnsDFQoIApkBApsBAh4BFiEEf5RSRKIKdOG6UL5z6Re8JNLVP3kA AOt3AP0cSEGP+/H1xehYHmelXrtjueUgMn1mtEJIlizSiM/NlQD3WEibLgl4dCMt z6/kWg3QyAdyLBjh1XHt0573MsnwD8LAAQQQFgoAcwWCYfQI5wOF/3gJEM5v+W0X 4OrwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ93i1X83 3zSvy1edGITfBM5uEUdDTZY+rW7fiiVWTsHhFiEE0L8YVrlaYnY95JCIzm/5bRfg 6vAAACwbAQDne6EAwWvwocwnCzD8ms+TO/utYq0ug0EGhHQq6ZzZlgD9Hrw7lW1U oXYAk5TNgxm+2tJ0eiNhN2saznK00KYfGArGMwRh8/ayFgkrBgEEAdpHDwEBB0A8 5gBkJVqUtIu/9s0KW3v3ywEvUWmWrM+JUzdeaRGjwsLACwQfFgoAfQWCYfP2sgML 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 c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnXiTG3LZ4YoZ3BOXEN8pkeCVX M8vEJvvykfbt5wai3j8WIQR9TqJcTzZK8bYbZBZIFtKJd1NSqAAAvBcBAL8XLT2q AVn1r6EZiVTOYYoyp1Ul1imCQG/603wOANwgAP4iS3ZLK0aKN9yzyK6i+/BWuYOz fGn1jih52LpL58dBDcYzBGHz9rEWCSsGAQQB2kcPAQEHQPiCTzgR/7O/4L8CjuVO rhGBm+q5ekNt78BvSgDvdFfVwsALBB8WCgB9BYJh8/axAwsJBwkQDmUt34EB4tBH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnzf9EI6DFXMtp 9DGy/lm8XKaLEmXFC2sURAl9sHC/msUDFQoIApsBAh4BFiEEhXucjc+evXJVYjek DmUt34EB4tAAAEQ9AP48EnYKQH0XyJ7Ps6mu+R6KYB8TDrjGb4ayFgeLXMAuSgEA njtv9MUCNes7HZ3Yuz7/+nOAuo+2uMoOvHUgY4a98QvNETx1NDNAZXhhbXBsZS5v cmc+wsAOBBMWCgCABYJh8/axAwsJBwkQDmUt34EB4tBHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnRYdPoyCIi01+r+iQnrPBswFg1iGTJBI7 6yaQRhCwDWADFQoIApkBApsBAh4BFiEEhXucjc+evXJVYjekDmUt34EB4tAAAC21 AQC68ZUuEClO7QCnraFbyCQxuvU0F5tLN1mc8QXxaXRbCQEA9eic8V30az+XTFgi QSWblvnfnFznlxlJYvA0vC8OagrCwAEEEBYKAHMFgmH0COgDhf94CRCK8+RdOrk9 6UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme/ipXp4FJ/ zsBn/RmFFNdt5CCJI/IGvsaShgpJ/3ULqRYhBJVbamDl6oW63Wix4Irz5F06uT3p AAAiswEAtCipd3s8+nicDKstyvhJe+SKIEQg7MBChToca9OReI4A/0NJjHsjhnjr 2QLLF7h5gblioorxXMIzc9tT2fX6FjoJxjMEYfP2txYJKwYBBAHaRw8BAQdAi08w njcJyhgfMw5e+z5ZkUAikupD37div4OVfdvfmMzCwAsEHxYKAH0FgmHz9rcDCwkH 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 YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeiIKrjk6hm0ZIElYXhf/h8h+1g 1cOsG/IWi1MTq7Xt7BYhBCProAqFdkNK5LB3+YGaG2I7LhOMAAA7+QD+Ku28+7ZR ZLxyyzRBJPeMZeBrLgeq7U0MxXZnnDxC51MA/2uPop0pUZJq4hiHINYFyyCkcaHX w7/tQ2Bk/IVixXQNxjMEYfP2shYJKwYBBAHaRw8BAQdA64MI2Ud3k5wkaPeFWpJ/ 6RMFnWy0dIx0u6vySY5KUOPCwAsEHxYKAH0FgmHz9rIDCwkHCRDWqplhtPk4q0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdhXJWFiMa8btjf da3tgfd9TAG+K0+7VD8BYkTTpl1dggMVCggCmwECHgEWIQSI6ZrE1ctqzzzTltXW qplhtPk4qwAA33QBAPvGrmcmSag2PqZFbAR+dwKXT7LVtUIM+wnV4qaJg2YVAP0X kU43wYXHo7gKNt12g/T2x4epnwEpcSS6lv8QpfMSB80RPHU3NEBleGFtcGxlLm9y Zz7CwA4EExYKAIAFgmHz9rIDCwkHCRDWqplhtPk4q0cUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfRH5FZbf9zJLYKkpwqVzYFLrlkZUdtZR2Y PfZro2WszQMVCggCmQECmwECHgEWIQSI6ZrE1ctqzzzTltXWqplhtPk4qwAAWREB AKx7VLsRwnLSa4rUSqKO8zdHSBbXKAiP8JxLL9UjwjWCAQC2EFZYwMqzCe/QWUCJ FxoM4DtMsIIvsTKCCdsUWiC4AMLAAQQQFgoAcwWCYfQI6QOF/3gJEDXC5WLMUo52 RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1BVSY/iYkL8 Q1UJF9QnkEK+07w6OM8xCTAWSOHAv6PKFiEELG58md5fWSLgXRHSNcLlYsxSjnYA ANTaAP947G9eHVkyf7GmNbbEe8ZkLGeUr3WFPxZ3z340C2WlhQD/fWznZK34N8vs o0HcPXo3Zr0NIEf2FPf3Kg78MEbF0QrGMwRh8/a5FgkrBgEEAdpHDwEBB0BWv4PJ BuDlEt0FXehYQt5azg3w0okbo5ZCxKV9woeYuMLACwQfFgoAfQWCYfP2uQMLCQcJ EAuSNJ8nbk7gRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2Puyn6yYGc633R0Ls112lp71Yjo8QQjVhA4pDKgnvKyAxUKCAKbAQIeARYhBIky 1BfTwMTjaU6QSAuSNJ8nbk7gAAALVAD/fVI4hnmH71whqTllXUX+YsnnE+m6g3lZ Ca+fucQ71NsBAOfQvmaFmt9kerjyF0pANJKGQ038UTiYa9uPVo3/1Z8BzRI8dTIw NkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rkDCwkHCRALkjSfJ25O4EcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdf70fVbh9hLg7JkbLR /5lvA/hRrZV2QCd5wxgPmo+J2wMVCggCmQECmwECHgEWIQSJMtQX08DE42lOkEgL kjSfJ25O4AAAstMA/00sD06ErT+e6i3RIZ8FHc/GPk7eL5VuGUXbDJlv/EvJAP9x 3/aoTxCiEbHqrps6q+QKspdQG/vbI5To6F0egqVbBsLAAQQQFgoAcwWCYfQI7gOF /3gJEL7JIRouIQyGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ780jGFAVGPVWIOLtG1eZFFasKr6XeOHQoucJzJSvkpVFiEEwKOhkPi/thFa h898vskhGi4hDIYAADlXAQDujxWe0KzKnQ6vLtnGQ8AfGvh90d9QVAerju3oLhBw 8QEAvn5hrcPMgJp9QAKZHSIGcZSOfK1FiqtBXYvHZESGIALGMwRh8/ayFgkrBgEE AdpHDwEBB0A50H8SZ35Qom6ALKu1tyHd/WoN62FCeLPRlZRziLCEscLACwQfFgoA fQWCYfP2sgMLCQcJEFe3kYi1K9NGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ12BpMqdoZ4BeM5RwvM41xPiUNEe7ToMusvnYM5l21GeAxUK CAKbAQIeARYhBIqf4HtASCxVWaZ3C1e3kYi1K9NGAADMDwEAhtca1pjlrv3uIbp2 dLnucWBfk7MiVh6WiZxSAAVYQ7UBAOCdCkIm2W7sRCS7OD1z8Fr6VG1nbWyfgFqw 5y2caRwJzRE8dTY5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2sgMLCQcJEFe3 kYi1K9NGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1/a kXnro7sc5GgMMXWYJGRT2KvuA0gNbjQHOk2E2LAEAxUKCAKZAQKbAQIeARYhBIqf 4HtASCxVWaZ3C1e3kYi1K9NGAAAACQD8CpVwesGZYjtMOrSJf/r/HNp3kt74K+Bj aOLOtzA0CKEA/3bnshc8dMC2YkqJJu9m5chXXmRwvxVzjr7A1Y6IwVIGwsABBBAW CgBzBYJh9AjpA4X/eAkQlKWmCapnn3FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn6abQvyIPtoibSJUMm7YXBlU+CsWymsPU1LUMzj4wEGYW IQQqjORp3Xg7lckqbzKUpaYJqmefcQAA+VEA/29r9D4M8DtKJ0A+a4Aa2/K93Xhg 9WyIQyebMhd73Ny2AQDbxDfBYBUQYAnhJGMiki5DWqBLy38jXmUxmsSNjTXjDcYz BGHz9rQWCSsGAQQB2kcPAQEHQIL5SNIBQcIV4AVRO1tpQ7kE8NBiWwNQkaOixLIs FWwOwsALBB8WCgB9BYJh8/a0AwsJBwkQe1/YmQwcysVHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnkkhbriRLTBkyFr8Q84E2qV9bgc9kNPNw ZlXRjKplGBkDFQoIApsBAh4BFiEEirEeTxjcV/K6QAuNe1/YmQwcysUAAAf1AP9e GM2qnqqKpjUqqZYXpRhdCx1PxP5+UiWw0aJhwIjXfwEA7FYCtvl0Y2e81MFrPt4P 8TDm8mozF/3+YA8hwuAGZwfNETx1OThAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh 8/a0AwsJBwkQe1/YmQwcysVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnYMYh5kDtI04Gm+jkLN+X4fOWlb/xTuBhJFJKHkRXiN0DFQoIApkB ApsBAh4BFiEEirEeTxjcV/K6QAuNe1/YmQwcysUAAHV4AQD1Zejgnj4+/10lDQhQ dA719jWuF1PbR7XXyYI2za8oQAD/bd+CE1hmaKG5iV3smJdFvCglEOWao+5RW74/ Mqnc+AvCwAEEEBYKAHMFgmH0COoDhf94CRDxShssaBqKg0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeZaGr7Hr8ENi5LY2GBba0+GT5z/8z8 hCV1Zxef/U2bRxYhBFcHGmDvu/+m3c53lvFKGyxoGoqDAAAmRwD+M8KhWTSMwOS/ 0wzcvsrpz16dRUBDedQp6aPXdu4QA3sA/RpKyltc3iN4jNmuVA8zMTKLlMB1TvbE KW89hLPYC+sOxjMEYfP2tRYJKwYBBAHaRw8BAQdAhPtb6jgTSq/AeiBT3oaOD+SR U9QImjDvgjGq5sCmqTDCwAsEHxYKAH0FgmHz9rUDCwkHCRCNf+jZDwcO+0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfJK5DbzdzW0uEKqs70 +FgVJ8P+fB8ajWjP6q7bkoka4AMVCggCmwECHgEWIQSMGfEqg4bQ7z/Ar9KNf+jZ DwcO+wAAz2wA/j1NbNF4BWWzdtFZ8/n3VWqd14E33vLv+kcps36ETrZWAP9LDrqz 3JLu05+uxq/JicnUC2DOPNuqjSdI0aC/2fPSBc0SPHUxMjFAZXhhbXBsZS5vcmc+ wsAOBBMWCgCABYJh8/a1AwsJBwkQjX/o2Q8HDvtHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1gRwq9I2hqWdmV6TOwuTSLwbtJVN7b9SqoQX Uf2DS1wDFQoIApkBApsBAh4BFiEEjBnxKoOG0O8/wK/SjX/o2Q8HDvsAAKY4AQCG iucRFkUhU0Vy2lb69ZMPFNj8lt/FrzK/har6WsnvJAD9EFYz28fyJKw5Re08QRgy ZSfLUaMpTLWs0Y1+JLX1PgnCwAEEEBYKAHMFgmH0COsDhf94CRBAs0FCqmc5e0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdQwad0yhgl97GT THAQFQo2r3L5n57VgEckuONXGOnJUxYhBJfVkv3mGZ46T2tDf0CzQUKqZzl7AAAZ 4AEA9K5SDkp49bSpT5vEcInIfcsVB5vA4DxY6zDZd42db08A/2YT3E8tfwJUmERB dwbNBJ8UEwVgHcovcNmFJDVQ+z4IxjMEYfP2tRYJKwYBBAHaRw8BAQdAc+hcRv49 igmO4BI8fvZjG5ofLYO6c/GqKw7A5rkWmSbCwAsEHxYKAH0FgmHz9rUDCwkHCRCc oKRHlDwfO0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfH /f71Qqn3J5q6UnX+NIY5aDxU6uj6X9FwJenpVf4EPgMVCggCmwECHgEWIQSM3wfT zqXtG3Ls2IacoKRHlDwfOwAAkr4BAK/Z5f6a0dSa87s9iETK6mVn4HX2bjmj3vTy oqRNgGn2AP9Gsc/wEaZXOPVk1yqhkhMJkXoM1Atnzg9tVuYzx92IBM0SPHUxMzFA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a1AwsJBwkQnKCkR5Q8HztHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnZTQJYn3jGpu/6okkLc8T PUR7MXskICBHzWwYZXeEQe8DFQoIApkBApsBAh4BFiEEjN8H086l7Rty7NiGnKCk R5Q8HzsAAI/WAQC85auj77JGXWptIPoYpFPFhl/4JFbwabOAzqjgSkv+8AD/R2Q1 AUckVxfF0RzDpHf5kYyojUZ3gSXaocRffBpEigjCwAEEEBYKAHMFgmH0COsDhf94 CRBANwLYmjzYUkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmciacZfZOvXL+Fk6P2lgkrygREzE+X0Rz5DmHymnWMePRYhBAqyBjOm1ja4Azfv 40A3AtiaPNhSAABg+AD/cBoDWebe/Zco7LjIewi5xf6LisF1miFpSAZCqSaU65MB AM1OJ8BIlZf8XQc0jmtpxJ3/Yhp2p9MKJPt6FTlUAxEDxjMEYfP2uhYJKwYBBAHa Rw8BAQdAKyuwtVrlnt3NtrxYuoWdXuaJyeoQHSzjUCf314ZwHunCwAsEHxYKAH0F gmHz9roDCwkHCRDHBJme9dMqa0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmf/ahQa3WCzwxkvTzF1lrwEXMh5JuX/d3nwdqIQhDnW0wMVCggC mwECHgEWIQSNxR93rvrkUFVHkqDHBJme9dMqawAAGhABAPNVU02iPpwRgxjE6gmt l76wIjnOMaA3ob4SorcV3++UAPwNqroHReoarHyzKVOqVW00x5iay9PeZ81u1xF6 faVVB80SPHUyMjFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a6AwsJBwkQxwSZ nvXTKmtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnrkv9 eXbyunw4opS/5cpTgJzQw70ZZgQ+5eZOqFzSCEkDFQoIApkBApsBAh4BFiEEjcUf d6765FBVR5KgxwSZnvXTKmsAAHg1AP9EnvFEpAWz/1SrXUy77hXVIKNVodlXaDOB PNVD9Q2zYQEAxdC+0F4tR+vxW9KDmF9p5+kXQgnPtuiO40s6fcgI9Q/CwAEEEBYK AHMFgmH0CO8Dhf94CRDtLyXmUNgkREcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmecFelHBcTkeD20ezYWmbqwU0JM/IdR2omDAjrkKZ7K2RYh BEtSbifapBlh+diUBO0vJeZQ2CREAAC4/QEAi020Dh+PWxQ8/80nrW+TAID1SVxP 5P2JsmxKtnOPBx8A/3DHOnJQOL+n2BokfjcfIHClzxxPCtU+0nXAlDb4v40LxjME YfP2sxYJKwYBBAHaRw8BAQdAQLgDD2QNBLBuYFPIfwzWYRkZA+bnWw5AaAJvl5t5 noHCwAsEHxYKAH0FgmHz9rMDCwkHCRDBSF/lXxxy1kcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmc/yrQutpC3pBzzAwixsjkDy34KK5N1btV5 Ygmg/z+1NwMVCggCmwECHgEWIQSQFOUU1nfC7RnZMynBSF/lXxxy1gAASIoBAPXc oyaWJjzYi+bcuvpxREvZD1hcZdSVfxdgc7eeVnKpAPwJaWgGC6V6jaResUxPGw/C A2d2sigc+BH8JEOlCW8XB80RPHU3OEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz 9rMDCwkHCRDBSF/lXxxy1kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfhz6QEdu/V+O/vAn+7LW61UWMrOpgwGlBvP8zG34RLIQMVCggCmQEC mwECHgEWIQSQFOUU1nfC7RnZMynBSF/lXxxy1gAA2gwA+wQdJw2K5giQdekJ/VNk JzmAHQJPLSsYdtbCcB+dC7d2AP9eo9wIUJq/SZz1jpyNPQ1r5Hny1jnfOxemJj0M 20tSAsLAAQQQFgoAcwWCYfQI6QOF/3gJEAUgWLR/iJYRRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7MLlafAZbRilpBUmQ9VSNPNCAisXadw icpXZbx7X75EFiEEnAFf69PRmoFxbncABSBYtH+IlhEAAIGvAQCHMT1wWTRHIx4D glidgp3TgRwGyC176C9ZaCaTecHstAD/SWYYKMD9HZixrf2trIDoxWA4Cms3rgMt F0LNqTWrXwvGMwRh8/axFgkrBgEEAdpHDwEBB0A12AhiJhNonhDsB0PazM/R+dgt ae6ISsG9LE6sQ/UvEcLACwQfFgoAfQWCYfP2sQMLCQcJEHGS15oRKgzmRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZy6Mwu4vbjlQ9Lo1kvmu +r8Y7HM1Ei6izIazP6I7wiwCAxUKCAKbAQIeARYhBJC6kZwX7UJS+PDtMnGS15oR KgzmAAC4dgEAoRsuxDdEe7e0RVVOhud+tPxI4b8kU6Wc8EuhU6ZYepkBALJwz39V +DhLatOMr+VWRIdu2kDkJYLMrF+TtZcCQ6QGzRE8dTQ2QGV4YW1wbGUub3JnPsLA DgQTFgoAgAWCYfP2sQMLCQcJEHGS15oRKgzmRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ6/FnQUbE9RTGG2w6seWivMtsTnMid8ZUPah7GJJ XE9zAxUKCAKZAQKbAQIeARYhBJC6kZwX7UJS+PDtMnGS15oRKgzmAABbkwEAvfR3 +M6hse5IpOWFEC971IVMnBvwZ/zmTl10SJDWxBgBANWfSZeOSRzxKDDzkUwc+R3b Q7i/B/+YA8SIZ5bHByAFwsABBBAWCgBzBYJh9AjoA4X/eAkQQL5wCi6NCZVHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn0aXJyIsUXG9av1TR 3InBsCSqN0sNjNFA75b9KdGpG/QWIQSQ3w4ECX6/0pXgW59AvnAKLo0JlQAAGegB AJ284gONjt4tAatvpyXziD0AAw8LhU0Xq68pjVupELYuAQC71zl+xWhm6eqGBPJ+ 4lt7f7PW/EOACczWuTxbN9QnDcYzBGHz9rEWCSsGAQQB2kcPAQEHQOxUlNmmnoSn M0EwsnWIXfqTKS7UOcWSxsSz3V0RLI1KwsALBB8WCgB9BYJh8/axAwsJBwkQQL5w Ci6NCZVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnsE4F /rN+vEUZycjW8Gm+1/jOdX5lbXNDe2L/p5WRByYDFQoIApsBAh4BFiEEkN8OBAl+ v9KV4FufQL5wCi6NCZUAAGH9AQCOC8Ht4GWVx1a41z2yp+AiSD5m+wf9txQZhdND UIl39QD9EJnnbYTTAP6mYsOeBzX6yy9W19OjbALDEsgiuntDqAbNETx1NDVAZXhh bXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQQL5wCi6NCZVHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn323jLRccY7z/0o9mAlEFcYz8 SrmNU7BFxUBn9cUemxYDFQoIApkBApsBAh4BFiEEkN8OBAl+v9KV4FufQL5wCi6N CZUAAI7jAP0dONWJ3nOIlzMJVEuDwbdVGotQywq6qgz8MjvcSVkEOgD/Q2qNqNxq rRYs0oC+K+p/7KvFVzhEfCvm7cAdmkY1iQvCwAEEEBYKAHMFgmH0COgDhf94CRA+ ajbFP3whVUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfg 2WvLyWGm3rFcdAvGdQTYWATYZhgAirjxYvqtmIatmBYhBPoRpJ2i4i9oZHGkND5q NsU/fCFVAAAAYQD/fM/keOVyNwDuks5tqsLg7C/RXcb0n0MgLzYEeVJZKcABAMlE kog90l1wbTan2nJggn7jjVvATqIswAmAkSiPJvsMxjMEYfP2thYJKwYBBAHaRw8B AQdAV3xklA/L4CVyhvV76BFCJLbjb+nzRNffXOMxSkjnoOjCwAsEHxYKAH0FgmHz 9rYDCwkHCRDELjutqvqRmkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfoY+XCgI71DsuV6yjZ8zudT59LY+pEOTRgQMqBouQ6jwMVCggCmwEC HgEWIQSR/la+Jcyzz1Q536rELjutqvqRmgAA2LMBAI434Bb9jcK+v6Cx7RTaXTOh 9K190lz9SttRCBkNJSSDAP904knDMEOXsH2QlxyIixsYcOyZcEpzc3lpPjUrLPsG Ds0SPHUxNTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a2AwsJBwkQxC47rar6 kZpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnk8z+mhg1 gQuEszq3km0Uy3n87xwB/QbB0MAmNAxFyz0DFQoIApkBApsBAh4BFiEEkf5WviXM s89UOd+qxC47rar6kZoAAJ+zAP4jldtvew+5wzCihlR9Lfk93njtm/IYVDm7c872 UjFOCgEA0tutiZWRIbHyefCpcn9B5b3Hi9qNa4zA0d9La0Afeg7CwAEEEBYKAHMF gmH0COwDhf94CRA7YUU13Kce70cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmczEjeO0irgZhSp1qgL24y5ftXiWibBJWkoYt+kbd6aihYhBFQs 5GLhpmzuzeShXjthRTXcpx7vAABEkQD8Cs1ogaNa505wvc8VG47OsUcQ/8CnHin8 nGolGOq6qn4A/RkpT/WnCNEIW7YEqlsPAcDqfkCpR6gdY+NsdM5c6F0NxjMEYfP2 uhYJKwYBBAHaRw8BAQdAwPwjN3wIkWPEEkEWgRWO+dUxCggxsAkQFC+ob5Q5IjzC wAsEHxYKAH0FgmHz9roDCwkHCRAh2oFyEC7EzUcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmcQ9xFnd5+NLMhfpqLYZur2XTvd1sBdp/837746 QR85rgMVCggCmwECHgEWIQSTSXA6d5vTclxcgi4h2oFyEC7EzQAA6/8A+welKnld AgDP6sMLiMb1l5NCB8skyD3X2gScewJnn2JuAPoC0p1y9PxBbhv4xaBvDnlfc4lr xCWp9ACXxLZSJktDBM0SPHUyMTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a6 AwsJBwkQIdqBchAuxM1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnjWMfMjq5HlUH2nh2ouwW1hzeTm6X6wkDNMENeYqfoMwDFQoIApkBApsB Ah4BFiEEk0lwOneb03JcXIIuIdqBchAuxM0AAMzgAP46fjCd1dgm8zpM8kHWe+Q6 mpivxXVyxJq/T+la/tymXwEA+AKqhRqd3yl/BRJaJ9pnaoxaLJg6E3ciXuV6gjO2 LgLCwAEEEBYKAHMFgmH0CO4Dhf94CRAgR5oRt91eHUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmeO9DftyX9qLcRRv1qDJaxVXzaykdgrDuun HpcQ2Jy6XhYhBFYQDRjpQ2h/fPvDyyBHmhG33V4dAABsSQEArCs/VjCqW7ko5Lub 9mEPpXMn3KweK86T5ccnDo0MWtMA/i++vrYRKUkKLeFZj+3PEczKevkXsgLCwZDp B9b1oOEIxjMEYfP2uxYJKwYBBAHaRw8BAQdAvd2he8957sQzsC34n7hQ+5O5V6r1 DDqe8eqU0dtfelXCwAsEHxYKAH0FgmHz9rsDCwkHCRAWpzb0Qv1qb0cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeUZYvRZUB3FTtLPrydVbY5 LJ1agNtkwMoyAznfOGCGagMVCggCmwECHgEWIQSU1ifmJ+Ffm5FERXgWpzb0Qv1q bwAAWQABAOWCL9og9rwiKHokv2GvBOItQ3RpmhN9kwi9mZuahxVDAP9/ciDCnNDi Lixl+j/mO0RW7VGXSIeovZCRwlJYAbe8Bs0SPHUyNDdAZXhhbXBsZS5vcmc+wsAO BBMWCgCABYJh8/a7AwsJBwkQFqc29EL9am9HFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnAEN1GCIB0PH8I6M4YPvUyv/LPmEnx1twjqMV8pfo dRkDFQoIApkBApsBAh4BFiEElNYn5ifhX5uRREV4Fqc29EL9am8AANQYAQCkrFcD i1Xgtv8IVA5Y2MTn3+NV8s7Y6mn6eVQKXzFnXQD/S+oEMK8jZKyxwaXaFgQ8/civ g5fMfLPrKzdYiyKW/wbCwAEEEBYKAHMFgmH0CPADhf94CRCfr746ECKJUkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcUDxkALRZeEznZcmto vztxrTq0ARBp5v2kdY7RqtREvxYhBPHrsPlMCKd3hn9APp+vvjoQIolSAAD/eQEA qo+jSEi4jd5F5jvudOXggvNxfwdJvxcHjAks8dwJ9ZwBAKdszKegVVXrRp5SS7bk Abhn4M+HhXywYOemJWIW8psOxjMEYfP2uxYJKwYBBAHaRw8BAQdA3PokJXaqw6e3 rHdLGvzqTm5r7DjXAm/UoTWAMS8ZsbPCwAsEHxYKAH0FgmHz9rsDCwkHCRCZANp6 kaY4z0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd1ZqF7 //75WLJkKU452cH0Oi8uUS4LuzUx7mJGkqnvkwMVCggCmwECHgEWIQSVDQbFM5D5 SvWaFWCZANp6kaY4zwAAdrsBAOxvdoOM46YmjtxlrnLAnfeEKBcDHZfhr3orjhFv ZDAoAQCWzP8lm/1tbKYD6tIE/8DuBEScNd73+e5SYQlLZqkpC80SPHUyMzlAZXhh bXBsZS5vcmc+wsAOBBMWCgCABYJh8/a7AwsJBwkQmQDaepGmOM9HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnvtbUTJ8AMZdkDl/Fx/l2grbt hCkUaVEUUQSgS1UIu/ADFQoIApkBApsBAh4BFiEElQ0GxTOQ+Ur1mhVgmQDaepGm OM8AANIrAP9EpP0iT88yIgfU1morwoov8hN1j0B0aHaSqaCRahJ4qwEAuBDCM6/A C7ZoEs/VDy8mzwV+7V9vqokdGaON57as5A7CwAEEEBYKAHMFgmH0CO8Dhf94CRCq VJ8Ib7dwAUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcO iKj6HP8bNojFgLTWWzD7AWS1DdtrpAnZ7F95oQrsXhYhBEwBHw+eTFgCLb0uH6pU nwhvt3ABAACadQEA0R1EhxuafY93cXHPJRfNh2EFIM2MQTzOejzd6BhFWqABAK6n bD2tILjAnIXZRbpVgfQsLhpvm4UfHxedNCqMLbwMxjMEYfP2sRYJKwYBBAHaRw8B AQdAiHBoxybssGSxGwGvvJEHDpll/uOlWX3GeBO6hr/ViBPCwAsEHxYKAH0FgmHz 9rEDCwkHCRCK8+RdOrk96UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfTdiZrekU4vloVOkSD2BtTIgGODfDVpQ4vE2qX5+CjHwMVCggCmwEC HgEWIQSVW2pg5eqFut1oseCK8+RdOrk96QAAFMkBAK4D1lZ9fNuLpW/PXyZ7YnAp i2ngmc5PL0zWHcjwiNJxAQD1s2g8tVUdbt2oQ3QyXTakqy8Wot6TjtAsf0qyomUE Cs0RPHU0MkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rEDCwkHCRCK8+RdOrk9 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 1iUhRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZybxXkpF 9VYZOXVqCoksOfFqOudCxcn+OWu/PMjbzeU+AxUKCAKbAQIeARYhBJmyac/0WMeA EIs3DHo/UjpN1iUhAADhGwEA97bgvSukw26nsfMbovAlPND+75kG9WDDiMu+6NFO 9NQA/33V03kiX+7VyVk+ccfhhDorb0aoYeqZUvO5BacQ/7cMzRI8dTEwOUBleGFt cGxlLm9yZz7CwA4EExYKAIAFgmHz9rQDCwkHCRB6P1I6TdYlIUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd35CqJ4R3XtTgayK1WlGkYcKdZ MkghlAGmxCTOh2BkpAMVCggCmQECmwECHgEWIQSZsmnP9FjHgBCLNwx6P1I6TdYl IQAAJGoBAPH/rTMh570ABCWDrAU5R6p422ZS4CZCdF5LPoJB5ZtyAP4hKlV5LSps INrpa3P5+DswYl9+rOAaLya0Rdvsx7t/CcLAAQQQFgoAcwWCYfQI6wOF/3gJEAhN DzrJoq7NRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ10R PFLBamJZ1vV66tGw3FFQ8drqEfxfhoYPfaKpTF4qFiEEtvg//4t4hBjUjBH6CE0P Osmirs0AACm5AQC3nxWfCifSshr/INiBhiVP8DvrWqg9VMGCJrrWmb2spwD/aH7V swlIqqnoqW2GZu9Wj7pafr5VLCirnhlRg+juXAHGMwRh8/a5FgkrBgEEAdpHDwEB B0C/wLk8WjMtQx8l6PwlN1MUdhvLe6iHPMOlCGiPKcYVicLACwQfFgoAfQWCYfP2 uQMLCQcJEMwmWUAix9SuRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ0kveEXfvYim1s5R+ifNPPQjltZ1kvJoOPpS5dQlvwVzAxUKCAKbAQIe ARYhBJvaUNimx4UlBRquB8wmWUAix9SuAAB+DAD/RLJUG5sb8vSLZVRp6nHBRhEO NPGj/rexswViyLnOCvcA/2yTykjsfmop4ORXWP1obdq56sM62CorcqNU9uTk6hgA zRI8dTE5NkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rkDCwkHCRDMJllAIsfU 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 a0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmevcHJdUBTv 3mUt5y8T4M6dWIomelOQu1AzIjB+yEOobAMVCggCmwECHgEWIQScaOmBmP+ZZPoj Zq3LrTpGXHY5awAAp0QBAPSbJl7x0RgZk6OuiQ6czluzFfPrkB2pskOu2OLAQz9/ AP9TxslRb9Gpfp2tCZuN9nzvusbkDzzDzKIywjjYUmCyB80SPHUxODZAZXhhbXBs ZS5vcmc+wsAOBBMWCgCABYJh8/a4AwsJBwkQy606Rlx2OWtHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn8VYN+PBTKl0ij13ihKmc3k+Z6rgc GgDylDJduqeIEx4DFQoIApkBApsBAh4BFiEEnGjpgZj/mWT6I2aty606Rlx2OWsA AMfOAP9PXW3ndSGAuxFZJc83QTggFIJZqJwL4mL7gnHKUEK+HgD/TranaNmMnkBP XElIkoIAzFrSScLX9fCBFzKR7wcAyQ7CwAEEEBYKAHMFgmH0CO0Dhf94CRDYTw10 isIzeUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmck21KC H2mCr4Cdh7KR5rliqxBlI+pIRKqX0r87m3V2txYhBBYhP4tUCsKP4Ms1SNhPDXSK wjN5AADZeAEAzrMGFBgz6HdzQK/rd5wiua4jXomEnvgD3M22lf8/KssA/2QnRgrX T/uUanApG4V6io7bFEuHrNlEwJtd2cfb/c4ExjMEYfP2rxYJKwYBBAHaRw8BAQdA Jt5nRqWR82HWJl3dTFqAM4higrhXkfufu1h/M2yB5X3CwAsEHxYKAH0FgmHz9q8D CwkHCRBDqWY9333xaEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmd5nr8Ploawbw6ltxihAZGGYMOCqms3CSc64swF+MwBogMVCggCmwECHgEW IQScgkXy3Qbkov4h+xZDqWY9333xaAAAZsoBAMY9JD9aE6zxbM/u6aj/mE1Rm4Tc 20dEGcC8TpTg6nXxAP9b/sM63dgqCBJntRZfwgjyROy6cfB2/8w1RrIAkmzlCM0R PHUxMkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9q8DCwkHCRBDqWY9333xaEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfDUdb2YHeQiK3s zxcEckcn7iHnywj2kdbIturGJ8Hy4AMVCggCmQECmwECHgEWIQScgkXy3Qbkov4h +xZDqWY9333xaAAAbysA/2WYS4uskoXWWDF8anqMj4Xlzv9wZwE8DQ96Qj/WHpJv AQCDRAvRQDvOIPQJ7WgTFtJZLSJNelcwt6kkZ9mpu1ESA8LAAQQQFgoAcwWCYfQI 5wOF/3gJEBLRpfIuEo8YRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZxN5VrzLTsnXfCcym8O+/4zKGBLUsfaXD+jpgoTyUerdFiEEArHbhraG m8+SwPdDEtGl8i4SjxgAAGbiAQCDlTcEOG3dtRWIj4QrJb4lC7tINF2cEHexlYDi LUdEUgD+JsvBu8xKSabfwKF3ixKL3DH5b3EROPV6TY8KXZzLeQrGMwRh8/a0Fgkr BgEEAdpHDwEBB0AHfaG5p94rbJfXsawxx4zwH6Nuh4a3SV8/QfWKNE7WKMLACwQf FgoAfQWCYfP2tAMLCQcJEH8hK/Zp+ZXGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ+CXv9dOnLmoZ2xpD0hajbgzE/JD7P5iPto+/ygmqXRR AxUKCAKbAQIeARYhBJ35m9tweL4Tzj9m2X8hK/Zp+ZXGAAADzgEA4nqyxt+FIOuW 8LIG+0laaRANU9OptfLxD4wDFr7aRdMA/3of05JwBzxKALr4GoRgj0Dk6HFlGOgL +UXBcO08mxAMzRE8dTk2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJ EH8hK/Zp+ZXGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z9i9V8495BtoF2CX/dlJ6gqqbqlHdsvC3tmIOLp6YTLnAxUKCAKZAQKbAQIeARYh BJ35m9tweL4Tzj9m2X8hK/Zp+ZXGAABRmQEAioaofkh3TGo84xHzn/Au0KouJ+54 kadZVO/c31/vRcUBAIFTsLPKOO8YSRhFoZ7/WxB7soMl0Yl50qST2uIPHjcGwsAB BBAWCgBzBYJh9AjqA4X/eAkQjbLOvSnU9gNHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnTzNy+Vk51cVJ5nJbyyzoFNy7ACdMyoTQOwX7zEMv BmwWIQRGXNmtEbUAOki7KBGNss69KdT2AwAAFqMBANdqJXJpbdYZMwhsK+4EsNjy zinFKWGV8OlmPLgiPLl+AP4vi9bBnqdxgjFRv43tXlIejydj0MPxFKaNtc8IiHu/ DMYzBGHz9rwWCSsGAQQB2kcPAQEHQN9302ggOSUsvvWDHycUCxT00TiJ7vdzfTuV GFLnMqfGwsALBB8WCgB9BYJh8/a8AwsJBwkQXa3OQzA5GFxHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnZrHV0FJeJ/TfF1QvwkVgVOqZDQ3i PhK+UKFLzC6kCr8DFQoIApsBAh4BFiEEnoDNaDqgEmX+Jd8mXa3OQzA5GFwAADdN AP0UZbnjdGqJ/2U3WuYS/a3Vz+0uq5zCLtaW2eFRw0Iw4QD+LorsUYjK6sJtpox6 W35XByZYjxKJZ3rDVX0j0E2rNgfNEjx1MjQ5QGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYfP2vAMLCQcJEF2tzkMwORhcRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ3Odi2GyB0Z8534h8exYl1mKaG0/axrbUpcfJQ3AD6vRAxUK CAKZAQKbAQIeARYhBJ6AzWg6oBJl/iXfJl2tzkMwORhcAAAsBAD/UtZJcQvYhAwk ZIc/u5uEZ5dmc7O9l2dIozVkSiwCTEMBANtFrA2JQzQHHgKGUC23hXFHVOSbMk90 e4VSzFKRP+4JwsABBBAWCgBzBYJh9AjwA4X/eAkQse18D853Ie5HFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn91YlH9NN8Mc5uT4in5yP+wLO 50vZI4DZ59KcP3fHS9MWIQSzsc21h1zYcltfyRWx7XwPznch7gAAjv4A/139yy6i DtOH+xtlP2hHNcU8UUsZdNeloXoDjdQgIVqhAP0SNKc0JoRkWM9lUq/JRLow497H i8/aTabjmurEvnxABcYzBGHz9rYWCSsGAQQB2kcPAQEHQIypL1VskznIqdC9U4La ODTEqxNmxl5vGaKLr5DjzkShwsALBB8WCgB9BYJh8/a2AwsJBwkQBSgODdoJ7JVH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnlHkNX6/g4HJg nL9go0eIzrzKTBCLdjO8Vx4vMHM2DScDFQoIApsBAh4BFiEEn1kYvmp4mGcCg4Wb BSgODdoJ7JUAAOTNAP9P8ocnX3Qtpg24o2EDB5OJ/CmvAxCr6yJWmqYNNmgv8QD/ b5NPd0QyQPNgjqf3ug1z5OCUqHRo+lXErxSFZAkrkQrNEjx1MTM4QGV4YW1wbGUu b3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJEAUoDg3aCeyVRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5QKljHXdPiXwN0rW/LqpXKX4VAlRXXr lGqY56keCmGuAxUKCAKZAQKbAQIeARYhBJ9ZGL5qeJhnAoOFmwUoDg3aCeyVAACy BAD9EQnLydhzd0EMAdAyqZIfCHkNKPQ56qaCd3i1zbS0ESoA/jgKOWqtU4Af+Era 99NmyvBQbSEHYnQb635VhtRwcM4EwsABBBAWCgBzBYJh9AjsA4X/eAkQo93zF9/t 8y9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnSyEJ0m9H SO8C97BL2nqgrEKJP/NB84dZGggPmtj51e0WIQQ26zfhWYF6htDU9Qaj3fMX3+3z LwAA2OIBAJqajzftGDDbPzgkzoySOFoKPwGyDC/u8cd5pwSzC5u9AP9AGJ7617Ci WmqNTcT7L7ROfBiGbmTtfgYb2DrEJeXOB8YzBGHz9rgWCSsGAQQB2kcPAQEHQPAk sUwihP8tN80+mM4C2ULQC6D73gLQaLnQI8vqpi9JwsALBB8WCgB9BYJh8/a4AwsJ BwkQT0WC4n2NdSdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jng7UlYp9O8AiWwElT62ixTzT0JIyle7nWjcWiGVKpWtYDFQoIApsBAh4BFiEE oBowoasZGvnBSMNwT0WC4n2NdScAAGfoAQDEpiFrPB7kcN5WYu/D5juBrWORQZ+L pqu7SrCCwvma4AEAof6sEqMWuHg524mK+Ubmk3Zh87OpanKnT+8TDsT4sgXNEjx1 MTg5QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJEE9FguJ9jXUnRxQA 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 FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnJz5WAazCmOcQ C1Igz2beU8h8XR6JVrlmJ3q6W/pGS6YDFQoIApsBAh4BFiEEpI9TbDTUpJPNIzhw wFtnW4c7E50AAL46AP0ReRcHyQtNgw/EQOERyv/jfiN/wv4GsROkErFDdeZzRwEA 9jHNwr2ocE2Mv++AuvOamreqx5NnQYP3jkYCHKqS5ArNETx1MzRAZXhhbXBsZS5v cmc+wsAOBBMWCgCABYJh8/axAwsJBwkQwFtnW4c7E51HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JneOYvu0ZJXuvnxpXOR3qzJhqqOo4sOP/I y5ddMaxDrVQDFQoIApkBApsBAh4BFiEEpI9TbDTUpJPNIzhwwFtnW4c7E50AAGDe AQCAEl4v0ux6MwxePGGKazx7Mb1FeJQOs9xcaHDS2gMpOQEAzwc8APK9SGFKnv0o jsmHRQt0fHiakH7vLidYWPGqRgfCwAEEEBYKAHMFgmH0COgDhf94CRDfP5u5Yiqv x0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcUYOeI0SDS GARtolUQxYuCSVt6IgCK2JnjbtJ+yuq05BYhBHbp0hPF9n8tvkEPV98/m7liKq/H AAANFQEAk8GdOekKRH0O8dzksS1B9NbBKGSYgzGuMWYJ5GpEdGUBAMjrRfLhYCTv XGqm8pbdMI8SbQK/38ajqW7O+8m8amcFxjMEYfP2sBYJKwYBBAHaRw8BAQdAwnAu SI5x7GL+3EYKQdCNU2v/R/YJqRjwWv1WXngUHdrCwAsEHxYKAH0FgmHz9rADCwkH CRAgHnc30R1wOUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeUFDFclFH9UtqYskNtaTWiHVFjINngt/lY2jRc7rtv0AMVCggCmwECHgEWIQSm L5iPKJagKG+S+LggHnc30R1wOQAAoRYA/3Z/lT/LfgTy5pzw63P3tp9kIK7XXXda ceHai/IGrRitAPwP7yr1cnOS+AZsbny9Cw7cWGX+RPc9XyYrw6gzHpzVB80RPHUy NEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rADCwkHCRAgHnc30R1wOUcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdHefARJ5uQzD9ge+id pkx/A2shGVTGJBg8xP+Jk0U7RQMVCggCmQECmwECHgEWIQSmL5iPKJagKG+S+Lgg Hnc30R1wOQAAMc8BANOzSsiDMmCiD+/P3ktHDygQ+gTw1A5zB+CP0169C/xjAQDu ynURQaONnWT6cOo02jEuxnzL8z7Y0H2pebGBnAc6BMLAAQQQFgoAcwWCYfQI5wOF /3gJEADMUUEZyDA+RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZzGl6LGCPvEIsYX1tmo6irr0BgPAcM+X79dSqEoNyNboFiEE2Wivt+rxPgS7 cdlhAMxRQRnIMD4AAMGSAP9rc4AZ9kcl0YTGbyU9UVXxEHZgbx4o7iC5toHhpaNM bQD9G8CwoqAMnte+2umdgCWKRaLKqo/aBI80uPrAFU2h/wnGMwRh8/a7FgkrBgEE AdpHDwEBB0CN0N5qasOd6VVA4ga1LpMzbP4577SrVaM44YpiRQx3UsLACwQfFgoA fQWCYfP2uwMLCQcJELio1V/EnLXmRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ2jeY3M6WsaUMwBRXAlU3FthFTyLr4nlPfFCmPtEs9V0AxUK CAKbAQIeARYhBKgUuiN7J7RgXHGpB7io1V/EnLXmAACv1QD+OJD7lYrcus4FL6wb s/lQiMFxkP5/zJKCBSJfhy2lBCUBANd7TCLmtfxZg6x32vsuJSpTPisykIHdHjOf 68Z2m8YLzRI8dTI0MUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rsDCwkHCRC4 qNVfxJy15kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmda 5s+CaFKVZ8/sVP1KHnrPbECEPnqy43JJnZUCyt13pAMVCggCmQECmwECHgEWIQSo FLojeye0YFxxqQe4qNVfxJy15gAA3xQA/RP2z17STNTDWVZgyloWp3C+QjdCLq2W C0vDc02q1TYHAQD62193lcbT+yy7j5vYaqwEXXjIgblQ7CxJcDQQi3Q/D8LAAQQQ FgoAcwWCYfQI8AOF/3gJEMUkUf23IoX8RxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZwuVvCKcezESzKa3wDxF8KorOmfZGmL82dKW1NWm+X63 FiEEATsjHxOaRjElULvLxSRR/bcihfwAAPRCAQD4KGpDdIGVypl086+6UVGyJKjE si187cnTU0ULGDe1swEA3SKHcKUKD/x/Y4vOaZrOJ6dWNXXFs/yi+imwgZ/XoQXG MwRh8/a0FgkrBgEEAdpHDwEBB0B24ezM8RcMcQAr6rH9YHiuZ8OnveZQlySyfEWn /r5hUMLACwQfFgoAfQWCYfP2tAMLCQcJEIeD00MgMUQvRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5+ZYe+TCujw3HsE3R8SIGbRicHO4POk Wm/MH8GWgTajAxUKCAKbAQIeARYhBKiBQRAF3Mpq8BMxQ4eD00MgMUQvAABw/AEA gBAW/BVLivzwa31gZQAk2FGWC2YislcriViqxqDhyUkA/ieVCSsCwEGO5oKGtyjV FUlZSNGgm79IbvlaxMfVPyQNzRI8dTEwNUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmHz9rQDCwkHCRCHg9NDIDFEL0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcXIn2/TzCh3YmRkAmkHvpZ4uQCnemvAxrADxSNkqmceQMVCggC mQECmwECHgEWIQSogUEQBdzKavATMUOHg9NDIDFELwAAr1sBAIsGOsJwxFxks3el DIbllAltiICrNIgqSnWrRnxBR2z0AQC387K3MCLkxbAspHFAU9uIfql7vnzbNo3e C72x5QLGC8LAAQQQFgoAcwWCYfQI6gOF/3gJEDepijHPS2KtRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ66vu6Xm8jk9JFbP5SAaWgIZgmD6 hXnA6pOB45z80fhhFiEEQ5UMiwtGaT6eSGdmN6mKMc9LYq0AAPYMAQCF+zIBcihv JS2pbFi4fXiom9Jy+OX8dJDvjiFMcRo6sgD/RgOmKb19DlHmLKYJeKHoTPR6Vaqk IE5HEqzf6gH+hQrGMwRh8/awFgkrBgEEAdpHDwEBB0BgplYNNv6qzl5tynaANrqA j/xrNG5yRzWF1ZkHcdHQnMLACwQfFgoAfQWCYfP2sAMLCQcJEKJ8yNFhwPSKRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5nJLF5PT7DNxUkM LLBVob6T7ExAKTpele0XOsMQtuLtAxUKCAKbAQIeARYhBKkV0bo/Bm6Ym5Za36J8 yNFhwPSKAADoSgD7BIzWBnuyT+sH77geK38bmffeCCzwkzq+NzRsTmREbggA/R71 be25/TqkGRn2kbPv1XUNXMjoMuJqm2LcNz3yPQ8LzRE8dTIyQGV4YW1wbGUub3Jn PsLADgQTFgoAgAWCYfP2sAMLCQcJEKJ8yNFhwPSKRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZxYgH9auTmLWG5lqHLXm0CCvqAsP5SQcj/4g wmrz3TuFAxUKCAKZAQKbAQIeARYhBKkV0bo/Bm6Ym5Za36J8yNFhwPSKAAAdSgEA iWgrB78jZPoOCiVy9gY5Ukg6JwBdxe4wPG/7jawp4gIA/3LyoyQMvmugy1AseHwV yhFU1N0XyIwnRj/Q4O4hc/gOwsABBBAWCgBzBYJh9AjnA4X/eAkQerwwcdtzp5BH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnCmrFhMCpiTGs 1gEz5STjbB46dtE8TxZU2StCeKd38CgWIQQHwdk1OTKPl1F8WdJ6vDBx23OnkAAA 7DoA+QGFI/IBfvARMa3hKO+7GIAFGb5PGe5MYY1XG10XGqXqAQDE/EapaTqxqHiM uBaNO3uGtFXJzL7rAXo+6W7CUlc0AcYzBGHz9rcWCSsGAQQB2kcPAQEHQOKawby5 wyHdwHzUt0i79QO3kkzKqvcXLlfSyhGGG1tHwsALBB8WCgB9BYJh8/a3AwsJBwkQ +PDBHZYVJpNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn HA9yjTCzHQUqGsnuJ6PxPR3+bKq8HLKn44ujEZiVIo8DFQoIApsBAh4BFiEEqaGj sPEiM9YSCAnW+PDBHZYVJpMAADJ/AP9qEWVrkJWn0BngtYhgYFDgkP3XefPvv7oq 8F84stxxywD/fgCSdVqZSd/Gev5jZyi41xRhcXhRAJeEKbL6y7PjfQPNEjx1MTY0 QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJEPjwwR2WFSaTRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2koRMarUBdbhEIraHB3 3r4ZA2FJJvj0MjUp805t+R4lAxUKCAKZAQKbAQIeARYhBKmho7DxIjPWEggJ1vjw wR2WFSaTAABEbwD/duPsQklB7iGXCRlsertDSgB6cvCbjsqTL3o9S+en8NoBAM43 MrpPNY7ofXA5PXcWuVWk1xl3VJsvaW9P/tXFayQPwsABBBAWCgBzBYJh9AjtA4X/ eAkQA3OOqsUHAe1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnLSnth5ewyzfhnUYvwjVnlKmnEgWHup1cTIzXGb63Qh8WIQSzM6BY9yCcRvLQ J7sDc46qxQcB7QAAg0wBAIdMRiaGKGSzzHzEEsNbuEt9tpz5gQxYT6nAUhXuvFE3 AP9cXhFJrbTxOzMGwHBoU8UkBah9PgVXIwksqCnti6SvD8YzBGHz9rQWCSsGAQQB 2kcPAQEHQOzQ7saN0jUZP3moPOWaMIax7G1kJfiIqFBhCthNNvBBwsALBB8WCgB9 BYJh8/a0AwsJBwkQbnVmdOjeVfNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnjQgJd0t5PUCrXaltMR7ex36emF+o2gZ3HBs2LhXETbsDFQoI ApsBAh4BFiEEqparSmqYqDlnZiHmbnVmdOjeVfMAAExSAP4vBnrhK4ZsqZuE6DBD iDX6MkCVRnIxn86H+4s9FiFyVAEAye00FDAOEHdkYjJn4VJPNpc1nuDmYzlwxi7/ ai3/pQXNEjx1MTA2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJEG51 ZnTo3lXzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0Y9 s4xhH/WfvNLgLcynTexU+3AuDilOd5gGM8mDjEW7AxUKCAKZAQKbAQIeARYhBKqW q0pqmKg5Z2Yh5m51ZnTo3lXzAAAjfgD/d1vEwRbmznDI2qVQvlfGoeRMTs4BU5R5 e5O3zDdII0IA/0z62rRupDYtBbf60utVzxKjDeUscroFq7+PrSqbxfAMwsABBBAW CgBzBYJh9AjrA4X/eAkQh4PTQyAxRC9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn1E4oIqzYLQJ9gBh7TQWuStWCw4OtHLJQE0J6CnuF5KoW IQSogUEQBdzKavATMUOHg9NDIDFELwAARX0A/Raedh+RRTC3TNKDXRNTjanbQ/vu OGsHLIeKwnd3I0qhAP9/wxCqR7p9NUjlsXeyd/qw05Ff2hNglhWMOj6hCT3rBMYz BGHz9rkWCSsGAQQB2kcPAQEHQAbEz732uZWSNWu8PzFCe1+occLNbalu9X7UWz18 SolLwsALBB8WCgB9BYJh8/a5AwsJBwkQq+afxun2DaBHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnScn/NXojaJVLwn0FGv7a/1L2WEdl0X76 89UiaeKHIFgDFQoIApsBAh4BFiEEqwrdO/Ak62x12aNmq+afxun2DaAAAAnbAPwI 5UlzbMXaPYqIARtdcGrrCvUAXfkqvK/Rs/2pbRExnQEA5XjvgquPr9E/o30C+9cZ JluDcT6tkxQmBfh0NtEccgbNEjx1MjAyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YfP2uQMLCQcJEKvmn8bp9g2gRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ7YPX0ZAT3riOIKb61/Q+HOl+xLx4Q/QAlzLZSCApMOgAxUKCAKZ AQKbAQIeARYhBKsK3TvwJOtsddmjZqvmn8bp9g2gAABXGwD+JYx5vUtc6zL8GDfZ D5kQ/A67qj8ae9wQ1PjecWETPU0A/iQtPp2BPv/4RPzPW90MePqM+7ryRiSGZozg Y5KbfTkKwsABBBAWCgBzBYJh9AjuA4X/eAkQKl/IiNLdJyhHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnjEWC94gIceU17jjbLoWVq+JRmlfE dni0wWDZxktFXdAWIQSh9TB/OY+kXs/GjKkqX8iI0t0nKAAAglwBANR/ZB05sMVJ ObgzzUfO8ExQTkFV0nN2PyaN1Gzd5Ed3AQCijxtaTVvJA0ad6pmJ3oHz8FIGgY0d brr8BwERoZCIBcYzBGHz9roWCSsGAQQB2kcPAQEHQHxZbndcypBigILfOJsM5x+l YmMaMcooWAKS/z7NBQGVwsALBB8WCgB9BYJh8/a6AwsJBwkQ+pbn6FemlN5HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jngl1vnMj14hXJrLMS jk/JNBVlFLcSs/t4gf1HeNmdb0ADFQoIApsBAh4BFiEErNgMMeSf6vmqB9vZ+pbn 6FemlN4AAC73AP9Duuj1CYiRlpt6LVideSsTzxFk2wjRHMcDb897uFyp+QEA8o3Y VaINhK/BffsDSUxqNYewAFZ+smB1mIB8w4uYUwbNEjx1MjIyQGV4YW1wbGUub3Jn PsLADgQTFgoAgAWCYfP2ugMLCQcJEPqW5+hXppTeRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/dCQWdTdrOZTBpNTcrRO1EaHV9edrTOc1Gn zwpGlEPVAxUKCAKZAQKbAQIeARYhBKzYDDHkn+r5qgfb2fqW5+hXppTeAAB5zQEA zMmoneCqu0Dl2ipvWznWwkEtp5OHlmYJnrxKbwlvsvIBAK+6iRtzlhr9phjO2erD PAMI1dAH98xcoKsct8qvpVUDwsABBBAWCgBzBYJh9AjvA4X/eAkQxwSZnvXTKmtH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnnyp4lyciTB/3 VmRyUZ/mBVve9Ss5uGUniWbOk6wYHnYWIQSNxR93rvrkUFVHkqDHBJme9dMqawAA 7nQA/10Ms7wnSZxS+EW/CfJ+nkUuq5TW8IE5ALZP28zethvdAP0YkQSEa4FE0Q/H YVMbkXgli/Cj0w+dzxiyhdwr5t8PDsYzBGHz9rYWCSsGAQQB2kcPAQEHQIWW6cSD 96B4kXg7Rh95RIzEl+oG+o+7oI2nVSOk7hstwsALBB8WCgB9BYJh8/a2AwsJBwkQ 4M14hDfMR79HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn MNcbg76jfuBIK4is4VhWHt2sW5FBLCzS1WBaWpX9MY0DFQoIApsBAh4BFiEErdbj RSJ/J0ieHoqn4M14hDfMR78AAHx0AP4lIbLwym4tQ/JAYqoJfVt3vUlw6J3bDaj9 e224RMUNDAD/Rn6FE3Mo+ZEMnEltjw9tjd7WLCJj93VIGoyT+pTFEA3NEjx1MTQ0 QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2tgMLCQcJEODNeIQ3zEe/RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ80kHgVNrBB+S8tBAwpA 490/+ik1e7q8gesrVGgbYlnJAxUKCAKZAQKbAQIeARYhBK3W40UifydInh6Kp+DN eIQ3zEe/AADhWAEAsElrzCNjcLUmg6Lr/rmwj+BYgq2SpA5LvZl0GTW4LsQBAI0w H+dwFMbpJCjNtWaUjTlg02dtgqB98hHcRvJjiMsDwsABBBAWCgBzBYJh9AjsA4X/ eAkQWLuW61EcQbJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnilBAhs0AkP5qg5brElclAAXEp92QVJ+CWbL8OqtutyMWIQS6ufsuxAnmgWWu 941Yu5brURxBsgAAAnABAPI02MfmNH5dLViwZ3SS7foXZ11KCh4KXMM/mZx4rMIH AQC0GUXWfep+zLlDVT4svhj5htOYAaJvVC0+vl/pUP1BCMYzBGHz9rgWCSsGAQQB 2kcPAQEHQKBPfqNyV3zkbeKBADp/AZyiSQTCmfGlPqzDyrTqZ4wtwsALBB8WCgB9 BYJh8/a4AwsJBwkQKf2CZJQRuXNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnIUeVVXaNfvcepcZnraIOxf/FksUlex7UG1iie26oUKMDFQoI ApsBAh4BFiEEridZ9OyFD6bOmPpHKf2CZJQRuXMAAFgtAP9HdiiCp1w7/lSzWUqd IPTj5aRVc3tJesTLT/sn3X8WlwD/YuvtG9YUcZv7OnT1SmyEclRc0cNG0a+DJRCn OLQpFA7NEjx1MTc2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uAMLCQcJECn9 gmSUEblzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2ED ZRjmeTrjEupVs4+Ra34fzO62jV7uV94y/pKzPeEoAxUKCAKZAQKbAQIeARYhBK4n WfTshQ+mzpj6Ryn9gmSUEblzAADERAEA4wp5oPD/V27wvkRVlltkLm80iVuADhIC HGXjWy4pFdQBAIWv/y9pGYS9lzmFhaJpnj46kvmPqU38SqFAiqqRTfgGwsABBBAW CgBzBYJh9AjtA4X/eAkQOAjvqSWIN/hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn6D1zUNfpEBmTcCw0fclPRhQ5NtCdb6OPN14la3Y7ZMYW IQQjFgWu40di87vI7Pc4CO+pJYg3+AAAszAA/3+I8zBhFGOhFcZFhlBBKYe+QoE/ b7203/AmGZTTa+2KAQCRtwzaWmXhNeXcNujLqseiXfTKJea68RNBPkSaKGV8BMYz BGHz9rwWCSsGAQQB2kcPAQEHQAb/JDN7kLkdWdI/61a4FCLI8v+qv8LfPNiF3bdp VgJVwsALBB8WCgB9BYJh8/a8AwsJBwkQJaazgbYhwIJHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnxFaA0j9KviB+U1jF9TYeZdjrqUzcemfS JVa6baMNPKwDFQoIApsBAh4BFiEErwl9pNtcDiEW71g7JaazgbYhwIIAAM1hAQD/ 57OvV8fTUPwAvDtkpCVo+PP38sUMjSd2KNnj0z1nEgEA5GmcGaAIYR7JlxpuZdZ0 FuVZ+q/SnDlaTBBnHq/l+ArNEjx1MjU0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YfP2vAMLCQcJECWms4G2IcCCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ6GQmnK9ckhBCbeR/FZCMA5FvqPZH4h3cCLYmvVs0wkbAxUKCAKZ AQKbAQIeARYhBK8JfaTbXA4hFu9YOyWms4G2IcCCAABPOQD6AmikSfAIZEteYyQO Q4PNYYePrgKtW/GEqRZgG6BAYxEA/3/DO6fTLZ9bKjWRahhTVqO+Qi1TC1b79CYG WawciwcOwsABBBAWCgBzBYJh9AjwA4X/eAkQX7OR1jyIbuZHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnMmxtiBs/pJBKyNI2Ma3Lb+ANXfaI BHMLHvMBZ6C08f8WIQQTjMIIWxoG8C3hlG1fs5HWPIhu5gAAnU8BAPxrNQnTaBto N6XwBRaWJyGC7ziCchOEWqRM4IK8d1MkAQDG3DH4jRt3JUv8U+TkiQrKXBIuVWur 8jOdKjUgu1GYCMYzBGHz9rQWCSsGAQQB2kcPAQEHQBMkG7gQiGQ0oW4Un/sr8wJg uJw0jcXErTbSRHd/ooE9wsALBB8WCgB9BYJh8/a0AwsJBwkQTiVTgNXzqNVHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnQgNJgtceXERc3gKO v7l0iFZ6IJ4uDR809h94vtR2px8DFQoIApsBAh4BFiEEr4evEYP7PpNw1QnOTiVT gNXzqNUAALfqAQDRnwc3DjPZMCnxDTcvOj+KQKJI1ysMEIxvkPdj+9aYqgD8CbHs Skmlw58+SZfWnkyw+CLGYLOS/1JTP14LhN2oWgbNEjx1MTAwQGV4YW1wbGUub3Jn PsLADgQTFgoAgAWCYfP2tAMLCQcJEE4lU4DV86jVRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZxpUfm24CFPW7IlZpqq7Xa5kzfyCg8qnX7Nt iwPEbn7HAxUKCAKZAQKbAQIeARYhBK+HrxGD+z6TcNUJzk4lU4DV86jVAABQfwEA iewknWnp7o9VKAepVubNfSLMnnwtUpJrgP5w6eCUza8A/0GiMF8ySHW7mGLjp7aW EH+DS3c0oBK2sID0rcfgnXcJwsABBBAWCgBzBYJh9AjqA4X/eAkQ4tnjULfPPYpH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnuBjcacz++tHH KoxO6fCbuuTL/ruu8ZA7jwlJ3Bx8nLoWIQQobsXU5dHRNuVMmW/i2eNQt889igAA 5scBAO3CEnX8xuvSnWmkZ63einkxEhSC/4OudmtKIr8uP8bkAP9yivyVFOI6QfLe fINcT+ubx/y03lmTq9Df5AS783G7B8YzBGHz9rwWCSsGAQQB2kcPAQEHQMyrCnkh a/QEEALuTpX8xNpmtE8GEbUl7ihG6gulkr9xwsALBB8WCgB9BYJh8/a8AwsJBwkQ yYSvUlRjCM9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 1o6754xh5+OhcB0Q7PgabGpfsiAa38luSz2t3C1WyxIDFQoIApsBAh4BFiEEr96Z oAjpvHYd+mNnyYSvUlRjCM8AAEijAP9cvFTTL78AFzeqV1e5gISa42jdwtJXguv8 eOj+94U9YAEA4j7sK1wqyGQepAvGDRlR4w/z2a6Z5VHtGyOoPyEQxw/NEjx1MjUw QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2vAMLCQcJEMmEr1JUYwjPRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ40zDuDKF+GuyiNs8wFG S82JPm7a5smVWzI19GZsoeG5AxUKCAKZAQKbAQIeARYhBK/emaAI6bx2HfpjZ8mE r1JUYwjPAADr9wEAx6OU4I94K+qgJG5rZ1LUs5WYhtxcNdSaI2KLkUPWihMBAN2w DqsMlusDlE1icrr+tzxhwIKEZwu925b+K98nNxkCwsABBBAWCgBzBYJh9AjwA4X/ eAkQXa3OQzA5GFxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn+3Ew2Py+g1TLfvwoad81FGlaAnWLOv7CRJgSZLm0E/EWIQSegM1oOqASZf4l 3yZdrc5DMDkYXAAA1WUA/05bpJs4tfqZjB7FFzkmMUl1mVbhJIs9DBMrS74qH/53 AQCYCglkDEce9cbuyzDFEg1F9kz3/WVOLsh7+GWd4wByAMYzBGHz9rEWCSsGAQQB 2kcPAQEHQCbG6e/OBUsOA5rPowr0aYTIvRd8Iy+LvsmFOc5MBiYSwsALBB8WCgB9 BYJh8/axAwsJBwkQ8mirX2q0R4JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnE2KZjEF6gFkrQDgZsKS+kWq+w5dA8zQoOh+ONyoDIBMDFQoI ApsBAh4BFiEEsSVtmH8niWAfxdj68mirX2q0R4IAAEVxAP9/HeSF//l6CusynSMO L7ymp7NiMLn0pEw6naELUfepTgEA8ahifQRZER5HSMX7anJ/ZxNLXhHK0Aj+IKLo d25JQQzNETx1NDlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQ8mir X2q0R4JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn6XHV 5Jqjdww/N7NVGrxGRFXXgEJoTxWYPUmphcsYJs0DFQoIApkBApsBAh4BFiEEsSVt mH8niWAfxdj68mirX2q0R4IAAIlhAP9ZG5c0M3XfOkVgqL0+g8FrDZXlpAofTKmz 56T9D6FA2gEA67gLV9ThegDT9UyWSChYLlNoHveWY+OBgHgdeuAGQQPCwAEEEBYK AHMFgmH0COgDhf94CRAV7YPs30lGPEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfzeEz+SNoC4MpWT19Ih5jPsyjQMe3Rr+Mla1RJ9AGE3hYh BOlgzYk+bPf0HnUr7xXtg+zfSUY8AAAs0gD9E6nwfi2yLM15GOpzpszXs1cADlGC C/grvid0h0fv5twA/3/JhzUYQYVTFOlqrC86c6ir3+KH5FiHtCRhAWjMcq8FxjME YfP2txYJKwYBBAHaRw8BAQdAxa/SXtGOExQTv1WLNxL/NQZP1V+90WLmEDJAHHRn jbrCwAsEHxYKAH0FgmHz9rcDCwkHCRADc46qxQcB7UcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmfz7ouQo5ZK0/pjxrVIPcA3rtBDWDQn+UzM QuZvqUaL6QMVCggCmwECHgEWIQSzM6BY9yCcRvLQJ7sDc46qxQcB7QAA91QBAIB5 cknewWODK4CbhjGu2tiG3V7Md5pDZgYWx4z6VaKiAPwLU1UhREemXLzFGQhAXzf8 bp0jvvdazDoGWwZM6p81BM0SPHUxNjNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh 8/a3AwsJBwkQA3OOqsUHAe1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnw0Stp/eBLX6eaXe6wSihexznZjIPEG6gPHeZ3xWUQVcDFQoIApkB ApsBAh4BFiEEszOgWPcgnEby0Ce7A3OOqsUHAe0AAIJdAQDjEOFtXhzFtsqMJxs3 5eccdHfqBPqv9kB/EOU7h10rnQEA9ivAS7EKrCq44Do9lwoLBd3W4LUbJnvaVKoq ndvQ4QbCwAEEEBYKAHMFgmH0CO0Dhf94CRCepw6zIi2eUUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf4g1NJTMmztsWhQFZGdoVYDvUd9nAV Hi1szu+g0nVT2xYhBLwAfsGbC8jd5ZhHsJ6nDrMiLZ5RAACLPgEAiaU6ZUbF1dM4 zrKy1HuQoroVt3TDxK7rxnsNcx3L6LsA/il8jYmEMDbmoSUqmmy6SU6Ua6NoTnGn dLsVToCM6UAOxjMEYfP2uBYJKwYBBAHaRw8BAQdAQmmpJa4fP9NbzC9fJjWUuagS 8LEDSzNQ+A0U5zV5+VnCwAsEHxYKAH0FgmHz9rgDCwkHCRAPfFQ/laIe70cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmexHxued7UgcbeOEIgB NWdasnqefLeCGZQcu7z8eQ1diwMVCggCmwECHgEWIQSzeuhPsLQib7k1owkPfFQ/ laIe7wAAapoBAPoQyT20TJn1KDErlQ2eKojEf4Lozj4lCGWPuS54D6erAQDTdQgB rY7zdR6coxTz4CLR6YHX9A4vnXhjjoCXB3WaB80SPHUxOTFAZXhhbXBsZS5vcmc+ wsAOBBMWCgCABYJh8/a4AwsJBwkQD3xUP5WiHu9HFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnQHbqOPb1LPGabfzk3T0JM72OQ4jOb/+KZEsX tp1dPf8DFQoIApkBApsBAh4BFiEEs3roT7C0Im+5NaMJD3xUP5WiHu8AAIy8AQDr VFMKPd5q6nl1skOCqHlWpcFFrJ53elSjkNf+piig9AEAtVWKgkHUmiJsh9whsRgD RlAAOccc8eRpcb2EALu4BA/CwAEEEBYKAHMFgmH0CO4Dhf94CRD7eubCrJlZ+0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd9VzcMos4p7/XS STjsFs8tJToF5gag7A0CiaxL3DQ55RYhBF0zVRkD4U+qv3Xp7Pt65sKsmVn7AADt 3wD/Uv0wz330tOAc08L5IHlmj/zE0QtudCDxwcbYz+2X3SgBAJD8zAGkZhrLxA0+ 6Gav4uO6CE7dUfiukP4JyZki6ZgKxjMEYfP2uxYJKwYBBAHaRw8BAQdA/VvWNNp1 RyZvIqb+zjejOR05a3lXfY7QrWM4sasZL0HCwAsEHxYKAH0FgmHz9rsDCwkHCRCx 7XwPznch7kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdK W09rF09VSeLpqfEcKfT7sWThJrcHj8r29AhvBxTbtgMVCggCmwECHgEWIQSzsc21 h1zYcltfyRWx7XwPznch7gAA+sYBAKcC3wXAp0s38Cms5Mb2Uc4tJEW9QJIY6Q+3 tiOoUAOkAPoDtJTwm21gdLIY9PzsM6W296ewY1y6GS4I3ncCdwpyBc0SPHUyNDhA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a7AwsJBwkQse18D853Ie5HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn/VuGaiu5+v0EMLa1ZKDD DrUL76/HqtEAeS67SGQYPSUDFQoIApkBApsBAh4BFiEEs7HNtYdc2HJbX8kVse18 D853Ie4AABQ5AQDmTFPS845fCJWv7m2ud0MuJKA4EtwD1dxL2oB9vZJebQD/e3vZ zyZTe59nEk76+g3R1M7dyGSMdlzrRKeOCecZjAbCwAEEEBYKAHMFgmH0CPADhf94 CRAWpzb0Qv1qb0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeNmjiqFL5pC+XVWC7r9uEGL4SavRAq1vbdRp4h9Q8CbBYhBJTWJ+Yn4V+bkURF eBanNvRC/WpvAAD3zAD/SWb+gA36yIT440tasqNgcfhIaR33XhYV+Nt4LdpFFcAA /RAjw2TUXAQuYmX4SuyxualS2dzn2VP4EjYyUp4NPxgExjMEYfP2sxYJKwYBBAHa Rw8BAQdAFjsUNrbjittv1Ecsp4Euu9XByzc+jDQf9Jrh1GevUyfCwAsEHxYKAH0F gmHz9rMDCwkHCRB0bw8ttyPEYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcpaS2Z2APFEimFzPbNDq46nCQxF0KncAB+GIoEnOjKRQMVCggC mwECHgEWIQS0f/LvnesIx/xVUyx0bw8ttyPEYgAA1yIA/1vCc22QqvvlqgAEB7vk SLfY7wOUdtvf4Br+rVSnk6z1AP4ziBET/wgSjsS7ePal/7s5Ukqws/02yRa/7umb uN6xC80RPHU4NUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rMDCwkHCRB0bw8t tyPEYkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmez2n5k /m9VT+9GK1w6ydZwE75AC1oQ20HRJKhxtzYTYwMVCggCmQECmwECHgEWIQS0f/Lv nesIx/xVUyx0bw8ttyPEYgAASiwBAPOUIPBLfzSuV8OV5HWZaIQixs8mdfqmz//Y CgOkvObVAQDk//4TxBlc9RkS4Ch8v1EMG/WSNxx30/V8qs/NGtCiB8LAAQQQFgoA cwWCYfQI6gOF/3gJEIh+PtL54N2pRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZwYiGp87nEkt/nMZGt7qZjNKNI8t+MLVlW5Ov0jub4hqFiEE X/XIy9jWcFZbMAUZiH4+0vng3akAACuEAP914O8X6+2NUiUkyg8RV9rCYYL6rNa3 +LAoRrU01UrPAAD+Jq3obND9Ij1GmEYPu2HaotP6a9jYOr5eQVhZnNrxJQzGMwRh 8/avFgkrBgEEAdpHDwEBB0BJC2eGRx17IODeoD3LzwPj8BBasCp/CaH41t3DBjqD C8LACwQfFgoAfQWCYfP2rwMLCQcJEBSRqcK95vHcRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0ly6+T48X89c7kIAnOZYJ5HSocDJn+cF67g 6TMUL3D5AxUKCAKbAQIeARYhBLVXhieAqXZ2zDL0uxSRqcK95vHcAAB3wwEAqg7R ahmvhzJNg5VYvbaVwzzbQH7qSQ3Xmn9/Mg1B2/MBAND+kYuqY0eNkDtsJ8STgkuf EcN7c+sda2Za3kmIq+wKzRA8dTFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/av AwsJBwkQFJGpwr3m8dxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn6i3VAZ1N7IrhBPgBMF0nX/u7lX8StwkDTYCb4d7JdG4DFQoIApkBApsB Ah4BFiEEtVeGJ4CpdnbMMvS7FJGpwr3m8dwAANy6AP4gjbRhC8+Jd0PFoKeXZAht N4r1DJkkHSIS1cFASuzfyAEAvJv/IHihXxxd/cvnVoWSlVel3OmtmzdU5aBkdPZL xQ/GMwRh8/a7FgkrBgEEAdpHDwEBB0BJYEVYya3fMR94JpPparftEIvrHKf+C7B2 SdrdsSlh28LACwQfFgoAfQWCYfP2uwMLCQcJEM00Sb1QiSMSRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+s/1TyNj5SFAipOU4pEfU8oQ2LI 06xfIfrkShHs2BmqAxUKCAKbAQIeARYhBLZWWt3VY/3XINBUEc00Sb1QiSMSAACl mwD8CWjmiHDLVQhKWl+qskb1lJ652cTJ0c2ByOmd5L4YILEA/jYLL1B+1TB/djBP gt8Go0GN4YyOFIKQbB8i+i7PK60AzRI8dTI0NUBleGFtcGxlLm9yZz7CwA4EExYK AIAFgmHz9rsDCwkHCRDNNEm9UIkjEkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmex9UnVi8tegdGzNB4YjVp4d+IkebBmdV7N3WizO32KBAMV CggCmQECmwECHgEWIQS2Vlrd1WP91yDQVBHNNEm9UIkjEgAAY6kA/Ap2Ql8aDSZA EsxiuYARD7TL/AbPgE+JKrf7sX/CeSXLAQCbNUhvSbqkYK0alJAHffRlxRWbKP0g UUGs5NNb6dN2A8LAAQQQFgoAcwWCYfQI8AOF/3gJEA5R0T3CgwskRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ54kGmkJNHwCc218VXzbdMcy UqoECXEX1Cv0Ma0ELi12FiEEzponvhJIOl8JT4UzDlHRPcKDCyQAAAf8AP9QyV2B rzNoJrdfzBXi1qjL0EGuCJGC1NvFD+GR6ouQIwD9HgBpnIh66XezYB5V9w6M0vLi Jmq1qDNvG/fXDFksOADGMwRh8/a8FgkrBgEEAdpHDwEBB0AvR6q8qQmj3y+9bvYe dlaIMZJJ1GT7dz0VBmK649LYEcLACwQfFgoAfQWCYfP2vAMLCQcJEFwGCHmbDjxR RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZydHFzo7QHdg JaWyPOjS1ux0d8qQ1cZpn5kfqSuShKD4AxUKCAKbAQIeARYhBLaaZ4qiQvpPC78S IFwGCHmbDjxRAAAdrgEAtc7O613zv81XLXOjF9GEDvHqzCQw4Sm+QO29pdD2iqwB ANJZYNuE7GJBpHw0cK83mGW85i6g1kF7l/nUTJ6y0YgMzRI8dTI2MEBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmHz9rwDCwkHCRBcBgh5mw48UUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcDArOWwl1CaAtSwCFmPqC0B68CjPb/ 9qtQmsWW1WTHGAMVCggCmQECmwECHgEWIQS2mmeKokL6Twu/EiBcBgh5mw48UQAA 0toBAITQkgBK86APfkI0scc5c7Ss6W01Cx9HeQaPqnP/FtL7AQCr7F3J8gpIpLsn 1XnQ0gmhRktvrI01i3WlDT8GzCG/C8LAAQQQFgoAcwWCYfQI8AOF/3gJEECKnLc2 cXHCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ77aDHMR gA2CCMbi+NxzLofDT3gkCbyS3x0QyO2x7ZsFFiEE/N9MHWes+otC9qd8QIqctzZx ccIAABHGAQCPYkZmAdRUWzeqo71NdCyOtPPoan8zGI2JGTv54mps0wEA+0c302Rc BBLJ2Ypm9p970umkjF2agoY5xxFMx3bDlQjGMwRh8/a0FgkrBgEEAdpHDwEBB0Cm kwaK+UsiD1Icvq8h59L00x7Eimq+h00i7fsk361xMcLACwQfFgoAfQWCYfP2tAML CQcJEAhNDzrJoq7NRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ2Od2pwbjFnQcQQwO+nWAuhKI/RDEOG1Rl5ctzuGA13LAxUKCAKbAQIeARYh BLb4P/+LeIQY1IwR+ghNDzrJoq7NAADbmwEA6iFuQuy9TH/57ihVQfE2dT1QD1+1 LVCldieD9El+QT8BALe5IqCTAiDndoFS9f2ODN98H206fBL9Gb+kVNfLy5kHzRI8 dTEwOEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rQDCwkHCRAITQ86yaKuzUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeYPqpHnmiKlsDm e9uXRIoG2yLzxng95Idg0IPFeLu85AMVCggCmQECmwECHgEWIQS2+D//i3iEGNSM EfoITQ86yaKuzQAAYoYBAJZvHODIKqA3WP9JunSD+Q9YVcMS2eO4SaMfi6Rc7SAJ AP9ZfsH/RdR0UM9yKnBYRmyAjzzumhfG1kFwy/kS64bMDsLAAQQQFgoAcwWCYfQI 6wOF/3gJEH9lK8GC8IddRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZzHgbQ/qWFuBVIkupVQDgTV3tF86w2uMUZBC5P2TZfaLFiEEaESw2Ksd dKV2YxEVf2UrwYLwh10AAEKfAQDgDP8gM7ijfxarEWKR7ozOEC47j6FYHVC4KyNW FzdAEAD/UiR+egF1wRl08sXYjDuBUN+ChxacsqDUeWnCCZHttAfGMwRh8/a8Fgkr BgEEAdpHDwEBB0DfSocNUpLosgqfwaughAxfiMaGe1wyKKkd1tZfXjnlGMLACwQf FgoAfQWCYfP2vAMLCQcJELrDQAIzc4EiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ8TVaTLeSnkP0X7li7W+9Dx7mcKGudd8CYCqI8qTvrVH AxUKCAKbAQIeARYhBLcyBsT3Dgc16SiBKLrDQAIzc4EiAABFEwEA3R/rNq67Mz4w YzpchI28WUHHGhw6BejRcoK1oD7OD/8A+gNhgFn+2KnhRsn7LW/ctasRynuOVrPA J1j6wOBTDxgOzRI8dTI1OEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rwDCwkH CRC6w0ACM3OBIkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmepPOTP0cKLFenRGW4SYjFl4+/VUnLXCzOy9+sTGZGzowMVCggCmQECmwECHgEW IQS3MgbE9w4HNekogSi6w0ACM3OBIgAA35gA/ia7Ua7KyQX2Pc35cgO5CZgEhrfh BYZ8e5nuBR7Naf1JAQDNjFN9YQalwXQaAMKNkVBKLfjulHPNgUDJRseGELt+BcLA AQQQFgoAcwWCYfQI8AOF/3gJELRRUiTrdFosRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ4sTrMApyIG2MRCVkzx1dh2/GuxJ7CiFpZMHNU/F oY2LFiEEBBVJ26kPLE654iUFtFFSJOt0WiwAADAHAQD14BwX5Ri7RwKE67Qpk8Xh 8ZSf1EmJawQAjAJxlmS7dAEA4jzHZ6uz73j0NW8vteJoRgvIjpTvJC5s57LRXDsZ hw7GMwRh8/a2FgkrBgEEAdpHDwEBB0CYSlH1nwV8fgKuyns9jGtKlntmf1ajRMaa poNlowLI5cLACwQfFgoAfQWCYfP2tgMLCQcJEFi7lutRHEGyRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9f05g2VKCGh+/oRBupG4g6XkM4n DvBLlxaVdbQ5B/KkAxUKCAKbAQIeARYhBLq5+y7ECeaBZa73jVi7lutRHEGyAADj 8QEAj4792+jSSL8uC9pAWjuzc47saH2mOrIxwaOnxLE17oEA+wRZ7aBzyf+NLfpf cDeLs3o5Ns3x+wv0m+ZSBPhlQVIIzRI8dTE0M0BleGFtcGxlLm9yZz7CwA4EExYK AIAFgmHz9rYDCwkHCRBYu5brURxBskcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfSEi6L5D3yxOO6UpANOtAeMHDAzRvvCquzrA6Jmu3lYAMV CggCmQECmwECHgEWIQS6ufsuxAnmgWWu941Yu5brURxBsgAA/MYBAK9d1iMDfnTw uI8ahc1XAAEYETOed5E8ySCScK9ujwbwAP0cd0kDCcclnqVC3NR9TR31JI4JAOEh YpMgt1xhdtt6C8LAAQQQFgoAcwWCYfQI7AOF/3gJEEay8o5RNFc/RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZybB5ZpZ9esIqt3hnC5xX8Z3 mhQxO1uyp0DaslWKq8idFiEEWpYrCe9kn0Jn39rgRrLyjlE0Vz8AAJtsAQCdnxKK UaJdll4wBFCkXspmFFfh76YyEwWglBWqG3VPrgEAtx68tfDEmqdzMJ0s+U/Qv/BX oKGwZBbqo4ZZ1uE7cQDGMwRh8/a6FgkrBgEEAdpHDwEBB0CavqsuwxdxLLw968VP iColOQrdLSykl90pi5s1aC6M5cLACwQfFgoAfQWCYfP2ugMLCQcJEFOkGTNFqhfH RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwI6L/CKzdic 4lZYcefA+4gBFN7yVtCs7k4mZmzE1Ds4AxUKCAKbAQIeARYhBLsbL5OuTE1BtDha tlOkGTNFqhfHAABr5gEAzAm46hsA05meCDR7R+M9O6PnGo/6G4/LqBd7qnqZWA0A /0rVWPO4AivvIZRb345nXGlr+DfpX/WzEVNZcsX8bOgIzRI8dTIxOUBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmHz9roDCwkHCRBTpBkzRaoXx0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfsMnOKqneGRMhe9DTovXy5adHMrwaq GIyQPBmiLJq2+AMVCggCmQECmwECHgEWIQS7Gy+TrkxNQbQ4WrZTpBkzRaoXxwAA NbIBAKkVhL+nyKAYXya4zIW6lQfls+TnF4sZ9iGvTbARt4ipAQDQV9Kqcs3tRkX1 OZZZw8MecMXoJxOD0ol4ST07QV35DsLAAQQQFgoAcwWCYfQI7wOF/3gJEAwwQTCo Q/UyRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9aPl8gG z2jPHkWL2QI8pYxM4IS2nVjrlMmJVeYj+O1mFiEEKhG2WDLpfmXapp1pDDBBMKhD 9TIAAK+uAQD2XgPOHTNijrBwiHW8PpR6samIYf5kbqNrCuQ5xjI/jQD+KxwwgGn1 ZayFJwwQ9j0WfE0I3prBqkj81ksKQO0xGQHGMwRh8/a3FgkrBgEEAdpHDwEBB0D1 XFtNtyIwjULkZBpk6+uqBZoAP7Q8Rs9ICDIFwP0DQ8LACwQfFgoAfQWCYfP2twML CQcJEJ6nDrMiLZ5RRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZzTKnqOA1/gCRhTsXF3F/PJSvBw4B4Bv0G+IDe6v8S3zAxUKCAKbAQIeARYh BLwAfsGbC8jd5ZhHsJ6nDrMiLZ5RAAD1ugEA5/g4fAdcYIs+3jMHjTBQJjhhsn++ siNt4B6USRi9VNQA/j0WySAnLSzdYmvmOinoPL6PvmQVgnKImnVb6JPw1D8KzRI8 dTE2MkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rcDCwkHCRCepw6zIi2eUUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmciREPZtyjT61dR aO0KN5Eop1Ca2DoJqYRzMlyXDLYaBwMVCggCmQECmwECHgEWIQS8AH7BmwvI3eWY R7Cepw6zIi2eUQAAdIAA/3C4NnU/PrdLXBY0tWqiHkvp1RO8Pk6w9EjpIIlaL98N AP9UrlRUwPjdFAWxpYhF6T02glM6UuiKCQstTeyjifPtDsLAAQQQFgoAcwWCYfQI 7QOF/3gJEJPDlrT6lM2SRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ+XsKLrOo2CxjPX/YA9TGD6tZP+YEmStnWFICBmDqn0NFiEE+WUES+Hn MAx7Zxbik8OWtPqUzZIAAOPFAQCEV8feQH8qobjOKXFGrcVLMX9KB3fiJE/GUP43 nkYZEgD/VH3AuHFNRsuMaB29ZxIyH7M/zc7kPK8oXjAYIzyhigrGMwRh8/a0Fgkr BgEEAdpHDwEBB0B+gWqPlVTBZ/SZk/4wmRLu/O2GXVM3wLm7voqjHRTrXMLACwQf FgoAfQWCYfP2tAMLCQcJECwvyrCcCcJSRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ3Ir3bJAbFxupjj68FbH1BzUxlHGQ16gTMgMQBmzGqEr AxUKCAKbAQIeARYhBLx4LENX2ecgda89vywvyrCcCcJSAABruAD/Wd15GpEjOfJt Rf2TaEviM6qXh3iN69W7YkUlndxn+1IA/2+fRklYohagLkr07Xg4iL22ECyL+yOl cKgD2H8SpMAEzRI8dTExM0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rQDCwkH CRAsL8qwnAnCUkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeC4tjbWNdbACbpV57DXcjN+JQ+RLDyut+9ZU20O/aROwMVCggCmQECmwECHgEW IQS8eCxDV9nnIHWvPb8sL8qwnAnCUgAAL6gA/28l5SU0/WpYHGB1DU6tYA41sY4M 5VBLF0xh0+X85tfjAP4gQwZCEDEoYcm9rGw7tWm4HBHLQwyaRiWByXKfaoosBcLA AQQQFgoAcwWCYfQI6wOF/3gJEG4gBSWq9vYpRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ7mD9XhclECqn6fgdSbWLF/aIzBMJPTyHc3NOi07 dGDxFiEE4kmmNHWaQXoEBhVzbiAFJar29ikAAJKgAQDm8Yo1jlRdJuONiUnue7Qf kQ37ABCdkWmbWRcoUJ3C1gEAhBzsJn9it1/VLlgUYzqR3cOeCaC48/G6GFyzUBaY hQPGMwRh8/a2FgkrBgEEAdpHDwEBB0Bd5kD+dhwzcYAH+zGJHsUFYqnFwMeLmSQI Bi9NXVEIX8LACwQfFgoAfQWCYfP2tgMLCQcJEGU+gSBMMKEZRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1ZJTfezsmAkcLjhOnXYQ87RTOf0 XT0paB/z1PIny08zAxUKCAKbAQIeARYhBLzR+5p1JOay0a25IGU+gSBMMKEZAADh PwD/RKMUqLARnkUKFYKh/e3UwOQBtRcTjRAE4xnIZmn/CJIBAJ/w61/M5xE9V26v Mipm4/Yt5L6fnWhcn5cc+kBWbu4GzRI8dTE0NUBleGFtcGxlLm9yZz7CwA4EExYK AIAFgmHz9rYDCwkHCRBlPoEgTDChGUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmeqoBWvZhiV5perEPYQYUEP1S3PJNgXQz6rhrX5OqctFgMV CggCmQECmwECHgEWIQS80fuadSTmstGtuSBlPoEgTDChGQAAYwABAPBr0iWRb3B4 8CNqA6OT7foULawhusgDY8iZ0Pp4cCokAQCh5NmDlbA/Ye3oxBLAHQ/2Myx6t4M4 FpFSJWdmFeQuDsLAAQQQFgoAcwWCYfQI7AOF/3gJEODNeIQ3zEe/RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4PGUKgoq6JHJcCMWApGd08b 55jntZpHq2V0EgPF3g0MFiEErdbjRSJ/J0ieHoqn4M14hDfMR78AACUbAQDRB5vM BOMRBPgwEof/Z6cjjBabLORNc9/1J0BLnyufeAD/Qk88USw6LMFGOZABE9HzCfsl wyMeMdbE7i6XFx+FhAfGMwRh8/azFgkrBgEEAdpHDwEBB0BPElx5rswDebEs3suf ZTVB4symTEOu/KHHxl5cYe21NMLACwQfFgoAfQWCYfP2swMLCQcJENJGK+TPNvYl RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7cKWhtGYdGF 8KZX2WlM32Yw9hQF4h+ADbD0yoCzFAiGAxUKCAKbAQIeARYhBL953VHUYhgAFNKt cdJGK+TPNvYlAAAnLQEA8xN0f/TigUY5xGrwIi/zX9DJK9wv+nrFmC9oVoGc2FAB AI/8+x//MOZY4nVMZipGs9OZlFzMNvLGyLp4nFHnjpINzRE8dTkyQGV4YW1wbGUu b3JnPsLADgQTFgoAgAWCYfP2swMLCQcJENJGK+TPNvYlRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4OGPJ+cHPOyrCUADNpYUF1M5j0gztfe z36CPkro9gGtAxUKCAKZAQKbAQIeARYhBL953VHUYhgAFNKtcdJGK+TPNvYlAADW JwD+M/ew2e9HjGIzeCw9WCULSiP/7P1V1vTFgduxcUe9uNQBANDOu3LEDtlI61U2 qftaSr3n0sgozbv0L+4NS+ewrm0IwsABBBAWCgBzBYJh9AjqA4X/eAkQqLFdk4lS V/lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnqDZD11vK 2aPjEEiQNZSJIQFnUhdtctgaTw+gKT/2gQYWIQQFyi04gpfoJrnDtDGosV2TiVJX +QAA0koBAOCEjMKSRAdea4iDJwty4sUMgQW1e6Ykx2ZZhJ8B3LD8AQDHWZ3yslgv PhbiMsFhPjZ3oute3rB4X1TFsdxjxy7JDMYzBGHz9roWCSsGAQQB2kcPAQEHQLV1 33zU4mY3tDOppuy97vV9i24J6ILfjHzIC7aVSbN/wsALBB8WCgB9BYJh8/a6AwsJ BwkQntcHkCBkz3FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn0yxgg4IxyjjlYWOtTRr1KC2GopO5RZk4L+PTArfPDacDFQoIApsBAh4BFiEE v8x1j2tWf/SJgBtTntcHkCBkz3EAACRJAP9tTFwOUbAHyhnFex1CSP1aMubbJeDr I8l2TC/6OIV9UwEA/RpMLunrlkhzeVsmGlKUcPP+tkL6nnNo2q5XGui1TADNEjx1 MjI2QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2ugMLCQcJEJ7XB5AgZM9xRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7t8w8ju3iC2nsEv 3tXa61jqYaPz5V+9dU46gkRwoQeTAxUKCAKZAQKbAQIeARYhBL/MdY9rVn/0iYAb U57XB5AgZM9xAACEPgEA2v2anBmsj6FW7ZBvrAtAMVsPFi+gJpyhYq/ye+WgmvkB AJ+bgDonKOB0b7VJySA6UvLqoSpHiQ5dgGDRGyONCE0EwsABBBAWCgBzBYJh9Ajv A4X/eAkQh93NKgLjjThHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jnn4uI/ViuskBmmjQXLmYPll+FZevqv5K42IlPxm0sW1kWIQQYWoHkV1H2 MiSQvnmH3c0qAuONOAAAlnUA/0nDKbJe2OcBjdk2N+sCN3tdARVTEcpmtV7haO7F UaldAP9ZKHm9QdgPtMSfjxvZXj5G/J9cZzzp2NwUaJnXqXtuCsYzBGHz9rkWCSsG AQQB2kcPAQEHQIDTc+sQy6E+n/cOYrAlXup9xQWZvbGBvDpTP0JdlOlawsALBB8W CgB9BYJh8/a5AwsJBwkQvskhGi4hDIZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jni+m9Xf2Zq5HpQ3coeseXtlnvWvHUHmD05VvcK/+5y3sD FQoIApsBAh4BFiEEwKOhkPi/thFah898vskhGi4hDIYAAJL3AQDs+p8mXptarRUi BxynHekXRC+zP40D58U2Yvk2DSYGwAEAq+JP1gPlplHM1pYqSm5e6OQoGLvRx61X hLb0fDc3ZgnNEjx1MjA1QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2uQMLCQcJ EL7JIRouIQyGRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2vLeR2yACh7nCT1tQqSG2l+7WYh/LIBmJEgqsKVnZeeAxUKCAKZAQKbAQIeARYh BMCjoZD4v7YRWofPfL7JIRouIQyGAABzIwEApXcyYOUMEB04ahq2TXjWxufCfl1l vO4v8XseQkdumKwA/iJybbvV40SeAZr0zqHGiMd/Y/NPxKfXS51No2JU4GsDwsAB BBAWCgBzBYJh9AjuA4X/eAkQBOe4HWetH6BHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnEG/1d9bTHRXVevNDcZUmj0wc6XG2t2w4SLdC4OTf orYWIQRZxOQcMdHhbxG89RME57gdZ60foAAALEcBAPZDe8+tkBjaRfxKwGOGaO5T WUDdrg/dyvGFKXRHLdE7AP936zHQaGtyOngGlQUqZV8y5hrCpaKma7xZeRQpEPoK A8YzBGHz9rkWCSsGAQQB2kcPAQEHQJ8L3rl1S59riE9CyD7J1sa4jo2K216TqQX8 PlhGa1w9wsALBB8WCgB9BYJh8/a5AwsJBwkQP57naeqv5w1HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7CMq6kewSYB29RT+FGj6X/dZsJzZ 9L1IKyVTW4QqVmsDFQoIApsBAh4BFiEEwKpc/EVYAzWnhdwrP57naeqv5w0AAFtt AQDc0mafyysya8mfc1trbvRfo6Z32aVG+5GmrnxDA/MoUAD/aVpNVqR7tOLYLmX8 IE4F4S0fvn63fluy7+013UPjGA/NEjx1MTkzQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYfP2uQMLCQcJED+e52nqr+cNRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ3HnxJAOU3omVxijiCxg5BKEnxLFjSxAHIShUtQ/GlETAxUK CAKZAQKbAQIeARYhBMCqXPxFWAM1p4XcKz+e52nqr+cNAAALxQEAiHpqWEHt23cE +5TmN1XzbI5u7vu3whlgkLivQhRiQ1IA+wZt1REP1qaa8g+0w31WY1psAGKq7kkF GuudyTngUTsMwsABBBAWCgBzBYJh9AjuA4X/eAkQhfm6S2iqUXRHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn+y7kn5jQs5/lJE6zYnyrPxfE RGD3/mElxbHX1ydUQIEWIQRlss2eam9qNklrVKKF+bpLaKpRdAAAJ8QBANDRFaxB 7M0XLadMHHlPtbcauS1m8haWx82SnuwgBGQ3AQCBWf3fbspjeu4LhKjPh7ysqKHG Ze73w7NT/W2lSpAfDcYzBGHz9rsWCSsGAQQB2kcPAQEHQD9bNP54v19vPrMSrC/U hWxf9pPDiafyx2AeI8/vtYWAwsALBB8WCgB9BYJh8/a7AwsJBwkQJgWzKQNk/3RH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn9jSI0PY+/7t/ VjjkTNcei+xbEya9pakrqQjgAuPEca8DFQoIApsBAh4BFiEEwMSy0pqIqPBC+xNC JgWzKQNk/3QAAEYcAPsFVleVZTW0oh3urOUju8lnnVPu6383cvqgUYGbYRidfgEA tzfeogAbmyixa5e6/vKYGi2RtvztcsgzSowdIbr46wvNEjx1MjMwQGV4YW1wbGUu b3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJECYFsykDZP90RxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7MTG66tMLCYhNVjHfzCmLDYgrVg7alq 2YU7FdsyCwX8AxUKCAKZAQKbAQIeARYhBMDEstKaiKjwQvsTQiYFsykDZP90AAAd 6gEAq/tDJIezlRaB1RGNw1QblDJ4tPKK7vOdWnfXxqPgmtcBAJPgCxxufWE52Q5c AUOoTfCENr0rm0dXEKD0eRLlPGsNwsABBBAWCgBzBYJh9AjvA4X/eAkQvAPWqPzG zWhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn+bmXeLPC OBQ2UiiOi+8iB7A/eHRWO38FclYFhX4lHyQWIQRvdXxjbtThV9b2Vw28A9ao/MbN aAAArjoBAKBc+77DzE4je+fHrDExz6KOUNZ4ZVnFpnwfvfdcO1W4AP9DlY20LwyW 5kWhtH/ojSiu0kI4FSStagbYkWHb/g8JA8YzBGHz9rAWCSsGAQQB2kcPAQEHQFgX VWMVr9qrdhFlpg3TbE3BAAeBk/UMbq+wR7/w1Ux8wsALBB8WCgB9BYJh8/awAwsJ BwkQHm3lls0ItP1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JngX9yextbZ7tB3uPmgXtbugI+0QKCA5ad0pgm6NPyWCYDFQoIApsBAh4BFiEE wY15cQpoaW6XKw8yHm3lls0ItP0AAPI0AQDplLe5fC+D/iLPdpuh5PMxK2D7V0uD ZsC/D9j02T7EMgEAmolDxAPoy4FWgECrHG54pQB4E4cErpuh7zWjW47suw7NETx1 MjhAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/awAwsJBwkQHm3lls0ItP1HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn00OvMmvaTvSrAqQd OOZLP3+PGOAzArVTylhXMnfigYwDFQoIApkBApsBAh4BFiEEwY15cQpoaW6XKw8y Hm3lls0ItP0AAOnOAQDBWJXY79kqAU+b6yh533cNoPiscJ2lIl+SJygbXktrQgD/ cgg3GgB496qsxp8QzJb4a670aYRljd5+O5bq3jNIaQfCwAEEEBYKAHMFgmH0COgD hf94CRAerRHbsoFHKkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmcfJk7yZmsCuMrV/5HscCKL2MTxfGtYW8buURjlx/UVxxYhBCx7dNE4jODy xAAs5B6tEduygUcqAADq+QD/YcyobJm1qAREoMtVcsrjqbhskLK4W3VGE7Os9ewz vSABAPRtXVgxeBIBsOCSRT0HV+R2ud5znuoDfHd8pen6Xj8IxjMEYfP2sBYJKwYB BAHaRw8BAQdAB5bITt5gytEfgBhrbbsTdbEDTEE24mySRwVl20exdMvCwAsEHxYK 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 FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnNWDpeK98KWlo 9sw1oooQVH2mUeZ02H0oCsl1QuWJ7EMWIQScgkXy3Qbkov4h+xZDqWY9333xaAAA /I8BANWWb13sLmlAp481Zsqu8U38WI4JBdqImc9y8zQ59P5bAP9YdLDiqdrawQ+I ToFO7itGBLbEn3q2kFZJ2yfBsC2qC8YzBGHz9rMWCSsGAQQB2kcPAQEHQFSMVSL4 jnky8ZPCyQLhHTLGBOwypMZz4Jlq/Pb6gQCHwsALBB8WCgB9BYJh8/azAwsJBwkQ VVySpwswOGBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn B8lyIU3w/XONlSZiLhxVhZT/1xhyI8tvcYlbwZHY1rQDFQoIApsBAh4BFiEEzSIO WLMNLRy7xbkhVVySpwswOGAAAMnrAQCYREKh1PsiXrCmnVKZirZ4wDCsfNytF0Fb BVM3fIbsEQD/aTrlL9iONbgSoubezEa+WDGV62QZlfBAZuVCXbRzcADNETx1ODNA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQVVySpwswOGBHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JngC0XTIXSF3m4kJ+LGtWr +8UHpgXUeSvYmcO8JSMeWgYDFQoIApkBApsBAh4BFiEEzSIOWLMNLRy7xbkhVVyS pwswOGAAANDLAP4udWNOiPli6yGEVEiCOKG4LTepC1mUv0Yj2AwTHmf7BwD/U4lJ 5zpSENrAsGrKsfMfrcUrOJypzYicdx9oRYNC6wzCwAEEEBYKAHMFgmH0COoDhf94 CRBEL84ZetzI2EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmd3qG+mlCMyLyHaerk+nGucHk2lRNqf3UMsg/MjS6G3mxYhBCFlVmnXs2outQB7 MUQvzhl63MjYAABjTAD9FUEcevoQ0WrtNxYaAfFREpVDBvXgA6fgdVQDid6DWF0A /A/T+UYGs8ncyVg3GkjFn7qnx6vq+xfbgKSPP5Plf80BxjMEYfP2uxYJKwYBBAHa Rw8BAQdALGFJQYgTD7bCNWMTXnOIL9sN9RN4LSeqOuQxmCCMAWDCwAsEHxYKAH0F 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 AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfwnCB+CSCTQX19 MnzI0sGWkgcaMIHKiXo3qZK0+SaYfxYhBOdSnjVn9Zu8rarRJGYT28htrUX4AABu +gD+OvFzmV3QeEXvp0yA4oR4KQr/km/EB/Ysvwdx5rxTaDUBAOm7caKmp8CYj/Pm qJxEAiA0I2R3UlwiYvEzZx5eP60ExjMEYfP2uhYJKwYBBAHaRw8BAQdALDrPTtqH 6orDDszNUFkgsB/ABTUp4YIO5tYYor8XHmPCwAsEHxYKAH0FgmHz9roDCwkHCRBo VE4KWETzp0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdW n7wmgBRLKCGuwNMvgr1B6va2loGKiKxhNXLKcorpXwMVCggCmwECHgEWIQTPRyFW BC1vIDK8AltoVE4KWETzpwAAc8kA/ibp0ie//XDYVLzftn6K0PHXVb2ZEv5N5FKM 0Av2q3mAAP9X5CdQgATLghEuQ7bTD7lWOyqvIccbmHcFi1AsSMqbAc0SPHUyMDhA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a6AwsJBwkQaFROClhE86dHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnquUKvHGFOS4/xKRep7fa JFK2zfRD28wlKd2Q+e/AC44DFQoIApkBApsBAh4BFiEEz0chVgQtbyAyvAJbaFRO ClhE86cAAA8vAQCFDd5cUqLZt0QPAdghfF8D3p78KFV2tBoVB5De3VaWVwEAwHQw Qy9rf2gTL/4t5PpykrGoEBs2J3w/k96jkv7RYQrCwAEEEBYKAHMFgmH0CO4Dhf94 CRAJ5zqwYDC060cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeUVOC+HYopMaAwX9f7YzQhyj2IfKjDorMWX7ok6LKWURYhBFviiLD33NiSANES 0AnnOrBgMLTrAACNxwD/fdtGLoCCm7FjzbQOtgBJW/qGO1mwSZY56Tu/KF3lBGgB AJK8nHZ5b1fnTkDRD+JFMsjUBemjJkBLSfMM7lA+CKcIxjMEYfP2rxYJKwYBBAHa Rw8BAQdA4OOB5FXAVwPcZH7kkKKNpFVKwIntDRZUYHwCAJyJlwPCwAsEHxYKAH0F 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 AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdsAv3wJfCmYwficQux +sHcByMAKjZZtfG51FKWBJAyHBYhBG+A3IDR9MFIEHUMr1H6uRDxAParAAASYgD+ OctL9fIh24kIesc6fdADB3a+JrlXyvWq4ylSC0ZpclYBAMW/Q644TCs3wEmJBQ7C mu18ymjJ1QKajcPoOUyk4vICxjMEYfP2uxYJKwYBBAHaRw8BAQdAmTcIBsijXrFi HOrxi6pg8xjFDWVfBVowQozlGIVb1znCwAsEHxYKAH0FgmHz9rsDCwkHCRAC3vBN ERuhFEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf6Fwxq T1sPpxAwNFQRInquktwSwckEyKivlUiCaAYqtAMVCggCmwECHgEWIQTUu+YPyi/H hQ/3MJEC3vBNERuhFAAAn04A/izIlg1NxYWSE6Q1f+omgaJXFC8lIlDdIO9Xxh6Q l2rjAQDEbDWsKZh0Ypbl+0/8VYYeIfDBAvstgqRvwWo6a0jYCM0SPHUyMzZAZXhh bXBsZS5vcmc+wsAOBBMWCgCABYJh8/a7AwsJBwkQAt7wTREboRRHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnGuGpHuf/udJGbSvtpFOevUKB lbt+cnzkDiAPYUFo2lkDFQoIApkBApsBAh4BFiEE1LvmD8ovx4UP9zCRAt7wTREb oRQAAMWGAQC4kSXHBBj3aCty/KLMV9Ebm7Cq/jfo4SKp0qVglNSgTgD/XxAOE2Us epUPiTXbBgB3OO3EYNww0Ox3s7UVMIwcrQfCwAEEEBYKAHMFgmH0CO8Dhf94CRCR 2ylG+O46jEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfv jjkaUTwmTkPIfLSJIWy5T6tcSpuFBRST1EwsnrjTixYhBFddtSfXjVoGOrQZeJHb KUb47jqMAABf+QEAoqsUuPuiQk/v42MGWwOqJxVQcSn9XVcPapSUl5M9GnsBAPH6 wn7VJp9VqprAM885Zl8Ivm6ImHjIV1E4YkCx5v8ExjMEYfP2uhYJKwYBBAHaRw8B AQdAlLvl4jRm3VTOLuZl5iz6ZgxAbbz+gKW42bgPSTybytDCwAsEHxYKAH0FgmHz 9roDCwkHCRARd8EOJ/fSNUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmffKYKsKUoiXXzRFZq2V5MnKrCOcp1JiXQYC099yoVinQMVCggCmwEC HgEWIQTVRAHbveMoBdrwjE4Rd8EOJ/fSNQAAwtUA/Rf0eRAav4aC5D2fxlHVzLqq CQshYcqZxjHHE7BoOFXqAP92sVVmZ7uhr5wKabAOudUtgOD8bCeihVTH+WZxDOjS Ac0SPHUyMDlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a6AwsJBwkQEXfBDif3 0jVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnJOu5X5E0 /tKEImqC8ZoOTfdrjuwl1ic7qwlOUsX4A3oDFQoIApkBApsBAh4BFiEE1UQB273j KAXa8IxOEXfBDif30jUAACn6AQDfq//cgaDYY7U9VfJF/ozWtSwXOVKEgy0mb3Sz wRxZUwEAy1eFnZSEJf2r7eOxpCnBUN3anxT5MTVJW/KLuPH0VQXCwAEEEBYKAHMF gmH0CO4Dhf94CRBoVE4KWETzp0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfHK/VBGj3v+zTaGuLlywNCenjfWgruyrwL2Da3gRFAXBYhBM9H IVYELW8gMrwCW2hUTgpYRPOnAAB/dgEA99T2Nl+U+fTCAZIgG39Hwo7S2pL53nop xGaqMTZ8gFQA/jNEJCKrn6Xv11vTuVxiT1roqgKnTTx6rKOLyRBNpI0OxjMEYfP2 tRYJKwYBBAHaRw8BAQdAtZ97qdJ6ITy7HjcObD37IC8tHNxBhlZS7p2uQdjQU0LC wAsEHxYKAH0FgmHz9rUDCwkHCRA7gdIpFw9YtEcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmeMCd5/GpUpYFQ5/0oFJ2blJG2pc5tS8Auzk7cp qcz3UwMVCggCmwECHgEWIQTVbl2wHPqtmWl7MxY7gdIpFw9YtAAA07IA/0ityF4q 5YHSD7rSc8RNEVcJpwJguhmXEf3K+TBjGiy8AP9ffo6HFKAFbFuf2RlrRr8FSJuI zkjeIaDQhDavM/slBM0SPHUxMTlAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a1 AwsJBwkQO4HSKRcPWLRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn5jD6fzGxvzZwNJtlR0PyaaG7NmvOi0aKbCbTzwIWankDFQoIApkBApsB Ah4BFiEE1W5dsBz6rZlpezMWO4HSKRcPWLQAAFRJAQDTx5/NybcsHs2DsLnhZIpm CyTfuhq1As4VItBH7yZ3ngD/RFmEJ6KzluKfCBnpqAQzDhtUjw8cTZXSyzevFb0s yQLCwAEEEBYKAHMFgmH0COsDhf94CRADpNgZbRCXbUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmeXG8MMsAgI8XwxU0vZZI+TqGBJ39HTgxMF uwKRQFOTkRYhBNDffSk0JtlFHp7g/QOk2BltEJdtAACgmAEAoUShYRK0WyjacVAj 0yHxi7UBFNankO5S/+AV2ovkvkgBAPIwJgM3B4U56zNEjRE8B37p1r3s8M/eqD6m QxQXcSoOxjMEYfP2sBYJKwYBBAHaRw8BAQdA8Nch9+tpf0xaaVAq/VdNrGSvGvO6 BeTkxcYhoMG+CN3CwAsEHxYKAH0FgmHz9rADCwkHCRAAzFFBGcgwPkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme01p81WiuLlq+V4ajBdqrh 2Yl89Rq4x7cBMhywKsuXHwMVCggCmwECHgEWIQTZaK+36vE+BLtx2WEAzFFBGcgw PgAA78kBAIASxiaA9S3izXcpOcLtZVbcahUiPGJ3p9FChGVwfJRkAP9Ap9PuHljK BiqnfxprzOiXrxzdrQX4K2i/f37mcIkJB80RPHUyM0BleGFtcGxlLm9yZz7CwA4E ExYKAIAFgmHz9rADCwkHCRAAzFFBGcgwPkcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmct6Ap61g8GcrQwGNCijJwsVP5ZayGWg3+bFOQEfAKq cgMVCggCmQECmwECHgEWIQTZaK+36vE+BLtx2WEAzFFBGcgwPgAAxdMA/ik4evqJ s5Ow/7VivOJMKsBbmuUaz7O3xDIQxpFf5zwQAP45NRg1ci6BH3npm7XXw2MlJaLj cW/lWlsO3Vg0lLq3DMLAAQQQFgoAcwWCYfQI5wOF/3gJEKJ8yNFhwPSKRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ93x40R2zW5XGMqvl9Rs 9Q1+UX1L7Zjrp2cvjf5B7T14FiEEqRXRuj8GbpibllrfonzI0WHA9IoAABSjAQDl BBiCXZDBcZzTL1Idvp6OLNJNs2P322FhmSpVg/YDCwEA9YLQdGlHdxv5yaVgEbBq sGsZYwFwVzUxH3ZCIxctfwvGMwRh8/azFgkrBgEEAdpHDwEBB0DooXNxwvebUy6L gyW8VMA9hRrRVjQ2UN9uHmQLcci2D8LACwQfFgoAfQWCYfP2swMLCQcJEPZfdjTr Lq1qRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxq966hp 3Qc02cgrVCEeuJqWbRXIe+qYqmQ4p3odnKrAAxUKCAKbAQIeARYhBNnAbJ0QCBO+ vTVCffZfdjTrLq1qAAC4wwEA013r3E6/cbkM6ZZtqY8FZf0NUUeA4u3R8nKKv8U3 OPMA/3rpr+wgI0MDXB6vjaUuF+V5W06de7RmREbBKCVtFnEKzRE8dTkwQGV4YW1w bGUub3JnPsLADgQTFgoAgAWCYfP2swMLCQcJEPZfdjTrLq1qRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7yU880hQ49cPzZpaePQJNUePR8a PoTlokobghAfMuCRAxUKCAKZAQKbAQIeARYhBNnAbJ0QCBO+vTVCffZfdjTrLq1q AAC6twEAn4O4y1s96ArkrU2M8o9F2LPHd6CORvfdtxCV3SZMpYQA/0eIGpDu+9mq HVxpRQ1Yqm+lMw8gmrCyFCRZap2CSeALwsABBBAWCgBzBYJh9AjqA4X/eAkQY/1n WP8RYWdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jny5aF LOD1nltB+hyBdtaRsYiXPbn8CAKbX+3bl5FBgGkWIQQKVVMgmFizbz6g76Rj/WdY /xFhZwAA2WIA/2ka9RR1g4xTMZ5UqEZdp6lfKIv+dG/hW9no58Zc+zTWAP9uVrtv mkCxbbFNH33bC2uaRHpDmdNEvWFY1IHgieLvCsYzBGHz9rQWCSsGAQQB2kcPAQEH QPQ8agPU2TnWg3gPFbzIK3mS7Bv7nuWTf2QfGNy6+dVYwsALBB8WCgB9BYJh8/a0 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 IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+8qhOs01vT8/1AeX2gAU5VA l4BZPsiGhqQWCRuuutcPFiEELmWlsvcNFtXU0GZNNgrpvVjFVcEAAJXkAQD70WLx mrkCIXF65PXPAONQrf7HEkL5mjE5Q0Cdys8V7AEA6URwqhLtCA5UusOXAbucOHHK ENbjzyJN+pQyxxuzlwPGMwRh8/a2FgkrBgEEAdpHDwEBB0BA7IVbOmzGUq8Z67EW qy/9iSuIR+Ko/XO+z7GO4OxLgMLACwQfFgoAfQWCYfP2tgMLCQcJEK15n01Zc41U RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzWVTc3hXC2Y 6/p3N6wURJ3Wg6GN7rCd8f7OafvanmobAxUKCAKbAQIeARYhBOAO5uXQecqB43+W Tq15n01Zc41UAACpdAEA7utewOLyreZ8BYQwzpuN1g/ZEYcvP+e2dRKmVER7QCcB AMY1opxgTuUCpG5tmvf0rYlJEkc8ZZRCotMgVGcW06UBzRI8dTE0MUBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmHz9rYDCwkHCRCteZ9NWXONVEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcXhYYG6+BkPrP7YuzFqOQOhywhdsme LcMZ7D49rbijXQMVCggCmQECmwECHgEWIQTgDubl0HnKgeN/lk6teZ9NWXONVAAA PoQBAMqWToJO1B1Po2fkG2tZ5tzRphtlkb0EkDx+XZpaNIF4AQD92oVqwaIIDtMd mP8bfvuMRlKmHdQ1tJCJAag6e+fiD8LAAQQQFgoAcwWCYfQI7AOF/3gJEMr0qjEm FW+LRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwj3pLJA oZBKvWkRKW4M1xQUM9rF6k5QbdU6pmMpZnMsFiEESvgysyCNs90SbCHjyvSqMSYV b4sAAK36AP9VNlJBJRtLzC+ObFEPridPKrXFg8h3tbRMAcJ/uQFMHgD9FsK8KyIu BKPlrtOCDAwFdkjha3AfzT+3RAy03yHoXgbGMwRh8/a1FgkrBgEEAdpHDwEBB0C8 jTvCSJZuE/J2k4QI7o/OsQuFIFU/G+LMPkXZNB3GpsLACwQfFgoAfQWCYfP2tQML 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 c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnwTjlUIXYymlvR8dkBk5w2B+L lSNTSKMdMtxF++PFX2cWIQRuw6EKoLa3DcVAjK50sL6Db9OC1gAAxAsA/3eYDdbj PMg3KWcz8YitE7A/nGZU6hz+LnOOu5bcWncLAQD6gnYCJDZb26E9fealILlQIbtj jFvYEKFLiIepOKX+DsYzBGHz9rsWCSsGAQQB2kcPAQEHQG5/5uq3z4c5YgRnKyt6 7TqmcEAsCTg9nNddakTf0O4ewsALBB8WCgB9BYJh8/a7AwsJBwkQ4lrf3MABL0hH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnucCWihp/vzWv P+M2nOpH/RKVBXwL3h+OYKQBZUdycroDFQoIApsBAh4BFiEE5AUGAijUm6Q8btmj 4lrf3MABL0gAAJKPAP92AsbVKXdI/b3Tt/Kbxln+BCXo/BuSSDsC6Jj6+Fh/AAEA szjOgA4NQXiFVUywz4ShrZQd4ns1+QDUbMaKgqtMoQ3NEjx1MjM0QGV4YW1wbGUu b3JnPsLADgQTFgoAgAWCYfP2uwMLCQcJEOJa39zAAS9IRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3d/lgVsACgEYJl8cXjpnhrCkPu2CM7d rsT7vukOFPp/AxUKCAKZAQKbAQIeARYhBOQFBgIo1JukPG7Zo+Ja39zAAS9IAADT AQD5AdLsiiw8LPeYPLk1kiUeFC4vveAAXo/F1yEvLW0U66YBAJN1N8h3Mxai15JV MHJkKh3P3f7wEgYq2SbWSX46liMKwsABBBAWCgBzBYJh9AjvA4X/eAkQGiWRDQzZ CcBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnGHicguoH 6RzsJEQ0cx983jRgNBF9eE5I8Dr70yMZTSgWIQTNpd5yNsJH8NEWzAoaJZENDNkJ wAAA8QkBAMAIIrMpag1XDHtgcvDRTAy20OTaLw3Fx55urhFT5E4jAQDP1ATL1Goi N8HAxvTRcKICpwywlMuXjdgq1scLfEhECcYzBGHz9rgWCSsGAQQB2kcPAQEHQAO8 sA+ls5D/o+7VCACQKPDOr/xu4maa4o1c6Q8ED3PrwsALBB8WCgB9BYJh8/a4AwsJ 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 c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn3z60Jj6YLVL2YWmXnqF4O16S 4FMuK68scJhoNegA+SMWIQSuJ1n07IUPps6Y+kcp/YJklBG5cwAAQ5cA/2zZ/msu MM9Tbxs7Wb1uK0ivOPmcepGDkbzP++Ep7BJgAP0Tw8BAw1fDiPKftyMYdiTg1leS zWNbOgwmhHEZzk8eB8YzBGHz9rcWCSsGAQQB2kcPAQEHQCIeZ5M3TtunbRXL8SRg w0Oua//L/tKNwX6S7diuO4LRwsALBB8WCgB9BYJh8/a3AwsJBwkQAe/J2QC1VAxH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnxfj4qeN2QhbC dOjC2K24drM5ZYRoQUOl2aWNCn5fJe0DFQoIApsBAh4BFiEE55R+OCsS/mKL2hMC Ae/J2QC1VAwAAEfcAQD8RMua1VzTfACMIeGztr3JiVV8QbI8wVEkq6+quDUSuQD/ aPHfS9j8rncihlnvXzYKUsAuX12XZ8DxtpPTaIYAZgjNEjx1MTY5QGV4YW1wbGUu b3JnPsLADgQTFgoAgAWCYfP2twMLCQcJEAHvydkAtVQMRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8ypdG7HKcTNKD2Rcj8CBPh0aWvj8DNU xMJ5u6y4X7zHAxUKCAKZAQKbAQIeARYhBOeUfjgrEv5ii9oTAgHvydkAtVQMAADQ uAD/RQRKs9bdzHbGgKYo8yDioHiKujRSAK5n2T9Yca3fXNAA/1V+D12+Ege5fg7E xeZ9xRc8LmG3qV/kifYELPHNl78LwsABBBAWCgBzBYJh9AjtA4X/eAkQwsQ2QqIO FJZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnNy9FkjsM zI2KuM4Bz+xaUgL9m1qtDm3S7Fb44upKm3wWIQQAPpxanauGJv0WlKrCxDZCog4U lgAAr8oA/jN4ZH7ZjhZ/hMJNACbjgsAe7njGBhLGrknXgBTx7SrpAP0SP5d05KKR F6AHmdEcsqMbDAGb+yHqJ+Gf9YG/pJ9TBcYzBGHz9rEWCSsGAQQB2kcPAQEHQK/s LQLQoJvcdT46JtmH3aMHIeQRVdYsPiPGZHHCYvF6wsALBB8WCgB9BYJh8/axAwsJ BwkQFe2D7N9JRjxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnaVB5djmggZWV4ihOth+qHcTtJW1cFv1iyI+Gw+B2bc0DFQoIApsBAh4BFiEE 6WDNiT5s9/QedSvvFe2D7N9JRjwAAKu/AQDtvHzZPy7QqnKc93JFM1qXIS8CoLE9 zDRqM1sz+dwy2wEAkUi9oilHjMFRsk7N9Vw/TYVcQ1EtWuVI71hXAAAwFgPNETx1 NDhAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/axAwsJBwkQFe2D7N9JRjxHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnP7tKKYM7zT8w5ey8 3j6dT6eoNVXHzjgPDAh3Gr5CMqgDFQoIApkBApsBAh4BFiEE6WDNiT5s9/QedSvv Fe2D7N9JRjwAAJnUAP9RxrUWlIF+AqAqt3Bkt8xBRHLW55sgn93RRri5IIRlwQEA l7Sl34FAjG9T0eTU3iWDhnJGZOg6UMKc674g1xA+0w7CwAEEEBYKAHMFgmH0COgD hf94CRBhHEM9KNhAcUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmeY6TnZpVdJvCS1NQ7MZappfuDNEUh6DTKWb9vO8y96HBYhBDdi60ePR/6o SK2p4WEcQz0o2EBxAADzeQD/ciGqV+a3AUqx+56ZRrg1pupvjjVKxcYMKY3+K6HY 4JYA/jtAoLcroKONaP5VXgyHIJD1DWY0B9Imq1Kmkb08SW4AxjMEYfP2rxYJKwYB BAHaRw8BAQdA8j204O49vR0oMxSTAl/69sjOJv3TERg4ioDdUIICCHnCwAsEHxYK AH0FgmHz9q8DCwkHCRB+nJkMJJc4sUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmcnL06FwjuLfCG8AF1FtFKV8zAQe0OV8obYTR2SU2o9iwMV CggCmwECHgEWIQTsRHXeW9dup91HmHd+nJkMJJc4sQAAn8MBALhHDLJc+cRU43uv dq8tqzqJU7oFM/uVqqerHptfmOnfAQCI4E/vMu+ulrybsKdJd/NGq8J4+9Kk23kw titfvmIUBM0QPHU0QGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2rwMLCQcJEH6c mQwklzixRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+n0 R3kpraqndVOo08Je3D9tasbkQA2lDS9Fg6prAbalAxUKCAKZAQKbAQIeARYhBOxE dd5b126n3UeYd36cmQwklzixAAAp+gD9FqojzNiU/8U6RJ2d5fBYemYbf3EUlN9G VviCOx33iPwA/14DdkQ0EIC59lqE0hifuenpBo3aqc4ehfKYN6CU0ngIwsABBBAW CgBzBYJh9AjnA4X/eAkQViEkbRbWeF5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnfqFQZnYpXEhyQAFH7cye/Eajuz/LUALa1JU38V9yt2UW IQRwsMX+/+a1XyzuhUVWISRtFtZ4XgAAHggBAI7/zjKzuoNs26V1GRBbeEt/Be03 AtJXdReeB5h7z8sZAP9HVToF3QduWHPJotYCQ8eeNrezYEQb70ZMl93CQ/AzC8Yz BGHz9rMWCSsGAQQB2kcPAQEHQEBIDaWBpiV3p74yJRqnk7sBGvw9qY5BJbyBDVLe 2+CpwsALBB8WCgB9BYJh8/azAwsJBwkQhWJ2XYikuzZHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JndEOpUq3xydHSMIewhrm3iS6rQ/+ivBTb DTmOeeJNioMDFQoIApsBAh4BFiEE7VwHqCDcsqptr96chWJ2XYikuzYAAJznAP9q 8eeMPN2MMkcD08nmOrwNqLLpL4Mkh/+qFVFNsNfPGQEA2zVbXTbxvYoF/psgK6vN TowN8jQq36fmrv7UyzkxygrNETx1ODFAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh 8/azAwsJBwkQhWJ2XYikuzZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnipc67Xrv91p1Geq/bjB71ppNRkFbBnfeqflePS22IlEDFQoIApkB ApsBAh4BFiEE7VwHqCDcsqptr96chWJ2XYikuzYAAO+4AQCKp1L8IG7IPuUYx5iO /W9+nBIChKmi45IrUI7562+L2AEA3cypCU9TkQHKuWJu3jiI8jUKmo++UDIj0dfm wdqThgjCwAEEEBYKAHMFgmH0COoDhf94CRBVJB1toWM/pEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme4t212apDjyENbAOgMUjg2Fs6hkQWk qyu/ZkLaXtuXhBYhBBPDfOjtCsySz2GAh1UkHW2hYz+kAADu1wD+KOs7o0mG/2Zv jI2Ug4CznvN+adQhhPsk4jPEUGLVGUEA/0cZHHOwUmJKwBJTnqgqRWUd1GbfhvSX NpLehMrU0CAOxjMEYfP2uRYJKwYBBAHaRw8BAQdAJvOOWs16RBnMNCcPBIpp4Rsg iVJVBogy07Nl24aLqhTCwAsEHxYKAH0FgmHz9rkDCwkHCRA1WsKbbYtn+kcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfKw+vgs4b9I+BX/gzg AosdWNB0q+w2VJGrZ88veWFpGQMVCggCmwECHgEWIQTuplArNKsI+i872h41WsKb bYtn+gAA4fgA/AtAm4XOTecE5v5+ue3k/hCWcHKvhEtXr/thh7nO9SKbAP0bL5zm ZneTSLk7Y1XoOdIJH6ooRHhIIMghPBVJ9VEhDM0SPHUxOTlAZXhhbXBsZS5vcmc+ wsAOBBMWCgCABYJh8/a5AwsJBwkQNVrCm22LZ/pHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jn87GWNx331uCKnm28Lsb3r9j0GzhQ7R9PyKZt IHHPH1EDFQoIApkBApsBAh4BFiEE7qZQKzSrCPovO9oeNVrCm22LZ/oAAIYJAQDd 0fW0XCjehpEJUyDdz+IBNSWCnXATvBlP3XBEhUIhvwEA2pqBarhGPBB7kQKZkoFy 1gF8kQwcHXc7PJ8x68tfnAbCwAEEEBYKAHMFgmH0CO4Dhf94CRCIgFJEYzxoa0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc6iowdC17nHO3Y dOHhA4XauhGy+byj5JrG0ap9NQENvRYhBFwmUNjamEKVFhQCYoiAUkRjPGhrAADb RwD/SWhy/XfOnWsfl3AdnffO9lr3EDzk66maeGRgWKKQ7V0BALl8r1q7+rbFBreQ TMLL2hiQUlB0N4q9yUHmQVs8b8gExjMEYfP2uxYJKwYBBAHaRw8BAQdAAbg0DD0e 8aD7+bvaIOnbb9xhWWBlAYco9i07ttqmRUvCwAsEHxYKAH0FgmHz9rsDCwkHCRCf r746ECKJUkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdX xU+RGUK+MEnw71CvwPGDtBekMzahNufvYzLMmvk+PwMVCggCmwECHgEWIQTx67D5 TAind4Z/QD6fr746ECKJUgAA3zcBAOSH+y0p/fOCGpUCRcixWjEDRa1b14HUDc56 LW7PxcDwAQD4qxCHc/O0/61qB+++ko74k23+9HIRDKPgSNsRdACXC80SPHUyNDZA ZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/a7AwsJBwkQn6++OhAiiVJHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnejlwMzLjCdtfj4M+wKkL Xh7xGaCyYG/yQ9KkqqAfQqADFQoIApkBApsBAh4BFiEE8euw+UwIp3eGf0A+n6++ OhAiiVIAALuCAQDPWRMMV0V7ceNPSZjnK57KZefhu+uZO/prSn4Ph7WC6wD/fe3o xWnzw6eJWWztSSkB2ltgv/5jJJsBIflSReRHcgfCwAEEEBYKAHMFgmH0CPADhf94 CRDNNEm9UIkjEkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcPGs8lTy7UHHgEyM6mU7j7NPWLhW+UoRrIt1wPE9qQ5RYhBLZWWt3VY/3XINBU Ec00Sb1QiSMSAADbugD/WJPGtDHqerGGUkQwm7uAVOkk3GsR4ElifUiVP+76InsA /AhCuYp8BpoVg9vE6HnzlLqicb7EqRyv3SRJ8vaTJhwMxjMEYfP2sxYJKwYBBAHa Rw8BAQdANBNiqP8Mlaw4uNzZkWpuONL9R93Le7WWYbcg90O1jXXCwAsEHxYKAH0F gmHz9rMDCwkHCRDN+kmTvkEkr0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdLxc6VP8biPZzsBmDm8qXoTgHKlxT3co713ONoItmsvQMVCggC mwECHgEWIQTx/gmTbzmk56kH2QnN+kmTvkEkrwAAr8MA/1GVHkkCGWcYQrYjT+kX 5znfH/ZaeOgb7lFTODhjXfnlAQDsLvCRbC3XVmOMAbx4kh36mQFDVEgpvNi+xNAF Z1feDM0RPHU5NEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz9rMDCwkHCRDN+kmT vkEkr0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeA9Bmx Wwc7zcbXlPFOpO0a+y4g0Q6HjuqfTb+t3JmbWAMVCggCmQECmwECHgEWIQTx/gmT bzmk56kH2QnN+kmTvkEkrwAAaH0BAIs0iSYBHo0KEm+R9x3WcV4XxaWro2YENbno 3K5ZfvQ5AP0Rsi1sRHj5HGum8SNsFoJTcL01namJ/fbbaTT9m6RKDcLAAQQQFgoA cwWCYfQI6gOF/3gJEHRy17t4Hlx2RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ3vsNDOqwBhbO7wdasB9DBZZc0Ytul2tRrChkDiEsm6HFiEE /A3krWg75k9H6GQvdHLXu3geXHYAAL0AAQCadMf4aKLybDjXLSBm2F6rHsXrWA3w Wro9zuptQC3OpQEAze1iIuvdLePrHuB+FE/Z8hXucvEKl3LIYZCfjqe0bAbGMwRh 8/a6FgkrBgEEAdpHDwEBB0DuP7kZUbAEynWszTR4FBLjtFbZ6QNNg8hIZPG9JpfC W8LACwQfFgoAfQWCYfP2ugMLCQcJENsLgmS+SWV3RxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+yR2XfpOk30BBLrH6QH0ftL67vPEO0kIdYM LRdPWDZXAxUKCAKbAQIeARYhBPKkrjq8beBHXiK4NtsLgmS+SWV3AAB3ZAEAn+ub s+1nit1QLQCeLVLYlBV/EJj3xDc7z0dMb7PIvYgBAI2cVuAz2oPzZHXZL/+CkWO6 CIdItF3NQkduCem7MxQBzRI8dTIyM0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmHz 9roDCwkHCRDbC4Jkvklld0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcme0hp+1TODVSCR6YMgyccS+21zToWY04EZlvUPCzrwn+wMVCggCmQEC mwECHgEWIQTypK46vG3gR14iuDbbC4JkvklldwAA/NkBAKB0uzFO/ERDmsBsk1Px 1fImNT9vvV2KwXEX7eGk6bVOAQCPwZeSSmSfIVW1AULHQdu+x0U6gR3ZksRnSxGk iucWD8LAAQQQFgoAcwWCYfQI7wOF/3gJEPqW5+hXppTeRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8oeUQbrCJHXVbpEps5LwYTtAIDj2Dfo IblxQWtljHBYFiEErNgMMeSf6vmqB9vZ+pbn6FemlN4AAKyDAPoC3UyjndFtRGxc l9kVJ3WgCxXREILEkeZGusNL+de3NgEA327xhY07TmJagjT/NKMvX1x/Ipu2OIif 3qYbt7jBaAnGMwRh8/a6FgkrBgEEAdpHDwEBB0CGNDMmNINWLt+3q44ginA4UsfP 853oywbxFc7JkihLusLACwQfFgoAfQWCYfP2ugMLCQcJENIr1We2C+QeRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9SOcSWo6aGI1s9o7PqM IVyCj/9Uj/Xki1Zy3ucJf0FoAxUKCAKbAQIeARYhBPOpVHL9tl2WXsLE49Ir1We2 C+QeAADvXQD8DBqY5pCJeTWpcl7Q1VZ8xal+iStWTDUIwVhbB7Ca52oBAIDzJqxS 7onaIdiYg1I2QQZ3NGsFKvKmIsKqcdEJYagJzRI8dTIxNkBleGFtcGxlLm9yZz7C wA4EExYKAIAFgmHz9roDCwkHCRDSK9VntgvkHkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmeFD4D+ViMVIh9D57nuyYQ62DoFqeFB1j7zO4Fy fsDynQMVCggCmQECmwECHgEWIQTzqVRy/bZdll7CxOPSK9VntgvkHgAAMjgA/RgB lHQTMCkVEA17L5NXE7z6UluD5uB9DgmUr88a+6hxAP9jneyAH150Y9Xjnfb/kXBF iHXFQM6+2/5HMtOhhQMZDsLAAQQQFgoAcwWCYfQI7wOF/3gJEBdGKY8B59aCRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzk5GafBh744C0xP x73ULUskBtSKSJ1RMX3h3zgrxmpJFiEEhCkciC4FnFEAxcGtF0YpjwHn1oIAACN9 AP9uFuytXcuqeOZ7jtn0AVjswyEt7WSqQQNHtB+C2oN5qAEAgBhWh4N9C33d5EWn FCzL1mvnUypUiQKbjTD/sAUEyQfGMwRh8/azFgkrBgEEAdpHDwEBB0Cmr3I9F313 fZv2gTiDAwqb+Pz0woMzTFnIa343dHuo+MLACwQfFgoAfQWCYfP2swMLCQcJEPnu MoQC8zhgRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8Pc +VyENPjE8mbYsvn4/0WL9u2fZY940ef5xHT17sTAAxUKCAKbAQIeARYhBPj48wkx 7rk8L96TY/nuMoQC8zhgAACeJAEAnjXJ7mkvNB3yevv8R5Pabcu/RSlxlHEhiN59 iUfzqUgBALDptQhuXQKqjY4zXekCsXvnXVxVhQgwbk+pbfkuCwEJzRE8dTg2QGV4 YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2swMLCQcJEPnuMoQC8zhgRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+oKef3ECTnLtwxtsRCwXkaw npbnAK075KWBwckp9rlEAxUKCAKZAQKbAQIeARYhBPj48wkx7rk8L96TY/nuMoQC 8zhgAACdWwD+OPYY9AuqHovzLlCXvJS3Ws3+TbkjXICcEg+Prrh81zwBALmSysc4 fimIDC2h5i2qU8d9w3Td52dgFOeDSliJlOcMwsABBBAWCgBzBYJh9AjqA4X/eAkQ dG8PLbcjxGJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn lPwXjxm5pQnHx2PIIIQRewgTSlBFzSL8E8N054nfpSoWIQS0f/LvnesIx/xVUyx0 bw8ttyPEYgAACoYBAMnZGz47XALcdg1SpJUmqounTzPkJJ1qyr65BlDUCiV4AQDw aD2KwoavKzvKE0LYd01OnjWA+ZtvwsWh5idLyIvKD8YzBGHz9rcWCSsGAQQB2kcP AQEHQF5C90qtz38hDzFmaUvgCqq88hsJFY3JsXBgonXslmFTwsALBB8WCgB9BYJh 8/a3AwsJBwkQk8OWtPqUzZJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnv/82Um37ElT8OXpIiXZsDSoHBNF7Gl9ocnoSSlWN5pEDFQoIApsB Ah4BFiEE+WUES+HnMAx7Zxbik8OWtPqUzZIAAIA5AP9VkPsX+8kOEQKkCPe4EevP ZiY+6THLEXnQIxJNG8mR2QD/eSVs/cX+9gcyhjZZ6c93xlGUGWVjIdC9X3KTq8Th AQfNEjx1MTYxQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYfP2twMLCQcJEJPDlrT6 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 PM9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnCUR+f9Mo cIc6GJYPwVpvxqmeG9UaOHYJHXE5jX/sE68DFQoIApsBAh4BFiEE+8UD/L5BQ8mE 6INY5wDiPU9XPM8AANGXAP9ASJFxABeZ6xJ0cxuAMsOaQo9tL/BAtnH+oPFqJkUW kgEAzXx+y8Ows0QSl0Qjx1c3ZMlPt8EGeOnGH2DQqLx6WwPNEjx1MTExQGV4YW1w bGUub3JnPsLADgQTFgoAgAWCYfP2tAMLCQcJEOcA4j1PVzzPRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2jGlSHjCIR1/H1F2WNOHKcY+ogY fYgRrfzf+696Q7E1AxUKCAKZAQKbAQIeARYhBPvFA/y+QUPJhOiDWOcA4j1PVzzP AAB7+AEAqKe3c8Iqq5xSQNBqpQHxNUSHL2JZepcN3EZJKvTIPJsA/i2mxAJDRVTl Rx6g+mM7GwIpAZffgMTPySp/BiUBGXwBwsABBBAWCgBzBYJh9AjrA4X/eAkQcvtY uel5i35HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnzjOR 6Omr+ehGe+qvrhn6fTK73wHVpFKFhQEar/+U6igWIQRIrboRe204cDJI165y+1i5 6XmLfgAAQQoBALuZiGOSLft5tJidGrmy4JPXVx9qVfdDrdb2RGjCxmxyAQCKOX4c zMx3FD2/XAKm0/MM0EFLN8gcrDq96iCqXbroD8YzBGHz9rMWCSsGAQQB2kcPAQEH QGyKCdBInXNPrWwNCRXx3vTu1qxxT+n8taLodUKvSOz2wsALBB8WCgB9BYJh8/az AwsJBwkQdHLXu3geXHZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnmatI4EylN8YrQk9Gm3Z6To3kJPIjWREYVpXA3erDYzcDFQoIApsBAh4B FiEE/A3krWg75k9H6GQvdHLXu3geXHYAABndAQCdo7HUiY127/qZKnsFe3VYzyO8 yT1wYJ+wg1EhZMNq5AD+NOJQ2TL0ttK0tws1P2m4HiwqmaN/0IjJeUp2U3iRuQDN ETx1OTNAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh8/azAwsJBwkQdHLXu3geXHZH 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 k0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfj2B7EaDYM wiXa8buwtzM472WUKnOj/r4dJdM2Z3lCGAMVCggCmwECHgEWIQT/CT5mzPuIBBkx FQWGQ+DLUsWnkwAAIMgBALvhz8SekCCUGKC2PjVsHDfWLw0ZCy2fxtuzR2K20q1u AQCzhpUDviBKRThKhAksHdmTDZzoe4VPvgHvcd39tz7fBs0RPHU4OEBleGFtcGxl Lm9yZz7CwA4EExYKAIAFgmHz9rMDCwkHCRCGQ+DLUsWnk0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcFWyGXHrUPoPQhAwr3fPD7FVwcpsjs LEwWuCW6nMCVCgMVCggCmQECmwECHgEWIQT/CT5mzPuIBBkxFQWGQ+DLUsWnkwAA LswBAP0+RxYlEcrRs1ywgYrKdzg2v6WqTyWZn1YdNZtMhWMGAP4n7lf5urHXkqZP 4EDJOLDbqOrueqQumqLK+5oYve4LBMLAAQQQFgoAcwWCYfQI6gOF/3gJELBSyuaa KnaJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyf6LXaf r/OX3CnAfI1umUloMUHHAFIQ+7Cz7v3usYr4FiEENxTZywqKC07mlbIasFLK5poq dokAAFvRAQDmYYPxL8Igzm3jzWkG5TOMJFkh/CWrByqN7JY6hTHfAQD7BeHQj9gW VDr7r9vOExFhb2fOuE4VqAB9VlENh6gtQA4= =hBqf -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/infinity-and-beyond.sh000075500000000000000000000003411046102023000204370ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=infinity-and-beyond ${@:+"$@"} set -e for i in $(seq 1 260) do key u$i if test x$i != x1 then let h=$i-1 certify u$h -a 120 -d 255 u$i fi done finish sequoia-wot-0.11.0/tests/data/isolated-root/README.md000064400000000000000000000001751046102023000203020ustar 00000000000000If a root is isolated, make sure we can still answer queries about it. - t0: A is created - t1: A's User ID is revoked. sequoia-wot-0.11.0/tests/data/isolated-root/alice-priv.pgp000064400000000000000000000023011046102023000215570ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: DCF3 020A AB76 ECC7 F0E5 AC0D 375D CE1B EE26 4B87 Comment: Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAMq4pmfuDPclWlLi906XRYrxhFbiseHw1R0T4 LRVdI2oAAP91qBwTYFfA7NU/mg2MvQYV63SUhHy3NvDPz9Tq3hhwRhGlwsALBB8W CgB9BYJeC+EAAwsJBwkQN13OG+4mS4dHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnballRLp+4rlg1sEpE3y0UhlQQa433rVNdnORs7EfEy8D FQoIApsBAh4BFiEE3PMCCqt27Mfw5awNN13OG+4mS4cAAGCxAQCpQ65Ia2/D0lgw 8AK7NF8y0P6KkqvTvCyXxEI0y1bCHAD/RkdC4wCg+HrgJJtKFlLvJNl6UCYrMIWl QQqMfIOq5APNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRA3Xc4b7iZLh0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfIx1QSMg8Ie0P+DWLGC/KfMw0krrhXBuJPJ7/ih8HV8AMVCggCmQECmwECHgEW IQTc8wIKq3bsx/DlrA03Xc4b7iZLhwAA9GEA/3BH8WVXAwOn1zDERsKYo2bYSGag 8IREJY4TZ/baZWiPAQCMLWKo0jkH92pkKC2k09/6eymLYigjwp43DP4aT4XrCc0R PGFsaWNlQG90aGVyLm9yZz7CwAsEExYKAH0Fgl4L4QADCwkHCRA3Xc4b7iZLh0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeiD7NELCDv41Kv vy/4syV1Gy/nS87Q4Y4xfOkB8p1tjQMVCggCmwECHgEWIQTc8wIKq3bsx/DlrA03 Xc4b7iZLhwAAbJMA/3vjw1Q149Bh5yozQJlI2nOuGd5uz3aM6UaYxAgTQ04UAQDR ACgJ/FW+YFCiPnDAKUBNPYAN+FbL61BTQTuiiKMjDw== =Fvco -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/isolated-root/alice.pgp000064400000000000000000000024571046102023000206150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAMq4pmfuDPclWlLi906XRYrxhFbiseHw1R0T4 LRVdI2rCwAsEHxYKAH0Fgl4L4QADCwkHCRA3Xc4b7iZLh0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdtqWVEun7iuWDWwSkTfLRSGVBBrjfe tU12c5GzsR8TLwMVCggCmwECHgEWIQTc8wIKq3bsx/DlrA03Xc4b7iZLhwAAYLEB AKlDrkhrb8PSWDDwArs0XzLQ/oqSq9O8LJfEQjTLVsIcAP9GR0LjAKD4euAkm0oW Uu8k2XpQJiswhaVBCox8g6rkA80TPGFsaWNlQGV4YW1wbGUub3JnPsLADAQwFgoA fgWCXjS/gAkQN13OG+4mS4dHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnHAp6oI4Uhh6h9Vy5oMbxtJpKno5Q1G9jDwG0rSYu5psOHSBzb21l IG1lc3NhZ2UWIQTc8wIKq3bsx/DlrA03Xc4b7iZLhwAAeOoBAIeO9Aw9cTU7ci6s z+CRF43UrbsWvglU50aC9wLHCTiDAPwIai76BkxZPdum1TByens01cKZpJnL21gG ovdCPRrMCMLADgQTFgoAgAWCXgvhAAMLCQcJEDddzhvuJkuHRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8jHVBIyDwh7Q/4NYsYL8p8zDSSu uFcG4k8nv+KHwdXwAxUKCAKZAQKbAQIeARYhBNzzAgqrduzH8OWsDTddzhvuJkuH AAD0YQD/cEfxZVcDA6fXMMRGwpijZthIZqDwhEQljhNn9tplaI8BAIwtYqjSOQf3 amQoLaTT3/p7KYtiKCPCnjcM/hpPhesJzRE8YWxpY2VAb3RoZXIub3JnPsLACwQT FgoAfQWCXgvhAAMLCQcJEDddzhvuJkuHRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ6IPs0QsIO/jUq+/L/izJXUbL+dLztDhjjF86QHynW2N AxUKCAKbAQIeARYhBNzzAgqrduzH8OWsDTddzhvuJkuHAABskwD/e+PDVDXj0GHn KjNAmUjac64Z3m7PdozpRpjECBNDThQBANEAKAn8Vb5gUKI+cMApQE09gA34Vsvr UFNBO6KIoyMP =AQQ/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/isolated-root.pgp000064400000000000000000000024571046102023000175400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAMq4pmfuDPclWlLi906XRYrxhFbiseHw1R0T4 LRVdI2rCwAsEHxYKAH0Fgl4L4QADCwkHCRA3Xc4b7iZLh0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdtqWVEun7iuWDWwSkTfLRSGVBBrjfe tU12c5GzsR8TLwMVCggCmwECHgEWIQTc8wIKq3bsx/DlrA03Xc4b7iZLhwAAYLEB AKlDrkhrb8PSWDDwArs0XzLQ/oqSq9O8LJfEQjTLVsIcAP9GR0LjAKD4euAkm0oW Uu8k2XpQJiswhaVBCox8g6rkA80TPGFsaWNlQGV4YW1wbGUub3JnPsLADAQwFgoA fgWCXjS/gAkQN13OG+4mS4dHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnHAp6oI4Uhh6h9Vy5oMbxtJpKno5Q1G9jDwG0rSYu5psOHSBzb21l IG1lc3NhZ2UWIQTc8wIKq3bsx/DlrA03Xc4b7iZLhwAAeOoBAIeO9Aw9cTU7ci6s z+CRF43UrbsWvglU50aC9wLHCTiDAPwIai76BkxZPdum1TByens01cKZpJnL21gG ovdCPRrMCMLADgQTFgoAgAWCXgvhAAMLCQcJEDddzhvuJkuHRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8jHVBIyDwh7Q/4NYsYL8p8zDSSu uFcG4k8nv+KHwdXwAxUKCAKZAQKbAQIeARYhBNzzAgqrduzH8OWsDTddzhvuJkuH AAD0YQD/cEfxZVcDA6fXMMRGwpijZthIZqDwhEQljhNn9tplaI8BAIwtYqjSOQf3 amQoLaTT3/p7KYtiKCPCnjcM/hpPhesJzRE8YWxpY2VAb3RoZXIub3JnPsLACwQT FgoAfQWCXgvhAAMLCQcJEDddzhvuJkuHRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ6IPs0QsIO/jUq+/L/izJXUbL+dLztDhjjF86QHynW2N AxUKCAKbAQIeARYhBNzzAgqrduzH8OWsDTddzhvuJkuHAABskwD/e+PDVDXj0GHn KjNAmUjac64Z3m7PdozpRpjECBNDThQBANEAKAn8Vb5gUKI+cMApQE09gA34Vsvr UFNBO6KIoyMP =AQQ/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/isolated-root.sh000075500000000000000000000003241046102023000173560ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=isolated-root ${@:+"$@"} t0=20200101 t1=20200201 t2=20200301 t3=20200401 key -t $t0 alice alice@other.org revoke -t $t1 -u '' alice retired finish sequoia-wot-0.11.0/tests/data/local-optima/README.md000064400000000000000000000017131046102023000200750ustar 00000000000000The best path from A to F is: A - B - C - E - F (amount: 100). Back propagation will choose: A - B - F (amount: 75), because it is shorter. Make sure we don't choose A - B - D - E - F. For F, A - B - C - E is optimal (amount: 100). Back propagation will choose it, because at B, C - E and D - E have the same depth, but C - E has a larger trust amount. For G, A - B - C - E - G and A - B - D - E - G are equally good. But, we will select the latter, because when we have a choice (at E), we prefer more residual depth. For H, A - B - C - E - H is better. Notation: amount/depth ```text A | 120/150 v B -------------, 100/50 / | | v v 50/100 | C D | 75/200 100/50 \ | 50/100 | _\|v | o E -------- v / \ `->F 120/0 / \ 30/0 120/100 v v H G ``` sequoia-wot-0.11.0/tests/data/local-optima/alice-priv.pgp000064400000000000000000000027671046102023000213730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: EAAE 12F9 8D39 F38B F0D1 B4C5 C46A 428A DEFB B2F8 Comment: xVgEYVbhrhYJKwYBBAHaRw8BAQdA6SxM/N8xKyeRszgKm95d94JYsvktcNy0g3nX UBKQm6gAAQCL1eqiiYQXAcHG97wYsA4nFUmhnPUio4u4zSjkm/khWxDKwsALBB8W CgB9BYJhVuGuAwsJBwkQxGpCit77svhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnrnOl7aDQCncD0+syUrIlMV3w5EBbcA2TTxwbAgXcMnsD FQoIApsBAh4BFiEE6q4S+Y0584vw0bTFxGpCit77svgAALJdAP9WVDkOUCE8zj+M hbL9RjsZK120BvnpqaL317X1AV1zrQD7BWAfN0A7eizjTR1Zvn3jyfWcnFY2BXbR EU0kCo5uFgLNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFW4a4DCwkH CRDEakKK3vuy+EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcl24XqAV4qAdUFWKmr6Jgl6GvkUo1ltWiRvxeFxAnYmwMVCggCmQECmwECHgEW IQTqrhL5jTnzi/DRtMXEakKK3vuy+AAAA/EBAOGs4l2522I2Flhy1GoL4gzkIPLF 3INGll8pksBuMIq+APwPu4LiLZ7ZtfZb3Uytz0Kv7dIacv3d3aLXR/Hu9CGHCsdY BGFW4a4WCSsGAQQB2kcPAQEHQDpR4I6hPmBKrRpbyYBoY2Z8TyEgBNC7AfkARM7Q Osx4AAD/S5z4RYl77rLQ1RcViZrNUgGPyVSvub9G7YJtQI0mIIcRasLAvwQYFgoB MQWCYVbhrgkQxGpCit77svhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnF4IZkQ8W5EFnArMj/chTedQPRbEHynEviYZWs2Iuj2QCmwK+oAQZ FgoAbwWCYVbhrgkQz3PYZczVJtlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnIab9oa/YdqDIT1/VBBeQqspnP53o+OIoeKGqKxsFNZkWIQRK 5yeBOon7BZKj5QbPc9hlzNUm2QAATJ4A/2MmZudrSVr/4pGmC7riBUrvhnRwMKew QIla3NhOetdIAQDge2RFCBo28+nwg/pD4zUz/14Xbcp6saB6GXIv1FO7DxYhBOqu EvmNOfOL8NG0xcRqQore+7L4AADn2gEAucyyfJiWMnzEsgGyVP7bZX+01L24d4A0 iuzzKAJ0EwoA/3iB9jVCDfs7bD0U2lXRdw4qlMlMsT0qILvpDdThq+oA =5HXC -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/alice.pgp000064400000000000000000000026241046102023000204050ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: EAAE 12F9 8D39 F38B F0D1 B4C5 C46A 428A DEFB B2F8 Comment: xjMEYVbhrhYJKwYBBAHaRw8BAQdA6SxM/N8xKyeRszgKm95d94JYsvktcNy0g3nX UBKQm6jCwAsEHxYKAH0FgmFW4a4DCwkHCRDEakKK3vuy+EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeuc6XtoNAKdwPT6zJSsiUxXfDkQFtw DZNPHBsCBdwyewMVCggCmwECHgEWIQTqrhL5jTnzi/DRtMXEakKK3vuy+AAAsl0A /1ZUOQ5QITzOP4yFsv1GOxkrXbQG+empovfXtfUBXXOtAPsFYB83QDt6LONNHVm+ fePJ9ZycVjYFdtERTSQKjm4WAs0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVbhrgMLCQcJEMRqQore+7L4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZyXbheoBXioB1QVYqavomCXoa+RSjWW1aJG/F4XECdibAxUK CAKZAQKbAQIeARYhBOquEvmNOfOL8NG0xcRqQore+7L4AAAD8QEA4aziXbnbYjYW WHLUagviDOQg8sXcg0aWXymSwG4wir4A/A+7guItntm19lvdTK3PQq/t0hpy/d3d otdH8e70IYcKzjMEYVbhrhYJKwYBBAHaRw8BAQdAOlHgjqE+YEqtGlvJgGhjZnxP ISAE0LsB+QBEztA6zHjCwL8EGBYKATEFgmFW4a4JEMRqQore+7L4RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxeCGZEPFuRBZwKzI/3IU3nU D0WxB8pxL4mGVrNiLo9kApsCvqAEGRYKAG8FgmFW4a4JEM9z2GXM1SbZRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyGm/aGv2HagyE9f1QQX kKrKZz+d6PjiKHihqisbBTWZFiEESucngTqJ+wWSo+UGz3PYZczVJtkAAEyeAP9j Jmbna0la/+KRpgu64gVK74Z0cDCnsECJWtzYTnrXSAEA4HtkRQgaNvPp8IP6Q+M1 M/9eF23KerGgehlyL9RTuw8WIQTqrhL5jTnzi/DRtMXEakKK3vuy+AAA59oBALnM snyYljJ8xLIBslT+22V/tNS9uHeANIrs8ygCdBMKAP94gfY1Qg37O2w9FNpV0XcO KpTJTLE9KiC76Q3U4avqAA== =ZNBz -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/bob-priv.pgp000064400000000000000000000027651046102023000210560ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 89C7 A9FB 7236 A77A BBE4 F29C B818 0FBF 6382 F90F Comment: xVgEYVbhrhYJKwYBBAHaRw8BAQdApDGeJWbumY6ZxnF8xYsjU2Bb/WigZd+RuU+F AUkBcxUAAQDZaG0b2Z0QrGXEImJ2cGdaW44Bm0lJcjw4WCO1wz7y6g5awsALBB8W CgB9BYJhVuGuAwsJBwkQuBgPv2OC+Q9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnp3Fcfhdvo20inkHugPRUAMbuqYSNeqnXvJoITRU42Q0D FQoIApsBAh4BFiEEicep+3I2p3q75PKcuBgPv2OC+Q8AANlJAQC0+NLvHwl/AQza UQU7qlxhsZRKjGq3dzver14t9l1b9QEAucP7PnpI/4zEI+l7TG23deCVzkbwTbbQ upwXivoU9g3NETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhVuGuAwsJBwkQ uBgPv2OC+Q9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn AtvZkqW3htoJTKAsefMiFrTkK7mbEX1KfzMNwuVyH3MDFQoIApkBApsBAh4BFiEE icep+3I2p3q75PKcuBgPv2OC+Q8AAF/uAQDRb0uDFIaRlrIadmv9qGMoNl+LbNeu WKwe0pYa+ICsKAEAtvs1LcuAe1E7mHa/Lws8AVxoLF8czleGJk8rvyc+7AvHWARh VuGuFgkrBgEEAdpHDwEBB0BcaNSn+RZEw8AkxWMwvX2CT3KWFzDNFi0JqZS4MLp6 4gABAN7KSnegXr/Kg3VhhyXxAev1iBkcYiToIdXVmnX8MBtXEGvCwL8EGBYKATEF gmFW4a4JELgYD79jgvkPRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ0+CW5uvb0/qzKtUO67nSp5y1aAYrVF/s539vrtaFaAmApsCvqAEGRYK AG8FgmFW4a4JEAHkCtf1Ai4uRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZy+Et7lDUc86gi0jgM74DBjejGRS6HFMZ7fEJG3fjuALFiEEWA6M Nu+noJvE848IAeQK1/UCLi4AANFkAQCFws1lH8n25pDEWu2yW8u5SQE18QLIt3++ I94RxnC7rQEArj2Ye3xkUtHJlIPzfm9z97kzsbCS//HFDyQfIINDsgUWIQSJx6n7 cjanervk8py4GA+/Y4L5DwAAV4YBALmpkgVa1QHSk4HS+H0TtDubrxzRd7yUFEUq 74yeh6VEAQD49gKvW+VqDWFY5Ve3r4shMmlgXoamu0ocviKmBCVXAA== =PP3X -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/bob.pgp000064400000000000000000000031071046102023000200670ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbhrhYJKwYBBAHaRw8BAQdApDGeJWbumY6ZxnF8xYsjU2Bb/WigZd+RuU+F AUkBcxXCwAsEHxYKAH0FgmFW4a4DCwkHCRC4GA+/Y4L5D0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmencVx+F2+jbSKeQe6A9FQAxu6phI16 qde8mghNFTjZDQMVCggCmwECHgEWIQSJx6n7cjanervk8py4GA+/Y4L5DwAA2UkB ALT40u8fCX8BDNpRBTuqXGGxlEqMard3O96vXi32XVv1AQC5w/s+ekj/jMQj6XtM bbd14JXORvBNttC6nBeK+hT2Dc0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFW4a4DCwkHCRC4GA+/Y4L5D0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcC29mSpbeG2glMoCx58yIWtOQruZsRfUp/Mw3C5XIfcwMVCggC mQECmwECHgEWIQSJx6n7cjanervk8py4GA+/Y4L5DwAAX+4BANFvS4MUhpGWshp2 a/2oYyg2X4ts165YrB7Slhr4gKwoAQC2+zUty4B7UTuYdr8vCzwBXGgsXxzOV4Ym Tyu/Jz7sC8LABwQQFgoAeQWCYVbiSgWDCWeaOwOFlngJEMRqQore+7L4RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ62Q2HKe7AMWW4L8HWG5 eIStBVvQ1p5EkKDcE9KjrUAyFiEE6q4S+Y0584vw0bTFxGpCit77svgAAFSHAP9k 7i3tciQp//FdoTqyLZRLMu4vobeb7q7xapsu8S0g2QEA52q9FO0gf0QFtvBXEAdl RTpoXquO+BdbMsf2jRytZw7OMwRhVuGuFgkrBgEEAdpHDwEBB0BcaNSn+RZEw8Ak xWMwvX2CT3KWFzDNFi0JqZS4MLp64sLAvwQYFgoBMQWCYVbhrgkQuBgPv2OC+Q9H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnT4Jbm69vT+rM q1Q7rudKnnLVoBitUX+znf2+u1oVoCYCmwK+oAQZFgoAbwWCYVbhrgkQAeQK1/UC Li5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnL4S3uUNR zzqCLSOAzvgMGN6MZFLocUxnt8Qkbd+O4AsWIQRYDow276egm8TzjwgB5ArX9QIu LgAA0WQBAIXCzWUfyfbmkMRa7bJby7lJATXxAsi3f74j3hHGcLutAQCuPZh7fGRS 0cmUg/N+b3P3uTOxsJL/8cUPJB8gg0OyBRYhBInHqftyNqd6u+TynLgYD79jgvkP AABXhgEAuamSBVrVAdKTgdL4fRO0O5uvHNF3vJQURSrvjJ6HpUQBAPj2Aq9b5WoN YVjlV7eviyEyaWBehqa7Shy+IqYEJVcA =3UyX -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/carol-priv.pgp000064400000000000000000000027671046102023000214160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E9DF 94E3 89F5 29F8 EF6A A223 F6CC 1F85 44C0 874D Comment: xVgEYVbhrxYJKwYBBAHaRw8BAQdAfw+FrwkIkwGiJ2Vgfht1ghz/nKogdB5raVdD 0FXud10AAP9PX/gCIweodtfRwPo6yOO3Nd1OBPFyrO6rhMVksUf59BOLwsALBB8W CgB9BYJhVuGvAwsJBwkQ9swfhUTAh01HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnvL/B6emBiAUlqpWA4s/N9KyM6dcIWuua9f2NfBwG5T0D FQoIApsBAh4BFiEE6d+U44n1KfjvaqIj9swfhUTAh00AAG3hAQDcaPXV6YfB/6Ml 98VONDoTp2QdP0TRQNo3qYHeAco9IgD/dgu8UIyxmg8g2Pp6RDsHdk1K1Hh+LFJn NkJMVm0zgQ7NEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFW4a8DCwkH CRD2zB+FRMCHTUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeXZq/IDGuk5Yd+9ASjd8ybzDQWOCJ3TajyyoHGCe2pKgMVCggCmQECmwECHgEW IQTp35TjifUp+O9qoiP2zB+FRMCHTQAApVEA/3SDvyKb/7QsTUr1jw0vBuLGRo0Y QbDdCZZ7y5jo/BLQAQDeuxnFotp/w0+D8Y3wHHzkk5j3ghGQSTGrkIB7lgLqBsdY BGFW4a8WCSsGAQQB2kcPAQEHQAA7PLUR6+TmoKIiuAEqUgeu2Nr+UgRqqpOLLWeu exacAAEA5nuBdvEGuMV5MQqpwx724+sNWq1r0j05t9IJbrdJCaYQRcLAvwQYFgoB MQWCYVbhrwkQ9swfhUTAh01HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnryPNbiwM5ZzZXblKNEzYlchyd5qbCJ455F5reru9ptoCmwK+oAQZ FgoAbwWCYVbhrwkQxuMN0XFDH5pHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn3e/ppbLch2+Ibh6eOEidRzQM8fL+i1sSSy5ZCNdmkOoWIQT8 wcEGBrFu1/JUVbXG4w3RcUMfmgAAsmcBAK7BsgKjrXVjQyWOJzsnss8RS1ElKihP hDw7EKr1IA0WAP9p8ifD63qB3d5YKjtyZzvm6zEgGWEualFyGihTlFXUDBYhBOnf lOOJ9Sn472qiI/bMH4VEwIdNAAAOCgD+J1b+/U/4EP7d35gZ3U6CFnSqLmOEVMMk hE6ibC8SHa0BAInR1uP89/p751ePzPTWvSYGctMYPSO3X/zCafTjVXIA =rS+a -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/carol.pgp000064400000000000000000000031131046102023000204220ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbhrxYJKwYBBAHaRw8BAQdAfw+FrwkIkwGiJ2Vgfht1ghz/nKogdB5raVdD 0FXud13CwAsEHxYKAH0FgmFW4a8DCwkHCRD2zB+FRMCHTUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme8v8Hp6YGIBSWqlYDiz830rIzp1wha 65r1/Y18HAblPQMVCggCmwECHgEWIQTp35TjifUp+O9qoiP2zB+FRMCHTQAAbeEB ANxo9dXph8H/oyX3xU40OhOnZB0/RNFA2jepgd4Byj0iAP92C7xQjLGaDyDY+npE Owd2TUrUeH4sUmc2QkxWbTOBDs0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVbhrwMLCQcJEPbMH4VEwIdNRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ5dmr8gMa6Tlh370BKN3zJvMNBY4IndNqPLKgcYJ7akqAxUK CAKZAQKbAQIeARYhBOnflOOJ9Sn472qiI/bMH4VEwIdNAAClUQD/dIO/Ipv/tCxN SvWPDS8G4sZGjRhBsN0JlnvLmOj8EtABAN67GcWi2n/DT4PxjfAcfOSTmPeCEZBJ MauQgHuWAuoGwsAHBBAWCgB5BYJhVuJKBYMJZ5o7A4UyZAkQuBgPv2OC+Q9HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnFjIiZcXUr0/HMn5N F2yW/4qJsi9hnPGa+20KEwlheqcWIQSJx6n7cjanervk8py4GA+/Y4L5DwAAaJ0B AKqvoDQUIe/fEwW8EH6QduocxvJ37kA4TQE9/V9kQyvPAQCN/ZdynU4Is3zKGA/0 q7Ue+J+7CY+StV94gvNVMhdhCM4zBGFW4a8WCSsGAQQB2kcPAQEHQAA7PLUR6+Tm oKIiuAEqUgeu2Nr+UgRqqpOLLWeuexacwsC/BBgWCgExBYJhVuGvCRD2zB+FRMCH TUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmevI81uLAzl nNlduUo0TNiVyHJ3mpsInjnkXmt6u72m2gKbAr6gBBkWCgBvBYJhVuGvCRDG4w3R cUMfmkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfd7+ml styHb4huHp44SJ1HNAzx8v6LWxJLLlkI12aQ6hYhBPzBwQYGsW7X8lRVtcbjDdFx Qx+aAACyZwEArsGyAqOtdWNDJY4nOyeyzxFLUSUqKE+EPDsQqvUgDRYA/2nyJ8Pr eoHd3lgqO3JnO+brMSAZYS5qUXIaKFOUVdQMFiEE6d+U44n1KfjvaqIj9swfhUTA h00AAA4KAP4nVv79T/gQ/t3fmBndToIWdKouY4RUwySETqJsLxIdrQEAidHW4/z3 +nvnV4/M9Na9JgZy0xg9I7df/MJp9ONVcgA= =/wch -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/dave-priv.pgp000064400000000000000000000027661046102023000212340ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: C2F8 22F1 7B68 E946 853A 2DCF F555 41D8 9F27 F88B Comment: xVgEYVbhrxYJKwYBBAHaRw8BAQdA26TEGUWRrHx3+AUSSm8gDNqYpplXecxxrEkt 24SlnUQAAP0a2XKM7WjhaYKJIaIZLYMZUdbg8YBWUE684sIHeL81CxCHwsALBB8W CgB9BYJhVuGvAwsJBwkQ9VVB2J8n+ItHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnuJrAPDcg52YmGMpV8UJ8UIoRWKIJ2yivDhNFk9/ZSEwD FQoIApsBAh4BFiEEwvgi8Xto6UaFOi3P9VVB2J8n+IsAAExdAP9UJUyXxS4wkdqk rBIbKRgvRekMv51R7u9DtZwE1kOmCAD/c/h6KIZgXEykd0srZnUgyNpt32bXoR2g FZQLWSYiWgTNEjxkYXZlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVbhrwMLCQcJ EPVVQdifJ/iLRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z34MkDjZGsSYQYcGwCvpb1BPZeJlxTGgb/qFoiyvkv+PAxUKCAKZAQKbAQIeARYh BML4IvF7aOlGhTotz/VVQdifJ/iLAAC2EgD8DFS5Wot1zLGPSqtc+MmUdwrrc5l/ HG5y2rHZ9FQP1R0A/3OirnqcIYBAi+TDOislhO3/Tl4MuvgH7+chhjoU2vILx1gE YVbhrxYJKwYBBAHaRw8BAQdAp2JoLc6lz0p2acNAJ2eHLAg+H/K1oqIL5mbiGcwh 5hsAAP0fCux1dABIFu+XWLc6lh7S3SOC/Km1etHYyZ8nnbFD9hHDwsC/BBgWCgEx BYJhVuGvCRD1VUHYnyf4i0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfSU57c9wzFkAOMJ/4el6gqhR7eV/IqYQqSQChocOvLNAKbAr6gBBkW CgBvBYJhVuGvCRDLWOWp0AoDq0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdOxOqVcZdSquvN/k1ULoACx8HInt28TEBfoYDM5FLT5BYhBI/p r5vD2N7f/ubF5MtY5anQCgOrAACPngD9E8usdql36aguP9lHE0aGcza2mMpF2YAJ x87YY3Jq0CIA/Rp90Td63lqbi9jgGJyLLG3hJktdAQWH0lGSwV6ELvAEFiEEwvgi 8Xto6UaFOi3P9VVB2J8n+IsAAPGFAP98rh0KzdYJG27xcgD3RvE4sFtKSwUDHV+A 2m/3mg0BuAEAvgGD1vBxMdxGAoTgnzogarIGVFuJ/zSAAE2OM00dWwk= =mYA3 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/dave.pgp000064400000000000000000000031131046102023000202410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbhrxYJKwYBBAHaRw8BAQdA26TEGUWRrHx3+AUSSm8gDNqYpplXecxxrEkt 24SlnUTCwAsEHxYKAH0FgmFW4a8DCwkHCRD1VUHYnyf4i0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme4msA8NyDnZiYYylXxQnxQihFYognb KK8OE0WT39lITAMVCggCmwECHgEWIQTC+CLxe2jpRoU6Lc/1VUHYnyf4iwAATF0A /1QlTJfFLjCR2qSsEhspGC9F6Qy/nVHu70O1nATWQ6YIAP9z+HoohmBcTKR3Sytm dSDI2m3fZtehHaAVlAtZJiJaBM0SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJhVuGvAwsJBwkQ9VVB2J8n+ItHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnfgyQONkaxJhBhwbAK+lvUE9l4mXFMaBv+oWiLK+S/48DFQoI ApkBApsBAh4BFiEEwvgi8Xto6UaFOi3P9VVB2J8n+IsAALYSAPwMVLlai3XMsY9K q1z4yZR3CutzmX8cbnLasdn0VA/VHQD/c6KuepwhgECL5MM6KyWE7f9OXgy6+Afv 5yGGOhTa8gvCwAcEEBYKAHkFgmFW4koFgwlnmjsDhWQyCRC4GA+/Y4L5D0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcB3snITxu0beAjA7e4 W8IUzL3ThewCWHrg71S95/QiPhYhBInHqftyNqd6u+TynLgYD79jgvkPAADXgAD6 A6852yFuhpfO2+XUB99E5yDZttUqQIZjSZdt0kGCxOgBALOwI/NqaQ4GXbuPNvge +5HDf69oydzR61A2Ir9bcV0DzjMEYVbhrxYJKwYBBAHaRw8BAQdAp2JoLc6lz0p2 acNAJ2eHLAg+H/K1oqIL5mbiGcwh5hvCwL8EGBYKATEFgmFW4a8JEPVVQdifJ/iL RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9JTntz3DMWQ A4wn/h6XqCqFHt5X8iphCpJAKGhw68s0ApsCvqAEGRYKAG8FgmFW4a8JEMtY5anQ CgOrRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ07E6pVx l1Kq683+TVQugALHwcie3bxMQF+hgMzkUtPkFiEEj+mvm8PY3t/+5sXky1jlqdAK A6sAAI+eAP0Ty6x2qXfpqC4/2UcTRoZzNraYykXZgAnHzthjcmrQIgD9Gn3RN3re WpuL2OAYnIssbeEmS10BBYfSUZLBXoQu8AQWIQTC+CLxe2jpRoU6Lc/1VUHYnyf4 iwAA8YUA/3yuHQrN1gkbbvFyAPdG8TiwW0pLBQMdX4Dab/eaDQG4AQC+AYPW8HEx 3EYChOCfOiBqsgZUW4n/NIAATY4zTR1bCQ== =tSDS -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/ellen-priv.pgp000064400000000000000000000027671046102023000214150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7050 7A90 58A5 7FEA E18C C3CE 6A39 8AC9 051D 9CA8 Comment: xVgEYVbhrxYJKwYBBAHaRw8BAQdALaYn2T27LyH5CAd39/hvyLUdnaUhKxBWzZsD u2ZZ3qkAAP0XBRnkfDFH120JID45MwEeplon83ZYaJDy00qfbnGPlw3TwsALBB8W CgB9BYJhVuGvAwsJBwkQajmKyQUdnKhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnViyBpRMDMhbknhSqC5KWhD4kBMoOugngKIlPMlaTDyID FQoIApsBAh4BFiEEcFB6kFilf+rhjMPOajmKyQUdnKgAAOTwAQDqxsmuY2wwgnwt A4ieOzbgBKwWcJeT8pldp4GAm9niJAEAuYpGp6ytCiauuaBoGIAqzSWBBE4Aevlt s3NBnCWxEgfNEzxlbGxlbkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFW4a8DCwkH CRBqOYrJBR2cqEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdtBUkEoMvPTxLMy/7ZgxIeiH+63m8JEeyFlwkb/hpUCAMVCggCmQECmwECHgEW IQRwUHqQWKV/6uGMw85qOYrJBR2cqAAAXEcBAIJ4d6gIDxGTT+iAPflXvEdq+HU8 qnbJWRF75GfXZRdUAQDtH6ys+t3Zmt5pR6ZFyHVIIPV53HK/4UR1vHZA/C/ZCMdY BGFW4a8WCSsGAQQB2kcPAQEHQB8/hPPfOhuAH3//XvXMb1tmsL0JlWXyHWM7uks/ cFA0AAEAq9oOVGrFdlyW1rnvKlp9r3A/G5qScbLI1FVP425ZiGEQmcLAvwQYFgoB MQWCYVbhrwkQajmKyQUdnKhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnBedqa0s4V/iQnbNGU0HO0sQH1XUfafVcAOdz7TUEbj8CmwK+oAQZ FgoAbwWCYVbhrwkQFPV8kprGvHBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnxVm6t4KNhOXpKwpnI9MUj02uAk8UxC8VPxA3gnpQ9f4WIQSx vyuZqOfYn1xmGjYU9XySmsa8cAAAI7oBALjsU1coR7Wd7V0wOVQ4j7/7iZuHOX6n YCWrZ/I6I/MYAPsGNB3QM0T3ihauZ2tfNrnTFgq6K96A6P0PqL6L9iZ6AxYhBHBQ epBYpX/q4YzDzmo5iskFHZyoAAAlOAEAjCdwvrjvuuLjLpVFnC0fb6Aok22nCkbg +SCmgkWD9PwA/37I6pcLJQVFI78f0MBNoU+Lq3CCSQRq25ioi/gbA5AI =vO84 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/ellen.pgp000064400000000000000000000035331046102023000204270ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbhrxYJKwYBBAHaRw8BAQdALaYn2T27LyH5CAd39/hvyLUdnaUhKxBWzZsD u2ZZ3qnCwAsEHxYKAH0FgmFW4a8DCwkHCRBqOYrJBR2cqEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdWLIGlEwMyFuSeFKoLkpaEPiQEyg66 CeAoiU8yVpMPIgMVCggCmwECHgEWIQRwUHqQWKV/6uGMw85qOYrJBR2cqAAA5PAB AOrGya5jbDCCfC0DiJ47NuAErBZwl5PymV2ngYCb2eIkAQC5ikanrK0KJq65oGgY gCrNJYEETgB6+W2zc0GcJbESB80TPGVsbGVuQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVbhrwMLCQcJEGo5iskFHZyoRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ20FSQSgy89PEszL/tmDEh6If7rebwkR7IWXCRv+GlQIAxUK CAKZAQKbAQIeARYhBHBQepBYpX/q4YzDzmo5iskFHZyoAABcRwEAgnh3qAgPEZNP 6IA9+Ve8R2r4dTyqdslZEXvkZ9dlF1QBAO0frKz63dma3mlHpkXIdUgg9Xnccr/h RHW8dkD8L9kIwsAHBBAWCgB5BYJhVuJKBYMJZ5o7A4VkMgkQ9VVB2J8n+ItHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnostzcAKwd5Wx1vfT R4S1V1FPJf3nje0qBjYNWBTl4MAWIQTC+CLxe2jpRoU6Lc/1VUHYnyf4iwAAUmUA /jcdf7ecc9UlyxXuLhuQoW1vr6S9Bl34AcJ5kmrmTW7tAQCUDt30mODaKM6AuIxq VKlACE1q1zc+BKSz2pka+clmDsLABwQQFgoAeQWCYVbiSgWDCWeaOwOFMmQJEPbM H4VEwIdNRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7Jw pSoT4hO91rELqeNrLhfcBANp2XbeBmisii5TCIRhFiEE6d+U44n1KfjvaqIj9swf hUTAh00AAJt1AQDtPRdiCNuDnXBRxPof2iCZdOR+JUYejx2i/qgzvXNcMgD/STFS zcQJhV6QLjWU/QISWXo8E8V8Cy8ZQNpIr0Gz6QjOMwRhVuGvFgkrBgEEAdpHDwEB B0AfP4Tz3zobgB9//171zG9bZrC9CZVl8h1jO7pLP3BQNMLAvwQYFgoBMQWCYVbh rwkQajmKyQUdnKhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnBedqa0s4V/iQnbNGU0HO0sQH1XUfafVcAOdz7TUEbj8CmwK+oAQZFgoAbwWC YVbhrwkQFPV8kprGvHBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnxVm6t4KNhOXpKwpnI9MUj02uAk8UxC8VPxA3gnpQ9f4WIQSxvyuZqOfY n1xmGjYU9XySmsa8cAAAI7oBALjsU1coR7Wd7V0wOVQ4j7/7iZuHOX6nYCWrZ/I6 I/MYAPsGNB3QM0T3ihauZ2tfNrnTFgq6K96A6P0PqL6L9iZ6AxYhBHBQepBYpX/q 4YzDzmo5iskFHZyoAAAlOAEAjCdwvrjvuuLjLpVFnC0fb6Aok22nCkbg+SCmgkWD 9PwA/37I6pcLJQVFI78f0MBNoU+Lq3CCSQRq25ioi/gbA5AI =WE4/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/francis-priv.pgp000064400000000000000000000027751046102023000217420ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D8DD A78A 2297 CA3C 35B9 3775 77E8 B54B 9350 C082 Comment: xVgEYVbhrxYJKwYBBAHaRw8BAQdA1zbX3ttkaXh3dPjdxAMvNwDTrBKpLFfEFXBp vAkucVgAAQC7McwUWT+2F4pn3Ip3FO6I2Tywp+xsXo4vj2lIfUJMSQ79wsALBB8W CgB9BYJhVuGvAwsJBwkQd+i1S5NQwIJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnX/hYftTNr1GYMT8Ueu3khAWpI5+5AD23ry/EWd9hpuQD FQoIApsBAh4BFiEE2N2niiKXyjw1uTd1d+i1S5NQwIIAAMwTAP0dPiQXja/3T6P7 BbdQ9bPDx9PtH211+mpwf/ciq+B5zAEAiM/bt+LtBTw1x3Ck60n3/OVTqwFNmAEs po55nuOQlAPNFTxmcmFuY2lzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVbhrwML CQcJEHfotUuTUMCCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZyfPV6B5eXLapYJrG+p7ooFWjpvNylKR+A2nHMH4sq50AxUKCAKZAQKbAQIe ARYhBNjdp4oil8o8Nbk3dXfotUuTUMCCAAAE8AEAnczRfTZCwnyIfTdKoRA7cbBs hVpYJ6/1IeUazHxalIMBALJ/APTrXcLTI6uOBVDQwy7NZLj615OqSFAYNfdHLrEB x1gEYVbhrxYJKwYBBAHaRw8BAQdA1fcUsb7GUBeqdhFoTMO5jQDSFAvhJp2mj8vm oivPKU0AAP4pVHgAaUMEvCZ65N31cTKkP+AwI6RIfW4E8y8gpHg+vA6hwsC/BBgW CgExBYJhVuGvCRB36LVLk1DAgkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfvr549dLIU7PPCN+u8FNgSx5zBxkSN5Y74ridmUaGSHwKbAr6g BBkWCgBvBYJhVuGvCRBzA4cL41g0dUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfVtLNMigXvOaNgnLunPmpiXoyd09WFNcehW+Mws77A2RYh BOExiqbPQDXFVyqTS3MDhwvjWDR1AAALVAEA5XxlsoUA+GCUk9GvEiv0wpTpdaqJ cWDYCSxV+kaRTOsA/333Hgx/9wuk9mRrpe6I5OjFNyZZwy50TK3RDii2pKkFFiEE 2N2niiKXyjw1uTd1d+i1S5NQwIIAAKnXAP0S9rQJGQlUIxLAofBei37HBF0TdR/n +rOB3EZ1VNaBCQD/QegyxiUa0yaOX28KJo/7T6ztgBsahbAHhPP5sSJLcQ4= =ILV5 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/francis.pgp000064400000000000000000000035371046102023000207610ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbhrxYJKwYBBAHaRw8BAQdA1zbX3ttkaXh3dPjdxAMvNwDTrBKpLFfEFXBp vAkucVjCwAsEHxYKAH0FgmFW4a8DCwkHCRB36LVLk1DAgkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdf+Fh+1M2vUZgxPxR67eSEBakjn7kA PbevL8RZ32Gm5AMVCggCmwECHgEWIQTY3aeKIpfKPDW5N3V36LVLk1DAggAAzBMA /R0+JBeNr/dPo/sFt1D1s8PH0+0fbXX6anB/9yKr4HnMAQCIz9u34u0FPDXHcKTr Sff85VOrAU2YASymjnme45CUA80VPGZyYW5jaXNAZXhhbXBsZS5vcmc+wsAOBBMW CgCABYJhVuGvAwsJBwkQd+i1S5NQwIJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJ89XoHl5ctqlgmsb6nuigVaOm83KUpH4DaccwfiyrnQD FQoIApkBApsBAh4BFiEE2N2niiKXyjw1uTd1d+i1S5NQwIIAAATwAQCdzNF9NkLC fIh9N0qhEDtxsGyFWlgnr/Uh5RrMfFqUgwEAsn8A9OtdwtMjq44FUNDDLs1kuPrX k6pIUBg190cusQHCwAcEEBYKAHkFgmFW4koFgwlnmjsDhWR4CRBqOYrJBR2cqEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcRbuKyLphJNBql cUWzdSjVXwow+/K9iEDEuzy02idNThYhBHBQepBYpX/q4YzDzmo5iskFHZyoAABT wgEArxOlwKW/Z6t5NNvb+ikWCFQgez+EUZejWHlimisbv6oBAJhfzZV6w1eeO4nW eGUsdeA1mCvG7yMhs9O7QlMIkoIAwsAHBBAWCgB5BYJhVuJKBYMJZ5o7A4XISwkQ uBgPv2OC+Q9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 4fPA5h12YHBjsM8HySKSd5xh73LsQtGC0t4T0JSo5fkWIQSJx6n7cjanervk8py4 GA+/Y4L5DwAAzJgBANa8kZp0oPylsWDFdbhH8Wbtgu2xuHqW8mufALD4y0oLAQDY +xjcpqex/2XP8jpAMnBlwXtlmEbP1TmK0xTq+lx3Bc4zBGFW4a8WCSsGAQQB2kcP AQEHQNX3FLG+xlAXqnYRaEzDuY0A0hQL4Sadpo/L5qIrzylNwsC/BBgWCgExBYJh VuGvCRB36LVLk1DAgkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmfvr549dLIU7PPCN+u8FNgSx5zBxkSN5Y74ridmUaGSHwKbAr6gBBkWCgBv BYJhVuGvCRBzA4cL41g0dUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfVtLNMigXvOaNgnLunPmpiXoyd09WFNcehW+Mws77A2RYhBOExiqbP QDXFVyqTS3MDhwvjWDR1AAALVAEA5XxlsoUA+GCUk9GvEiv0wpTpdaqJcWDYCSxV +kaRTOsA/333Hgx/9wuk9mRrpe6I5OjFNyZZwy50TK3RDii2pKkFFiEE2N2niiKX yjw1uTd1d+i1S5NQwIIAAKnXAP0S9rQJGQlUIxLAofBei37HBF0TdR/n+rOB3EZ1 VNaBCQD/QegyxiUa0yaOX28KJo/7T6ztgBsahbAHhPP5sSJLcQ4= =Nb6j -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/georgina-priv.pgp000064400000000000000000000027761046102023000221110ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: C5D1 B22F EC75 911A 04E1 A5DC 75B6 6B99 4E70 ADE2 Comment: xVgEYVbhrxYJKwYBBAHaRw8BAQdAumWQP7FjihHxgVRgSVhpA1LT78qPygH9fj7e F9Xado4AAPsHDuhdpx6sX9wvtVcP3rIfcCA9LvfJNjFuqr8UHB3QpQ61wsALBB8W CgB9BYJhVuGvAwsJBwkQdbZrmU5wreJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnxMzw42jdDacYt3h+7QIfRewA7CoVYijg3l3aRi7nt8ED FQoIApsBAh4BFiEExdGyL+x1kRoE4aXcdbZrmU5wreIAAB9cAP9x60USsvefE6bL BZF8FsHV5Sz0/u8yUg/52duoTsVdtwEAkRCdb4t1R/3HQjJlEDo/c4e+OyTMT6Du KX6It+rmvAvNFjxnZW9yZ2luYUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFW4a8D CwkHCRB1tmuZTnCt4kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmfJeP7keicNpMIl9LW9zHtOmRswiq4ebcRo3IqPeRamwgMVCggCmQECmwEC HgEWIQTF0bIv7HWRGgThpdx1tmuZTnCt4gAAOxsA/RG9kHTDD8i2SdiSLhGs8FSt sys4Txsn5InYfjwVF/+rAP49AZWfsv+iGfd6Es3e50pfae/7cD4aeMKR80KLkKd/ AcdYBGFW4a8WCSsGAQQB2kcPAQEHQBuIIOvusGwPle1xW+ZwgAx77euKnq71UiMt 9ec1bLvmAAD/ae03PD/OvCfui6Q1BHgBlmVIHCkwGPKFmQFjSm1ea2MNrsLAvwQY FgoBMQWCYVbhrwkQdbZrmU5wreJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnFYuJvt784m9YHiNm80i7icOYhydi5iTGT3uGpEjejlsCmwK+ oAQZFgoAbwWCYVbhrwkQaOZ9zRRoa2hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jny9R+1wsb7JAXBckEFUujkTa6hq2mjnVZoxmKzpv0RYUW IQQSz8/sl5o59Q2SUhJo5n3NFGhraAAAaNABAM79NbDm9mchr2WB9ok1eZgP0hj4 IXFtClt/sxSzJfXJAQChMUB1Gg1dEMH5HPm6lbDJ9m04xIo6n8SR0/VgWpk5BhYh BMXRsi/sdZEaBOGl3HW2a5lOcK3iAABjhQEAj+WeC/gXSmGDwxP3fp2UltZjlZN1 IsJeBSBukFSV2mkBAP7i90RBj7Cr9EdBQqd2NLzHeOeWA6AJMLqi264QA3QC =8Q79 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/georgina.pgp000064400000000000000000000031171046102023000211210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbhrxYJKwYBBAHaRw8BAQdAumWQP7FjihHxgVRgSVhpA1LT78qPygH9fj7e F9Xado7CwAsEHxYKAH0FgmFW4a8DCwkHCRB1tmuZTnCt4kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfEzPDjaN0Npxi3eH7tAh9F7ADsKhVi KODeXdpGLue3wQMVCggCmwECHgEWIQTF0bIv7HWRGgThpdx1tmuZTnCt4gAAH1wA /3HrRRKy958TpssFkXwWwdXlLPT+7zJSD/nZ26hOxV23AQCREJ1vi3VH/cdCMmUQ Oj9zh747JMxPoO4pfoi36ua8C80WPGdlb3JnaW5hQGV4YW1wbGUub3JnPsLADgQT FgoAgAWCYVbhrwMLCQcJEHW2a5lOcK3iRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ8l4/uR6Jw2kwiX0tb3Me06ZGzCKrh5txGjcio95FqbC AxUKCAKZAQKbAQIeARYhBMXRsi/sdZEaBOGl3HW2a5lOcK3iAAA7GwD9Eb2QdMMP yLZJ2JIuEazwVK2zKzhPGyfkidh+PBUX/6sA/j0BlZ+y/6IZ93oSzd7nSl9p7/tw Php4wpHzQouQp38BwsAHBBAWCgB5BYJhVuJKBYMJZ5o7A4UAHgkQajmKyQUdnKhH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn9tFeeN8plcuv 00AwRELCqY3VhyPdA3n1nIM95vdF9k8WIQRwUHqQWKV/6uGMw85qOYrJBR2cqAAA 6TUA/jMuGs5W+oixjO2Oh9Ny/4M46MSz4gcNXCA2OePOmKLOAQDeHdFrtnkcAqAp NAGmVKTFJcC2600rIokVm8/K1YTxAc4zBGFW4a8WCSsGAQQB2kcPAQEHQBuIIOvu sGwPle1xW+ZwgAx77euKnq71UiMt9ec1bLvmwsC/BBgWCgExBYJhVuGvCRB1tmuZ TnCt4kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcVi4m+ 3vzib1geI2bzSLuJw5iHJ2LmJMZPe4akSN6OWwKbAr6gBBkWCgBvBYJhVuGvCRBo 5n3NFGhraEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfL 1H7XCxvskBcFyQQVS6ORNrqGraaOdVmjGYrOm/RFhRYhBBLPz+yXmjn1DZJSEmjm fc0UaGtoAABo0AEAzv01sOb2ZyGvZYH2iTV5mA/SGPghcW0KW3+zFLMl9ckBAKEx QHUaDV0Qwfkc+bqVsMn2bTjEijqfxJHT9WBamTkGFiEExdGyL+x1kRoE4aXcdbZr mU5wreIAAGOFAQCP5Z4L+BdKYYPDE/d+nZSW1mOVk3Uiwl4FIG6QVJXaaQEA/uL3 REGPsKv0R0FCp3Y0vMd455YDoAkwuqLbrhADdAI= =nIvs -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/henry-priv.pgp000064400000000000000000000027671046102023000214430ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: F260 739E 3F75 5389 EFC2 FEE6 7F58 AACB 661D 5120 Comment: xVgEYVbhrxYJKwYBBAHaRw8BAQdAklzeJGr35OhwzQLUrud6zTVd4oAJIHREc5va ZhflkbwAAQCaRi8WuugxDbFcHv4WAjS78rqU3uSyZR38trueXTUR6BACwsALBB8W CgB9BYJhVuGvAwsJBwkQf1iqy2YdUSBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnUNdcqjgReoPyCGFJJZv4caHjpf31lPPzVhR5Rpjrc7wD FQoIApsBAh4BFiEE8mBznj91U4nvwv7mf1iqy2YdUSAAALOnAP0V5UCvOFkQPl4K vGUPos/S6gGCtOEnzuiDjMVeLNw64gD/QcGRJCFZ1a7MZ1uJUUHqvOx56GOuUcVm jyx9u6FqFgDNEzxoZW5yeUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFW4a8DCwkH CRB/WKrLZh1RIEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmc7iFGTw4fyFfDCApJALWtEAZ47+2muA3D6azqOk5ZJxwMVCggCmQECmwECHgEW IQTyYHOeP3VTie/C/uZ/WKrLZh1RIAAA67cBAMFADDnki7xWK/OOZhepRyq9gk4j pzR96vML+pNE/8OAAQC8LQXbkBQM2qvG78eEFMs4Mc4e+DQppowfypdDzRDPD8dY BGFW4a8WCSsGAQQB2kcPAQEHQP+7H9iKMfMAAlkby7cQI38s8QkqPRJt27QeaYET 85IRAAEAvnqprm6dWHJbs6HLe+qq4XYC59RrX8JYNF4NCRTufWEQbsLAvwQYFgoB MQWCYVbhrwkQf1iqy2YdUSBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnXHwNcZS4AuJXP3C3BNr/4e4DNazxlUdvPM3AbwSc3nYCmwK+oAQZ FgoAbwWCYVbhrwkQQTf5wjWpx7xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn7Sn57RbEVKsMzM0nurw0oa56JGMCN9WRuX48AoiPfX4WIQR2 BJNrFDBcOwOBcmlBN/nCNanHvAAA/DEA/jfCnDGMTKojGIGIvmMzD925n3kwdoPr bBfMBI43Z9SPAQDtu9bHPDa6IQ2tZBMGwF1Ar8omLv8H4s7dKX5tkI5iAhYhBPJg c54/dVOJ78L+5n9YqstmHVEgAACAlAEAn4rurlgcYR5QtgqsRNnk4lffAbC9f1o5 z6qPRwlRnSQA/1saHrsZz4xbYpX9rgYklyXWCfw1wYPPSKEDqkRgrTMO =NhSC -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima/henry.pgp000064400000000000000000000031071046102023000204520ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbhrxYJKwYBBAHaRw8BAQdAklzeJGr35OhwzQLUrud6zTVd4oAJIHREc5va ZhflkbzCwAsEHxYKAH0FgmFW4a8DCwkHCRB/WKrLZh1RIEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdQ11yqOBF6g/IIYUklm/hxoeOl/fWU 8/NWFHlGmOtzvAMVCggCmwECHgEWIQTyYHOeP3VTie/C/uZ/WKrLZh1RIAAAs6cA /RXlQK84WRA+Xgq8ZQ+iz9LqAYK04SfO6IOMxV4s3DriAP9BwZEkIVnVrsxnW4lR Qeq87HnoY65RxWaPLH27oWoWAM0TPGhlbnJ5QGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVbhrwMLCQcJEH9YqstmHVEgRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZzuIUZPDh/IV8MICkkAta0QBnjv7aa4DcPprOo6TlknHAxUK CAKZAQKbAQIeARYhBPJgc54/dVOJ78L+5n9YqstmHVEgAADrtwEAwUAMOeSLvFYr 845mF6lHKr2CTiOnNH3q8wv6k0T/w4ABALwtBduQFAzaq8bvx4QUyzgxzh74NCmm jB/Kl0PNEM8PwsADBBAWCgB1BYJhVuJKBYMJZ5o7CRBqOYrJBR2cqEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfm7B593q7MYtaR+OA2V98m kjkXaeX8IQOZeWenDKvi3hYhBHBQepBYpX/q4YzDzmo5iskFHZyoAAAiaQD/QYZW YHTfwTWwsjYRsxncmd2rCcGEsLGjjn/WMqX6OqUBAKu69c/mZmsw4ONVS1DsgLZQ vHN1tJ2xKhbw7fN/B64OzjMEYVbhrxYJKwYBBAHaRw8BAQdA/7sf2Iox8wACWRvL txAjfyzxCSo9Em3btB5pgRPzkhHCwL8EGBYKATEFgmFW4a8JEH9YqstmHVEgRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1x8DXGUuALiVz9w twTa/+HuAzWs8ZVHbzzNwG8EnN52ApsCvqAEGRYKAG8FgmFW4a8JEEE3+cI1qce8 RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+0p+e0WxFSr DMzNJ7q8NKGueiRjAjfVkbl+PAKIj31+FiEEdgSTaxQwXDsDgXJpQTf5wjWpx7wA APwxAP43wpwxjEyqIxiBiL5jMw/duZ95MHaD62wXzASON2fUjwEA7bvWxzw2uiEN rWQTBsBdQK/KJi7/B+LO3Sl+bZCOYgIWIQTyYHOeP3VTie/C/uZ/WKrLZh1RIAAA gJQBAJ+K7q5YHGEeULYKrETZ5OJX3wGwvX9aOc+qj0cJUZ0kAP9bGh67Gc+MW2KV /a4GJJcl1gn8NcGDz0ihA6pEYK0zDg== =aamH -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima.pgp000064400000000000000000000304601046102023000173270ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVbhrhYJKwYBBAHaRw8BAQdApDGeJWbumY6ZxnF8xYsjU2Bb/WigZd+RuU+F AUkBcxXCwAsEHxYKAH0FgmFW4a4DCwkHCRC4GA+/Y4L5D0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmencVx+F2+jbSKeQe6A9FQAxu6phI16 qde8mghNFTjZDQMVCggCmwECHgEWIQSJx6n7cjanervk8py4GA+/Y4L5DwAA2UkB ALT40u8fCX8BDNpRBTuqXGGxlEqMard3O96vXi32XVv1AQC5w/s+ekj/jMQj6XtM bbd14JXORvBNttC6nBeK+hT2Dc0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFW4a4DCwkHCRC4GA+/Y4L5D0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcC29mSpbeG2glMoCx58yIWtOQruZsRfUp/Mw3C5XIfcwMVCggC mQECmwECHgEWIQSJx6n7cjanervk8py4GA+/Y4L5DwAAX+4BANFvS4MUhpGWshp2 a/2oYyg2X4ts165YrB7Slhr4gKwoAQC2+zUty4B7UTuYdr8vCzwBXGgsXxzOV4Ym Tyu/Jz7sC8LABwQQFgoAeQWCYVbiSgWDCWeaOwOFlngJEMRqQore+7L4RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ62Q2HKe7AMWW4L8HWG5 eIStBVvQ1p5EkKDcE9KjrUAyFiEE6q4S+Y0584vw0bTFxGpCit77svgAAFSHAP9k 7i3tciQp//FdoTqyLZRLMu4vobeb7q7xapsu8S0g2QEA52q9FO0gf0QFtvBXEAdl RTpoXquO+BdbMsf2jRytZw7OMwRhVuGuFgkrBgEEAdpHDwEBB0BcaNSn+RZEw8Ak xWMwvX2CT3KWFzDNFi0JqZS4MLp64sLAvwQYFgoBMQWCYVbhrgkQuBgPv2OC+Q9H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnT4Jbm69vT+rM q1Q7rudKnnLVoBitUX+znf2+u1oVoCYCmwK+oAQZFgoAbwWCYVbhrgkQAeQK1/UC Li5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnL4S3uUNR zzqCLSOAzvgMGN6MZFLocUxnt8Qkbd+O4AsWIQRYDow276egm8TzjwgB5ArX9QIu LgAA0WQBAIXCzWUfyfbmkMRa7bJby7lJATXxAsi3f74j3hHGcLutAQCuPZh7fGRS 0cmUg/N+b3P3uTOxsJL/8cUPJB8gg0OyBRYhBInHqftyNqd6u+TynLgYD79jgvkP AABXhgEAuamSBVrVAdKTgdL4fRO0O5uvHNF3vJQURSrvjJ6HpUQBAPj2Aq9b5WoN YVjlV7eviyEyaWBehqa7Shy+IqYEJVcAxjMEYVbhrxYJKwYBBAHaRw8BAQdALaYn 2T27LyH5CAd39/hvyLUdnaUhKxBWzZsDu2ZZ3qnCwAsEHxYKAH0FgmFW4a8DCwkH CRBqOYrJBR2cqEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdWLIGlEwMyFuSeFKoLkpaEPiQEyg66CeAoiU8yVpMPIgMVCggCmwECHgEWIQRw UHqQWKV/6uGMw85qOYrJBR2cqAAA5PABAOrGya5jbDCCfC0DiJ47NuAErBZwl5Py mV2ngYCb2eIkAQC5ikanrK0KJq65oGgYgCrNJYEETgB6+W2zc0GcJbESB80TPGVs bGVuQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVbhrwMLCQcJEGo5iskFHZyoRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ20FSQSgy89PEszL /tmDEh6If7rebwkR7IWXCRv+GlQIAxUKCAKZAQKbAQIeARYhBHBQepBYpX/q4YzD zmo5iskFHZyoAABcRwEAgnh3qAgPEZNP6IA9+Ve8R2r4dTyqdslZEXvkZ9dlF1QB AO0frKz63dma3mlHpkXIdUgg9Xnccr/hRHW8dkD8L9kIwsAHBBAWCgB5BYJhVuJK BYMJZ5o7A4VkMgkQ9VVB2J8n+ItHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnostzcAKwd5Wx1vfTR4S1V1FPJf3nje0qBjYNWBTl4MAWIQTC +CLxe2jpRoU6Lc/1VUHYnyf4iwAAUmUA/jcdf7ecc9UlyxXuLhuQoW1vr6S9Bl34 AcJ5kmrmTW7tAQCUDt30mODaKM6AuIxqVKlACE1q1zc+BKSz2pka+clmDsLABwQQ FgoAeQWCYVbiSgWDCWeaOwOFMmQJEPbMH4VEwIdNRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7JwpSoT4hO91rELqeNrLhfcBANp2XbeBmis ii5TCIRhFiEE6d+U44n1KfjvaqIj9swfhUTAh00AAJt1AQDtPRdiCNuDnXBRxPof 2iCZdOR+JUYejx2i/qgzvXNcMgD/STFSzcQJhV6QLjWU/QISWXo8E8V8Cy8ZQNpI r0Gz6QjOMwRhVuGvFgkrBgEEAdpHDwEBB0AfP4Tz3zobgB9//171zG9bZrC9CZVl 8h1jO7pLP3BQNMLAvwQYFgoBMQWCYVbhrwkQajmKyQUdnKhHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnBedqa0s4V/iQnbNGU0HO0sQH1XUf afVcAOdz7TUEbj8CmwK+oAQZFgoAbwWCYVbhrwkQFPV8kprGvHBHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnxVm6t4KNhOXpKwpnI9MUj02u Ak8UxC8VPxA3gnpQ9f4WIQSxvyuZqOfYn1xmGjYU9XySmsa8cAAAI7oBALjsU1co R7Wd7V0wOVQ4j7/7iZuHOX6nYCWrZ/I6I/MYAPsGNB3QM0T3ihauZ2tfNrnTFgq6 K96A6P0PqL6L9iZ6AxYhBHBQepBYpX/q4YzDzmo5iskFHZyoAAAlOAEAjCdwvrjv uuLjLpVFnC0fb6Aok22nCkbg+SCmgkWD9PwA/37I6pcLJQVFI78f0MBNoU+Lq3CC SQRq25ioi/gbA5AIxjMEYVbhrhYJKwYBBAHaRw8BAQdA6SxM/N8xKyeRszgKm95d 94JYsvktcNy0g3nXUBKQm6jCwAsEHxYKAH0FgmFW4a4DCwkHCRDEakKK3vuy+EcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeuc6XtoNAKdwPT 6zJSsiUxXfDkQFtwDZNPHBsCBdwyewMVCggCmwECHgEWIQTqrhL5jTnzi/DRtMXE akKK3vuy+AAAsl0A/1ZUOQ5QITzOP4yFsv1GOxkrXbQG+empovfXtfUBXXOtAPsF YB83QDt6LONNHVm+fePJ9ZycVjYFdtERTSQKjm4WAs0TPGFsaWNlQGV4YW1wbGUu b3JnPsLADgQTFgoAgAWCYVbhrgMLCQcJEMRqQore+7L4RxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyXbheoBXioB1QVYqavomCXoa+RSjWW1 aJG/F4XECdibAxUKCAKZAQKbAQIeARYhBOquEvmNOfOL8NG0xcRqQore+7L4AAAD 8QEA4aziXbnbYjYWWHLUagviDOQg8sXcg0aWXymSwG4wir4A/A+7guItntm19lvd TK3PQq/t0hpy/d3dotdH8e70IYcKzjMEYVbhrhYJKwYBBAHaRw8BAQdAOlHgjqE+ YEqtGlvJgGhjZnxPISAE0LsB+QBEztA6zHjCwL8EGBYKATEFgmFW4a4JEMRqQore +7L4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxeCGZEP FuRBZwKzI/3IU3nUD0WxB8pxL4mGVrNiLo9kApsCvqAEGRYKAG8FgmFW4a4JEM9z 2GXM1SbZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyGm /aGv2HagyE9f1QQXkKrKZz+d6PjiKHihqisbBTWZFiEESucngTqJ+wWSo+UGz3PY ZczVJtkAAEyeAP9jJmbna0la/+KRpgu64gVK74Z0cDCnsECJWtzYTnrXSAEA4Htk RQgaNvPp8IP6Q+M1M/9eF23KerGgehlyL9RTuw8WIQTqrhL5jTnzi/DRtMXEakKK 3vuy+AAA59oBALnMsnyYljJ8xLIBslT+22V/tNS9uHeANIrs8ygCdBMKAP94gfY1 Qg37O2w9FNpV0XcOKpTJTLE9KiC76Q3U4avqAMYzBGFW4a8WCSsGAQQB2kcPAQEH QJJc3iRq9+TocM0C1K7nes01XeKACSB0RHOb2mYX5ZG8wsALBB8WCgB9BYJhVuGv AwsJBwkQf1iqy2YdUSBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnUNdcqjgReoPyCGFJJZv4caHjpf31lPPzVhR5Rpjrc7wDFQoIApsBAh4B FiEE8mBznj91U4nvwv7mf1iqy2YdUSAAALOnAP0V5UCvOFkQPl4KvGUPos/S6gGC tOEnzuiDjMVeLNw64gD/QcGRJCFZ1a7MZ1uJUUHqvOx56GOuUcVmjyx9u6FqFgDN EzxoZW5yeUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFW4a8DCwkHCRB/WKrLZh1R IEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc7iFGTw4fy FfDCApJALWtEAZ47+2muA3D6azqOk5ZJxwMVCggCmQECmwECHgEWIQTyYHOeP3VT ie/C/uZ/WKrLZh1RIAAA67cBAMFADDnki7xWK/OOZhepRyq9gk4jpzR96vML+pNE /8OAAQC8LQXbkBQM2qvG78eEFMs4Mc4e+DQppowfypdDzRDPD8LAAwQQFgoAdQWC YVbiSgWDCWeaOwkQajmKyQUdnKhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn5uwefd6uzGLWkfjgNlffJpI5F2nl/CEDmXlnpwyr4t4WIQRw UHqQWKV/6uGMw85qOYrJBR2cqAAAImkA/0GGVmB038E1sLI2EbMZ3JndqwnBhLCx o45/1jKl+jqlAQCruvXP5mZrMODjVUtQ7IC2ULxzdbSdsSoW8O3zfweuDs4zBGFW 4a8WCSsGAQQB2kcPAQEHQP+7H9iKMfMAAlkby7cQI38s8QkqPRJt27QeaYET85IR wsC/BBgWCgExBYJhVuGvCRB/WKrLZh1RIEcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmdcfA1xlLgC4lc/cLcE2v/h7gM1rPGVR288zcBvBJze dgKbAr6gBBkWCgBvBYJhVuGvCRBBN/nCNanHvEcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmftKfntFsRUqwzMzSe6vDShrnokYwI31ZG5fjwC iI99fhYhBHYEk2sUMFw7A4FyaUE3+cI1qce8AAD8MQD+N8KcMYxMqiMYgYi+YzMP 3bmfeTB2g+tsF8wEjjdn1I8BAO271sc8NrohDa1kEwbAXUCvyiYu/wfizt0pfm2Q jmICFiEE8mBznj91U4nvwv7mf1iqy2YdUSAAAICUAQCfiu6uWBxhHlC2CqxE2eTi V98BsL1/WjnPqo9HCVGdJAD/WxoeuxnPjFtilf2uBiSXJdYJ/DXBg89IoQOqRGCt Mw7GMwRhVuGvFgkrBgEEAdpHDwEBB0B/D4WvCQiTAaInZWB+G3WCHP+cqiB0Hmtp V0PQVe53XcLACwQfFgoAfQWCYVbhrwMLCQcJEPbMH4VEwIdNRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7y/wenpgYgFJaqVgOLPzfSsjOnX CFrrmvX9jXwcBuU9AxUKCAKbAQIeARYhBOnflOOJ9Sn472qiI/bMH4VEwIdNAABt 4QEA3Gj11emHwf+jJffFTjQ6E6dkHT9E0UDaN6mB3gHKPSIA/3YLvFCMsZoPINj6 ekQ7B3ZNStR4fixSZzZCTFZtM4EOzRM8Y2Fyb2xAZXhhbXBsZS5vcmc+wsAOBBMW CgCABYJhVuGvAwsJBwkQ9swfhUTAh01HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnl2avyAxrpOWHfvQEo3fMm8w0Fjgid02o8sqBxgntqSoD FQoIApkBApsBAh4BFiEE6d+U44n1KfjvaqIj9swfhUTAh00AAKVRAP90g78im/+0 LE1K9Y8NLwbixkaNGEGw3QmWe8uY6PwS0AEA3rsZxaLaf8NPg/GN8Bx85JOY94IR kEkxq5CAe5YC6gbCwAcEEBYKAHkFgmFW4koFgwlnmjsDhTJkCRC4GA+/Y4L5D0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcWMiJlxdSvT8cy fk0XbJb/iomyL2Gc8Zr7bQoTCWF6pxYhBInHqftyNqd6u+TynLgYD79jgvkPAABo nQEAqq+gNBQh798TBbwQfpB26hzG8nfuQDhNAT39X2RDK88BAI39l3KdTgizfMoY D/SrtR74n7sJj5K1X3iC81UyF2EIzjMEYVbhrxYJKwYBBAHaRw8BAQdAADs8tRHr 5OagoiK4ASpSB67Y2v5SBGqqk4stZ657FpzCwL8EGBYKATEFgmFW4a8JEPbMH4VE wIdNRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ68jzW4s DOWc2V25SjRM2JXIcneamwieOeRea3q7vabaApsCvqAEGRYKAG8FgmFW4a8JEMbj DdFxQx+aRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ93v 6aWy3IdviG4enjhInUc0DPHy/otbEksuWQjXZpDqFiEE/MHBBgaxbtfyVFW1xuMN 0XFDH5oAALJnAQCuwbICo611Y0Mljic7J7LPEUtRJSooT4Q8OxCq9SANFgD/afIn w+t6gd3eWCo7cmc75usxIBlhLmpRchooU5RV1AwWIQTp35TjifUp+O9qoiP2zB+F RMCHTQAADgoA/idW/v1P+BD+3d+YGd1OghZ0qi5jhFTDJIROomwvEh2tAQCJ0dbj /Pf6e+dXj8z01r0mBnLTGD0jt1/8wmn041VyAMYzBGFW4a8WCSsGAQQB2kcPAQEH QNc2197bZGl4d3T43cQDLzcA06wSqSxXxBVwabwJLnFYwsALBB8WCgB9BYJhVuGv AwsJBwkQd+i1S5NQwIJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnX/hYftTNr1GYMT8Ueu3khAWpI5+5AD23ry/EWd9hpuQDFQoIApsBAh4B FiEE2N2niiKXyjw1uTd1d+i1S5NQwIIAAMwTAP0dPiQXja/3T6P7BbdQ9bPDx9Pt H211+mpwf/ciq+B5zAEAiM/bt+LtBTw1x3Ck60n3/OVTqwFNmAEspo55nuOQlAPN FTxmcmFuY2lzQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVbhrwMLCQcJEHfotUuT UMCCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyfPV6B5 eXLapYJrG+p7ooFWjpvNylKR+A2nHMH4sq50AxUKCAKZAQKbAQIeARYhBNjdp4oi l8o8Nbk3dXfotUuTUMCCAAAE8AEAnczRfTZCwnyIfTdKoRA7cbBshVpYJ6/1IeUa zHxalIMBALJ/APTrXcLTI6uOBVDQwy7NZLj615OqSFAYNfdHLrEBwsAHBBAWCgB5 BYJhVuJKBYMJZ5o7A4VkeAkQajmKyQUdnKhHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnEW7isi6YSTQapXFFs3Uo1V8KMPvyvYhAxLs8tNon TU4WIQRwUHqQWKV/6uGMw85qOYrJBR2cqAAAU8IBAK8TpcClv2ereTTb2/opFghU IHs/hFGXo1h5YporG7+qAQCYX82VesNXnjuJ1nhlLHXgNZgrxu8jIbPTu0JTCJKC AMLABwQQFgoAeQWCYVbiSgWDCWeaOwOFyEsJELgYD79jgvkPRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+HzwOYddmBwY7DPB8kiknecYe9y 7ELRgtLeE9CUqOX5FiEEicep+3I2p3q75PKcuBgPv2OC+Q8AAMyYAQDWvJGadKD8 pbFgxXW4R/Fm7YLtsbh6lvJrnwCw+MtKCwEA2PsY3Kansf9lz/I6QDJwZcF7ZZhG z9U5itMU6vpcdwXOMwRhVuGvFgkrBgEEAdpHDwEBB0DV9xSxvsZQF6p2EWhMw7mN ANIUC+EmnaaPy+aiK88pTcLAvwQYFgoBMQWCYVbhrwkQd+i1S5NQwIJHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn76+ePXSyFOzzwjfrvBTY EsecwcZEjeWO+K4nZlGhkh8CmwK+oAQZFgoAbwWCYVbhrwkQcwOHC+NYNHVHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1bSzTIoF7zmjYJy7 pz5qYl6MndPVhTXHoVvjMLO+wNkWIQThMYqmz0A1xVcqk0tzA4cL41g0dQAAC1QB AOV8ZbKFAPhglJPRrxIr9MKU6XWqiXFg2AksVfpGkUzrAP999x4Mf/cLpPZka6Xu iOToxTcmWcMudEyt0Q4otqSpBRYhBNjdp4oil8o8Nbk3dXfotUuTUMCCAACp1wD9 Eva0CRkJVCMSwKHwXot+xwRdE3Uf5/qzgdxGdVTWgQkA/0HoMsYlGtMmjl9vCiaP +0+s7YAbGoWwB4Tz+bEiS3EOxjMEYVbhrxYJKwYBBAHaRw8BAQdA26TEGUWRrHx3 +AUSSm8gDNqYpplXecxxrEkt24SlnUTCwAsEHxYKAH0FgmFW4a8DCwkHCRD1VUHY nyf4i0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme4msA8 NyDnZiYYylXxQnxQihFYognbKK8OE0WT39lITAMVCggCmwECHgEWIQTC+CLxe2jp RoU6Lc/1VUHYnyf4iwAATF0A/1QlTJfFLjCR2qSsEhspGC9F6Qy/nVHu70O1nATW Q6YIAP9z+HoohmBcTKR3SytmdSDI2m3fZtehHaAVlAtZJiJaBM0SPGRhdmVAZXhh bXBsZS5vcmc+wsAOBBMWCgCABYJhVuGvAwsJBwkQ9VVB2J8n+ItHFAAAAAAAHgAg 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 9EdBQqd2NLzHeOeWA6AJMLqi264QA3QC =lFYI -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/local-optima.sh000075500000000000000000000006601046102023000171550ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=local-optima ${@:+"$@"} for U in alice bob carol dave ellen francis georgina henry do key "$U" done certify alice -a 120 -d 150 bob certify bob -a 100 -d 50 carol certify bob -a 50 -d 100 dave certify bob -a 75 -d 200 francis certify carol -a 100 -d 50 ellen certify dave -a 50 -d 100 ellen certify ellen -a 120 -d 100 francis certify ellen -a 30 georgina certify ellen henry finish sequoia-wot-0.11.0/tests/data/multiple-certifications-1/README.md000064400000000000000000000007631046102023000225150ustar 00000000000000This test is similar to the `multiple-userids` tests, but the two certifications are for the same User ID and key. This works if the certifications have the same timestamp. There is also an old certification, which should be ignored. ``` alice 50/2 / | 70/1 \ old and ignored \ | / 120/255 bob | 120/2 carol | 120 dave ``` sequoia-wot-0.11.0/tests/data/multiple-certifications-1/alice-priv.pgp000064400000000000000000000027671046102023000240070ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9219 9414 67AA 737C 6EC1 2079 59A2 CEFC 112C 359A Comment: xVgEYVRZkhYJKwYBBAHaRw8BAQdAN1a+herhFkiiKOG1BJczGzYLQBD/cFgzLsgL 0dhU540AAP9nfWiDE5BrBm8v4wTc1KD8vaPoPRBHdUYOUwI3GuohQg5LwsALBB8W CgB9BYJhVFmSAwsJBwkQWaLO/BEsNZpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn1xL9onMKbScy+hLzMnGLhVBI8clgnY1snMr9AZhVNnID FQoIApsBAh4BFiEEkhmUFGeqc3xuwSB5WaLO/BEsNZoAAPVaAP9Te+vtWd846+T/ slHeLVf97wHooNBbX9Avtc5ZyFuWcwEA0SnF1L1TIhqt4Mz4atqvjsxbrEm1r53M Q2uYD6p64wPNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFUWZIDCwkH CRBZos78ESw1mkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmckBru9d7REwk+XB2bayOH1IwxN5sevypp/JJV8QPnvdQMVCggCmQECmwECHgEW IQSSGZQUZ6pzfG7BIHlZos78ESw1mgAAvwMA/AiZIpOKXpRGAP/EJJdn7D1obxGz /bQuPO5QLlmdZF4wAQDZ5XbjAkH4e3RSLYf3IqGTpAwDv+ZoUHxBGXmj8tmtBcdY BGFUWZIWCSsGAQQB2kcPAQEHQPHDVwFDWfvU5p0kAX22aByK8XOTUVeg3bkVqhhf QFyOAAD6Ayow0w1y5sHlTLXIJpeVlEDAIIQ3kfxhpPtMUkrzg68RWcLAvwQYFgoB MQWCYVRZkgkQWaLO/BEsNZpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnTPSVWrYCwZEr/C0ArDS4c1Hst3oumi8IS74O8cAFOrMCmwK+oAQZ FgoAbwWCYVRZkgkQl77ylcGiFkdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnNAQ/of6dSIUsAL9vq8lnCb6UNaPtv3YdGYzHjqMjEHQWIQRD 5uGnbx9XaGLDgjqXvvKVwaIWRwAAjwoA/irh9m9MUtDaLy1nT9lj1DQyRecYKhbJ RAf7ObhZVs3PAQCDMyHim2QQ4oeFYE0+2Tj9nHnmeQ5cogAzr6JSyHXrARYhBJIZ lBRnqnN8bsEgeVmizvwRLDWaAABiJAD/UdJ15MeCpqayEIjRTHYHZTm2Bml9imWX Ttiex75pz+EA/jtSItF5NqkiP5VUThLm6Xav46oyl6y4zL4c5AEzEnUN =8wlR -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-certifications-1/alice.pgp000064400000000000000000000026241046102023000230210ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 9219 9414 67AA 737C 6EC1 2079 59A2 CEFC 112C 359A Comment: xjMEYVRZkhYJKwYBBAHaRw8BAQdAN1a+herhFkiiKOG1BJczGzYLQBD/cFgzLsgL 0dhU543CwAsEHxYKAH0FgmFUWZIDCwkHCRBZos78ESw1mkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfXEv2icwptJzL6EvMycYuFUEjxyWCd jWycyv0BmFU2cgMVCggCmwECHgEWIQSSGZQUZ6pzfG7BIHlZos78ESw1mgAA9VoA /1N76+1Z3zjr5P+yUd4tV/3vAeig0Ftf0C+1zlnIW5ZzAQDRKcXUvVMiGq3gzPhq 2q+OzFusSbWvncxDa5gPqnrjA80TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVRZkgMLCQcJEFmizvwRLDWaRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZyQGu713tETCT5cHZtrI4fUjDE3mx6/Kmn8klXxA+e91AxUK CAKZAQKbAQIeARYhBJIZlBRnqnN8bsEgeVmizvwRLDWaAAC/AwD8CJkik4pelEYA /8Qkl2fsPWhvEbP9tC487lAuWZ1kXjABANnlduMCQfh7dFIth/cioZOkDAO/5mhQ fEEZeaPy2a0FzjMEYVRZkhYJKwYBBAHaRw8BAQdA8cNXAUNZ+9TmnSQBfbZoHIrx c5NRV6DduRWqGF9AXI7CwL8EGBYKATEFgmFUWZIJEFmizvwRLDWaRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0z0lVq2AsGRK/wtAKw0uHNR 7Ld6LpovCEu+DvHABTqzApsCvqAEGRYKAG8FgmFUWZIJEJe+8pXBohZHRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzQEP6H+nUiFLAC/b6vJ Zwm+lDWj7b92HRmMx46jIxB0FiEEQ+bhp28fV2hiw4I6l77ylcGiFkcAAI8KAP4q 4fZvTFLQ2i8tZ0/ZY9Q0MkXnGCoWyUQH+zm4WVbNzwEAgzMh4ptkEOKHhWBNPtk4 /Zx55nkOXKIAM6+iUsh16wEWIQSSGZQUZ6pzfG7BIHlZos78ESw1mgAAYiQA/1HS deTHgqamshCI0Ux2B2U5tgZpfYpll07Ynse+ac/hAP47UiLReTapIj+VVE4S5ul2 r+OqMpesuMy+HOQBMxJ1DQ== =07Jp -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-certifications-1/bob-priv.pgp000064400000000000000000000027651046102023000234720ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 72CA A0F0 A4A0 20F5 FA20 CD8C B5CC 0447 3AA8 8123 Comment: xVgEYVRZkhYJKwYBBAHaRw8BAQdAtXfZr2jRuxunYBVh22Qnj9W1nTK6oQRuxO9Q akj/LwcAAQCkpscW8n5oqp6fuDfIpuQvSG2bBiMWWhVN1Az1qU/tiw/nwsALBB8W CgB9BYJhVFmSAwsJBwkQtcwERzqogSNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnFFSvgfW7TUvFTj+CS3lyrOM1kDj4bp52iLQBTlq8bmYD FQoIApsBAh4BFiEEcsqg8KSgIPX6IM2MtcwERzqogSMAAEgnAQC2CvKR4fsGSOjF 2yMJ5c7f1HinKM7LJi778JuM0Jig4AEAlnMZZI0XMCIG6ZimsahCOIiBzsbzdVc6 +W2dnf4uLg7NETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhVFmSAwsJBwkQ tcwERzqogSNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn eUbX0RhYBNYTqeQTfWRAurv5WkPDlqq/KwWMuWKIYGYDFQoIApkBApsBAh4BFiEE csqg8KSgIPX6IM2MtcwERzqogSMAAIAeAQCqi9EBJZArNWvqNT8PqG2EEga98CAG v/vl5HX9J6CTlwEAlo7lH6FjW2E3T0grYI74fl2Az2k2D4He/OHeqbFOmQjHWARh VFmSFgkrBgEEAdpHDwEBB0C5GgjNZQeKVX0aVdDAp1jFxvoOAfalFd7u+ttXw9v9 cQAA/0th1lIeJn8bz4RuFPwnR33FkKco4ku/XmMAdL8sBWiqDrTCwL8EGBYKATEF gmFUWZIJELXMBEc6qIEjRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ1xp+9sF4qsMH/q4jbrXQyVGjBctriptZe9Wk1IT/5M0ApsCvqAEGRYK AG8FgmFUWZIJEOG4mlCWYs7ARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ4z2yD0vbOGAHxFpWS5rcGFnRqcBmYDPSQElbv0TkbrQFiEEOsQp XFazJH47sDgV4biaUJZizsAAAAqTAQCJ5aAEuhPVNNE+6ieseD4ug39C0kCjxkSw orAzJCI9SAEAuLAGZi0UQDVrnH4aYQkVbS97FTw33k5voUbJIKn/UAMWIQRyyqDw pKAg9fogzYy1zARHOqiBIwAAOWQA/ibekuxXR61GqBUqLwD6BZ586T/UN2Qop+cN SQUKisMyAQCgPRpmLo6VOGqjWlUZ4aSMKLlMSWIpTp5qgRAqFvr5BQ== =TDgQ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-certifications-1/bob.pgp000064400000000000000000000041531046102023000225050ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVRZkhYJKwYBBAHaRw8BAQdAtXfZr2jRuxunYBVh22Qnj9W1nTK6oQRuxO9Q akj/LwfCwAsEHxYKAH0FgmFUWZIDCwkHCRC1zARHOqiBI0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcUVK+B9btNS8VOP4JLeXKs4zWQOPhu nnaItAFOWrxuZgMVCggCmwECHgEWIQRyyqDwpKAg9fogzYy1zARHOqiBIwAASCcB ALYK8pHh+wZI6MXbIwnlzt/UeKcozssmLvvwm4zQmKDgAQCWcxlkjRcwIgbpmKax qEI4iIHOxvN1Vzr5bZ2d/i4uDs0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFUWZIDCwkHCRC1zARHOqiBI0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmd5RtfRGFgE1hOp5BN9ZEC6u/laQ8OWqr8rBYy5YohgZgMVCggC mQECmwECHgEWIQRyyqDwpKAg9fogzYy1zARHOqiBIwAAgB4BAKqL0QElkCs1a+o1 Pw+obYQSBr3wIAa/++Xkdf0noJOXAQCWjuUfoWNbYTdPSCtgjvh+XYDPaTYPgd78 4d6psU6ZCMLABwQQFgoAeQWCYV2UTwWDCWeaOwOFAjIJEFmizvwRLDWaRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9neCWIkjz9zIdTCUBXu SIaAR+UAa4s8UZVh4DXwfAWKFiEEkhmUFGeqc3xuwSB5WaLO/BEsNZoAAIaJAP9Y QPKJDU3gzM7r7WME/ZCl1va9aqv0Rs0OmL9QBK7dkQD+Mt8+TEDKssaAsGRu2kMw v3mapNfLhMQ9rgAuJnQoKwzCwAcEEBYKAHkFgmFdlE8FgwlnmjsDhQFGCRBZos78 ESw1mkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfD7RpV kKJ0g6VC/tfjtxw0evKlOEO0QPd/Mcz8Y0EXjxYhBJIZlBRnqnN8bsEgeVmizvwR LDWaAAAlPgEAyT0ILdlIixB9q++38lKvnw+LYHGthEnOtMgVcCoks70A/2MYIDS6 olh4iMCnBqOdcbW/TsrfN/yAjfrCKJ1YEx4HwsAHBBAWCgB5BYJhVFnOBYMJZ5o7 A4X/eAkQWaLO/BEsNZpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnE0DEYEAk1J6QVo45cTagVq9XTgtRPEkg4TYvAfq+VqUWIQSSGZQUZ6pz fG7BIHlZos78ESw1mgAAcqIA/1Vm/xEKFdfQBC2KK0U3EfLoG9oLeZkx5yq+WbR5 wiu/AQCqZNuOATJjiZDwU9ZGaHylnSLwEtyXyrZThifkNmyvAc4zBGFUWZIWCSsG AQQB2kcPAQEHQLkaCM1lB4pVfRpV0MCnWMXG+g4B9qUV3u7621fD2/1xwsC/BBgW CgExBYJhVFmSCRC1zARHOqiBI0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdcafvbBeKrDB/6uI2610MlRowXLa4qbWXvVpNSE/+TNAKbAr6g BBkWCgBvBYJhVFmSCRDhuJpQlmLOwEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmeM9sg9L2zhgB8RaVkua3BhZ0anAZmAz0kBJW79E5G60BYh BDrEKVxWsyR+O7A4FeG4mlCWYs7AAAAKkwEAieWgBLoT1TTRPuonrHg+LoN/QtJA o8ZEsKKwMyQiPUgBALiwBmYtFEA1a5x+GmEJFW0vexU8N95Ob6FGySCp/1ADFiEE csqg8KSgIPX6IM2MtcwERzqogSMAADlkAP4m3pLsV0etRqgVKi8A+gWefOk/1Ddk KKfnDUkFCorDMgEAoD0aZi6OlThqo1pVGeGkjCi5TEliKU6eaoEQKhb6+QU= =xwwR -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-certifications-1/carol-priv.pgp000064400000000000000000000027671046102023000240320ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8533 0403 1E7B 0B11 6BBD 0B39 8734 F119 4531 3904 Comment: xVgEYVRZkhYJKwYBBAHaRw8BAQdAzeGwyohsu3DK9/4Xoh4c1KntuR3hVrvm7+u4 fk8yRIIAAQD2OOSfu4vATzupYfQUt5Qi0DPKHeUMr9regK2/sX+/2RK3wsALBB8W CgB9BYJhVFmSAwsJBwkQhzTxGUUxOQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnescKx7i3Fb8Z/qNSLtsGqYS7L3Oq3OQa2NNcFIzg31sD FQoIApsBAh4BFiEEhTMEAx57CxFrvQs5hzTxGUUxOQQAADJdAP9nzK8X/cYAsPVX F3d/VnZZvVvZWCErqb+7+lxGdNX60gEAjpx1gZLbueTi7qV3jZTfKsFjzNMOT52r YLO9xRrJew/NEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFUWZIDCwkH CRCHNPEZRTE5BEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cme5ZjgOiV2XVT+Vazu7pKn7E45D5F/aTmymR8MkEkK/qAMVCggCmQECmwECHgEW IQSFMwQDHnsLEWu9CzmHNPEZRTE5BAAACrwA/3f6ifF91AyYWz4WyuIv538nuBjL ONWBbqtmN/lT2/8qAQDUW0BqZH5L8ed1rjwAKHo/GR3fD/Z88XatgNgbAxI4AMdY BGFUWZIWCSsGAQQB2kcPAQEHQC2+5enH3XorxdmDb48V77yrZhnKLRWVR3mOyaqD e+9uAAD8DkZJfjEkR3I0W8z2fu9Jf1yZEDVRYFftsNy22EN3pbEQBMLAvwQYFgoB MQWCYVRZkgkQhzTxGUUxOQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnjZ116ePLXzLREevQPnl5cqSoBBEFAvrPuuHx2SC53NACmwK+oAQZ FgoAbwWCYVRZkgkQ+2k5OWLVpPtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnfdu6q6LaemNveo26f5Z3KwV8r1gFX+6hAoN/vlj3tgQWIQRA VXLaIldHlU+aeuD7aTk5YtWk+wAA/qsBAJ9TQeVFdCxjn6uQhBwhBGzOOiPuZEf7 ymGKOhMwcZViAP9mW1KhY3wVQjRLTxcaXs4wRqaJ7qZFs0AR3N2LQLTnBRYhBIUz BAMeewsRa70LOYc08RlFMTkEAACGBgEAqqfMIgyZzUxCx/Nej5Mi2Ac2GilSW21P qGbtVw/p4x4A/RMF4bmcDK9y/dxTRZbfx/bnqufIjuEbXQUcANT+JkQO =/Rgq -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-certifications-1/carol.pgp000064400000000000000000000031131046102023000230360ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVRZkhYJKwYBBAHaRw8BAQdAzeGwyohsu3DK9/4Xoh4c1KntuR3hVrvm7+u4 fk8yRILCwAsEHxYKAH0FgmFUWZIDCwkHCRCHNPEZRTE5BEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd6xwrHuLcVvxn+o1Iu2waphLsvc6rc 5BrY01wUjODfWwMVCggCmwECHgEWIQSFMwQDHnsLEWu9CzmHNPEZRTE5BAAAMl0A /2fMrxf9xgCw9VcXd39Wdlm9W9lYISupv7v6XEZ01frSAQCOnHWBktu55OLupXeN lN8qwWPM0w5Pnatgs73FGsl7D80TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVRZkgMLCQcJEIc08RlFMTkERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7lmOA6JXZdVP5VrO7ukqfsTjkPkX9pObKZHwyQSQr+oAxUK CAKZAQKbAQIeARYhBIUzBAMeewsRa70LOYc08RlFMTkEAAAKvAD/d/qJ8X3UDJhb PhbK4i/nfye4GMs41YFuq2Y3+VPb/yoBANRbQGpkfkvx53WuPAAoej8ZHd8P9nzx dq2A2BsDEjgAwsAHBBAWCgB5BYJhVFnOBYMJZ5o7A4UCeAkQtcwERzqogSNHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnIkPSXi9MzNo/0CTf c4ww20VS1Tz8YwJqix7XZSQlLcQWIQRyyqDwpKAg9fogzYy1zARHOqiBIwAAqZ0A /iQZQ9w9XoEwvE8F0J9NuaqHY9Nae9M3yiJ85FBWMOCTAQDBOP+HuK1tZ3wOmM+v SDyF/6hXZgK7aPNTTt5diGY0Bs4zBGFUWZIWCSsGAQQB2kcPAQEHQC2+5enH3Xor xdmDb48V77yrZhnKLRWVR3mOyaqDe+9uwsC/BBgWCgExBYJhVFmSCRCHNPEZRTE5 BEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeNnXXp48tf MtER69A+eXlypKgEEQUC+s+64fHZILnc0AKbAr6gBBkWCgBvBYJhVFmSCRD7aTk5 YtWk+0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd927qr otp6Y296jbp/lncrBXyvWAVf7qECg3++WPe2BBYhBEBVctoiV0eVT5p64PtpOTli 1aT7AAD+qwEAn1NB5UV0LGOfq5CEHCEEbM46I+5kR/vKYYo6EzBxlWIA/2ZbUqFj fBVCNEtPFxpezjBGponupkWzQBHc3YtAtOcFFiEEhTMEAx57CxFrvQs5hzTxGUUx OQQAAIYGAQCqp8wiDJnNTELH816PkyLYBzYaKVJbbU+oZu1XD+njHgD9EwXhuZwM r3L93FNFlt/H9ueq58iO4RtdBRwA1P4mRA4= =mbz+ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-certifications-1/dave-priv.pgp000064400000000000000000000027661046102023000236500ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4C77 ABDB E4F8 55E0 C3C7 A7D5 49F6 B2BF DA83 E424 Comment: xVgEYVRZkhYJKwYBBAHaRw8BAQdASaronNH32qZkDKCqCnmdm+SVWEM0G7b1Cn3F zszQspUAAP9CDOM1Afo6ii5Tr86ySXjZXYgl0Xx8VCaC3Eh7m+HsehC+wsALBB8W CgB9BYJhVFmSAwsJBwkQSfayv9qD5CRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnceMj0YgCKTqBlWqMB6OY/Hcljf6Lb6YN0MJju7cDdusD FQoIApsBAh4BFiEETHer2+T4VeDDx6fVSfayv9qD5CQAAAZ2AP9qXqmmJUcnemI1 fk/4rJ1Zu3DOJ6Y6lLSzKldBATnmEwEAmxcQrHwUqtfmbIkkCsrsmnl8ER72k9UP b78xzuF9KQrNEjxkYXZlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVRZkgMLCQcJ EEn2sr/ag+QkRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4uafvFy+jJ2p9dPl2o3MjdF1Nya3ot3VN6iFYlIP5xUAxUKCAKZAQKbAQIeARYh BEx3q9vk+FXgw8en1Un2sr/ag+QkAABF+gD9Hz15aDiiX8QWXzbqH1uJ7rofDuPP peM4d7tWP5TdzDIBAKWkp2gMIX9dQLxM8AznYuKeoEbVqFp4cJJ9gFTHJHgLx1gE YVRZkhYJKwYBBAHaRw8BAQdApIrMyfz2uPKW2k/+OFjrELXy/wlUyD4oUOxeTtUg nMUAAQDPPuWd7A5kUCpbY28rGVBYtWqzrncEvuEBgGvM1aSYnQ+BwsC/BBgWCgEx BYJhVFmSCRBJ9rK/2oPkJEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmcjlhPwICuhvbRMuBP7r9nPiPGNs2XEDomq0/A513lfiwKbAr6gBBkW CgBvBYJhVFmSCRBZoyRdpIUiGUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmddgigbQ9ryxdezscNo+Nd6DP1pPDhe6Ug1DwGg5v5XmhYhBDI2 B67AFMEqYIgMyVmjJF2khSIZAADkcgD/V3xo9n2nvtQf13TbsB1pCLEBOU8vFQcd jpugwul3ynwA/0dfb6l6bNtKkYCWE+PYHulKXzmq8zCfTtjp2dhSdEwOFiEETHer 2+T4VeDDx6fVSfayv9qD5CQAABSTAPwPdTZvpjWTJ4F7KSQbtz6MB+RoUU/g2RAb 4PwE2mWJ/QD/RD31cjdRR3r21zMaaDnQgMsZ1mI0vAW7AaKvesAeMw0= =Gcuy -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-certifications-1/dave.pgp000064400000000000000000000031031046102023000226540ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVRZkhYJKwYBBAHaRw8BAQdASaronNH32qZkDKCqCnmdm+SVWEM0G7b1Cn3F zszQspXCwAsEHxYKAH0FgmFUWZIDCwkHCRBJ9rK/2oPkJEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdx4yPRiAIpOoGVaowHo5j8dyWN/otv pg3QwmO7twN26wMVCggCmwECHgEWIQRMd6vb5PhV4MPHp9VJ9rK/2oPkJAAABnYA /2peqaYlRyd6YjV+T/isnVm7cM4npjqUtLMqV0EBOeYTAQCbFxCsfBSq1+ZsiSQK yuyaeXwRHvaT1Q9vvzHO4X0pCs0SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJhVFmSAwsJBwkQSfayv9qD5CRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jni5p+8XL6Mnan10+XajcyN0XU3Jrei3dU3qIViUg/nFQDFQoI ApkBApsBAh4BFiEETHer2+T4VeDDx6fVSfayv9qD5CQAAEX6AP0fPXloOKJfxBZf NuofW4nuuh8O48+l4zh3u1Y/lN3MMgEApaSnaAwhf11AvEzwDOdi4p6gRtWoWnhw kn2AVMckeAvCwAMEEBYKAHUFgmFUWc8FgwlnmjsJEIc08RlFMTkERxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2On6CBsF+IxZJPuBaRtrRri ElQu1y/yprknxyHD/rfaFiEEhTMEAx57CxFrvQs5hzTxGUUxOQQAAFwOAQCHi/Ap 3C+pzogIZ+oXmSTNyRp1E9S7GDlJnY+z7xeoAgD/QhldaD54Gg14NP1V+l46Z0gS 74hIttsdquVlaZRjDAzOMwRhVFmSFgkrBgEEAdpHDwEBB0CkiszJ/Pa48pbaT/44 WOsQtfL/CVTIPihQ7F5O1SCcxcLAvwQYFgoBMQWCYVRZkgkQSfayv9qD5CRHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnI5YT8CArob20TLgT +6/Zz4jxjbNlxA6JqtPwOdd5X4sCmwK+oAQZFgoAbwWCYVRZkgkQWaMkXaSFIhlH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnXYIoG0Pa8sXX s7HDaPjXegz9aTw4XulINQ8BoOb+V5oWIQQyNgeuwBTBKmCIDMlZoyRdpIUiGQAA 5HIA/1d8aPZ9p77UH9d027AdaQixATlPLxUHHY6boMLpd8p8AP9HX2+pemzbSpGA lhPj2B7pSl85qvMwn07Y6dnYUnRMDhYhBEx3q9vk+FXgw8en1Un2sr/ag+QkAAAU kwD8D3U2b6Y1kyeBeykkG7c+jAfkaFFP4NkQG+D8BNplif0A/0Q99XI3UUd69tcz Gmg50IDLGdZiNLwFuwGir3rAHjMN =cBvr -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-certifications-1.pgp000064400000000000000000000145021046102023000217420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVRZkhYJKwYBBAHaRw8BAQdAzeGwyohsu3DK9/4Xoh4c1KntuR3hVrvm7+u4 fk8yRILCwAsEHxYKAH0FgmFUWZIDCwkHCRCHNPEZRTE5BEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd6xwrHuLcVvxn+o1Iu2waphLsvc6rc 5BrY01wUjODfWwMVCggCmwECHgEWIQSFMwQDHnsLEWu9CzmHNPEZRTE5BAAAMl0A /2fMrxf9xgCw9VcXd39Wdlm9W9lYISupv7v6XEZ01frSAQCOnHWBktu55OLupXeN lN8qwWPM0w5Pnatgs73FGsl7D80TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVRZkgMLCQcJEIc08RlFMTkERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7lmOA6JXZdVP5VrO7ukqfsTjkPkX9pObKZHwyQSQr+oAxUK CAKZAQKbAQIeARYhBIUzBAMeewsRa70LOYc08RlFMTkEAAAKvAD/d/qJ8X3UDJhb PhbK4i/nfye4GMs41YFuq2Y3+VPb/yoBANRbQGpkfkvx53WuPAAoej8ZHd8P9nzx dq2A2BsDEjgAwsAHBBAWCgB5BYJhVFnOBYMJZ5o7A4UCeAkQtcwERzqogSNHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnIkPSXi9MzNo/0CTf c4ww20VS1Tz8YwJqix7XZSQlLcQWIQRyyqDwpKAg9fogzYy1zARHOqiBIwAAqZ0A /iQZQ9w9XoEwvE8F0J9NuaqHY9Nae9M3yiJ85FBWMOCTAQDBOP+HuK1tZ3wOmM+v SDyF/6hXZgK7aPNTTt5diGY0Bs4zBGFUWZIWCSsGAQQB2kcPAQEHQC2+5enH3Xor xdmDb48V77yrZhnKLRWVR3mOyaqDe+9uwsC/BBgWCgExBYJhVFmSCRCHNPEZRTE5 BEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeNnXXp48tf MtER69A+eXlypKgEEQUC+s+64fHZILnc0AKbAr6gBBkWCgBvBYJhVFmSCRD7aTk5 YtWk+0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd927qr 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 vAW7AaKvesAeMw0= =uKNF -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-certifications-1.sh000075500000000000000000000011751046102023000215730ustar 00000000000000#! /bin/bash set -e set -x faketime -f '-7d' bash -c ' set -e . gen-helper.sh --directory=multiple-certifications-1 ${@:+"$@"} key alice key bob key carol key dave certify alice -a 120 -d 255 bob certify bob -a 120 -d 2 carol certify carol -a 120 dave ' # Override the old alice -> bob certification with two certifications # made at the same time. # We can freeze clock at an absolute timestamp by using: "YYYY-MM-DD # hh:mm:ss" T=$(date "+%Y-%m-%d %H:%M:%S") faketime -f "$T" bash -c ' set -e . gen-helper.sh --directory=multiple-certifications-1 ${@:+"$@"} certify alice -a 50 -d 2 bob certify alice -a 70 -d 1 bob finish ' sequoia-wot-0.11.0/tests/data/multiple-userids-1/README.md000064400000000000000000000020231046102023000211540ustar 00000000000000In this test Alice has certified two different User IDs for Bob. First, we check that at most one of those certifications is used. Then we check that both are considered. Because neither certification is better than the other (one has a larger trust amount; the other has more depth), different scenarios will result in different certifications being selected. Alice has certified two of Bob's User IDs. One with a trust amount of 50 and depth 2 and the other with a trust amount of 70 and depth 1. Using Alice as a root and authenticating Carol, we can get a trust amount of 70. Although Bob - Carol has a capacity of 120, we only use one User ID per key. When authenticating Dave, we get a trust amount of 50. This is because the delegation with a trust amount of 70 does not have enough depth to reach dave so we use the other certification. ``` alice 50/2 / \ 70/1 bob@some.org - bob - bob@other.org | 120/2 carol | 120 dave ``` sequoia-wot-0.11.0/tests/data/multiple-userids-1/alice-priv.pgp000064400000000000000000000027671046102023000224570ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2A2A 4A23 A7EE C119 BC0B 4664 2B38 25DC 02A0 5FEA Comment: xVgEYVw2ohYJKwYBBAHaRw8BAQdARwl9RBrtEqmEMQZUIPLvS+MxpB/Ff0pNlUAF NWVkTykAAQDFBjjEdYDTAc7XhRYpaDM7op5dKhPkJTQI3wwj0pdnyw2YwsALBB8W CgB9BYJhXDaiAwsJBwkQKzgl3AKgX+pHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnto9D1Hi8CK1cyPuJJofGYM0OTk+QggZrd5AtHhLQF5gD FQoIApsBAh4BFiEEKipKI6fuwRm8C0ZkKzgl3AKgX+oAABzmAP99McELRS3IpQA+ +u4GWKJB1Uu07K0oF/tEz8pWwlwmowEAnsndbSaeB89gh/KsrwArxqo+hRW1+ytU amM8M4oTOwPNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFcNqIDCwkH CRArOCXcAqBf6kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcu384BpSI7+RW4Z4Tf24jlGk8i9oh1sG1KWx2fgyXFZQMVCggCmQECmwECHgEW IQQqKkojp+7BGbwLRmQrOCXcAqBf6gAAOP4A/1mxJe3A1TtOS5vaQWPL0I1Jtysz +NVD97QR5bZiBBAkAQCf8Z6fJME9XnWX8TKVo8lhzqubnZkXbzfU/7+yhcvNBcdY BGFcNqIWCSsGAQQB2kcPAQEHQImCfiaNMV+cNBvT8k9cCBogjQI+RpOSkF3Pd5ie 2IW6AAD9FJ01WMTKFS+TT8NiozXhlPNJejhKttrQ9rejo7vi1w8Sb8LAvwQYFgoB MQWCYVw2ogkQKzgl3AKgX+pHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnl0aRFRnEXqXHGToSm3liyMQqZzl1+8fbxfLCLw3ThqYCmwK+oAQZ FgoAbwWCYVw2ogkQJicMXvLdNVZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnCMM6BPe5H0CkcCBtbqm5ma5Vtz7Uoobm4YOhKsX0vRAWIQRO 3nb0hRvpUZs3+tgmJwxe8t01VgAAOpoBAL6Cnv5ZVyAtTAB95zvyR9/KJA0sAUrL 0KclwlaJLFFVAP9MOGsntIFWhrl2yvcMdH4HkHRW2+YeNf1cuJ7mkkrvBxYhBCoq SiOn7sEZvAtGZCs4JdwCoF/qAAAJiAEAkInAg6rcPyQSUM4pHpMBjGf/WXpI6v8z wCQatL+83sUA/2YB2kN8ePublZwZj4+5NqvX8uZyL+lSh7ouOQR5Oj8M =KnEb -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-1/alice.pgp000064400000000000000000000026241046102023000214710ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 2A2A 4A23 A7EE C119 BC0B 4664 2B38 25DC 02A0 5FEA Comment: xjMEYVw2ohYJKwYBBAHaRw8BAQdARwl9RBrtEqmEMQZUIPLvS+MxpB/Ff0pNlUAF NWVkTynCwAsEHxYKAH0FgmFcNqIDCwkHCRArOCXcAqBf6kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme2j0PUeLwIrVzI+4kmh8ZgzQ5OT5CC Bmt3kC0eEtAXmAMVCggCmwECHgEWIQQqKkojp+7BGbwLRmQrOCXcAqBf6gAAHOYA /30xwQtFLcilAD767gZYokHVS7TsrSgX+0TPylbCXCajAQCeyd1tJp4Hz2CH8qyv ACvGqj6FFbX7K1RqYzwzihM7A80TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVw2ogMLCQcJECs4JdwCoF/qRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZy7fzgGlIjv5FbhnhN/biOUaTyL2iHWwbUpbHZ+DJcVlAxUK CAKZAQKbAQIeARYhBCoqSiOn7sEZvAtGZCs4JdwCoF/qAAA4/gD/WbEl7cDVO05L m9pBY8vQjUm3KzP41UP3tBHltmIEECQBAJ/xnp8kwT1edZfxMpWjyWHOq5udmRdv N9T/v7KFy80FzjMEYVw2ohYJKwYBBAHaRw8BAQdAiYJ+Jo0xX5w0G9PyT1wIGiCN Aj5Gk5KQXc93mJ7YhbrCwL8EGBYKATEFgmFcNqIJECs4JdwCoF/qRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5dGkRUZxF6lxxk6Ept5YsjE Kmc5dfvH28Xywi8N04amApsCvqAEGRYKAG8FgmFcNqIJECYnDF7y3TVWRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwjDOgT3uR9ApHAgbW6p uZmuVbc+1KKG5uGDoSrF9L0QFiEETt529IUb6VGbN/rYJicMXvLdNVYAADqaAQC+ gp7+WVcgLUwAfec78kffyiQNLAFKy9CnJcJWiSxRVQD/TDhrJ7SBVoa5dsr3DHR+ B5B0VtvmHjX9XLie5pJK7wcWIQQqKkojp+7BGbwLRmQrOCXcAqBf6gAACYgBAJCJ wIOq3D8kElDOKR6TAYxn/1l6SOr/M8AkGrS/vN7FAP9mAdpDfHj7m5WcGY+PuTar 1/Lmci/pUoe6LjkEeTo/DA== =JiWD -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-1/bob-priv.pgp000064400000000000000000000034641046102023000221370ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0318 2611 B91B 1E7E 20B8 48E8 3DFC 151A BFAD 85D5 Comment: Comment: xVgEYVw2ohYJKwYBBAHaRw8BAQdAxzx/NCaqLvuMc28qRwjmpiylneE3pzVuKdBz iumVYn8AAQDeZQADqaOtNnacvvCjLkwHnAJlc8X0ycv+ncVoVF9e8hDowsALBB8W CgB9BYJhXDaiAwsJBwkQPfwVGr+thdVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnCI7xoX4AEjpSLnKmn6nE4RjHemc3OwaPsZ7U+tNM5PAD FQoIApsBAh4BFiEEAxgmEbkbHn4guEjoPfwVGr+thdUAALD6AQDnm9+wIbY361zF M6eZXZU2tWkjVfbp5/Jbqnc7DXMsuAD9GcSBe7JpxObMMqKXWl4HPzyRm8owV4M5 FwZF09ufPQDNDzxib2JAb3RoZXIub3JnPsLACwQTFgoAfQWCYVw2ogMLCQcJED38 FRq/rYXVRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzuE PxRnqztwq0Iu+x8CTrU3IudWo7YtN1T8Bc19/UdkAxUKCAKbAQIeARYhBAMYJhG5 Gx5+ILhI6D38FRq/rYXVAADyogD6A/xhtJyuIzEopYYSPPMrmnSdHYTcSghpUTjr 9FdQ8DoBAMG9gn9z5VCXVMWjmR1neflVA7QBHpHhDFxJX3pnwQEIzQ48Ym9iQHNv bWUub3JnPsLADgQTFgoAgAWCYVw2ogMLCQcJED38FRq/rYXVRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ907fPdLDfAfnCsA1vP8tygWW5GE 4RSSqARhK79wKw8SAxUKCAKZAQKbAQIeARYhBAMYJhG5Gx5+ILhI6D38FRq/rYXV AABMtgEAunljbXq+hVScjOLv0LQixRdZHNggW/HcX5p1gj2eNDgA/1O1cyn1T/rj zETdDQ0SS2DQPE/fCk+C1tgHkdvk3kgKx1gEYVw2ohYJKwYBBAHaRw8BAQdA5fgw Ys9q5cDkw3kug20pRMUm526fCDj5evrZszNsYtkAAP9sUDZRuhrSh/E246Hvd/U5 t6UzBvuZI+5/J6vL3z60qhJ/wsC/BBgWCgExBYJhXDaiCRA9/BUav62F1UcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme9DuazQ1G3tOCu+Dwo tRWDp8RmeJGCTz733BLDGXMcCgKbAr6gBBkWCgBvBYJhXDaiCRBVcY5KEbKfXkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeH4EXqisc0fvIb vTBKKtneFzyKUb1rpj8vKzilLL+Z/RYhBEjiqqkSwliMwzMvtlVxjkoRsp9eAABU 3wEA+r4ExZhL1iAZQn1n5IMHM/FPsUENThyAr4woxR4uFRgA/3b4ywgp56kx03Qg NHl6kOsM3brwoAnTpytI0wlDSg4JFiEEAxgmEbkbHn4guEjoPfwVGr+thdUAAE56 AQCAEksI+BoYGkkK1FKdVXtLM7cBs9D/eg7nDM+/DTzGMgEA2m5kRO63UrjVh21y KMrQRhatO0XHtuPtd7RBdsNqsAg= =eilp -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-1/bob.pgp000064400000000000000000000042041046102023000211520ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVw2ohYJKwYBBAHaRw8BAQdAxzx/NCaqLvuMc28qRwjmpiylneE3pzVuKdBz iumVYn/CwAsEHxYKAH0FgmFcNqIDCwkHCRA9/BUav62F1UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcIjvGhfgASOlIucqafqcThGMd6Zzc7 Bo+xntT600zk8AMVCggCmwECHgEWIQQDGCYRuRsefiC4SOg9/BUav62F1QAAsPoB AOeb37AhtjfrXMUzp5ldlTa1aSNV9unn8luqdzsNcyy4AP0ZxIF7smnE5swyopda Xgc/PJGbyjBXgzkXBkXT2589AM0PPGJvYkBvdGhlci5vcmc+wsALBBMWCgB9BYJh XDaiAwsJBwkQPfwVGr+thdVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnO4Q/FGerO3CrQi77HwJOtTci51ajti03VPwFzX39R2QDFQoIApsB Ah4BFiEEAxgmEbkbHn4guEjoPfwVGr+thdUAAPKiAPoD/GG0nK4jMSilhhI88yua dJ0dhNxKCGlROOv0V1DwOgEAwb2Cf3PlUJdUxaOZHWd5+VUDtAEekeEMXElfemfB AQjCwAcEEBYKAHkFgmFcNt4FgwlnmjsDhQFGCRArOCXcAqBf6kcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfCVMmQEXBlbBGKZtj9LNGqPtuM lXLG1odCCNYh0MEJzRYhBCoqSiOn7sEZvAtGZCs4JdwCoF/qAADivgEA7brz/nvH lL9L1jOcfrfC5qdatH9Ey8JmHkijLN9d9rIA/046g2kuNPtF2jf434zxAZI278x3 TZYciHsbxAd0pl0JzQ48Ym9iQHNvbWUub3JnPsLADgQTFgoAgAWCYVw2ogMLCQcJ ED38FRq/rYXVRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z907fPdLDfAfnCsA1vP8tygWW5GE4RSSqARhK79wKw8SAxUKCAKZAQKbAQIeARYh BAMYJhG5Gx5+ILhI6D38FRq/rYXVAABMtgEAunljbXq+hVScjOLv0LQixRdZHNgg W/HcX5p1gj2eNDgA/1O1cyn1T/rjzETdDQ0SS2DQPE/fCk+C1tgHkdvk3kgKwsAH BBAWCgB5BYJhXDbeBYMJZ5o7A4UCMgkQKzgl3AKgX+pHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnXhmoB1h8tBYPzUxYyHfjNvYgtDmjeXDy NzfeWIKoDSUWIQQqKkojp+7BGbwLRmQrOCXcAqBf6gAA+vYBANevOX1zMvwYz5ml FI0QvPX38NXd/pdXlAM6jIU3qDAwAP4icpncf7st1ZLtk/m11OcFf6o1rOvMij6W HCHLZStDB84zBGFcNqIWCSsGAQQB2kcPAQEHQOX4MGLPauXA5MN5LoNtKUTFJudu nwg4+Xr62bMzbGLZwsC/BBgWCgExBYJhXDaiCRA9/BUav62F1UcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme9DuazQ1G3tOCu+DwotRWDp8Rm eJGCTz733BLDGXMcCgKbAr6gBBkWCgBvBYJhXDaiCRBVcY5KEbKfXkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeH4EXqisc0fvIbvTBKKtne FzyKUb1rpj8vKzilLL+Z/RYhBEjiqqkSwliMwzMvtlVxjkoRsp9eAABU3wEA+r4E xZhL1iAZQn1n5IMHM/FPsUENThyAr4woxR4uFRgA/3b4ywgp56kx03QgNHl6kOsM 3brwoAnTpytI0wlDSg4JFiEEAxgmEbkbHn4guEjoPfwVGr+thdUAAE56AQCAEksI +BoYGkkK1FKdVXtLM7cBs9D/eg7nDM+/DTzGMgEA2m5kRO63UrjVh21yKMrQRhat O0XHtuPtd7RBdsNqsAg= =wO3e -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-1/carol-priv.pgp000064400000000000000000000027671046102023000225020ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9CA3 6907 B46F E7B6 B9EE 9601 E780 64C1 2B6D 7902 Comment: xVgEYVw2ohYJKwYBBAHaRw8BAQdA+DNDcpX0Nl0oySihAkOJ2YGJ34zSMYbA6Lbq 1WKMzAkAAP48iUCD1dm3c+OIEXl4ujpYZhxrjYzya5xG94e7XdxG8xIHwsALBB8W CgB9BYJhXDaiAwsJBwkQ54BkwStteQJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnjTc2/TQ7sXs9xg3bTbFCM566Io1ayY+iMHugCLjVapUD FQoIApsBAh4BFiEEnKNpB7Rv57a57pYB54BkwStteQIAALEmAPkBGsLA1gIGyoiH sZBoSMlpM8YzXLyycTmrh8wXbvKOMwD+MLDwaK/Lk2iWP2XRYkvjL7t28PRW5Qnt fmbdeYo7LAfNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFcNqIDCwkH CRDngGTBK215AkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfUhcm0SLsYBE2Fo52dDQlwfeR9kewpQ30vU6/Jmt4fiwMVCggCmQECmwECHgEW IQSco2kHtG/ntrnulgHngGTBK215AgAAl9YA/1ZkLO/pwSMpLDoVIF0mwxmdt8dM 4w2OhyC/2YQDz3ucAP9jcN+hyK5VOQSFP2aVgpuOYKdvCY8PBmAORyXrthQMD8dY BGFcNqIWCSsGAQQB2kcPAQEHQFsyt6doYGHPAfDT8o1t4h+jfE4YjDuBL1dCg9SD SBEBAAD+NXGSGBk0QCCpCvnmCVxgrtAfkEq5nkAgXpiKXgqm2kQOLMLAvwQYFgoB MQWCYVw2ogkQ54BkwStteQJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnJkfw7t/i0OgLq7OrweNN1Bl6R4k5Hq6+U8l4KREVKLcCmwK+oAQZ FgoAbwWCYVw2ogkQ0VOhkefqDZlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn5AqaybGveCfZO7Apy9LAnV0tTB4f6b/VgeJXiXc5KnMWIQQV TST19kFQCy0jRXbRU6GR5+oNmQAAyNgBAIQDCVx/z0hDZXNw47jcyoY8UVtDA9e7 Oo7QdIIPbXzEAP9/MRy3ivHBtoqskLALcDwOpK6r36fDEAYfXL6FUSn8AhYhBJyj aQe0b+e2ue6WAeeAZMErbXkCAAD+iQEAwOh/nX9ibmwd74yJqe2XGRPkW/hJnL+h BjA0bUksnVcBAImFwwWV0VVaM7ese03qfeFrCrATp2+BuRjWPB4rIFYC =zGkw -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-1/carol.pgp000064400000000000000000000031131046102023000215060ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVw2ohYJKwYBBAHaRw8BAQdA+DNDcpX0Nl0oySihAkOJ2YGJ34zSMYbA6Lbq 1WKMzAnCwAsEHxYKAH0FgmFcNqIDCwkHCRDngGTBK215AkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeNNzb9NDuxez3GDdtNsUIznroijVrJ j6Iwe6AIuNVqlQMVCggCmwECHgEWIQSco2kHtG/ntrnulgHngGTBK215AgAAsSYA +QEawsDWAgbKiIexkGhIyWkzxjNcvLJxOauHzBdu8o4zAP4wsPBor8uTaJY/ZdFi S+Mvu3bw9FblCe1+Zt15ijssB80TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVw2ogMLCQcJEOeAZMErbXkCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ9SFybRIuxgETYWjnZ0NCXB95H2R7ClDfS9Tr8ma3h+LAxUK CAKZAQKbAQIeARYhBJyjaQe0b+e2ue6WAeeAZMErbXkCAACX1gD/VmQs7+nBIyks OhUgXSbDGZ23x0zjDY6HIL/ZhAPPe5wA/2Nw36HIrlU5BIU/ZpWCm45gp28Jjw8G YA5HJeu2FAwPwsAHBBAWCgB5BYJhXDbeBYMJZ5o7A4UCeAkQPfwVGr+thdVHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn40sJ+Y61+ul0MeFd omlOv4WBRqtOD83x4HZwaOnd1qwWIQQDGCYRuRsefiC4SOg9/BUav62F1QAAWYoB AIB7g3KK+e+K+vOKB+ouzDiQVPSpP5s+Ytgp7HhLb97FAQCz65kD/1cu1OyHi93c XXZuw3vShxHeHFQ4d2n3ykchDc4zBGFcNqIWCSsGAQQB2kcPAQEHQFsyt6doYGHP AfDT8o1t4h+jfE4YjDuBL1dCg9SDSBEBwsC/BBgWCgExBYJhXDaiCRDngGTBK215 AkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcmR/Du3+LQ 6Aurs6vB403UGXpHiTkerr5TyXgpERUotwKbAr6gBBkWCgBvBYJhXDaiCRDRU6GR 5+oNmUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfkCprJ sa94J9k7sCnL0sCdXS1MHh/pv9WB4leJdzkqcxYhBBVNJPX2QVALLSNFdtFToZHn 6g2ZAADI2AEAhAMJXH/PSENlc3DjuNzKhjxRW0MD17s6jtB0gg9tfMQA/38xHLeK 8cG2iqyQsAtwPA6krqvfp8MQBh9cvoVRKfwCFiEEnKNpB7Rv57a57pYB54BkwStt eQIAAP6JAQDA6H+df2JubB3vjImp7ZcZE+Rb+Emcv6EGMDRtSSydVwEAiYXDBZXR VVozt6x7Tep94WsKsBOnb4G5GNY8HisgVgI= =M+gD -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-1/dave-priv.pgp000064400000000000000000000027601046102023000223120ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: C1BC 6794 A6C6 281B 968A 6A41 ACE2 055D 610C EA03 Comment: xVgEYVw2ohYJKwYBBAHaRw8BAQdAPDd3I2+R3bAADmF/2PZ4ajvrV6DQCJ+8T2pi 1t7SMIQAAPwOMV3+MbG400Fsin9IngICROpS4Gb422H99x+eYVoWmhC5wsALBB8W CgB9BYJhXDaiAwsJBwkQrOIFXWEM6gNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnTzaO5kiC1aTGR/umHhGBAeB9K3C9g/DwrCHTc70zpoUD FQoIApsBAh4BFiEEwbxnlKbGKBuWimpBrOIFXWEM6gMAAPgsAQC2LqEey+hz+DX9 JtK35YIfaWylIbP5dSvVUO7XKkJ6UQEA4X5jXJ1M8rh/RVY1w4PkA55lALkuH9ka RqJtgE9hVA3NEDxkYXZlQG90aGVyLm9yZz7CwA4EExYKAIAFgmFcNqIDCwkHCRCs 4gVdYQzqA0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmft JF1q0Qqe5bewFg1l4wI2fPUyIfv/IxbFmafolIh2tAMVCggCmQECmwECHgEWIQTB vGeUpsYoG5aKakGs4gVdYQzqAwAALR0A/1X9kB42usYyXEtATy2FQA9gkUxG/2xK FRJNTlXDAhZ7AQCs//YR8ueq+cJ3yuBDW6pMurwIWf/P/zFUl5NjO6/+AcdYBGFc NqIWCSsGAQQB2kcPAQEHQIBH8lqS9YMknOCIFvqeDYJCi8fi8M8wpTA2bnIVyUCE AAEAjPxR2VRDxLrthntL2odyKahp615pBDgcj70qZ898r7wQq8LAvwQYFgoBMQWC YVw2ogkQrOIFXWEM6gNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnojAw1UgIdtgsJwWmP9ZjsRR+Mf55JfAhV7EaNpsrpKUCmwK+oAQZFgoA bwWCYVw2ogkQwiPBzp6lsq5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnDRHOD3v6rU3Flqiqst+XbnT/xvtlxws89r8rnP4GtCsWIQSMWEFH L87Py22nBS/CI8HOnqWyrgAAq+gBAIuUjXG+MBRlJd7zDiZtQbBT3w78X/LB8esh Irc+NdoOAQDIIxpg1KY+NcvOJ+JZ8d1mPj4HP9q+63Jwcph937CxCxYhBMG8Z5Sm xigblopqQaziBV1hDOoDAACmiwD+IfKLKZB+zDlFSK4s2bYBYetGonsZHKrvUbXN 8q73OaUA/1ttMQqJnl9CvUOumDx67tFMSQ7OxIZ5PizP50EWLc8E =fDMf -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-1/dave.pgp000064400000000000000000000031031046102023000213240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVw2ohYJKwYBBAHaRw8BAQdAPDd3I2+R3bAADmF/2PZ4ajvrV6DQCJ+8T2pi 1t7SMITCwAsEHxYKAH0FgmFcNqIDCwkHCRCs4gVdYQzqA0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdPNo7mSILVpMZH+6YeEYEB4H0rcL2D 8PCsIdNzvTOmhQMVCggCmwECHgEWIQTBvGeUpsYoG5aKakGs4gVdYQzqAwAA+CwB ALYuoR7L6HP4Nf0m0rflgh9pbKUhs/l1K9VQ7tcqQnpRAQDhfmNcnUzyuH9FVjXD g+QDnmUAuS4f2RpGom2AT2FUDc0QPGRhdmVAb3RoZXIub3JnPsLADgQTFgoAgAWC YVw2ogMLCQcJEKziBV1hDOoDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ+0kXWrRCp7lt7AWDWXjAjZ89TIh+/8jFsWZp+iUiHa0AxUKCAKZ AQKbAQIeARYhBMG8Z5SmxigblopqQaziBV1hDOoDAAAtHQD/Vf2QHja6xjJcS0BP LYVAD2CRTEb/bEoVEk1OVcMCFnsBAKz/9hHy56r5wnfK4ENbqky6vAhZ/8//MVSX k2M7r/4BwsADBBAWCgB1BYJhXDbeBYMJZ5o7CRDngGTBK215AkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeYN8US6eODPR7kfvRjoEeW3mtP yt1ds41mtzt5Tr8pXhYhBJyjaQe0b+e2ue6WAeeAZMErbXkCAAAw2AD/UmzUCuml 9LvE6S/7LVacx/3lpmaDba7xNYGKpPoWTHkBAIWqEIB1CFtWsy8v6q1N4CFW4pQ+ AzCwMiPR0k3ZTqsDzjMEYVw2ohYJKwYBBAHaRw8BAQdAgEfyWpL1gySc4IgW+p4N gkKLx+LwzzClMDZuchXJQITCwL8EGBYKATEFgmFcNqIJEKziBV1hDOoDRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6IwMNVICHbYLCcFpj/W Y7EUfjH+eSXwIVexGjabK6SlApsCvqAEGRYKAG8FgmFcNqIJEMIjwc6epbKuRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZw0Rzg97+q1NxZao qrLfl250/8b7ZccLPPa/K5z+BrQrFiEEjFhBRy/Oz8ttpwUvwiPBzp6lsq4AAKvo AQCLlI1xvjAUZSXe8w4mbUGwU98O/F/ywfHrISK3PjXaDgEAyCMaYNSmPjXLzifi WfHdZj4+Bz/avutycHKYfd+wsQsWIQTBvGeUpsYoG5aKakGs4gVdYQzqAwAAposA /iHyiymQfsw5RUiuLNm2AWHrRqJ7GRyq71G1zfKu9zmlAP9bbTEKiZ5fQr1Drpg8 eu7RTEkOzsSGeT4sz+dBFi3PBA== =HQAl -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-1.pgp000064400000000000000000000145261046102023000204200ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVw2ohYJKwYBBAHaRw8BAQdAPDd3I2+R3bAADmF/2PZ4ajvrV6DQCJ+8T2pi 1t7SMITCwAsEHxYKAH0FgmFcNqIDCwkHCRCs4gVdYQzqA0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdPNo7mSILVpMZH+6YeEYEB4H0rcL2D 8PCsIdNzvTOmhQMVCggCmwECHgEWIQTBvGeUpsYoG5aKakGs4gVdYQzqAwAA+CwB ALYuoR7L6HP4Nf0m0rflgh9pbKUhs/l1K9VQ7tcqQnpRAQDhfmNcnUzyuH9FVjXD g+QDnmUAuS4f2RpGom2AT2FUDc0QPGRhdmVAb3RoZXIub3JnPsLADgQTFgoAgAWC YVw2ogMLCQcJEKziBV1hDOoDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ+0kXWrRCp7lt7AWDWXjAjZ89TIh+/8jFsWZp+iUiHa0AxUKCAKZ AQKbAQIeARYhBMG8Z5SmxigblopqQaziBV1hDOoDAAAtHQD/Vf2QHja6xjJcS0BP LYVAD2CRTEb/bEoVEk1OVcMCFnsBAKz/9hHy56r5wnfK4ENbqky6vAhZ/8//MVSX k2M7r/4BwsADBBAWCgB1BYJhXDbeBYMJZ5o7CRDngGTBK215AkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeYN8US6eODPR7kfvRjoEeW3mtP yt1ds41mtzt5Tr8pXhYhBJyjaQe0b+e2ue6WAeeAZMErbXkCAAAw2AD/UmzUCuml 9LvE6S/7LVacx/3lpmaDba7xNYGKpPoWTHkBAIWqEIB1CFtWsy8v6q1N4CFW4pQ+ AzCwMiPR0k3ZTqsDzjMEYVw2ohYJKwYBBAHaRw8BAQdAgEfyWpL1gySc4IgW+p4N gkKLx+LwzzClMDZuchXJQITCwL8EGBYKATEFgmFcNqIJEKziBV1hDOoDRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6IwMNVICHbYLCcFpj/W Y7EUfjH+eSXwIVexGjabK6SlApsCvqAEGRYKAG8FgmFcNqIJEMIjwc6epbKuRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZw0Rzg97+q1NxZao qrLfl250/8b7ZccLPPa/K5z+BrQrFiEEjFhBRy/Oz8ttpwUvwiPBzp6lsq4AAKvo AQCLlI1xvjAUZSXe8w4mbUGwU98O/F/ywfHrISK3PjXaDgEAyCMaYNSmPjXLzifi WfHdZj4+Bz/avutycHKYfd+wsQsWIQTBvGeUpsYoG5aKakGs4gVdYQzqAwAAposA /iHyiymQfsw5RUiuLNm2AWHrRqJ7GRyq71G1zfKu9zmlAP9bbTEKiZ5fQr1Drpg8 eu7RTEkOzsSGeT4sz+dBFi3PBMYzBGFcNqIWCSsGAQQB2kcPAQEHQEcJfUQa7RKp hDEGVCDy70vjMaQfxX9KTZVABTVlZE8pwsALBB8WCgB9BYJhXDaiAwsJBwkQKzgl 3AKgX+pHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnto9D 1Hi8CK1cyPuJJofGYM0OTk+QggZrd5AtHhLQF5gDFQoIApsBAh4BFiEEKipKI6fu wRm8C0ZkKzgl3AKgX+oAABzmAP99McELRS3IpQA++u4GWKJB1Uu07K0oF/tEz8pW wlwmowEAnsndbSaeB89gh/KsrwArxqo+hRW1+ytUamM8M4oTOwPNEzxhbGljZUBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgmFcNqIDCwkHCRArOCXcAqBf6kcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcu384BpSI7+RW4Z4Tf24jl Gk8i9oh1sG1KWx2fgyXFZQMVCggCmQECmwECHgEWIQQqKkojp+7BGbwLRmQrOCXc AqBf6gAAOP4A/1mxJe3A1TtOS5vaQWPL0I1Jtysz+NVD97QR5bZiBBAkAQCf8Z6f JME9XnWX8TKVo8lhzqubnZkXbzfU/7+yhcvNBc4zBGFcNqIWCSsGAQQB2kcPAQEH QImCfiaNMV+cNBvT8k9cCBogjQI+RpOSkF3Pd5ie2IW6wsC/BBgWCgExBYJhXDai CRArOCXcAqBf6kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeXRpEVGcRepccZOhKbeWLIxCpnOXX7x9vF8sIvDdOGpgKbAr6gBBkWCgBvBYJh XDaiCRAmJwxe8t01VkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn 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 6tVijMwJwsALBB8WCgB9BYJhXDaiAwsJBwkQ54BkwStteQJHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnjTc2/TQ7sXs9xg3bTbFCM566Io1a yY+iMHugCLjVapUDFQoIApsBAh4BFiEEnKNpB7Rv57a57pYB54BkwStteQIAALEm APkBGsLA1gIGyoiHsZBoSMlpM8YzXLyycTmrh8wXbvKOMwD+MLDwaK/Lk2iWP2XR YkvjL7t28PRW5QntfmbdeYo7LAfNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYK AIAFgmFcNqIDCwkHCRDngGTBK215AkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmfUhcm0SLsYBE2Fo52dDQlwfeR9kewpQ30vU6/Jmt4fiwMV CggCmQECmwECHgEWIQSco2kHtG/ntrnulgHngGTBK215AgAAl9YA/1ZkLO/pwSMp LDoVIF0mwxmdt8dM4w2OhyC/2YQDz3ucAP9jcN+hyK5VOQSFP2aVgpuOYKdvCY8P BmAORyXrthQMD8LABwQQFgoAeQWCYVw23gWDCWeaOwOFAngJED38FRq/rYXVRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+NLCfmOtfrpdDHh XaJpTr+FgUarTg/N8eB2cGjp3dasFiEEAxgmEbkbHn4guEjoPfwVGr+thdUAAFmK AQCAe4NyivnvivrzigfqLsw4kFT0qT+bPmLYKex4S2/exQEAs+uZA/9XLtTsh4vd 3F12bsN70ocR3hxUOHdp98pHIQ3OMwRhXDaiFgkrBgEEAdpHDwEBB0BbMrenaGBh zwHw0/KNbeIfo3xOGIw7gS9XQoPUg0gRAcLAvwQYFgoBMQWCYVw2ogkQ54BkwStt eQJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnJkfw7t/i 0OgLq7OrweNN1Bl6R4k5Hq6+U8l4KREVKLcCmwK+oAQZFgoAbwWCYVw2ogkQ0VOh kefqDZlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn5Aqa ybGveCfZO7Apy9LAnV0tTB4f6b/VgeJXiXc5KnMWIQQVTST19kFQCy0jRXbRU6GR 5+oNmQAAyNgBAIQDCVx/z0hDZXNw47jcyoY8UVtDA9e7Oo7QdIIPbXzEAP9/MRy3 ivHBtoqskLALcDwOpK6r36fDEAYfXL6FUSn8AhYhBJyjaQe0b+e2ue6WAeeAZMEr bXkCAAD+iQEAwOh/nX9ibmwd74yJqe2XGRPkW/hJnL+hBjA0bUksnVcBAImFwwWV 0VVaM7ese03qfeFrCrATp2+BuRjWPB4rIFYC =tJ73 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-1.sh000075500000000000000000000004571046102023000202450ustar 00000000000000#! /bin/bash set -e . gen-helper.sh --directory=multiple-userids-1 ${@:+"$@"} key alice key bob@some.org bob@other.org key carol key dave@other.org certify alice -a 50 -d 2 bob@some.org certify alice -a 70 -d 1 bob@other.org certify bob -a 120 -d 2 carol certify carol -a 120 dave@other.org finish sequoia-wot-0.11.0/tests/data/multiple-userids-2/README.md000064400000000000000000000011231046102023000211550ustar 00000000000000This test is similar to multiple-userids-1, but it uses regular expressions. Specifically, Alice certifies two different User IDs for Bob. One of them with a depth of 1 and no regular expression, and the other scoped to other.org, but with a higher trust amount and more depth. ``` alice / \ 50/1/* / \ 70/255/@other.org / \ bob@some.org - bob - bob@other.org / \ 120/2 / \ 120 / \ carol frank@other.org 120 / \ 120 dave@other.org ed ``` sequoia-wot-0.11.0/tests/data/multiple-userids-2/alice-priv.pgp000064400000000000000000000027671046102023000224600ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: F1C9 9C40 1983 7703 DD17 C454 40F8 A014 1DF2 78EA Comment: xVgEYVw7LxYJKwYBBAHaRw8BAQdAIyDryhHnCv0cRrufsE4DSgNUzf8h2vguogNv LoNw+BkAAP94ZK/24eeBz8JVBbowBNoJ0+qmhQCOLZyZ1eVfF0BHLxFDwsALBB8W CgB9BYJhXDsvAwsJBwkQQPigFB3yeOpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnmxB5HEYSn77l6MVEza4Rbc+/8Dvdq3e2RzlqmUTv/wYD FQoIApsBAh4BFiEE8cmcQBmDdwPdF8RUQPigFB3yeOoAAI6sAP98ZocWuQSr9cVX eoJ0mj3iQzh4xYgYhY0Bdrv0mSwmpwD+KPe6IKF211V4pRlzGGQSiToH+4RjHbal qHoRQFw+bg7NEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFcOy8DCwkH CRBA+KAUHfJ46kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeq8xoWl7vZiR810aqB4gccy+8YS5JxqLwNm6NOMhJiIQMVCggCmQECmwECHgEW IQTxyZxAGYN3A90XxFRA+KAUHfJ46gAA2lkBANWWWa+krhpbnO+kroq6TdD5/8TP BRsyTN2KX50zaENwAP9z13twXF85KRlNZyJGFK0DwXENdc6pA3bi8VezDRZrBMdY BGFcOy8WCSsGAQQB2kcPAQEHQN+nyXubsOrAyYuxoOe9AOtcC8Yv2mnkt2SHWvSs c32qAAEAj8jNSgFIM7z2NCEFD4bgIT1GwxhydFGq3WHQywCU+HUOpsLAvwQYFgoB MQWCYVw7LwkQQPigFB3yeOpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnKft9/l7cFcVl5LU9S2bPHBGJC/6/otQgI98mg7Wll44CmwK+oAQZ FgoAbwWCYVw7LwkQmCJEeGGwDSBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnxVf0CJU9GquCbCpNnxlCaRMzOHUCQWf6OhyyMFtxqxQWIQRy pqr3TNClqVBV04eYIkR4YbANIAAAMtQBAL0j1Y4israUQl+MoOgb0CGTP3+FLNH8 JDAr/0JJV6IJAQCMQhvo7RWS2k3zxgAEvEUoEfN6qmm4Mv9sW3adztutARYhBPHJ nEAZg3cD3RfEVED4oBQd8njqAACSpAD/Tv74OSAA1bg3+gKZh+fqvV5uA5T8emDU CNn6otclgPUBANG7GEHD6qRVi+YHbbPbiFDx6te9GBCPZaQPMovojEMD =a/pw -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2/alice.pgp000064400000000000000000000026241046102023000214720ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: F1C9 9C40 1983 7703 DD17 C454 40F8 A014 1DF2 78EA Comment: xjMEYVw7LxYJKwYBBAHaRw8BAQdAIyDryhHnCv0cRrufsE4DSgNUzf8h2vguogNv LoNw+BnCwAsEHxYKAH0FgmFcOy8DCwkHCRBA+KAUHfJ46kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmebEHkcRhKfvuXoxUTNrhFtz7/wO92r d7ZHOWqZRO//BgMVCggCmwECHgEWIQTxyZxAGYN3A90XxFRA+KAUHfJ46gAAjqwA /3xmhxa5BKv1xVd6gnSaPeJDOHjFiBiFjQF2u/SZLCanAP4o97ogoXbXVXilGXMY ZBKJOgf7hGMdtqWoehFAXD5uDs0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVw7LwMLCQcJEED4oBQd8njqRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ6rzGhaXu9mJHzXRqoHiBxzL7xhLknGovA2bo04yEmIhAxUK CAKZAQKbAQIeARYhBPHJnEAZg3cD3RfEVED4oBQd8njqAADaWQEA1ZZZr6SuGluc 76SuirpN0Pn/xM8FGzJM3YpfnTNoQ3AA/3PXe3BcXzkpGU1nIkYUrQPBcQ11zqkD duLxV7MNFmsEzjMEYVw7LxYJKwYBBAHaRw8BAQdA36fJe5uw6sDJi7Gg570A61wL xi/aaeS3ZIda9KxzfarCwL8EGBYKATEFgmFcOy8JEED4oBQd8njqRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyn7ff5e3BXFZeS1PUtmzxwR iQv+v6LUICPfJoO1pZeOApsCvqAEGRYKAG8FgmFcOy8JEJgiRHhhsA0gRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8VX9AiVPRqrgmwqTZ8Z QmkTMzh1AkFn+jocsjBbcasUFiEEcqaq90zQpalQVdOHmCJEeGGwDSAAADLUAQC9 I9WOIrK2lEJfjKDoG9Ahkz9/hSzR/CQwK/9CSVeiCQEAjEIb6O0VktpN88YABLxF KBHzeqppuDL/bFt2nc7brQEWIQTxyZxAGYN3A90XxFRA+KAUHfJ46gAAkqQA/07+ +DkgANW4N/oCmYfn6r1ebgOU/Hpg1AjZ+qLXJYD1AQDRuxhBw+qkVYvmB22z24hQ 8erXvRgQj2WkDzKL6IxDAw== =+5Vc -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2/bob-priv.pgp000064400000000000000000000034641046102023000221400ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5528 B9E5 DAFC 519E D2E3 7F03 77B3 32E4 1114 56CB Comment: Comment: xVgEYVw7LxYJKwYBBAHaRw8BAQdAEfjVcN97e33nOlZlcVeqD/Qd1c3JHn0Ixro9 D45D29sAAQCB5xJHVB81B5XmiuACJ4aaaYVfuWeLOnE/XHs48vY33Q6MwsALBB8W CgB9BYJhXDsvAwsJBwkQd7My5BEUVstHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn/1qyPz7uAj3q2sAOEVPez3Tj5CFuw0GoAQe6UZGxl7kD FQoIApsBAh4BFiEEVSi55dr8UZ7S438Dd7My5BEUVssAAOdEAP9SZ8PqVmIIz3Fk I3L9jFIqMCw/RtxkPTrS5gdC1gA9KQD/Wflhh62ks1+kdBW0wj01ct73vrAjNArA QFD7uPsYewbNDzxib2JAb3RoZXIub3JnPsLADgQTFgoAgAWCYVw7LwMLCQcJEHez MuQRFFbLRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8h3 t6sZ5wdpmonMoxh+ayXB2SLS/fNT23yArvw36e3xAxUKCAKZAQKbAQIeARYhBFUo ueXa/FGe0uN/A3ezMuQRFFbLAADWGgEAuusxd/V2VtHnEsz4aPMGb65pFavrY+rc D3Em5g6zEwMA/1hvq78+Q22w1pxqX6HwIttPD3qtxHKKYBnK3KwKIg0MzQ48Ym9i QHNvbWUub3JnPsLACwQTFgoAfQWCYVw7LwMLCQcJEHezMuQRFFbLRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4KNlCyCE+DTnMQ9ObT+OKKv 8I4iiwlamhNOzhayZ+RJAxUKCAKbAQIeARYhBFUoueXa/FGe0uN/A3ezMuQRFFbL AADnUwEAx/aLa1A0ZrgUHq8WAWgiPtE3ru9TVv61h0uSNvK7ryMA/176P+nGiMho +B8J1jLWLr5ddJPmIbf22IQ7a0/45vkAx1gEYVw7LxYJKwYBBAHaRw8BAQdAGrRq 09Hgql1rXIRqLoEma5C89HmyijO7nOdrsOjx/+8AAP9BbpcU/HkATGO4FTz11Hru A4tHls6jPJPKcYpzs+XEmxGRwsC/BBgWCgExBYJhXDsvCRB3szLkERRWy0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcLAkvf08hPKdMkiRfo jsrrg4zT6ZotNJ72GC84fXrXeAKbAr6gBBkWCgBvBYJhXDsvCRDvNfVdASP6R0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcER60eNIrTJE2Y KrcCEjsjxBzG4o3V6Gwx+C5b8j6hLBYhBNbuXidUVr3CXf37Q+819V0BI/pHAABV YQD/YAwfD65awT0RlTxH5rOJPBzxcaGLALq4CRjp9wgYmNUBAPJe+iOa8NjOBR4V rUK6/1Ew7+lUQwT6HE+nNXPEOE8IFiEEVSi55dr8UZ7S438Dd7My5BEUVssAALwx AP9hOuQd/h/tJRcpLk7CHorZJtA3UpCh9PpzGlX1VVuclAD/cB06XMkYO85Dcnp5 uZp7vXfGQv4Mdrf7yuTWo9Erywo= =S+kW -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2/bob.pgp000064400000000000000000000042441046102023000211570ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- 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 =FHWA -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2/carol-priv.pgp000064400000000000000000000027671046102023000225030ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 6F82 9142 8420 AB53 576B AB4B EFF6 477D 3E34 8D71 Comment: xVgEYVw7LxYJKwYBBAHaRw8BAQdAPPNXUiIdOUo5Q8v7ZI1dMKIX4lg2Hly7jAfZ epI4j1IAAPwMwJ2NuZvvuyGS0rqqgRXyPJe9yfYhBuyN7LUDd6eNQxLiwsALBB8W CgB9BYJhXDsvAwsJBwkQ7/ZHfT40jXFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn1F/ZJHvQE7Nw303rG1Ip2kMJWtyrYZpSY871tJgthogD FQoIApsBAh4BFiEEb4KRQoQgq1NXa6tL7/ZHfT40jXEAAPIdAP9QlbcQBeF6/cdw mi1K/NeAXfhLAbpUZOZDfB8zfYiWtgD/X1cRTWFcJuOBVwuFurobGhJKgHS34pGQ TKlWJ9B/EgfNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFcOy8DCwkH CRDv9kd9PjSNcUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cme6gd/D9kOVCbUZ4CJ8WAb9W2tkEUtXsxMuaNL+fAjz7QMVCggCmQECmwECHgEW IQRvgpFChCCrU1drq0vv9kd9PjSNcQAAMX0BAN/wmMExql1jUJ7GeNPhn0p3A7Hf iYvSF0wvYU6RZx6PAP9y+J3r2FLoEC/bx+i657XPhEOg1D/YS8rfQnJk6yBJAcdY BGFcOy8WCSsGAQQB2kcPAQEHQGuZH8gfap4mLSIUBuKZBAlZ7KcRWmAvEKZeSSUS gu/BAAEAlIdMaNwCxGxoNbQlAqtmCME3EMZNB5SNnDdwSHFbYgIMbcLAvwQYFgoB MQWCYVw7LwkQ7/ZHfT40jXFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnkXBf3P7eJJ+sLvrPB0modP9ZqcwrGP4mC9oaFEqiK/gCmwK+oAQZ FgoAbwWCYVw7LwkQ+UG8hD57VgBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnNvMYjrc9iG03yPPEagLgU8qTfd7+1N/UeT7kONbqb0gWIQTk TvowOLZhDN9KT7P5QbyEPntWAAAApBMA/jKglIgkNq29pk/ZUsy2ydx4K4ConGWJ mmlMQljgvhJ4AP4lSYJXNQm5DSFWiH4ohxARu2Av2Oe5mCf6vyNh6MSEDhYhBG+C kUKEIKtTV2urS+/2R30+NI1xAACNpwEAsYBB30OcO2Hi5o8vhO7XkJFA+c/3G/ck 9hxynz+HgGkBAMIAjwJ4Tw0Lwn99nka5WcPWE+8Ebx2mUiGuitDbwWYO =wXB+ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2/carol.pgp000064400000000000000000000031131046102023000215070ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVw7LxYJKwYBBAHaRw8BAQdAPPNXUiIdOUo5Q8v7ZI1dMKIX4lg2Hly7jAfZ epI4j1LCwAsEHxYKAH0FgmFcOy8DCwkHCRDv9kd9PjSNcUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfUX9kke9ATs3DfTesbUinaQwla3Kth mlJjzvW0mC2GiAMVCggCmwECHgEWIQRvgpFChCCrU1drq0vv9kd9PjSNcQAA8h0A /1CVtxAF4Xr9x3CaLUr814Bd+EsBulRk5kN8HzN9iJa2AP9fVxFNYVwm44FXC4W6 uhsaEkqAdLfikZBMqVYn0H8SB80TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVw7LwMLCQcJEO/2R30+NI1xRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7qB38P2Q5UJtRngInxYBv1ba2QRS1ezEy5o0v58CPPtAxUK CAKZAQKbAQIeARYhBG+CkUKEIKtTV2urS+/2R30+NI1xAAAxfQEA3/CYwTGqXWNQ nsZ40+GfSncDsd+Ji9IXTC9hTpFnHo8A/3L4nevYUugQL9vH6Lrntc+EQ6DUP9hL yt9CcmTrIEkBwsAGBBAWCgB5BYJhXDtsBYMJZ5o7A4UCeAkQd7My5BEUVstHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn9HrWZg7VpkIvr7UX 8h5jODPXNGmYqC/MfOC5S1kwnCUWIQRVKLnl2vxRntLjfwN3szLkERRWywAAHS4A 91v6UsRK5rNj9RMPlfx2KMa/7TFfM/A0tX7WvBORm/MBANCeQ8lFyy+Qb7FIfduU 4kvlOPczKKz9ho/IYxFUHQsIzjMEYVw7LxYJKwYBBAHaRw8BAQdAa5kfyB9qniYt IhQG4pkECVnspxFaYC8Qpl5JJRKC78HCwL8EGBYKATEFgmFcOy8JEO/2R30+NI1x RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5FwX9z+3iSf rC76zwdJqHT/WanMKxj+JgvaGhRKoiv4ApsCvqAEGRYKAG8FgmFcOy8JEPlBvIQ+ e1YARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzbzGI63 PYhtN8jzxGoC4FPKk33e/tTf1Hk+5DjW6m9IFiEE5E76MDi2YQzfSk+z+UG8hD57 VgAAAKQTAP4yoJSIJDatvaZP2VLMtsnceCuAqJxliZppTEJY4L4SeAD+JUmCVzUJ uQ0hVoh+KIcQEbtgL9jnuZgn+r8jYejEhA4WIQRvgpFChCCrU1drq0vv9kd9PjSN cQAAjacBALGAQd9DnDth4uaPL4Tu15CRQPnP9xv3JPYccp8/h4BpAQDCAI8CeE8N C8J/fZ5GuVnD1hPvBG8dplIhrorQ28FmDg== =76Cx -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2/dave-priv.pgp000064400000000000000000000027601046102023000223130ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 62C5 7D90 DAD2 53DE A01D 5A86 C738 2FD6 285C 18F0 Comment: xVgEYVw7LxYJKwYBBAHaRw8BAQdAV/tS2uw1x0Pdxo7rh1Olpz0pjJHopsS/ovA/ Xn9WORsAAP4ySwD2xJtL7/nGChI2GE6OIImo7CDHVs4SAvernVaDcA/zwsALBB8W CgB9BYJhXDsvAwsJBwkQxzgv1ihcGPBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JndkeHXkqWdLQf1scTYWce8AdkW/C/SosZ1phhknPvAAsD FQoIApsBAh4BFiEEYsV9kNrSU96gHVqGxzgv1ihcGPAAADWFAQCORCF67zFuoHc1 pcP445w0m0Br28vhK5dE+gztdpHkdAD/cajZ4shmmLZhrKUZGzbWUuuwknT7OmWd CHaUcrhuJgnNEDxkYXZlQG90aGVyLm9yZz7CwA4EExYKAIAFgmFcOy8DCwkHCRDH OC/WKFwY8EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdO osKM0EuwOie6/qnp4Rq8hDBrTDkiFiJZ0byBUrRn9gMVCggCmQECmwECHgEWIQRi xX2Q2tJT3qAdWobHOC/WKFwY8AAAa4kBAKqN8sVPTul7Mr3D8zR2cK40ABq5H1LO IqMQv3VRuYPQAP9m9ENyyMK2q24npwGkbMI82EWrNlPezsR6CX7sOmrGBcdYBGFc Oy8WCSsGAQQB2kcPAQEHQEEF7A6+KRKngK6vzBF2Iw50MAx1dQGyumu7btTdivuo AAEAudi7sBypT0i9jwZtfM8SkB2M0wU1eyx4xTB0SLFHMb4OcsLAvwQYFgoBMQWC YVw7LwkQxzgv1ihcGPBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn75axMa7HNJsYu8jRxRzXXRxVA8fyqWf4KDfDKGHfzZ0CmwK+oAQZFgoA bwWCYVw7LwkQAaxymOHc0mpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnjkeN4irOsvsZ33M5SpqirBe+SZtATHOC25s/lx/lDoIWIQTgtqZV GNqia6+Vwy4BrHKY4dzSagAANzYBAKfXpUGvPl9TXXBp946ARuUl/8X4X4vOR4T9 mZ7KRzQjAQC53jL8bkY+k9IM4dhYN087heFY1HbgaInZGGSiRJDrDxYhBGLFfZDa 0lPeoB1ahsc4L9YoXBjwAAD/ZwD/YYHv0dliB92WdTmp9PLde5SBbcUcZV+d0/lg fICy16MA/i/3t47LYGWcTpoh6b/kABUprb1cluRP8gPi0xH3GLcP =6ITt -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2/dave.pgp000064400000000000000000000031031046102023000213250ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVw7LxYJKwYBBAHaRw8BAQdAV/tS2uw1x0Pdxo7rh1Olpz0pjJHopsS/ovA/ Xn9WORvCwAsEHxYKAH0FgmFcOy8DCwkHCRDHOC/WKFwY8EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd2R4deSpZ0tB/WxxNhZx7wB2Rb8L9K ixnWmGGSc+8ACwMVCggCmwECHgEWIQRixX2Q2tJT3qAdWobHOC/WKFwY8AAANYUB AI5EIXrvMW6gdzWlw/jjnDSbQGvby+Erl0T6DO12keR0AP9xqNniyGaYtmGspRkb NtZS67CSdPs6ZZ0IdpRyuG4mCc0QPGRhdmVAb3RoZXIub3JnPsLADgQTFgoAgAWC YVw7LwMLCQcJEMc4L9YoXBjwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ06iwozQS7A6J7r+qenhGryEMGtMOSIWIlnRvIFStGf2AxUKCAKZ AQKbAQIeARYhBGLFfZDa0lPeoB1ahsc4L9YoXBjwAABriQEAqo3yxU9O6XsyvcPz NHZwrjQAGrkfUs4ioxC/dVG5g9AA/2b0Q3LIwrarbienAaRswjzYRas2U97OxHoJ fuw6asYFwsADBBAWCgB1BYJhXDtsBYMJZ5o7CRDv9kd9PjSNcUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfQ3OYzx9193THfwqtjQrfH6T10 Q8PxZg+4QPpWJFmHshYhBG+CkUKEIKtTV2urS+/2R30+NI1xAAALjAEAg55AGY0j sLh1U+GjtbiP/bg0hMHmI+dmHPkBdaoeUs4BANXfRtomrBOnZi4x1fMtwllxtHiD wnpOQn2vIXdfNjIGzjMEYVw7LxYJKwYBBAHaRw8BAQdAQQXsDr4pEqeArq/MEXYj DnQwDHV1AbK6a7tu1N2K+6jCwL8EGBYKATEFgmFcOy8JEMc4L9YoXBjwRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ++WsTGuxzSbGLvI0cUc 110cVQPH8qln+Cg3wyhh382dApsCvqAEGRYKAG8FgmFcOy8JEAGscpjh3NJqRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ45HjeIqzrL7Gd9z OUqaoqwXvkmbQExzgtubP5cf5Q6CFiEE4LamVRjaomuvlcMuAaxymOHc0moAADc2 AQCn16VBrz5fU11wafeOgEblJf/F+F+LzkeE/Zmeykc0IwEAud4y/G5GPpPSDOHY WDdPO4XhWNR24GiJ2RhkokSQ6w8WIQRixX2Q2tJT3qAdWobHOC/WKFwY8AAA/2cA /2GB79HZYgfdlnU5qfTy3XuUgW3FHGVfndP5YHyAstejAP4v97eOy2BlnE6aIem/ 5AAVKa29XJbkT/ID4tMR9xi3Dw== =5lEw -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2/ed-priv.pgp000064400000000000000000000027601046102023000217640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0E97 4D0A CBA0 C4D8 F51D 7CF6 8F04 8FF8 3B17 3504 Comment: xVgEYVw7MBYJKwYBBAHaRw8BAQdAqapjVNTffFMdwqnvAYRjKA1MUXNJr425iB14 lF/f0hsAAQD03dBUHI+pETykLjcZ+pIdHrMgOlLnz2Lx1AFPwOXzDQ+xwsALBB8W CgB9BYJhXDswAwsJBwkQjwSP+DsXNQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn+iFCJp8aCPHKKpfzQozgBqoLFMism9bpah8XtW57bdYD FQoIApsBAh4BFiEEDpdNCsugxNj1HXz2jwSP+DsXNQQAAG/VAP4hOYTPP3p4ggHL Prs8I05rrhXdLfdqvd8EXzo463ThEgEAkZ59YEv4xEQbBnZQNPfPBp1dLCb9WS83 MAg9LRfNbAnNEDxlZEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFcOzADCwkHCRCP BI/4Oxc1BEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc/ AuhzWxwGYUhK+fE6MAifc2G8djR7o0FbJI17OUYU4wMVCggCmQECmwECHgEWIQQO l00Ky6DE2PUdfPaPBI/4Oxc1BAAAJaAA/3vhsOIIjwtUBlBe9sx0CML0Ch9SgpZM DdC6VzWgP7iRAQD+mok5ZrUYQtbqz7xzEAlC6K768SOFOmVo21rmJDjADMdYBGFc OzAWCSsGAQQB2kcPAQEHQKK2XxyLVReZiqBzQ8Wj8qGK7Y32LDvlomwjzfleTNDs AAD9EeCitpoe+j4rJ/PIE9zZCnbk1n40AX51Viu2c3u0wGkQ7cLAvwQYFgoBMQWC YVw7MAkQjwSP+DsXNQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnrVaaJXyKrI3QBFY/y/SaUe4AQviuxzlLKJk2RTQlEwsCmwK+oAQZFgoA bwWCYVw7MAkQww1cAzSchutHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnk8rl46qMlaLfcvs5hGmh8otYwaMcI5HE0WMHYiEvTFIWIQTIKugV WdfssCaxLd7DDVwDNJyG6wAA6PEBAPxysWnuGWh2BT+X2STuh1Qaqi1Yk3ZkrzSL gYEtZl03AP0WqIvJjY7VhZZWFFzDo43IOvHAzYmCn6uXotxrOdbwChYhBA6XTQrL oMTY9R189o8Ej/g7FzUEAADWcAEA3jpfFhuk6HTygn5Irglns5OUN8Z5KkP57v6V gB+CaTABAN7ZxZ7d2beNJZmNqrSrD+cEzsNOH8H78VHr+ZGJf8gN =p6qi -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2/ed.pgp000064400000000000000000000031031046102023000207760ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVw7MBYJKwYBBAHaRw8BAQdAqapjVNTffFMdwqnvAYRjKA1MUXNJr425iB14 lF/f0hvCwAsEHxYKAH0FgmFcOzADCwkHCRCPBI/4Oxc1BEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf6IUImnxoI8coql/NCjOAGqgsUyKyb 1ulqHxe1bntt1gMVCggCmwECHgEWIQQOl00Ky6DE2PUdfPaPBI/4Oxc1BAAAb9UA /iE5hM8/eniCAcs+uzwjTmuuFd0t92q93wRfOjjrdOESAQCRnn1gS/jERBsGdlA0 988GnV0sJv1ZLzcwCD0tF81sCc0QPGVkQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YVw7MAMLCQcJEI8Ej/g7FzUERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZz8C6HNbHAZhSEr58TowCJ9zYbx2NHujQVskjXs5RhTjAxUKCAKZ AQKbAQIeARYhBA6XTQrLoMTY9R189o8Ej/g7FzUEAAAloAD/e+Gw4giPC1QGUF72 zHQIwvQKH1KClkwN0LpXNaA/uJEBAP6aiTlmtRhC1urPvHMQCULorvrxI4U6ZWjb WuYkOMAMwsADBBAWCgB1BYJhXDtsBYMJZ5o7CRDv9kd9PjSNcUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdrwHNQDBR0ldiQ51T0p+WTxGM3 SMuvs+HX1DYXR9gALhYhBG+CkUKEIKtTV2urS+/2R30+NI1xAAB2GgD/ZXC3g5fl YM486QPBIMVTlTJItw9TNe+8XVUWkw+pPQUBAKDeEqM2OeSa0cuF+na8hslTjcC1 fqekZffW+JkzmBwPzjMEYVw7MBYJKwYBBAHaRw8BAQdAorZfHItVF5mKoHNDxaPy oYrtjfYsO+WibCPN+V5M0OzCwL8EGBYKATEFgmFcOzAJEI8Ej/g7FzUERxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ61WmiV8iqyN0ARWP8v0 mlHuAEL4rsc5SyiZNkU0JRMLApsCvqAEGRYKAG8FgmFcOzAJEMMNXAM0nIbrRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5PK5eOqjJWi33L7 OYRpofKLWMGjHCORxNFjB2IhL0xSFiEEyCroFVnX7LAmsS3eww1cAzSchusAAOjx AQD8crFp7hlodgU/l9kk7odUGqotWJN2ZK80i4GBLWZdNwD9FqiLyY2O1YWWVhRc w6ONyDrxwM2Jgp+rl6LcaznW8AoWIQQOl00Ky6DE2PUdfPaPBI/4Oxc1BAAA1nAB AN46XxYbpOh08oJ+SK4JZ7OTlDfGeSpD+e7+lYAfgmkwAQDe2cWe3dm3jSWZjaq0 qw/nBM7DTh/B+/FR6/mRiX/IDQ== =Jeor -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2/frank-priv.pgp000064400000000000000000000027611046102023000224760ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5BEE 3D41 F85B 2FCB C300 DE4E 18CB 2BDA 6546 5F03 Comment: xVgEYVw7MBYJKwYBBAHaRw8BAQdA+yt28SOCq2jo63TYeOas+vE+bETIXVGOmssT mNuQbBUAAQD7TzqA/RQ/pYBfEA/g3kMsxWgwoWwD136QfpGnOCG9JQ5owsALBB8W CgB9BYJhXDswAwsJBwkQGMsr2mVGXwNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnoBZWZMO7aCnUWSyWDnfljpW6ukDTBBaxvNnd0Y7Av7oD FQoIApsBAh4BFiEEW+49QfhbL8vDAN5OGMsr2mVGXwMAAO3LAP4sS5KSnyGVWvmf wkcDjj+YAss8VLgcTfwhQ1ugzpFE8AEArxWPoa/Wj+6UyBeqJ/7wRf8eeyycXSPB 0ez9Z3o+/QrNETxmcmFua0BvdGhlci5vcmc+wsANBBMWCgCABYJhXDswAwsJBwkQ GMsr2mVGXwNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn EiCj5VKc4hb8D0DMROZLUc57yQLcQYDC4QHYtEPBmU8DFQoIApkBApsBAh4BFiEE W+49QfhbL8vDAN5OGMsr2mVGXwMAAMoyAQDjnNPQMqRlsNwYupX3SLMeRi/SqhU4 00A7lAWvz3uH2AD4k/6oy0BASHnU0dJXjzhlrs6N8FFyPD4geXTGh+vOBMdYBGFc OzAWCSsGAQQB2kcPAQEHQLV76tBiZkD211sOGVWh1D9ho3G4iSvAwuVZxWP5WCWb AAD/aHTA2ZZuOXpL3ooIwWklwces5VgKelYmYN7byZ9qQWkRO8LAvwQYFgoBMQWC YVw7MAkQGMsr2mVGXwNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnjPZJa/kvYm0VIOTm9tAvQ2/pNI1K3DP/BIjGCP+IqIICmwK+oAQZFgoA bwWCYVw7MAkQwBu2KqsHUJxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnbezF+tdPMu0W6l5TpgQsJQp75DfirJBoRvQe9ckNW+0WIQST7h1P gM1rt5gDGIzAG7YqqwdQnAAAbAMBALFBB0kEgD4QMW7aMItCRLaJdHZ439/yxpoh EAvUsNbTAP9hxm+ACfPncqboZXV2Eswbc5FQJKq4S4jjOJkDte6/BBYhBFvuPUH4 Wy/LwwDeThjLK9plRl8DAADChAEArY/ChaIFKKQudJcwecKO6rFJIa+GC/tR5V4K mr7u0MABAKJmv/zGhta8FxN+6wTVn6AQzyWvtCncEFiEWxptQi8A =0Dnd -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2/frank.pgp000064400000000000000000000031031046102023000215070ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVw7MBYJKwYBBAHaRw8BAQdA+yt28SOCq2jo63TYeOas+vE+bETIXVGOmssT mNuQbBXCwAsEHxYKAH0FgmFcOzADCwkHCRAYyyvaZUZfA0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmegFlZkw7toKdRZLJYOd+WOlbq6QNME FrG82d3RjsC/ugMVCggCmwECHgEWIQRb7j1B+Fsvy8MA3k4YyyvaZUZfAwAA7csA /ixLkpKfIZVa+Z/CRwOOP5gCyzxUuBxN/CFDW6DOkUTwAQCvFY+hr9aP7pTIF6on /vBF/x57LJxdI8HR7P1nej79Cs0RPGZyYW5rQG90aGVyLm9yZz7CwA0EExYKAIAF gmFcOzADCwkHCRAYyyvaZUZfA0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcSIKPlUpziFvwPQMxE5ktRznvJAtxBgMLhAdi0Q8GZTwMVCggC mQECmwECHgEWIQRb7j1B+Fsvy8MA3k4YyyvaZUZfAwAAyjIBAOOc09AypGWw3Bi6 lfdIsx5GL9KqFTjTQDuUBa/Pe4fYAPiT/qjLQEBIedTR0lePOGWuzo3wUXI8PiB5 dMaH684EwsADBBAWCgB1BYJhXDtsBYMJZ5o7CRB3szLkERRWy0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmddV3X22bC+UKPZRTUlkV9iXXFL pzsmh5WZwwwhRaq1kxYhBFUoueXa/FGe0uN/A3ezMuQRFFbLAAB4mQD8CR+m8UKN prFOTTzmMx0EbgUtSrxIuoh6TW4HrBcLj08A/0gAGin+xQUwfGTZqTbXC/RtgctU PbfvmrWiH+uSCKMGzjMEYVw7MBYJKwYBBAHaRw8BAQdAtXvq0GJmQPbXWw4ZVaHU P2GjcbiJK8DC5VnFY/lYJZvCwL8EGBYKATEFgmFcOzAJEBjLK9plRl8DRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4z2SWv5L2JtFSDk5vbQ L0Nv6TSNStwz/wSIxgj/iKiCApsCvqAEGRYKAG8FgmFcOzAJEMAbtiqrB1CcRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ23sxfrXTzLtFupe U6YELCUKe+Q34qyQaEb0HvXJDVvtFiEEk+4dT4DNa7eYAxiMwBu2KqsHUJwAAGwD AQCxQQdJBIA+EDFu2jCLQkS2iXR2eN/f8saaIRAL1LDW0wD/YcZvgAnz53Km6GV1 dhLMG3ORUCSquEuI4ziZA7XuvwQWIQRb7j1B+Fsvy8MA3k4YyyvaZUZfAwAAwoQB AK2PwoWiBSikLnSXMHnCjuqxSSGvhgv7UeVeCpq+7tDAAQCiZr/8xobWvBcTfusE 1Z+gEM8lr7Qp3BBYhFsabUIvAA== =4BBS -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2.pgp000064400000000000000000000225311046102023000204140ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVw7LxYJKwYBBAHaRw8BAQdAIyDryhHnCv0cRrufsE4DSgNUzf8h2vguogNv LoNw+BnCwAsEHxYKAH0FgmFcOy8DCwkHCRBA+KAUHfJ46kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmebEHkcRhKfvuXoxUTNrhFtz7/wO92r d7ZHOWqZRO//BgMVCggCmwECHgEWIQTxyZxAGYN3A90XxFRA+KAUHfJ46gAAjqwA /3xmhxa5BKv1xVd6gnSaPeJDOHjFiBiFjQF2u/SZLCanAP4o97ogoXbXVXilGXMY ZBKJOgf7hGMdtqWoehFAXD5uDs0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVw7LwMLCQcJEED4oBQd8njqRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ6rzGhaXu9mJHzXRqoHiBxzL7xhLknGovA2bo04yEmIhAxUK CAKZAQKbAQIeARYhBPHJnEAZg3cD3RfEVED4oBQd8njqAADaWQEA1ZZZr6SuGluc 76SuirpN0Pn/xM8FGzJM3YpfnTNoQ3AA/3PXe3BcXzkpGU1nIkYUrQPBcQ11zqkD duLxV7MNFmsEzjMEYVw7LxYJKwYBBAHaRw8BAQdA36fJe5uw6sDJi7Gg570A61wL xi/aaeS3ZIda9KxzfarCwL8EGBYKATEFgmFcOy8JEED4oBQd8njqRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyn7ff5e3BXFZeS1PUtmzxwR iQv+v6LUICPfJoO1pZeOApsCvqAEGRYKAG8FgmFcOy8JEJgiRHhhsA0gRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8VX9AiVPRqrgmwqTZ8Z QmkTMzh1AkFn+jocsjBbcasUFiEEcqaq90zQpalQVdOHmCJEeGGwDSAAADLUAQC9 I9WOIrK2lEJfjKDoG9Ahkz9/hSzR/CQwK/9CSVeiCQEAjEIb6O0VktpN88YABLxF KBHzeqppuDL/bFt2nc7brQEWIQTxyZxAGYN3A90XxFRA+KAUHfJ46gAAkqQA/07+ +DkgANW4N/oCmYfn6r1ebgOU/Hpg1AjZ+qLXJYD1AQDRuxhBw+qkVYvmB22z24hQ 8erXvRgQj2WkDzKL6IxDA8YzBGFcOy8WCSsGAQQB2kcPAQEHQFf7UtrsNcdD3caO 64dTpac9KYyR6KbEv6LwP15/VjkbwsALBB8WCgB9BYJhXDsvAwsJBwkQxzgv1ihc GPBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JndkeHXkqW dLQf1scTYWce8AdkW/C/SosZ1phhknPvAAsDFQoIApsBAh4BFiEEYsV9kNrSU96g HVqGxzgv1ihcGPAAADWFAQCORCF67zFuoHc1pcP445w0m0Br28vhK5dE+gztdpHk dAD/cajZ4shmmLZhrKUZGzbWUuuwknT7OmWdCHaUcrhuJgnNEDxkYXZlQG90aGVy Lm9yZz7CwA4EExYKAIAFgmFcOy8DCwkHCRDHOC/WKFwY8EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdOosKM0EuwOie6/qnp4Rq8hDBrTDki FiJZ0byBUrRn9gMVCggCmQECmwECHgEWIQRixX2Q2tJT3qAdWobHOC/WKFwY8AAA a4kBAKqN8sVPTul7Mr3D8zR2cK40ABq5H1LOIqMQv3VRuYPQAP9m9ENyyMK2q24n pwGkbMI82EWrNlPezsR6CX7sOmrGBcLAAwQQFgoAdQWCYVw7bAWDCWeaOwkQ7/ZH fT40jXFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn0Nzm M8fdfd0x38KrY0K3x+k9dEPD8WYPuED6ViRZh7IWIQRvgpFChCCrU1drq0vv9kd9 PjSNcQAAC4wBAIOeQBmNI7C4dVPho7W4j/24NITB5iPnZhz5AXWqHlLOAQDV30ba JqwTp2YuMdXzLcJZcbR4g8J6TkJ9ryF3XzYyBs4zBGFcOy8WCSsGAQQB2kcPAQEH QEEF7A6+KRKngK6vzBF2Iw50MAx1dQGyumu7btTdivuowsC/BBgWCgExBYJhXDsv CRDHOC/WKFwY8EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfvlrExrsc0mxi7yNHFHNddHFUDx/KpZ/goN8MoYd/NnQKbAr6gBBkWCgBvBYJh XDsvCRABrHKY4dzSakcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmeOR43iKs6y+xnfczlKmqKsF75Jm0BMc4Lbmz+XH+UOghYhBOC2plUY2qJr r5XDLgGscpjh3NJqAAA3NgEAp9elQa8+X1NdcGn3joBG5SX/xfhfi85HhP2ZnspH NCMBALneMvxuRj6T0gzh2Fg3TzuF4VjUduBoidkYZKJEkOsPFiEEYsV9kNrSU96g HVqGxzgv1ihcGPAAAP9nAP9hge/R2WIH3ZZ1Oan08t17lIFtxRxlX53T+WB8gLLX owD+L/e3jstgZZxOmiHpv+QAFSmtvVyW5E/yA+LTEfcYtw/GMwRhXDsvFgkrBgEE AdpHDwEBB0A881dSIh05SjlDy/tkjV0wohfiWDYeXLuMB9l6kjiPUsLACwQfFgoA fQWCYVw7LwMLCQcJEO/2R30+NI1xRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ9Rf2SR70BOzcN9N6xtSKdpDCVrcq2GaUmPO9bSYLYaIAxUK CAKbAQIeARYhBG+CkUKEIKtTV2urS+/2R30+NI1xAADyHQD/UJW3EAXhev3HcJot SvzXgF34SwG6VGTmQ3wfM32IlrYA/19XEU1hXCbjgVcLhbq6GxoSSoB0t+KRkEyp VifQfxIHzRM8Y2Fyb2xAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhXDsvAwsJBwkQ 7/ZHfT40jXFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn uoHfw/ZDlQm1GeAifFgG/VtrZBFLV7MTLmjS/nwI8+0DFQoIApkBApsBAh4BFiEE b4KRQoQgq1NXa6tL7/ZHfT40jXEAADF9AQDf8JjBMapdY1CexnjT4Z9KdwOx34mL 0hdML2FOkWcejwD/cvid69hS6BAv28fouue1z4RDoNQ/2EvK30JyZOsgSQHCwAYE EBYKAHkFgmFcO2wFgwlnmjsDhQJ4CRB3szLkERRWy0cUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmf0etZmDtWmQi+vtRfyHmM4M9c0aZioL8x8 4LlLWTCcJRYhBFUoueXa/FGe0uN/A3ezMuQRFFbLAAAdLgD3W/pSxErms2P1Ew+V /HYoxr/tMV8z8DS1fta8E5Gb8wEA0J5DyUXLL5BvsUh925TiS+U49zMorP2Gj8hj EVQdCwjOMwRhXDsvFgkrBgEEAdpHDwEBB0BrmR/IH2qeJi0iFAbimQQJWeynEVpg LxCmXkklEoLvwcLAvwQYFgoBMQWCYVw7LwkQ7/ZHfT40jXFHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnkXBf3P7eJJ+sLvrPB0modP9Zqcwr GP4mC9oaFEqiK/gCmwK+oAQZFgoAbwWCYVw7LwkQ+UG8hD57VgBHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnNvMYjrc9iG03yPPEagLgU8qT fd7+1N/UeT7kONbqb0gWIQTkTvowOLZhDN9KT7P5QbyEPntWAAAApBMA/jKglIgk Nq29pk/ZUsy2ydx4K4ConGWJmmlMQljgvhJ4AP4lSYJXNQm5DSFWiH4ohxARu2Av 2Oe5mCf6vyNh6MSEDhYhBG+CkUKEIKtTV2urS+/2R30+NI1xAACNpwEAsYBB30Oc O2Hi5o8vhO7XkJFA+c/3G/ck9hxynz+HgGkBAMIAjwJ4Tw0Lwn99nka5WcPWE+8E bx2mUiGuitDbwWYOxjMEYVw7LxYJKwYBBAHaRw8BAQdAEfjVcN97e33nOlZlcVeq D/Qd1c3JHn0Ixro9D45D29vCwAsEHxYKAH0FgmFcOy8DCwkHCRB3szLkERRWy0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf/WrI/Pu4CPera wA4RU97PdOPkIW7DQagBB7pRkbGXuQMVCggCmwECHgEWIQRVKLnl2vxRntLjfwN3 szLkERRWywAA50QA/1Jnw+pWYgjPcWQjcv2MUiowLD9G3GQ9OtLmB0LWAD0pAP9Z +WGHraSzX6R0FbTCPTVy3ve+sCM0CsBAUPu4+xh7Bs0PPGJvYkBvdGhlci5vcmc+ wsAOBBMWCgCABYJhXDsvAwsJBwkQd7My5BEUVstHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnyHe3qxnnB2maicyjGH5rJcHZItL981PbfICu /Dfp7fEDFQoIApkBApsBAh4BFiEEVSi55dr8UZ7S438Dd7My5BEUVssAANYaAQC6 6zF39XZW0ecSzPho8wZvrmkVq+tj6twPcSbmDrMTAwD/WG+rvz5DbbDWnGpfofAi 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 VaHUP2GjcbiJK8DC5VnFY/lYJZvCwL8EGBYKATEFgmFcOzAJEBjLK9plRl8DRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4z2SWv5L2JtFSDk 5vbQL0Nv6TSNStwz/wSIxgj/iKiCApsCvqAEGRYKAG8FgmFcOzAJEMAbtiqrB1Cc RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ23sxfrXTzLt FupeU6YELCUKe+Q34qyQaEb0HvXJDVvtFiEEk+4dT4DNa7eYAxiMwBu2KqsHUJwA AGwDAQCxQQdJBIA+EDFu2jCLQkS2iXR2eN/f8saaIRAL1LDW0wD/YcZvgAnz53Km 6GV1dhLMG3ORUCSquEuI4ziZA7XuvwQWIQRb7j1B+Fsvy8MA3k4YyyvaZUZfAwAA woQBAK2PwoWiBSikLnSXMHnCjuqxSSGvhgv7UeVeCpq+7tDAAQCiZr/8xobWvBcT fusE1Z+gEM8lr7Qp3BBYhFsabUIvAMYzBGFcOzAWCSsGAQQB2kcPAQEHQKmqY1TU 33xTHcKp7wGEYygNTFFzSa+NuYgdeJRf39IbwsALBB8WCgB9BYJhXDswAwsJBwkQ jwSP+DsXNQRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn +iFCJp8aCPHKKpfzQozgBqoLFMism9bpah8XtW57bdYDFQoIApsBAh4BFiEEDpdN CsugxNj1HXz2jwSP+DsXNQQAAG/VAP4hOYTPP3p4ggHLPrs8I05rrhXdLfdqvd8E Xzo463ThEgEAkZ59YEv4xEQbBnZQNPfPBp1dLCb9WS83MAg9LRfNbAnNEDxlZEBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgmFcOzADCwkHCRCPBI/4Oxc1BEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc/AuhzWxwGYUhK+fE6MAif c2G8djR7o0FbJI17OUYU4wMVCggCmQECmwECHgEWIQQOl00Ky6DE2PUdfPaPBI/4 Oxc1BAAAJaAA/3vhsOIIjwtUBlBe9sx0CML0Ch9SgpZMDdC6VzWgP7iRAQD+mok5 ZrUYQtbqz7xzEAlC6K768SOFOmVo21rmJDjADMLAAwQQFgoAdQWCYVw7bAWDCWea OwkQ7/ZHfT40jXFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jna8BzUAwUdJXYkOdU9Kflk8RjN0jLr7Ph19Q2F0fYAC4WIQRvgpFChCCrU1dr q0vv9kd9PjSNcQAAdhoA/2Vwt4OX5WDOPOkDwSDFU5UySLcPUzXvvF1VFpMPqT0F AQCg3hKjNjnkmtHLhfp2vIbJU43AtX6npGX31viZM5gcD84zBGFcOzAWCSsGAQQB 2kcPAQEHQKK2XxyLVReZiqBzQ8Wj8qGK7Y32LDvlomwjzfleTNDswsC/BBgWCgEx BYJhXDswCRCPBI/4Oxc1BEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmetVpolfIqsjdAEVj/L9JpR7gBC+K7HOUsomTZFNCUTCwKbAr6gBBkW CgBvBYJhXDswCRDDDVwDNJyG60cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeTyuXjqoyVot9y+zmEaaHyi1jBoxwjkcTRYwdiIS9MUhYhBMgq 6BVZ1+ywJrEt3sMNXAM0nIbrAADo8QEA/HKxae4ZaHYFP5fZJO6HVBqqLViTdmSv NIuBgS1mXTcA/Raoi8mNjtWFllYUXMOjjcg68cDNiYKfq5ei3Gs51vAKFiEEDpdN CsugxNj1HXz2jwSP+DsXNQQAANZwAQDeOl8WG6TodPKCfkiuCWezk5Q3xnkqQ/nu /pWAH4JpMAEA3tnFnt3Zt40lmY2qtKsP5wTOw04fwfvxUev5kYl/yA0= =bvGd -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-2.sh000075500000000000000000000006621046102023000202440ustar 00000000000000#! /bin/bash set -e . gen-helper.sh --directory=multiple-userids-2 ${@:+"$@"} key alice key bob@some.org bob@other.org key carol key dave@other.org key ed@example.org key frank@other.org certify alice -a 50 -d 1 bob@some.org certify alice -a 70 -d 255 --domain other.org bob@other.org certify bob -a 120 -d 2 carol certify bob -a 120 frank@other.org certify carol -a 120 dave@other.org certify carol -a 120 ed@example.org finish sequoia-wot-0.11.0/tests/data/multiple-userids-3/README.md000064400000000000000000000011561046102023000211640ustar 00000000000000``` a 40/2 / \ 30/3 \ 10/255 bob@some.org - b - bob@other.org bob@third.org 20/1 / \ 120/2 c d | | 120/1 120 | e \ / 120 f ``` The first time back propagation is run, the algorithm will find the path a - b - c - f (b prefers c - f to d - e - f, because the former is shorter). The second time it is run, it will find a - b - d - e - f. The path's trust amount will be 10, because we suppress 20 between a and b, and we can't use the bob@some.org certification as it doesn't not have enough depth. sequoia-wot-0.11.0/tests/data/multiple-userids-3/alice-priv.pgp000064400000000000000000000027671046102023000224610ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: DA3C FC60 BD4B 8835 702A 6678 2C7A 4319 46C1 2DF7 Comment: xVgEYXpcuRYJKwYBBAHaRw8BAQdAtHJrF2nXzFQZrnxx1KFY7WE6NCs6NdxlCkjd mlXewWkAAQCzxgpywEGT0jTUhnPb5yNPlzbzrg4LA4hn4WgVJ2Dqkg9rwsAKBB8W CgB9BYJhely5AwsJBwkQLHpDGUbBLfdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn++n9OqdPPp9jSzgXojn/sDNP4aBFegXIdXy6gDcvJfgD FQoIApsBAh4BFiEE2jz8YL1LiDVwKmZ4LHpDGUbBLfcAACYuAPjN9bnk2p0fAlW5 P2keoEEeOc2y/m3YJbYfcWMX9OwXAQCY3RvBV06LErIqiaoR02bwM4rXgLnQ+tRG eIANtSELAM0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYXpcuQMLCQcJ ECx6QxlGwS33RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z3WdWQigLVC1qV0CofCGyF4oamEjFlf5B9ZBTKUAtDmBAxUKCAKZAQKbAQIeARYh BNo8/GC9S4g1cCpmeCx6QxlGwS33AADMnAEA7R+EZDoP1oD9Nygj1Gs/OHlzJkrz iArP2N7gV3Z9r24BAIdlnJiBGKxwBDPAVultaI2kSSjUJhY4NTKD0/jSG+0Ex1gE YXpcuRYJKwYBBAHaRw8BAQdAg4qEBCEXkoQ98aCXHVY8ImdCxcpW2uwFcVxJWeZV jHAAAP4voEyGWZFIENCxv6r0A+FZ3CZ2sv/JrH2Vh4GfvN5U4hMjwsC/BBgWCgEx BYJhely5CRAsekMZRsEt90cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmco+gRkqOGwIYJI7HetZl9aHeK33tnicdgh04qRZYENdQKbAr6gBBkW CgBvBYJhely5CRC1uaVE8WFDeUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmcXduMa0mL8RXxAzg12N7Mr2iT68b27YvSptfUdrRZifxYhBGHE gGJAfvDZ+b1gALW5pUTxYUN5AAA04AEAv9arhngDskBZquv/qnjF2Wj3YZwrY2Yn I0qAflhx0ykBAL79YhMd/zGZwZwhj6WIOgO0Lvwecrz/sNefiv58Uv4OFiEE2jz8 YL1LiDVwKmZ4LHpDGUbBLfcAAN8rAPoC9KNtKaBT0sAxibv3ajwqVkqy7wOxWd8v u4Y92PjnmQD+K4k3jG6zNvLdGwaCWDTju4HB4aYUj/FuuHONaKO0HQo= =uUvF -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3/alice.pgp000064400000000000000000000026201046102023000214670ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: DA3C FC60 BD4B 8835 702A 6678 2C7A 4319 46C1 2DF7 Comment: xjMEYXpcuRYJKwYBBAHaRw8BAQdAtHJrF2nXzFQZrnxx1KFY7WE6NCs6NdxlCkjd mlXewWnCwAoEHxYKAH0FgmF6XLkDCwkHCRAsekMZRsEt90cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf76f06p08+n2NLOBeiOf+wM0/hoEV6 Bch1fLqANy8l+AMVCggCmwECHgEWIQTaPPxgvUuINXAqZngsekMZRsEt9wAAJi4A +M31ueTanR8CVbk/aR6gQR45zbL+bdglth9xYxf07BcBAJjdG8FXTosSsiqJqhHT ZvAziteAudD61EZ4gA21IQsAzRM8YWxpY2VAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJhely5AwsJBwkQLHpDGUbBLfdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JndZ1ZCKAtULWpXQKh8IbIXihqYSMWV/kH1kFMpQC0OYEDFQoI ApkBApsBAh4BFiEE2jz8YL1LiDVwKmZ4LHpDGUbBLfcAAMycAQDtH4RkOg/WgP03 KCPUaz84eXMmSvOICs/Y3uBXdn2vbgEAh2WcmIEYrHAEM8BW6W1ojaRJKNQmFjg1 MoPT+NIb7QTOMwRhely5FgkrBgEEAdpHDwEBB0CDioQEIReShD3xoJcdVjwiZ0LF ylba7AVxXElZ5lWMcMLAvwQYFgoBMQWCYXpcuQkQLHpDGUbBLfdHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnKPoEZKjhsCGCSOx3rWZfWh3i t97Z4nHYIdOKkWWBDXUCmwK+oAQZFgoAbwWCYXpcuQkQtbmlRPFhQ3lHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnF3bjGtJi/EV8QM4Ndjez K9ok+vG9u2L0qbX1Ha0WYn8WIQRhxIBiQH7w2fm9YAC1uaVE8WFDeQAANOABAL/W q4Z4A7JAWarr/6p4xdlo92GcK2NmJyNKgH5YcdMpAQC+/WITHf8xmcGcIY+liDoD tC78HnK8/7DXn4r+fFL+DhYhBNo8/GC9S4g1cCpmeCx6QxlGwS33AADfKwD6AvSj bSmgU9LAMYm792o8KlZKsu8DsVnfL7uGPdj455kA/iuJN4xuszby3RsGglg047uB weGmFI/xbrhzjWijtB0K =YrP1 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3/bob-priv.pgp000064400000000000000000000041721046102023000221360ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 28C1 0870 7090 FCDF F630 D1E1 41FB 02F0 E397 D55E Comment: Comment: Comment: xVgEYXpcuRYJKwYBBAHaRw8BAQdA+xtv5qGGtjEMcSEBVvIHAPVxgaq9Hht4rCpZ Uqnp6CIAAP4lrPvAK8orDFI88HAxeYucJ6Gkd6mHwRgTjjzcZxi9/xBVwsALBB8W CgB9BYJhely5AwsJBwkQQfsC8OOX1V5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnZ0Tt+TgGkXw/XbtZhZ0X488hKep5EZDfLBHDtCLXYucD FQoIApsBAh4BFiEEKMEIcHCQ/N/2MNHhQfsC8OOX1V4AAAJiAP9dUByUSEHNAWqN w/UTl8MSz1aIEaooA3tD3RBXLl1QuAD+Ja4aUPrpUYYzBbJLz0JPk5lLV0PXqz+d Xlvw6bLpSwLNDzxib2JAb3RoZXIub3JnPsLACwQTFgoAfQWCYXpcuQMLCQcJEEH7 AvDjl9VeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1Em Rqbs/zejngU6afk5OMMGtCG7ljpfU8epet2VN7GVAxUKCAKbAQIeARYhBCjBCHBw kPzf9jDR4UH7AvDjl9VeAABLqgD/b1o5L1vpztmADyOxGqlu3aEapQdNticBvBc3 c4BXoF8BAMRFq4/9HSmY3d+U2SUpxuFXGPwCmUtjEt3UStb8EUkOzQ48Ym9iQHNv bWUub3JnPsLADgQTFgoAgAWCYXpcuQMLCQcJEEH7AvDjl9VeRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZz8qQO24CG7rgjzJkfUmaoCOisB4 JmiXfxTsm4FUxzMFAxUKCAKZAQKbAQIeARYhBCjBCHBwkPzf9jDR4UH7AvDjl9Ve AAC7OgD+Le9woDmL8XTz6CsDwSzdZQk0x1VO8+NZ7MKZFUj0QzIA/0EzoH4RhY1C f+LAHeKoo6dH4O8jvm9Aw0jwsJBNoYoPzQ88Ym9iQHRoaXJkLm9yZz7CwAsEExYK AH0FgmF6XLkDCwkHCRBB+wLw45fVXkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmcq1h4bBrYfjzWvSxYsUBuE4PzgVXqpw6HjIInJ5IfBHAMV CggCmwECHgEWIQQowQhwcJD83/Yw0eFB+wLw45fVXgAAkA8A/3JZHr7UuyupfK3W NbVOHuvx1ZCtMWwLl+ZvL0YCrpM0AQCDFFfput/VbIOhnSVbG7VMdRD1vLmvF7pK eaxVa2FaDcdYBGF6XLkWCSsGAQQB2kcPAQEHQHwYtlCU4ERmswS5H3TTZ7QmoL69 YktMtI6/itEyLtL8AAEA/w/7yhTYW8SN3UVN2PCRMLdKj7LW85xfEEV+VSELM8cQ uMLAvwQYFgoBMQWCYXpcuQkQQfsC8OOX1V5HFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JntgSdMZHSJPuwRUTulDErtAujNng3AwMIfBs4bTN7 q34CmwK+oAQZFgoAbwWCYXpcuQkQVzOm9+rpetVHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnGQPSh2JRvhj6R+ycHWHIvyNnMkhueTqyXbCH h7Vz0BMWIQR2MP48bvHseKCcn8pXM6b36ul61QAA3cMBAKS9GYykmBQEXoErA2DG 8Dx4Kpt/xCkCnjTRGB68p3EIAPwNAENNXCnIZ/0Q83H9MKWsvquKtaCd9FtFtA9h qmfRAxYhBCjBCHBwkPzf9jDR4UH7AvDjl9VeAAApQwEAx40DY3SzrYOq/2z+l4c0 55xyGjRS+4Ep48QDA57jEbQBAKOIWxdVQMqJ7KAPwx9kiITB99LLGdCmNGJXqk+g zg4D =uQLX -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3/bob.pgp000064400000000000000000000046601046102023000211620ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYXpcuRYJKwYBBAHaRw8BAQdA+xtv5qGGtjEMcSEBVvIHAPVxgaq9Hht4rCpZ Uqnp6CLCwAsEHxYKAH0FgmF6XLkDCwkHCRBB+wLw45fVXkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdnRO35OAaRfD9du1mFnRfjzyEp6nkR kN8sEcO0Itdi5wMVCggCmwECHgEWIQQowQhwcJD83/Yw0eFB+wLw45fVXgAAAmIA /11QHJRIQc0Bao3D9ROXwxLPVogRqigDe0PdEFcuXVC4AP4lrhpQ+ulRhjMFskvP Qk+TmUtXQ9erP51eW/DpsulLAs0PPGJvYkBvdGhlci5vcmc+wsALBBMWCgB9BYJh ely5AwsJBwkQQfsC8OOX1V5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnUSZGpuz/N6OeBTpp+Tk4wwa0IbuWOl9Tx6l63ZU3sZUDFQoIApsB Ah4BFiEEKMEIcHCQ/N/2MNHhQfsC8OOX1V4AAEuqAP9vWjkvW+nO2YAPI7EaqW7d oRqlB022JwG8FzdzgFegXwEAxEWrj/0dKZjd35TZJSnG4VcY/AKZS2MS3dRK1vwR SQ7CwAcEEBYKAHkFgmF6XPUFgwlnmjsDhQMeCRAsekMZRsEt90cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc/PCNr0Miq7TDUALj0/dQ6Q+c6 zNhOLtV3c5nk4GXyMxYhBNo8/GC9S4g1cCpmeCx6QxlGwS33AADEaQEAxYKjB++N 2JvnJJ7AyhTVOo19EgMe5vLf8VEr++2ZeooBALJLox61gATzbShiiiYeJxUTyPKn bEKIWxlhSB/H3KEIzQ48Ym9iQHNvbWUub3JnPsLADgQTFgoAgAWCYXpcuQMLCQcJ EEH7AvDjl9VeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zz8qQO24CG7rgjzJkfUmaoCOisB4JmiXfxTsm4FUxzMFAxUKCAKZAQKbAQIeARYh BCjBCHBwkPzf9jDR4UH7AvDjl9VeAAC7OgD+Le9woDmL8XTz6CsDwSzdZQk0x1VO 8+NZ7MKZFUj0QzIA/0EzoH4RhY1Cf+LAHeKoo6dH4O8jvm9Aw0jwsJBNoYoPwsAH BBAWCgB5BYJhelz1BYMJZ5o7A4UCKAkQLHpDGUbBLfdHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JncacyJgqWVT71AqiOtgNnCPXk/LLZu+av YwL6phEgJHMWIQTaPPxgvUuINXAqZngsekMZRsEt9wAAVdkBAPur4i0cu5pCC3FB LTRLM9fSEIBNf0rB/U/zIZ6UV5aTAQDDK1jVdyKZP97PacP/CLMx2DILtxPjMW2c D8KjSSSrD80PPGJvYkB0aGlyZC5vcmc+wsALBBMWCgB9BYJhely5AwsJBwkQQfsC 8OOX1V5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnKtYe Gwa2H481r0sWLFAbhOD84FV6qcOh4yCJyeSHwRwDFQoIApsBAh4BFiEEKMEIcHCQ /N/2MNHhQfsC8OOX1V4AAJAPAP9yWR6+1LsrqXyt1jW1Th7r8dWQrTFsC5fmby9G Aq6TNAEAgxRX6brf1WyDoZ0lWxu1THUQ9by5rxe6SnmsVWthWg3OMwRhely5Fgkr BgEEAdpHDwEBB0B8GLZQlOBEZrMEuR9002e0JqC+vWJLTLSOv4rRMi7S/MLAvwQY FgoBMQWCYXpcuQkQQfsC8OOX1V5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JntgSdMZHSJPuwRUTulDErtAujNng3AwMIfBs4bTN7q34CmwK+ oAQZFgoAbwWCYXpcuQkQVzOm9+rpetVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnGQPSh2JRvhj6R+ycHWHIvyNnMkhueTqyXbCHh7Vz0BMW IQR2MP48bvHseKCcn8pXM6b36ul61QAA3cMBAKS9GYykmBQEXoErA2DG8Dx4Kpt/ xCkCnjTRGB68p3EIAPwNAENNXCnIZ/0Q83H9MKWsvquKtaCd9FtFtA9hqmfRAxYh BCjBCHBwkPzf9jDR4UH7AvDjl9VeAAApQwEAx40DY3SzrYOq/2z+l4c055xyGjRS +4Ep48QDA57jEbQBAKOIWxdVQMqJ7KAPwx9kiITB99LLGdCmNGJXqk+gzg4D =zYnh -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3/carol-priv.pgp000064400000000000000000000027671046102023000225040ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 9FB1 D2F4 1AB5 C478 378E 728C 8DD5 A5A4 34EE AAB8 Comment: xVgEYXpcuRYJKwYBBAHaRw8BAQdALrYIzDkiDYblAU9JtHSmZn46q45kSTIsOjuH RuRw5Q0AAQCfpgnvTnwmbXYj0pZe0z7216Wwsv/9d5PMf18N+mrCpRJnwsALBB8W CgB9BYJhely5AwsJBwkQjdWlpDTuqrhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnx9PORCq/RdFn3bUvmXYapusYqzKmXh+NKqvsSyI4OsMD FQoIApsBAh4BFiEEn7HS9Bq1xHg3jnKMjdWlpDTuqrgAAPGZAQD0OjLXhlDHeA6Z P+U8WhXmjogof3x4dC2JuYr6zBMpQAEAmujxMT8vnV01XDNTo2Mv8i3Rnm730IpO gGfmIkUjFADNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmF6XLkDCwkH CRCN1aWkNO6quEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcQQc3uA1sXszDNkVL5jjRTFU9gr3M+lVQDPg3rULSU3QMVCggCmQECmwECHgEW IQSfsdL0GrXEeDeOcoyN1aWkNO6quAAAQQkBAK530GGB/zqq+ZGoYE3Nf8SczRaV ZrSNGZiMMoC0rY7IAP99BP4HA7bkYNOdrjrO3VoS6UQ/+/TkV9IMjQyGEiLsBcdY BGF6XLkWCSsGAQQB2kcPAQEHQDpzxMZuuWSK8rbudUubH5hJhsxkXG4H8qVjM6IU BYI7AAD/bkolCKP/MF+45QueoUirtPPUGhKy2L0g64JMJQSWYuUQvMLAvwQYFgoB MQWCYXpcuQkQjdWlpDTuqrhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn8Z7gH4EBIBdb1LJY4AaSTaH04jRNSvjCEAKR3ubSBZ4CmwK+oAQZ FgoAbwWCYXpcuQkQ/tyUz/wmdBRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JneF0bwvK53QvKktSd9M+mjgRYJUNnNjPK+to75HMcw0EWIQQl KAJ00jpq3rTdbBf+3JTP/CZ0FAAApboBALWEryK7+56mATPVFIhwrxN0i6XhoYFH 3ez39GMvRCtaAQD7824ZNASh6a4F5QXmxS7KntQtPnTzfF0WOYVeuRSaDxYhBJ+x 0vQatcR4N45yjI3VpaQ07qq4AABssgD/WhLdafVN6FXkMOsQHkov/2xDZLN30riM z/a+p39g3sIBAN6yTLMOumfv0+QoiXgnHKmnSK4sC3JN72l9K1nkzGkB =V8Eg -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3/carol.pgp000064400000000000000000000031131046102023000215100ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYXpcuRYJKwYBBAHaRw8BAQdALrYIzDkiDYblAU9JtHSmZn46q45kSTIsOjuH RuRw5Q3CwAsEHxYKAH0FgmF6XLkDCwkHCRCN1aWkNO6quEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfH085EKr9F0WfdtS+Zdhqm6xirMqZe H40qq+xLIjg6wwMVCggCmwECHgEWIQSfsdL0GrXEeDeOcoyN1aWkNO6quAAA8ZkB APQ6MteGUMd4Dpk/5TxaFeaOiCh/fHh0LYm5ivrMEylAAQCa6PExPy+dXTVcM1Oj Yy/yLdGebvfQik6AZ+YiRSMUAM0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYXpcuQMLCQcJEI3VpaQ07qq4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZxBBze4DWxezMM2RUvmONFMVT2Cvcz6VVAM+DetQtJTdAxUK CAKZAQKbAQIeARYhBJ+x0vQatcR4N45yjI3VpaQ07qq4AABBCQEArnfQYYH/Oqr5 kahgTc1/xJzNFpVmtI0ZmIwygLStjsgA/30E/gcDtuRg052uOs7dWhLpRD/79ORX 0gyNDIYSIuwFwsAHBBAWCgB5BYJhelz1BYMJZ5o7A4UBFAkQQfsC8OOX1V5HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jndd8H5cBgeu5+elXe VNxnGwy1RX3DVyAOm73nKTSLkLYWIQQowQhwcJD83/Yw0eFB+wLw45fVXgAAgh0B AMjIs6tTXY6j5RpkRhDz0Sw4lmNPqvE1G1a1ilUQcOjlAP9E4TZasM2fCSX0dQD3 jDJcsAirslrjsRPleT7fxtLSDM4zBGF6XLkWCSsGAQQB2kcPAQEHQDpzxMZuuWSK 8rbudUubH5hJhsxkXG4H8qVjM6IUBYI7wsC/BBgWCgExBYJhely5CRCN1aWkNO6q uEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfxnuAfgQEg F1vUsljgBpJNofTiNE1K+MIQApHe5tIFngKbAr6gBBkWCgBvBYJhely5CRD+3JTP /CZ0FEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd4XRvC 8rndC8qS1J30z6aOBFglQ2c2M8r62jvkcxzDQRYhBCUoAnTSOmretN1sF/7clM/8 JnQUAAClugEAtYSvIrv7nqYBM9UUiHCvE3SLpeGhgUfd7Pf0Yy9EK1oBAPvzbhk0 BKHprgXlBebFLsqe1C0+dPN8XRY5hV65FJoPFiEEn7HS9Bq1xHg3jnKMjdWlpDTu qrgAAGyyAP9aEt1p9U3oVeQw6xAeSi//bENks3fSuIzP9r6nf2DewgEA3rJMsw66 Z+/T5CiJeCccqadIriwLck3vaX0rWeTMaQE= =ATem -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3/dave-priv.pgp000064400000000000000000000027661046102023000223220ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0C13 1F89 59F4 5D08 B613 6FDA AD2E 16A2 6F73 D48E Comment: xVgEYXpcuRYJKwYBBAHaRw8BAQdAll0WophO0LdcUzh1ueBnTQXVSlCLoU0wO35A 3LgdSmYAAQDcAqITbquasALgsk1EbylzzjbAZISyrSgnrq/g/3sSUQ+bwsALBB8W CgB9BYJhely5AwsJBwkQrS4Wom9z1I5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn5EyiswI0+kISmmeFd0IpXC6EREP8RuflxNTBKTqG4BsD FQoIApsBAh4BFiEEDBMfiVn0XQi2E2/arS4Wom9z1I4AAKd8AQCOku5LGaMGDFP0 3KkxyEO1CYrKZJ6OQuxrMiNLqQqZBgEAkvIGY2uFwHoD6/3vFhNE3SB3SG8mgOLN IINbY+hadQzNEjxkYXZlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYXpcuQMLCQcJ EK0uFqJvc9SORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z9XFXDRWhnP0dmXTApQmnEwvdU6ZFh7kKO8YT/kRw3YzAxUKCAKZAQKbAQIeARYh BAwTH4lZ9F0IthNv2q0uFqJvc9SOAAAoRQD7BVKBu66uBaR0MVSY2k/Md3QQf5ek RqVr5xAglhMjxN0BAImx6kyJ/SUDjKBvTd0N5YCsPqX+dz3FrT/5BQPDuwQLx1gE YXpcuRYJKwYBBAHaRw8BAQdAw2Hppt1Jq0nfb4Xf/oa96hgZGcmWHcNpytvgp5Bt myMAAPwIIe2jTp+/Y4r9mK+rpnMC+oWlV7x2RKIHPUJCoUNFXBA4wsC/BBgWCgEx BYJhely5CRCtLhaib3PUjkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmcKSQBC98EjmPlIeIdkKlw4RqYAgaE4HkPJOH4orQ1cBwKbAr6gBBkW CgBvBYJhely5CRClykCQFcC560cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmd46Hrv++qOC4tqKqxyCAD1wFBI0zyrHHqL5RwHEqmoEBYhBNrJ qTuroJmp2kWeQ6XKQJAVwLnrAAABBQEAzGyWUna9vszHnyBmYEUMxhUCNba5IR2D kZJFM9GZDRIA/R1tCdDdP9wa8yL2/hQf1UMNr4HvBwgoyvtFAehDOdwMFiEEDBMf iVn0XQi2E2/arS4Wom9z1I4AAKIZAP9TsJsiMfmGNBipxcP60J8k16yBTk3vj3y0 a+gz+0rmCAD+JsqlomTKYUhIT7EVtEwxjoX395TT0Lhg7fCbSSB8IAA= =DRpl -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3/dave.pgp000064400000000000000000000031131046102023000213270ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYXpcuRYJKwYBBAHaRw8BAQdAll0WophO0LdcUzh1ueBnTQXVSlCLoU0wO35A 3LgdSmbCwAsEHxYKAH0FgmF6XLkDCwkHCRCtLhaib3PUjkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfkTKKzAjT6QhKaZ4V3QilcLoREQ/xG 5+XE1MEpOobgGwMVCggCmwECHgEWIQQMEx+JWfRdCLYTb9qtLhaib3PUjgAAp3wB AI6S7ksZowYMU/TcqTHIQ7UJispkno5C7GsyI0upCpkGAQCS8gZja4XAegPr/e8W E0TdIHdIbyaA4s0gg1tj6Fp1DM0SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJhely5AwsJBwkQrS4Wom9z1I5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn1cVcNFaGc/R2ZdMClCacTC91TpkWHuQo7xhP+RHDdjMDFQoI ApkBApsBAh4BFiEEDBMfiVn0XQi2E2/arS4Wom9z1I4AAChFAPsFUoG7rq4FpHQx VJjaT8x3dBB/l6RGpWvnECCWEyPE3QEAibHqTIn9JQOMoG9N3Q3lgKw+pf53PcWt P/kFA8O7BAvCwAcEEBYKAHkFgmF6XPUFgwlnmjsDhQJ4CRBB+wLw45fVXkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcpGD796KILcNLC1fi4 VUYpyvT3EbZLNCc89NAczDpZMBYhBCjBCHBwkPzf9jDR4UH7AvDjl9VeAAAgYQEA sAqIjvdCi3nf8rvWfYqCPvJEtr3euRsXAvNwABFRFUQA/1CVmARwA7anJ9FFKSFi EyvYYBsvJ+LFm2eFloDFuWcLzjMEYXpcuRYJKwYBBAHaRw8BAQdAw2Hppt1Jq0nf b4Xf/oa96hgZGcmWHcNpytvgp5BtmyPCwL8EGBYKATEFgmF6XLkJEK0uFqJvc9SO RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwpJAEL3wSOY +Uh4h2QqXDhGpgCBoTgeQ8k4fiitDVwHApsCvqAEGRYKAG8FgmF6XLkJEKXKQJAV wLnrRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ3joeu/7 6o4Li2oqrHIIAPXAUEjTPKsceovlHAcSqagQFiEE2smpO6ugmanaRZ5DpcpAkBXA uesAAAEFAQDMbJZSdr2+zMefIGZgRQzGFQI1trkhHYORkkUz0ZkNEgD9HW0J0N0/ 3BrzIvb+FB/VQw2vge8HCCjK+0UB6EM53AwWIQQMEx+JWfRdCLYTb9qtLhaib3PU jgAAohkA/1OwmyIx+YY0GKnFw/rQnyTXrIFOTe+PfLRr6DP7SuYIAP4myqWiZMph SEhPsRW0TDGOhff3lNPQuGDt8JtJIHwgAA== =l8Er -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3/ed-priv.pgp000064400000000000000000000027601046102023000217650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2969 35FA E420 CCCF 3AED CEC9 232B FF0A E9A7 E5DB Comment: xVgEYXpcuRYJKwYBBAHaRw8BAQdAGBvnDrcf5CydXvRHmzLlf5f5ZZvI0UNUPEIk qGm3qUQAAQDqpvQDa0SGx6OZJhHcaMa7EdHIlJlNkkuu5RYgCLD9oBDbwsALBB8W CgB9BYJhely5AwsJBwkQIyv/Cumn5dtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnrxUw6hNnstuF3ZONPnlMenQYQ42dH/KJqvqeO74UaroD FQoIApsBAh4BFiEEKWk1+uQgzM867c7JIyv/Cumn5dsAAAZ+AP4w59MZFdAaFxYO pgdrHwzg2VyGsq1H1HO2Uuj4Js95sQEAtldRbJqz90RtM1s8ARzfbkuXydb5HxCo M2VBvt3o6wPNEDxlZEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmF6XLkDCwkHCRAj K/8K6afl20cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcf jQuOpqHosKndu5/uKE6CLQMkxryH7AhBBO4pC0yu0AMVCggCmQECmwECHgEWIQQp aTX65CDMzzrtzskjK/8K6afl2wAA9oEBALgNKg2z6TNiyM5wI5Zr0sNLUq4dPd5Q dw65PJmwxrABAQCeQqfeJyQOMfRws2JdxTv61ZlFfnjgmEhi343cpPLSDcdYBGF6 XLkWCSsGAQQB2kcPAQEHQCkwFkWH3WzkGu6DW4C/6VWUZCzZp7Vw7rZGEKI75Kji AAD+I9IJNsLyI0RLTSp6dMSufwzU3HUSeumDynscogonAn8OzMLAvwQYFgoBMQWC YXpcuQkQIyv/Cumn5dtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnLj7pueM7AVkXP/rQny42J7xnYgaNHvGah4aW1oJId6gCmwK+oAQZFgoA bwWCYXpcuQkQP9XHgzBlZcZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn7y/vuE1IHB01n0K9WqXKZG7jiH5UhHHknG3V2xy18xkWIQTIMwLW qlByzh+TWrU/1ceDMGVlxgAA0EABANcI9ePYXUtNI/A3sSHS1s2ltgEx00JKTfmd 4uu25v15APsEa46tJngrF0R2Ao+eHRR4UKb/7BQsQlargI+WjKuaBRYhBClpNfrk IMzPOu3OySMr/wrpp+XbAADoBgEA6ZfXddi7nh03bX5YY4iAbuJvIeMd3VfuEYc1 YOIaD98A/ApRsEfS0vMwZbAaMKLLHpCJY9FaoOw/ub3oxkTRH/cG =PhfJ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3/ed.pgp000064400000000000000000000031071046102023000210030ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYXpcuRYJKwYBBAHaRw8BAQdAGBvnDrcf5CydXvRHmzLlf5f5ZZvI0UNUPEIk qGm3qUTCwAsEHxYKAH0FgmF6XLkDCwkHCRAjK/8K6afl20cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmevFTDqE2ey24Xdk40+eUx6dBhDjZ0f 8omq+p47vhRqugMVCggCmwECHgEWIQQpaTX65CDMzzrtzskjK/8K6afl2wAABn4A /jDn0xkV0BoXFg6mB2sfDODZXIayrUfUc7ZS6Pgmz3mxAQC2V1FsmrP3RG0zWzwB HN9uS5fJ1vkfEKgzZUG+3ejrA80QPGVkQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YXpcuQMLCQcJECMr/wrpp+XbRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZx+NC46moeiwqd27n+4oToItAyTGvIfsCEEE7ikLTK7QAxUKCAKZ AQKbAQIeARYhBClpNfrkIMzPOu3OySMr/wrpp+XbAAD2gQEAuA0qDbPpM2LIznAj lmvSw0tSrh093lB3Drk8mbDGsAEBAJ5Cp94nJA4x9HCzYl3FO/rVmUV+eOCYSGLf jdyk8tINwsAHBBAWCgB5BYJhelz1BYMJZ5o7A4UBeAkQrS4Wom9z1I5HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnUAnE/PmjNt7fsBaW5tGl BDFgaGlD61VW0rWoi5aBZQgWIQQMEx+JWfRdCLYTb9qtLhaib3PUjgAAAmQBAOp8 hbaj4WF8VqMnluZlLI0nTWB33+Anig4oi6hEbjy6AQCKm+eyHhZinsPc1n/LZ9EJ KOrJxkmQowM2PsgqX82TDM4zBGF6XLkWCSsGAQQB2kcPAQEHQCkwFkWH3WzkGu6D W4C/6VWUZCzZp7Vw7rZGEKI75KjiwsC/BBgWCgExBYJhely5CRAjK/8K6afl20cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcuPum54zsBWRc/ +tCfLjYnvGdiBo0e8ZqHhpbWgkh3qAKbAr6gBBkWCgBvBYJhely5CRA/1ceDMGVl xkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfvL++4TUgc HTWfQr1apcpkbuOIflSEceScbdXbHLXzGRYhBMgzAtaqUHLOH5NatT/Vx4MwZWXG AADQQAEA1wj149hdS00j8DexIdLWzaW2ATHTQkpN+Z3i67bm/XkA+wRrjq0meCsX RHYCj54dFHhQpv/sFCxCVquAj5aMq5oFFiEEKWk1+uQgzM867c7JIyv/Cumn5dsA AOgGAQDpl9d12LueHTdtflhjiIBu4m8h4x3dV+4RhzVg4hoP3wD8ClGwR9LS8zBl sBowossekIlj0Vqg7D+5vejGRNEf9wY= =hrk5 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3/frank-priv.pgp000064400000000000000000000027671046102023000225050ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A72A A1B7 D9D8 CB04 D988 F152 0A40 4E37 A776 6608 Comment: xVgEYXpcuRYJKwYBBAHaRw8BAQdAmRcwOt59B9M/JrFqVCPt6yZ+C5xY62TH/ViL 0xi/B/QAAP9lGR/XPV9nGq2OdBvIivIv7E2PvQYYjesF9rQLkhWnEA8AwsALBB8W CgB9BYJhely5AwsJBwkQCkBON6d2ZghHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnXxWvLqYVYhn6YL8YKWwwbVGLfL1g1R244tRUcxPsa98D FQoIApsBAh4BFiEEpyqht9nYywTZiPFSCkBON6d2ZggAAFReAQCUvDhyGJNR0/Dn qyDAtbggCRt9m2eyz9sJzdoNLup/jwEAro9jzFHnWA1V7hD9oVlU4rq09CbdlNN7 /0XMBdT6NwPNEzxmcmFua0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmF6XLkDCwkH CRAKQE43p3ZmCEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdQwjZ5pZJOdqx0pe7e74y7n1n5/zkqy4YghP46Q/Q9EQMVCggCmQECmwECHgEW IQSnKqG32djLBNmI8VIKQE43p3ZmCAAAp+IBANom9Hy2zj6Ii+80lH+T2XFC7iGA 416tsu0Kmo+pRLYwAQCGZ0z68l1LYUWbR1O1EaQFYYfgDiOxyU92jnzKe0PRD8dY BGF6XLkWCSsGAQQB2kcPAQEHQMEhdpF1HGCnpdrmgA1R7uh1kUyJBqSt0ODXZpbz tcT2AAEAvWwRFj28pkr/x3k1kYEjVVV2zVR59VKs7K4QL2Ic/I0PcMLAvwQYFgoB MQWCYXpcuQkQCkBON6d2ZghHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jni6p9esFvIaeymJ6c3wy4f0ejTUZkUVsXYgi505VT1RsCmwK+oAQZ FgoAbwWCYXpcuQkQbF/phcvj8cNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnXzZKeydD0hTD4CaaW8PRBNb+FRVFTma0JNfUBITitYoWIQQo 6YOG0ahi1sh4AEtsX+mFy+PxwwAAleEA/AxBSMPfq7NreSGTAqIM2qCXBtkH7FfK RVOP0y2guC2FAQCG+I2DRzMkhbuRk7UX15TN4kJj96VQi4k6EknZjAKQAxYhBKcq obfZ2MsE2YjxUgpATjendmYIAAB2SwEAt0pCcHBgstxZZ5xxLTDVN+zfHxnQrMUc AMiVGADebuIBANWb38S8ddJdicuEWIwP+MxRUptxxP3uBlipv3iwErEG =130o -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3/frank.pgp000064400000000000000000000035231046102023000215160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYXpcuRYJKwYBBAHaRw8BAQdAmRcwOt59B9M/JrFqVCPt6yZ+C5xY62TH/ViL 0xi/B/TCwAsEHxYKAH0FgmF6XLkDCwkHCRAKQE43p3ZmCEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdfFa8uphViGfpgvxgpbDBtUYt8vWDV Hbji1FRzE+xr3wMVCggCmwECHgEWIQSnKqG32djLBNmI8VIKQE43p3ZmCAAAVF4B AJS8OHIYk1HT8OerIMC1uCAJG32bZ7LP2wnN2g0u6n+PAQCuj2PMUedYDVXuEP2h WVTiurT0Jt2U03v/RcwF1Po3A80TPGZyYW5rQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYXpcuQMLCQcJEApATjendmYIRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ1DCNnmlkk52rHSl7t7vjLufWfn/OSrLhiCE/jpD9D0RAxUK CAKZAQKbAQIeARYhBKcqobfZ2MsE2YjxUgpATjendmYIAACn4gEA2ib0fLbOPoiL 7zSUf5PZcULuIYDjXq2y7Qqaj6lEtjABAIZnTPryXUthRZtHU7URpAVhh+AOI7HJ T3aOfMp7Q9EPwsADBBAWCgB1BYJhelz1BYMJZ5o7CRCN1aWkNO6quEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfbRhmCSuOC0LaPoVZcbHrU 74+n91VDdIFQJQ/Eve1QFxYhBJ+x0vQatcR4N45yjI3VpaQ07qq4AABVFgD+MWM7 WzZbfYQ8O9uTpeNknKdtwPvCkLSle0aY/9OZHzEA/issDHETdrHR3VVJ68ABe3Yl SgZruK8IBbmjCblxXAYBwsADBBAWCgB1BYJhelz1BYMJZ5o7CRAjK/8K6afl20cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeStFmJ/Tvs6aVI kcup1bCg13M4/36BcdAgGipd4Z+HCBYhBClpNfrkIMzPOu3OySMr/wrpp+XbAADI 2AD/UwqP3zTo0W4SgxADepuYRQdd+ax73FK4Il4KM8CqRp0A/iyrp2/X4+LTWQ9Y t/1enf62L/kKxqtw92pYJoHJKskCzjMEYXpcuRYJKwYBBAHaRw8BAQdAwSF2kXUc YKel2uaADVHu6HWRTIkGpK3Q4NdmlvO1xPbCwL8EGBYKATEFgmF6XLkJEApATjen dmYIRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4uqfXrB byGnspienN8MuH9Ho01GZFFbF2IIudOVU9UbApsCvqAEGRYKAG8FgmF6XLkJEGxf 6YXL4/HDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ182 SnsnQ9IUw+AmmlvD0QTW/hUVRU5mtCTX1ASE4rWKFiEEKOmDhtGoYtbIeABLbF/p hcvj8cMAAJXhAPwMQUjD36uza3khkwKiDNqglwbZB+xXykVTj9MtoLgthQEAhviN g0czJIW7kZO1F9eUzeJCY/elUIuJOhJJ2YwCkAMWIQSnKqG32djLBNmI8VIKQE43 p3ZmCAAAdksBALdKQnBwYLLcWWeccS0w1Tfs3x8Z0KzFHADIlRgA3m7iAQDVm9/E vHXSXYnLhFiMD/jMUVKbccT97gZYqb94sBKxBg== =zXbW -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3.pgp000064400000000000000000000236021046102023000204150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYXpcuRYJKwYBBAHaRw8BAQdAGBvnDrcf5CydXvRHmzLlf5f5ZZvI0UNUPEIk qGm3qUTCwAsEHxYKAH0FgmF6XLkDCwkHCRAjK/8K6afl20cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmevFTDqE2ey24Xdk40+eUx6dBhDjZ0f 8omq+p47vhRqugMVCggCmwECHgEWIQQpaTX65CDMzzrtzskjK/8K6afl2wAABn4A /jDn0xkV0BoXFg6mB2sfDODZXIayrUfUc7ZS6Pgmz3mxAQC2V1FsmrP3RG0zWzwB HN9uS5fJ1vkfEKgzZUG+3ejrA80QPGVkQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YXpcuQMLCQcJECMr/wrpp+XbRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZx+NC46moeiwqd27n+4oToItAyTGvIfsCEEE7ikLTK7QAxUKCAKZ AQKbAQIeARYhBClpNfrkIMzPOu3OySMr/wrpp+XbAAD2gQEAuA0qDbPpM2LIznAj lmvSw0tSrh093lB3Drk8mbDGsAEBAJ5Cp94nJA4x9HCzYl3FO/rVmUV+eOCYSGLf jdyk8tINwsAHBBAWCgB5BYJhelz1BYMJZ5o7A4UBeAkQrS4Wom9z1I5HFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnUAnE/PmjNt7fsBaW5tGl BDFgaGlD61VW0rWoi5aBZQgWIQQMEx+JWfRdCLYTb9qtLhaib3PUjgAAAmQBAOp8 hbaj4WF8VqMnluZlLI0nTWB33+Anig4oi6hEbjy6AQCKm+eyHhZinsPc1n/LZ9EJ KOrJxkmQowM2PsgqX82TDM4zBGF6XLkWCSsGAQQB2kcPAQEHQCkwFkWH3WzkGu6D W4C/6VWUZCzZp7Vw7rZGEKI75KjiwsC/BBgWCgExBYJhely5CRAjK/8K6afl20cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcuPum54zsBWRc/ +tCfLjYnvGdiBo0e8ZqHhpbWgkh3qAKbAr6gBBkWCgBvBYJhely5CRA/1ceDMGVl xkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfvL++4TUgc HTWfQr1apcpkbuOIflSEceScbdXbHLXzGRYhBMgzAtaqUHLOH5NatT/Vx4MwZWXG AADQQAEA1wj149hdS00j8DexIdLWzaW2ATHTQkpN+Z3i67bm/XkA+wRrjq0meCsX RHYCj54dFHhQpv/sFCxCVquAj5aMq5oFFiEEKWk1+uQgzM867c7JIyv/Cumn5dsA AOgGAQDpl9d12LueHTdtflhjiIBu4m8h4x3dV+4RhzVg4hoP3wD8ClGwR9LS8zBl sBowossekIlj0Vqg7D+5vejGRNEf9wbGMwRhely5FgkrBgEEAdpHDwEBB0D7G2/m oYa2MQxxIQFW8gcA9XGBqr0eG3isKllSqenoIsLACwQfFgoAfQWCYXpcuQMLCQcJ EEH7AvDjl9VeRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z2dE7fk4BpF8P127WYWdF+PPISnqeRGQ3ywRw7Qi12LnAxUKCAKbAQIeARYhBCjB CHBwkPzf9jDR4UH7AvDjl9VeAAACYgD/XVAclEhBzQFqjcP1E5fDEs9WiBGqKAN7 Q90QVy5dULgA/iWuGlD66VGGMwWyS89CT5OZS1dD16s/nV5b8Omy6UsCzQ88Ym9i QG90aGVyLm9yZz7CwAsEExYKAH0FgmF6XLkDCwkHCRBB+wLw45fVXkcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdRJkam7P83o54FOmn5OTjD BrQhu5Y6X1PHqXrdlTexlQMVCggCmwECHgEWIQQowQhwcJD83/Yw0eFB+wLw45fV XgAAS6oA/29aOS9b6c7ZgA8jsRqpbt2hGqUHTbYnAbwXN3OAV6BfAQDERauP/R0p mN3flNklKcbhVxj8AplLYxLd1ErW/BFJDsLABwQQFgoAeQWCYXpc9QWDCWeaOwOF Ax4JECx6QxlGwS33RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZz88I2vQyKrtMNQAuPT91DpD5zrM2E4u1XdzmeTgZfIzFiEE2jz8YL1LiDVw KmZ4LHpDGUbBLfcAAMRpAQDFgqMH743Ym+cknsDKFNU6jX0SAx7m8t/xUSv77Zl6 igEAskujHrWABPNtKGKKJh4nFRPI8qdsQohbGWFIH8fcoQjNDjxib2JAc29tZS5v cmc+wsAOBBMWCgCABYJhely5AwsJBwkQQfsC8OOX1V5HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnPypA7bgIbuuCPMmR9SZqgI6KwHgmaJd/ FOybgVTHMwUDFQoIApkBApsBAh4BFiEEKMEIcHCQ/N/2MNHhQfsC8OOX1V4AALs6 AP4t73CgOYvxdPPoKwPBLN1lCTTHVU7z41nswpkVSPRDMgD/QTOgfhGFjUJ/4sAd 4qijp0fg7yO+b0DDSPCwkE2hig/CwAcEEBYKAHkFgmF6XPUFgwlnmjsDhQIoCRAs ekMZRsEt90cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdx pzImCpZVPvUCqI62A2cI9eT8stm75q9jAvqmESAkcxYhBNo8/GC9S4g1cCpmeCx6 QxlGwS33AABV2QEA+6viLRy7mkILcUEtNEsz19IQgE1/SsH9T/MhnpRXlpMBAMMr WNV3Ipk/3s9pw/8IszHYMgu3E+MxbZwPwqNJJKsPzQ88Ym9iQHRoaXJkLm9yZz7C wAsEExYKAH0FgmF6XLkDCwkHCRBB+wLw45fVXkcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmcq1h4bBrYfjzWvSxYsUBuE4PzgVXqpw6HjIInJ 5IfBHAMVCggCmwECHgEWIQQowQhwcJD83/Yw0eFB+wLw45fVXgAAkA8A/3JZHr7U uyupfK3WNbVOHuvx1ZCtMWwLl+ZvL0YCrpM0AQCDFFfput/VbIOhnSVbG7VMdRD1 vLmvF7pKeaxVa2FaDc4zBGF6XLkWCSsGAQQB2kcPAQEHQHwYtlCU4ERmswS5H3TT Z7QmoL69YktMtI6/itEyLtL8wsC/BBgWCgExBYJhely5CRBB+wLw45fVXkcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme2BJ0xkdIk+7BFRO6U MSu0C6M2eDcDAwh8GzhtM3urfgKbAr6gBBkWCgBvBYJhely5CRBXM6b36ul61UcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcZA9KHYlG+GPpH 7JwdYci/I2cySG55OrJdsIeHtXPQExYhBHYw/jxu8ex4oJyfylczpvfq6XrVAADd wwEApL0ZjKSYFARegSsDYMbwPHgqm3/EKQKeNNEYHryncQgA/A0AQ01cKchn/RDz cf0wpay+q4q1oJ30W0W0D2GqZ9EDFiEEKMEIcHCQ/N/2MNHhQfsC8OOX1V4AAClD AQDHjQNjdLOtg6r/bP6XhzTnnHIaNFL7gSnjxAMDnuMRtAEAo4hbF1VAyonsoA/D H2SIhMH30ssZ0KY0YleqT6DODgPGMwRhely5FgkrBgEEAdpHDwEBB0C0cmsXadfM VBmufHHUoVjtYTo0Kzo13GUKSN2aVd7BacLACgQfFgoAfQWCYXpcuQMLCQcJECx6 QxlGwS33RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/vp /TqnTz6fY0s4F6I5/7AzT+GgRXoFyHV8uoA3LyX4AxUKCAKbAQIeARYhBNo8/GC9 S4g1cCpmeCx6QxlGwS33AAAmLgD4zfW55NqdHwJVuT9pHqBBHjnNsv5t2CW2H3Fj F/TsFwEAmN0bwVdOixKyKomqEdNm8DOK14C50PrURniADbUhCwDNEzxhbGljZUBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgmF6XLkDCwkHCRAsekMZRsEt90cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd1nVkIoC1QtaldAqHwhshe KGphIxZX+QfWQUylALQ5gQMVCggCmQECmwECHgEWIQTaPPxgvUuINXAqZngsekMZ RsEt9wAAzJwBAO0fhGQ6D9aA/TcoI9RrPzh5cyZK84gKz9je4Fd2fa9uAQCHZZyY gRiscAQzwFbpbWiNpEko1CYWODUyg9P40hvtBM4zBGF6XLkWCSsGAQQB2kcPAQEH QIOKhAQhF5KEPfGglx1WPCJnQsXKVtrsBXFcSVnmVYxwwsC/BBgWCgExBYJhely5 CRAsekMZRsEt90cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmco+gRkqOGwIYJI7HetZl9aHeK33tnicdgh04qRZYENdQKbAr6gBBkWCgBvBYJh ely5CRC1uaVE8WFDeUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmcXduMa0mL8RXxAzg12N7Mr2iT68b27YvSptfUdrRZifxYhBGHEgGJAfvDZ +b1gALW5pUTxYUN5AAA04AEAv9arhngDskBZquv/qnjF2Wj3YZwrY2YnI0qAflhx 0ykBAL79YhMd/zGZwZwhj6WIOgO0Lvwecrz/sNefiv58Uv4OFiEE2jz8YL1LiDVw KmZ4LHpDGUbBLfcAAN8rAPoC9KNtKaBT0sAxibv3ajwqVkqy7wOxWd8vu4Y92Pjn mQD+K4k3jG6zNvLdGwaCWDTju4HB4aYUj/FuuHONaKO0HQrGMwRhely5FgkrBgEE AdpHDwEBB0CZFzA63n0H0z8msWpUI+3rJn4LnFjrZMf9WIvTGL8H9MLACwQfFgoA fQWCYXpcuQMLCQcJEApATjendmYIRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ18Vry6mFWIZ+mC/GClsMG1Ri3y9YNUduOLUVHMT7GvfAxUK CAKbAQIeARYhBKcqobfZ2MsE2YjxUgpATjendmYIAABUXgEAlLw4chiTUdPw56sg wLW4IAkbfZtnss/bCc3aDS7qf48BAK6PY8xR51gNVe4Q/aFZVOK6tPQm3ZTTe/9F zAXU+jcDzRM8ZnJhbmtAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhely5AwsJBwkQ CkBON6d2ZghHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn UMI2eaWSTnasdKXu3u+Mu59Z+f85KsuGIIT+OkP0PREDFQoIApkBApsBAh4BFiEE pyqht9nYywTZiPFSCkBON6d2ZggAAKfiAQDaJvR8ts4+iIvvNJR/k9lxQu4hgONe rbLtCpqPqUS2MAEAhmdM+vJdS2FFm0dTtRGkBWGH4A4jsclPdo58yntD0Q/CwAME EBYKAHUFgmF6XPUFgwlnmjsJEI3VpaQ07qq4RxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ9tGGYJK44LQto+hVlxsetTvj6f3VUN0gVAlD8S9 7VAXFiEEn7HS9Bq1xHg3jnKMjdWlpDTuqrgAAFUWAP4xYztbNlt9hDw725Ol42Sc p23A+8KQtKV7Rpj/05kfMQD+KywMcRN2sdHdVUnrwAF7diVKBmu4rwgFuaMJuXFc BgHCwAMEEBYKAHUFgmF6XPUFgwlnmjsJECMr/wrpp+XbRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5K0WYn9O+zppUiRy6nVsKDXczj/foFx 0CAaKl3hn4cIFiEEKWk1+uQgzM867c7JIyv/Cumn5dsAAMjYAP9TCo/fNOjRbhKD EAN6m5hFB135rHvcUrgiXgozwKpGnQD+LKunb9fj4tNZD1i3/V6d/rYv+QrGq3D3 algmgckqyQLOMwRhely5FgkrBgEEAdpHDwEBB0DBIXaRdRxgp6Xa5oANUe7odZFM iQakrdDg12aW87XE9sLAvwQYFgoBMQWCYXpcuQkQCkBON6d2ZghHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jni6p9esFvIaeymJ6c3wy4f0ej TUZkUVsXYgi505VT1RsCmwK+oAQZFgoAbwWCYXpcuQkQbF/phcvj8cNHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnXzZKeydD0hTD4CaaW8PR BNb+FRVFTma0JNfUBITitYoWIQQo6YOG0ahi1sh4AEtsX+mFy+PxwwAAleEA/AxB SMPfq7NreSGTAqIM2qCXBtkH7FfKRVOP0y2guC2FAQCG+I2DRzMkhbuRk7UX15TN 4kJj96VQi4k6EknZjAKQAxYhBKcqobfZ2MsE2YjxUgpATjendmYIAAB2SwEAt0pC cHBgstxZZ5xxLTDVN+zfHxnQrMUcAMiVGADebuIBANWb38S8ddJdicuEWIwP+MxR UptxxP3uBlipv3iwErEGxjMEYXpcuRYJKwYBBAHaRw8BAQdAll0WophO0LdcUzh1 ueBnTQXVSlCLoU0wO35A3LgdSmbCwAsEHxYKAH0FgmF6XLkDCwkHCRCtLhaib3PU jkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfkTKKzAjT6 QhKaZ4V3QilcLoREQ/xG5+XE1MEpOobgGwMVCggCmwECHgEWIQQMEx+JWfRdCLYT b9qtLhaib3PUjgAAp3wBAI6S7ksZowYMU/TcqTHIQ7UJispkno5C7GsyI0upCpkG AQCS8gZja4XAegPr/e8WE0TdIHdIbyaA4s0gg1tj6Fp1DM0SPGRhdmVAZXhhbXBs ZS5vcmc+wsAOBBMWCgCABYJhely5AwsJBwkQrS4Wom9z1I5HFAAAAAAAHgAgc2Fs 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 HKmnSK4sC3JN72l9K1nkzGkB =VIP0 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/multiple-userids-3.sh000075500000000000000000000006131046102023000202410ustar 00000000000000#! /bin/bash set -e . gen-helper.sh --directory=multiple-userids-3 ${@:+"$@"} key alice key bob@some.org bob@other.org bob@third.org key carol key dave key ed key frank certify alice -a 40 -d 2 bob@some.org certify alice -a 30 -d 3 bob@other.org certify bob -a 20 -d 1 carol certify bob -a 120 -d 2 dave certify carol -a 120 frank certify dave -a 120 -d 1 ed certify ed -a 120 frank finish sequoia-wot-0.11.0/tests/data/my-own-grandpa/README.md000064400000000000000000000000771046102023000203560ustar 00000000000000A certificate where the primary key is also bound as a subkey. sequoia-wot-0.11.0/tests/data/my-own-grandpa/my-own-grandpa-priv.pgp000064400000000000000000000016131046102023000234220ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A0DA 439B A08B 62F1 9EB2 886C B92A 120F FA36 B7A4 Comment: xVgEZdcvJxYJKwYBBAHaRw8BAQdAtJcAeM3r6XzgypvfXNbaMc6mlaro9q1h7eKN 77AcFAkAAP4qFC2SgxJ8ubgdIgBVEbNAXP0dEg6ArFoXPu1l4WTS3A3LwsALBB8W CgB9BYJl1y8nAwsJBwkQuSoSD/o2t6RHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn0ll9kuspvj150BVJ2p+Agc5VOVAVDQ+3FihV2biZZaYD FQoIApsBAh4BFiEEoNpDm6CLYvGesohsuSoSD/o2t6QAAOCXAPoC0Ng+9yIb4voQ UdlWQkNWP+10rLFe+3ioMMMZZNc99QEAl+s6uoUxzIzinc1NAgfAT0XoVgnXu6pU jzhBZ7VfEgPNHDxteS1vd24tZ3JhbmRwYUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmXXLycDCwkHCRC5KhIP+ja3pEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmchMbnBag5u43kOvKYX2ybbkXyBKJ9/8MZngbL6+RrsAQMVCggC mQECmwECHgEWIQSg2kOboIti8Z6yiGy5KhIP+ja3pAAAmBABAIJyVZhF4pu/4z6L 3KpwI+6i869GDtlsAn7mVT9D40rTAQDSXpZIewlRDbVZqCu8QyuH4SBmOhCWAZ62 MkWW2nHLAA== =RsDi -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/my-own-grandpa/my-own-grandpa.pgp000064400000000000000000000030151046102023000224420ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A0DA 439B A08B 62F1 9EB2 886C B92A 120F FA36 B7A4 Comment: xVgEZdcvJxYJKwYBBAHaRw8BAQdAtJcAeM3r6XzgypvfXNbaMc6mlaro9q1h7eKN 77AcFAkAAP4qFC2SgxJ8ubgdIgBVEbNAXP0dEg6ArFoXPu1l4WTS3A3LwsALBB8W CgB9BYJl1y8nAwsJBwkQuSoSD/o2t6RHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn0ll9kuspvj150BVJ2p+Agc5VOVAVDQ+3FihV2biZZaYD FQoIApsBAh4BFiEEoNpDm6CLYvGesohsuSoSD/o2t6QAAOCXAPoC0Ng+9yIb4voQ UdlWQkNWP+10rLFe+3ioMMMZZNc99QEAl+s6uoUxzIzinc1NAgfAT0XoVgnXu6pU jzhBZ7VfEgPNHDxteS1vd24tZ3JhbmRwYUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmXXLycDCwkHCRC5KhIP+ja3pEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmchMbnBag5u43kOvKYX2ybbkXyBKJ9/8MZngbL6+RrsAQMVCggC mQECmwECHgEWIQSg2kOboIti8Z6yiGy5KhIP+ja3pAAAmBABAIJyVZhF4pu/4z6L 3KpwI+6i869GDtlsAn7mVT9D40rTAQDSXpZIewlRDbVZqCu8QyuH4SBmOhCWAZ62 MkWW2nHLAMdYBGXXLycWCSsGAQQB2kcPAQEHQLSXAHjN6+l84Mqb31zW2jHOppWq 6PatYe3ije+wHBQJAAD+KhQtkoMSfLm4HSIAVRGzQFz9HRIOgKxaFz7tZeFk0twN y8LAvwQYFgoBMQWCZdcvJwkQuSoSD/o2t6RHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnULFGjdDeSoWc1bxDKFGpeumaru6NLLldXuPNCkkl GNMCmwG+oAQZFgoAbwWCZdcvJwkQuSoSD/o2t6RHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnTiWMvmtSibzjzZ4Ve4avTR52fylbElPprZqd KxdpU5MWIQSg2kOboIti8Z6yiGy5KhIP+ja3pAAAayMBANQVt4aw+hc277gBa+cq 8zKaKIVNqKF6SsA5UOVgRZxmAP4lD3UoUJU3d8+7eVpkc1pkYZnbY8Gi22tjyCh2 O47gChYhBKDaQ5ugi2LxnrKIbLkqEg/6NrekAAADKAD/SmQ4u7c77mIFhDmBRae8 HWvjKaXg2c7ksmZvO1HE+vQA/3CUaUookyPEzewFbAghas5tUgn76ijTIZjvOjkI JRcJ =JRmB -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/my-own-grandpa.pgp000064400000000000000000000026531046102023000176110ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- xVgEZdcvJxYJKwYBBAHaRw8BAQdAtJcAeM3r6XzgypvfXNbaMc6mlaro9q1h7eKN 77AcFAkAAP4qFC2SgxJ8ubgdIgBVEbNAXP0dEg6ArFoXPu1l4WTS3A3LwsALBB8W CgB9BYJl1y8nAwsJBwkQuSoSD/o2t6RHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn0ll9kuspvj150BVJ2p+Agc5VOVAVDQ+3FihV2biZZaYD FQoIApsBAh4BFiEEoNpDm6CLYvGesohsuSoSD/o2t6QAAOCXAPoC0Ng+9yIb4voQ UdlWQkNWP+10rLFe+3ioMMMZZNc99QEAl+s6uoUxzIzinc1NAgfAT0XoVgnXu6pU jzhBZ7VfEgPNHDxteS1vd24tZ3JhbmRwYUBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmXXLycDCwkHCRC5KhIP+ja3pEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmchMbnBag5u43kOvKYX2ybbkXyBKJ9/8MZngbL6+RrsAQMVCggC mQECmwECHgEWIQSg2kOboIti8Z6yiGy5KhIP+ja3pAAAmBABAIJyVZhF4pu/4z6L 3KpwI+6i869GDtlsAn7mVT9D40rTAQDSXpZIewlRDbVZqCu8QyuH4SBmOhCWAZ62 MkWW2nHLAMdYBGXXLycWCSsGAQQB2kcPAQEHQLSXAHjN6+l84Mqb31zW2jHOppWq 6PatYe3ije+wHBQJAAD+KhQtkoMSfLm4HSIAVRGzQFz9HRIOgKxaFz7tZeFk0twN y8LAvwQYFgoBMQWCZdcvJwkQuSoSD/o2t6RHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnULFGjdDeSoWc1bxDKFGpeumaru6NLLldXuPNCkkl GNMCmwG+oAQZFgoAbwWCZdcvJwkQuSoSD/o2t6RHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnTiWMvmtSibzjzZ4Ve4avTR52fylbElPprZqd KxdpU5MWIQSg2kOboIti8Z6yiGy5KhIP+ja3pAAAayMBANQVt4aw+hc277gBa+cq 8zKaKIVNqKF6SsA5UOVgRZxmAP4lD3UoUJU3d8+7eVpkc1pkYZnbY8Gi22tjyCh2 O47gChYhBKDaQ5ugi2LxnrKIbLkqEg/6NrekAAADKAD/SmQ4u7c77mIFhDmBRae8 HWvjKaXg2c7ksmZvO1HE+vQA/3CUaUookyPEzewFbAghas5tUgn76ijTIZjvOjkI JRcJ =JRmB -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/my-own-grandpa.sh000075500000000000000000000005521046102023000174340ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=my-own-grandpa ${@:+"$@"} key my-own-grandpa FPR=$(sq toolbox keyring list "my-own-grandpa/my-own-grandpa-priv.pgp" | awk '{ print $2 }') sq key adopt --keyring "my-own-grandpa/my-own-grandpa-priv.pgp" \ --key "$FPR" \ "my-own-grandpa/my-own-grandpa-priv.pgp" \ > "my-own-grandpa/my-own-grandpa.pgp" finish sequoia-wot-0.11.0/tests/data/override/README.txt000064400000000000000000000003671046102023000175560ustar 00000000000000alice | t0: 2/120, t1: 0/120 v bob | 120 v carol At t0, alice makes Bob a trusted introducer. At t1, she issues another certification, but only certifies bob. Make sure that before t1, alice can authenticate carol, but after t1 she can't. sequoia-wot-0.11.0/tests/data/override/alice-priv.pgp000064400000000000000000000023671046102023000206250ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B425 9E0C 1D76 4615 CA56 0EE5 7E10 F6E7 AC1D 0A4E Comment: xVgEY8CfABYJKwYBBAHaRw8BAQdA1t8v1CcAWhpgu+BWuEv2+of81yM9jd5xJn9J YH5/8gIAAQDPDap2riw6TZIGePBsu2xuPzNAs83teGpV2LKO7A2KIw9zwsALBB8W CgB9BYJjwJ8AAwsJBwkQfhD256wdCk5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn6W2vGwmI94viGQBY5DuA4IuI9hDPzJmiQnUzodPOAvYD FQoIApsBAh4BFiEEtCWeDB12RhXKVg7lfhD256wdCk4AAEwjAQD/5B1sJTaoUT8/ /4nIXsA0FmFMV0HNqGly+NYkcuDQ0wD+KdeNTRnA0Tr4l8MdoPIQim7kEvV5sEpS S+C8OpX9PwTNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmPAnwADCwkH CRB+EPbnrB0KTkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdVjAjsbgXQwgCGcaD8IhIbFh7F9lzLSK3uHV3xnsmb1gMVCggCmQECmwECHgEW IQS0JZ4MHXZGFcpWDuV+EPbnrB0KTgAAUAIBAOV56yX/B98sQIY9QJopM9+veCPE MqZcQ8D63mx3DmAgAQCiSv7BgPRNrcNrK1SvzPXco1IBaUV/A27LqbsWVmU4BMdY BGPAnwAWCSsGAQQB2kcPAQEHQE5W5DaS0jlqH+Ji5er5BIllO0eMfMGBwB4qNZXA mAAhAAD/fLhLh4RM6gu8CKwyI/Mvlx3NnI/yz9DQHyqD0UyBMMwRJMLAAAQYFgoA cgWCY8CfAAkQfhD256wdCk5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnNgPD0dYriti11gN8LLHSAssbq2lhRlLvloRZQEslskkCmyAWIQS0 JZ4MHXZGFcpWDuV+EPbnrB0KTgAAM20A/iu7zQ5vP8NebaKFzvKGOD6AiqP5QUD6 7CoYl2CAP/yeAP9gC6A3oI9mRRwcgWN0DR2MjBNawB9has0P2v16w9KIAQ== =bVBe -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/override/alice.pgp000064400000000000000000000022201046102023000176330ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: B425 9E0C 1D76 4615 CA56 0EE5 7E10 F6E7 AC1D 0A4E Comment: xjMEY8CfABYJKwYBBAHaRw8BAQdA1t8v1CcAWhpgu+BWuEv2+of81yM9jd5xJn9J YH5/8gLCwAsEHxYKAH0FgmPAnwADCwkHCRB+EPbnrB0KTkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfpba8bCYj3i+IZAFjkO4Dgi4j2EM/M maJCdTOh084C9gMVCggCmwECHgEWIQS0JZ4MHXZGFcpWDuV+EPbnrB0KTgAATCMB AP/kHWwlNqhRPz//ichewDQWYUxXQc2oaXL41iRy4NDTAP4p141NGcDROviXwx2g 8hCKbuQS9XmwSlJL4Lw6lf0/BM0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCY8CfAAMLCQcJEH4Q9uesHQpORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ1WMCOxuBdDCAIZxoPwiEhsWHsX2XMtIre4dXfGeyZvWAxUK CAKZAQKbAQIeARYhBLQlngwddkYVylYO5X4Q9uesHQpOAABQAgEA5XnrJf8H3yxA hj1Amikz3694I8QyplxDwPrebHcOYCABAKJK/sGA9E2tw2srVK/M9dyjUgFpRX8D bsupuxZWZTgEzjMEY8CfABYJKwYBBAHaRw8BAQdATlbkNpLSOWof4mLl6vkEiWU7 R4x8wYHAHio1lcCYACHCwAAEGBYKAHIFgmPAnwAJEH4Q9uesHQpORxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzYDw9HWK4rYtdYDfCyx0gLL G6tpYUZS75aEWUBLJbJJApsgFiEEtCWeDB12RhXKVg7lfhD256wdCk4AADNtAP4r u80Obz/DXm2ihc7yhjg+gIqj+UFA+uwqGJdggD/8ngD/YAugN6CPZkUcHIFjdA0d jIwTWsAfYWrND9r9esPSiAE= =w0r3 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/override/bob-priv.pgp000064400000000000000000000023611046102023000203040ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3E2C BBFE 672E 101E 0061 D55C 60FC D2B0 55FF B4A2 Comment: xVgEY8CfABYJKwYBBAHaRw8BAQdA7rQP2svOMIlFHGPQU81LEhnFqrkMtItFTRAV KaEoS6oAAPoCZlTA9cq1bBg7b+JnT3THqlwo3gG4gAN/Jz05xnHcshAUwsALBB8W CgB9BYJjwJ8AAwsJBwkQYPzSsFX/tKJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnYRipIT1ZEzOyP1FmdMsifxS/ktQ5Mm+jQGKmU3VSy8UD FQoIApsBAh4BFiEEPiy7/mcuEB4AYdVcYPzSsFX/tKIAALF7APwNbBAEixWY6S18 Q1pDTke4DXP9fpJi9yn9LcHbk+Jp4wD+Jrwb+wRlDBWsvduSo6RVdz/tDCBPxQpD qwxg2FOfPAfNETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJjwJ8AAwsJBwkQ YPzSsFX/tKJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn rUU4hlZqEtIfQpKzKEt5UumZInIdqSlnaaSgtgIIrXsDFQoIApkBApsBAh4BFiEE Piy7/mcuEB4AYdVcYPzSsFX/tKIAACzkAP9+WruqfAXZNISzGuiSkBs7r2B9wjE8 /qR3V0roHZ323wD/f9EvsOSALYe1htJDA7YoR8D1b1MVM0mzRD35wdQ0mA7HWARj wJ8AFgkrBgEEAdpHDwEBB0AvNaWfliDiiWIR3Kh6HJlibsOYTp+JdwJk2Klx5eq9 AAAA+weq70SpbLayBVMVQAVx8BKbgycZgks6LV/5t8JYWBl5DibCwAAEGBYKAHIF gmPAnwAJEGD80rBV/7SiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ3m4CaRoaQGpu8fdW38ElND3namf/qBma2GzWyJPFK3AApsgFiEEPiy7 /mcuEB4AYdVcYPzSsFX/tKIAABtAAP0YkUOkbZldBn7YFmHxKrc4ptEn6UBbIkhX S94TmZVWRAD/V0ZveMzmISCaFbOyHtpP8vqbrMpbJOp29hqmZl/X+wo= =e0Ve -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/override/bob.pgp000064400000000000000000000030771046102023000173330ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEY8CfABYJKwYBBAHaRw8BAQdA7rQP2svOMIlFHGPQU81LEhnFqrkMtItFTRAV KaEoS6rCwAsEHxYKAH0FgmPAnwADCwkHCRBg/NKwVf+0okcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdhGKkhPVkTM7I/UWZ0yyJ/FL+S1Dky b6NAYqZTdVLLxQMVCggCmwECHgEWIQQ+LLv+Zy4QHgBh1Vxg/NKwVf+0ogAAsXsA /A1sEASLFZjpLXxDWkNOR7gNc/1+kmL3Kf0twduT4mnjAP4mvBv7BGUMFay925Kj pFV3P+0MIE/FCkOrDGDYU588B80RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmPAnwADCwkHCRBg/NKwVf+0okcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmetRTiGVmoS0h9CkrMoS3lS6Zkich2pKWdppKC2AgitewMVCggC mQECmwECHgEWIQQ+LLv+Zy4QHgBh1Vxg/NKwVf+0ogAALOQA/35au6p8Bdk0hLMa 6JKQGzuvYH3CMTz+pHdXSugdnfbfAP9/0S+w5IAth7WG0kMDtihHwPVvUxUzSbNE PfnB1DSYDsK9BBAWCgBvBYJjxJOACRB+EPbnrB0KTkcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmd3an5y1QXti+zBqef6eZsFdXGVLNV5mGxy R/Gd/Cyb7xYhBLQlngwddkYVylYO5X4Q9uesHQpOAAAxTgD7Bic44Hi+aeIszZS7 gvBFK/GqGlaA2oF3nES1FguvvoEA/RyZt+2B9mu7+UnlyS6uHhrj/IoRKZlVmIre wL0lWt8DwsABBBAWCgBzBYJjwfCAA4UCeAkQfhD256wdCk5HFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnZXdJzvDfruOX4zuXWT4m5W286/DK EJ41ViMdevrQRaoWIQS0JZ4MHXZGFcpWDuV+EPbnrB0KTgAAPYEA/1ogvgyzwP2z OGBlYxUZAwKqBdiVT/1QUrom3swQr4JKAQDAEnV2X8lJPrPrcqz+PC1lzXogimyo VrBVNZIeSwoxBM4zBGPAnwAWCSsGAQQB2kcPAQEHQC81pZ+WIOKJYhHcqHocmWJu w5hOn4l3AmTYqXHl6r0AwsAABBgWCgByBYJjwJ8ACRBg/NKwVf+0okcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd5uAmkaGkBqbvH3Vt/BJTQ 952pn/6gZmths1siTxStwAKbIBYhBD4su/5nLhAeAGHVXGD80rBV/7SiAAAbQAD9 GJFDpG2ZXQZ+2BZh8Sq3OKbRJ+lAWyJIV0veE5mVVkQA/1dGb3jM5iEgmhWzsh7a T/L6m6zKWyTqdvYapmZf1/sK =TzdG -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/override/carol-priv.pgp000064400000000000000000000023671046102023000206500ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2C6C A003 07C7 7638 6646 C767 57CC D98B EB17 EA38 Comment: xVgEY8CfABYJKwYBBAHaRw8BAQdAnSnqyCNV7jtKX4rwSxZ4CyJmEv8Odgy3Y926 pyZDV4gAAP4rKDvzBntY5wxUnh70/aLr1Wtc9D7HTkObYSCscFmZgBCpwsALBB8W CgB9BYJjwJ8AAwsJBwkQV8zZi+sX6jhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnz2cZ64vyfppvdvzdVW6nNuhAgL0t8je6URc4CWujPjwD FQoIApsBAh4BFiEELGygAwfHdjhmRsdnV8zZi+sX6jgAADc2AP9S6r4kCUb5mMKk PafIPOIVjVXv97gxX7ZCr5A/5pBMzQEA4Vn/sUcYeDsxzHo/JF/dcXd/Pc5E0rHI Dr0kFKBSlgLNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmPAnwADCwkH CRBXzNmL6xfqOEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdC+BoQ+gLiohayGgNBJJGjL+obQVSLonGUz30Sy6hjJAMVCggCmQECmwECHgEW IQQsbKADB8d2OGZGx2dXzNmL6xfqOAAACK8A/2Wnu8QiXBL3ZhW/IhaCdXUrl2NB Q/SAkiDyGSwRUT88AQDh0ukH1G1qIwfJ2us/CCv/CPm3bemK+bh2niURfuOODMdY BGPAnwAWCSsGAQQB2kcPAQEHQI5qirGOUgdRIr7IFTGLPAlLOZAuP6gBHQ3bqTM+ ZZL8AAEA2GJm1uqXLtcxJgDa+dOT6dgYZHzq3LyjlvYLG79o7WUSlsLAAAQYFgoA cgWCY8CfAAkQV8zZi+sX6jhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnwmYRmhKdcv0MGYZHoT11RmS0AuccJB93gsHzrdQv6hACmyAWIQQs bKADB8d2OGZGx2dXzNmL6xfqOAAARtEA/A0zJqif5Q7lAKNicQVYPhaDQPSFWaai IF810e8VgqlTAQDEaaxuebU0fTZKZVwo+diuVeXrctq6sQVo09jP9NPdDg== =tCeX -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/override/carol.pgp000064400000000000000000000024731046102023000176700ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEY8CfABYJKwYBBAHaRw8BAQdAnSnqyCNV7jtKX4rwSxZ4CyJmEv8Odgy3Y926 pyZDV4jCwAsEHxYKAH0FgmPAnwADCwkHCRBXzNmL6xfqOEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfPZxnri/J+mm92/N1Vbqc26ECAvS3y N7pRFzgJa6M+PAMVCggCmwECHgEWIQQsbKADB8d2OGZGx2dXzNmL6xfqOAAANzYA /1LqviQJRvmYwqQ9p8g84hWNVe/3uDFftkKvkD/mkEzNAQDhWf+xRxh4OzHMej8k X91xd389zkTSscgOvSQUoFKWAs0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCY8CfAAMLCQcJEFfM2YvrF+o4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ0L4GhD6AuKiFrIaA0EkkaMv6htBVIuicZTPfRLLqGMkAxUK CAKZAQKbAQIeARYhBCxsoAMHx3Y4ZkbHZ1fM2YvrF+o4AAAIrwD/Zae7xCJcEvdm Fb8iFoJ1dSuXY0FD9ICSIPIZLBFRPzwBAOHS6QfUbWojB8na6z8IK/8I+bdt6Yr5 uHaeJRF+444Mwr0EEBYKAG8FgmPB8IAJEGD80rBV/7SiRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ66/9II3TkXmWPlIkvyWZCaWdQjOU879 dnSXkelaKAeyFiEEPiy7/mcuEB4AYdVcYPzSsFX/tKIAACN2AP9LrN+n/HNB2EUk WX1DCi06oeXcNZulA+t9hYIj72D1LQEA+T5fQQ6IyIwlepcnXIkWwv3aggwECv2N HzDnzFTxsQ7OMwRjwJ8AFgkrBgEEAdpHDwEBB0COaoqxjlIHUSK+yBUxizwJSzmQ Lj+oAR0N26kzPmWS/MLAAAQYFgoAcgWCY8CfAAkQV8zZi+sX6jhHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnwmYRmhKdcv0MGYZHoT11RmS0 AuccJB93gsHzrdQv6hACmyAWIQQsbKADB8d2OGZGx2dXzNmL6xfqOAAARtEA/A0z Jqif5Q7lAKNicQVYPhaDQPSFWaaiIF810e8VgqlTAQDEaaxuebU0fTZKZVwo+diu VeXrctq6sQVo09jP9NPdDg== =H2du -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/override.pgp000064400000000000000000000074161046102023000165720ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEY8CfABYJKwYBBAHaRw8BAQdAnSnqyCNV7jtKX4rwSxZ4CyJmEv8Odgy3Y926 pyZDV4jCwAsEHxYKAH0FgmPAnwADCwkHCRBXzNmL6xfqOEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfPZxnri/J+mm92/N1Vbqc26ECAvS3y N7pRFzgJa6M+PAMVCggCmwECHgEWIQQsbKADB8d2OGZGx2dXzNmL6xfqOAAANzYA /1LqviQJRvmYwqQ9p8g84hWNVe/3uDFftkKvkD/mkEzNAQDhWf+xRxh4OzHMej8k X91xd389zkTSscgOvSQUoFKWAs0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCY8CfAAMLCQcJEFfM2YvrF+o4RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ0L4GhD6AuKiFrIaA0EkkaMv6htBVIuicZTPfRLLqGMkAxUK CAKZAQKbAQIeARYhBCxsoAMHx3Y4ZkbHZ1fM2YvrF+o4AAAIrwD/Zae7xCJcEvdm Fb8iFoJ1dSuXY0FD9ICSIPIZLBFRPzwBAOHS6QfUbWojB8na6z8IK/8I+bdt6Yr5 uHaeJRF+444Mwr0EEBYKAG8FgmPB8IAJEGD80rBV/7SiRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ66/9II3TkXmWPlIkvyWZCaWdQjOU879 dnSXkelaKAeyFiEEPiy7/mcuEB4AYdVcYPzSsFX/tKIAACN2AP9LrN+n/HNB2EUk WX1DCi06oeXcNZulA+t9hYIj72D1LQEA+T5fQQ6IyIwlepcnXIkWwv3aggwECv2N HzDnzFTxsQ7OMwRjwJ8AFgkrBgEEAdpHDwEBB0COaoqxjlIHUSK+yBUxizwJSzmQ Lj+oAR0N26kzPmWS/MLAAAQYFgoAcgWCY8CfAAkQV8zZi+sX6jhHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnwmYRmhKdcv0MGYZHoT11RmS0 AuccJB93gsHzrdQv6hACmyAWIQQsbKADB8d2OGZGx2dXzNmL6xfqOAAARtEA/A0z Jqif5Q7lAKNicQVYPhaDQPSFWaaiIF810e8VgqlTAQDEaaxuebU0fTZKZVwo+diu VeXrctq6sQVo09jP9NPdDsYzBGPAnwAWCSsGAQQB2kcPAQEHQO60D9rLzjCJRRxj 0FPNSxIZxaq5DLSLRU0QFSmhKEuqwsALBB8WCgB9BYJjwJ8AAwsJBwkQYPzSsFX/ tKJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnYRipIT1Z EzOyP1FmdMsifxS/ktQ5Mm+jQGKmU3VSy8UDFQoIApsBAh4BFiEEPiy7/mcuEB4A YdVcYPzSsFX/tKIAALF7APwNbBAEixWY6S18Q1pDTke4DXP9fpJi9yn9LcHbk+Jp 4wD+Jrwb+wRlDBWsvduSo6RVdz/tDCBPxQpDqwxg2FOfPAfNETxib2JAZXhhbXBs ZS5vcmc+wsAOBBMWCgCABYJjwJ8AAwsJBwkQYPzSsFX/tKJHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnrUU4hlZqEtIfQpKzKEt5UumZInId qSlnaaSgtgIIrXsDFQoIApkBApsBAh4BFiEEPiy7/mcuEB4AYdVcYPzSsFX/tKIA ACzkAP9+WruqfAXZNISzGuiSkBs7r2B9wjE8/qR3V0roHZ323wD/f9EvsOSALYe1 htJDA7YoR8D1b1MVM0mzRD35wdQ0mA7CvQQQFgoAbwWCY8STgAkQfhD256wdCk5H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnd2p+ctUF7Yvs wann+nmbBXVxlSzVeZhsckfxnfwsm+8WIQS0JZ4MHXZGFcpWDuV+EPbnrB0KTgAA MU4A+wYnOOB4vmniLM2Uu4LwRSvxqhpWgNqBd5xEtRYLr76BAP0cmbftgfZru/lJ 5ckurh4a4/yKESmZVZiK3sC9JVrfA8LAAQQQFgoAcwWCY8HwgAOFAngJEH4Q9ues HQpORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2V3Sc7w 367jl+M7l1k+JuVtvOvwyhCeNVYjHXr60EWqFiEEtCWeDB12RhXKVg7lfhD256wd Ck4AAD2BAP9aIL4Ms8D9szhgZWMVGQMCqgXYlU/9UFK6Jt7MEK+CSgEAwBJ1dl/J ST6z63Ks/jwtZc16IIpsqFawVTWSHksKMQTOMwRjwJ8AFgkrBgEEAdpHDwEBB0Av NaWfliDiiWIR3Kh6HJlibsOYTp+JdwJk2Klx5eq9AMLAAAQYFgoAcgWCY8CfAAkQ YPzSsFX/tKJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn ebgJpGhpAam7x91bfwSU0PedqZ/+oGZrYbNbIk8UrcACmyAWIQQ+LLv+Zy4QHgBh 1Vxg/NKwVf+0ogAAG0AA/RiRQ6RtmV0GftgWYfEqtzim0SfpQFsiSFdL3hOZlVZE AP9XRm94zOYhIJoVs7Ie2k/y+pusylsk6nb2GqZmX9f7CsYzBGPAnwAWCSsGAQQB 2kcPAQEHQNbfL9QnAFoaYLvgVrhL9vqH/NcjPY3ecSZ/SWB+f/ICwsALBB8WCgB9 BYJjwJ8AAwsJBwkQfhD256wdCk5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn6W2vGwmI94viGQBY5DuA4IuI9hDPzJmiQnUzodPOAvYDFQoI ApsBAh4BFiEEtCWeDB12RhXKVg7lfhD256wdCk4AAEwjAQD/5B1sJTaoUT8//4nI XsA0FmFMV0HNqGly+NYkcuDQ0wD+KdeNTRnA0Tr4l8MdoPIQim7kEvV5sEpSS+C8 OpX9PwTNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmPAnwADCwkHCRB+ EPbnrB0KTkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdV jAjsbgXQwgCGcaD8IhIbFh7F9lzLSK3uHV3xnsmb1gMVCggCmQECmwECHgEWIQS0 JZ4MHXZGFcpWDuV+EPbnrB0KTgAAUAIBAOV56yX/B98sQIY9QJopM9+veCPEMqZc Q8D63mx3DmAgAQCiSv7BgPRNrcNrK1SvzPXco1IBaUV/A27LqbsWVmU4BM4zBGPA nwAWCSsGAQQB2kcPAQEHQE5W5DaS0jlqH+Ji5er5BIllO0eMfMGBwB4qNZXAmAAh wsAABBgWCgByBYJjwJ8ACRB+EPbnrB0KTkcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmc2A8PR1iuK2LXWA3wssdICyxuraWFGUu+WhFlASyWy SQKbIBYhBLQlngwddkYVylYO5X4Q9uesHQpOAAAzbQD+K7vNDm8/w15tooXO8oY4 PoCKo/lBQPrsKhiXYIA//J4A/2ALoDegj2ZFHByBY3QNHYyME1rAH2FqzQ/a/XrD 0ogB =gVxV -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/override.sh000075500000000000000000000005751046102023000164200ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=override ${@:+"$@"} key -t 20230113 alice key -t 20230113 bob key -t 20230113 carol # On the 14th Alice makes Bob a trusted introducer. certify alice -t 20230114 -a 120 -d 2 bob # And Bob certifies Carol. certify bob -t 20230114 -a 120 -d 0 carol # On the 16th, Alice changes her mind. certify alice -t 20230116 -a 120 -d 0 bob finish sequoia-wot-0.11.0/tests/data/puny-code/README.md000064400000000000000000000003761046102023000174230ustar 00000000000000This is a simple network where a User ID contains an email address that would be normalized by puny code. ```text o alice | 2/100 v o hANS@bücher.tld | 1/100 v o carol ``` sequoia-wot-0.11.0/tests/data/puny-code/alice-priv.pgp000064400000000000000000000027671046102023000207150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B8DA 8B31 8149 B1C8 C0CB D1EC B1CE C6D3 CD00 E69D Comment: xVgEYb5eGBYJKwYBBAHaRw8BAQdAoFbXJ0GgoY99v0H6g3f87KrpDtc9tiUbF7/v o7ieRnQAAP9SxU2Q9QiYZpt4Md7qN7iI5wTsBb+N7tXHW8gwVKCoQRJTwsALBB8W CgB9BYJhvl4YAwsJBwkQsc7G080A5p1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnLKTvduUeJgSlHbGffR6j6UK9GCsRH1AoyNkSgRxG4D8D FQoIApsBAh4BFiEEuNqLMYFJscjAy9Hssc7G080A5p0AACISAQCIKZJFP4AI8N8l 3jaa0f3zhaG/h0Bgn4kqRGi049TZjAD+PYfKsbjQ9nKCuy53hnmg4zC6beXWGDIl 4WBKssNljQPNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmG+XhgDCwkH CRCxzsbTzQDmnUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdmo5vl2bVgMU/Uvr9q73956CBqVRW/YcSWP/GZjRQnbQMVCggCmQECmwECHgEW IQS42osxgUmxyMDL0eyxzsbTzQDmnQAAc8kA/3ySf18086/3cGy2HE2W3Rgha1fs /ldtCMtjpRpH9s/8AP9gzeriSoN3njSpPJneN0x6bK1w1vmYvfK4QODepI/8C8dY BGG+XhgWCSsGAQQB2kcPAQEHQF/e5aE3sPgA6AZyxSDtIHwel1XQ/imK2E9zoKgs 2ghjAAEAr5sPfoxQifSeULJrNFy9BKrpCyQQd4KcovF9jp2PyZIQGcLAvwQYFgoB MQWCYb5eGAkQsc7G080A5p1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn6SPnrjOdxu/fxVVWUka3NV3JAHSzLtFT+7+bMsuwwjgCmwK+oAQZ FgoAbwWCYb5eGAkQCjBygl5tG5xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnvCmdn7F/rXwfYWWwu4fLbf0Sb5XEMAjtDxb440MPmiAWIQQ2 W1RrywI0Rjbv7oYKMHKCXm0bnAAAyZwA/RV1ed884MFOOtDldVk/y0Zu5/fPts2J z/YGIxhQrY6FAP9668wBrZSiejMoxEL5/txgss32cYwWQMjxA6PMDvvhBRYhBLja izGBSbHIwMvR7LHOxtPNAOadAADsIQD/cHeU3q5R2wexL5tEqMKSJSW76G4OO9W/ Dz/X6y0E0FwBANW+TZkEeBe2RhTt+i6n9/R9Zmv617hHm2B7K0nEkLUA =t/Gm -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/puny-code/alice.pgp000064400000000000000000000026241046102023000177270ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: B8DA 8B31 8149 B1C8 C0CB D1EC B1CE C6D3 CD00 E69D Comment: xjMEYb5eGBYJKwYBBAHaRw8BAQdAoFbXJ0GgoY99v0H6g3f87KrpDtc9tiUbF7/v o7ieRnTCwAsEHxYKAH0FgmG+XhgDCwkHCRCxzsbTzQDmnUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcspO925R4mBKUdsZ99HqPpQr0YKxEf UCjI2RKBHEbgPwMVCggCmwECHgEWIQS42osxgUmxyMDL0eyxzsbTzQDmnQAAIhIB AIgpkkU/gAjw3yXeNprR/fOFob+HQGCfiSpEaLTj1NmMAP49h8qxuND2coK7LneG eaDjMLpt5dYYMiXhYEqyw2WNA80TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYb5eGAMLCQcJELHOxtPNAOadRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ2ajm+XZtWAxT9S+v2rvf3noIGpVFb9hxJY/8ZmNFCdtAxUK CAKZAQKbAQIeARYhBLjaizGBSbHIwMvR7LHOxtPNAOadAABzyQD/fJJ/XzTzr/dw bLYcTZbdGCFrV+z+V20Iy2OlGkf2z/wA/2DN6uJKg3eeNKk8md43THpsrXDW+Zi9 8rhA4N6kj/wLzjMEYb5eGBYJKwYBBAHaRw8BAQdAX97loTew+ADoBnLFIO0gfB6X VdD+KYrYT3OgqCzaCGPCwL8EGBYKATEFgmG+XhgJELHOxtPNAOadRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+kj564zncbv38VVVlJGtzVd yQB0sy7RU/u/mzLLsMI4ApsCvqAEGRYKAG8FgmG+XhgJEAowcoJebRucRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7wpnZ+xf618H2FlsLuH y239Em+VxDAI7Q8W+ONDD5ogFiEENltUa8sCNEY27+6GCjBygl5tG5wAAMmcAP0V dXnfPODBTjrQ5XVZP8tGbuf3z7bNic/2BiMYUK2OhQD/euvMAa2UonozKMRC+f7c YLLN9nGMFkDI8QOjzA774QUWIQS42osxgUmxyMDL0eyxzsbTzQDmnQAA7CEA/3B3 lN6uUdsHsS+bRKjCkiUlu+huDjvVvw8/1+stBNBcAQDVvk2ZBHgXtkYU7foup/f0 fWZr+te4R5tgeytJxJC1AA== =gext -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/puny-code/carol-priv.pgp000064400000000000000000000027671046102023000207400ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7432 C123 761B 94EC 50D5 0CF6 562B 9ADE E7F7 89F6 Comment: xVgEYb5eGBYJKwYBBAHaRw8BAQdAU1nm6ngUIGEAwJqKHfRU83nPipGZWJawUd2o ZnZKnCsAAP9nnwvXL9/NdmNAEYf3yu2hkRmyEF18BVTavX0EBj5+9BAuwsALBB8W CgB9BYJhvl4YAwsJBwkQViua3uf3ifZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnUxbjqsoGlyfjLQsparFMj37VTxxGHE80hSKOe3CY5CkD FQoIApsBAh4BFiEEdDLBI3YblOxQ1Qz2Viua3uf3ifYAALBIAQCWlQWONq1hsMbl vI1ota9omc7QgBxaeYhSzoNze8hSUgD/dySBwT5FFqVw8YcKW08Wi4slNwgeXz8a 5N1DEu8fFA3NEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmG+XhgDCwkH CRBWK5re5/eJ9kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeCRik1ZWf106El65SXckqSZpFlbQDXgjICpQ15WybeCgMVCggCmQECmwECHgEW IQR0MsEjdhuU7FDVDPZWK5re5/eJ9gAA5QEBAJ0eprDbGH8snPn/uHBfcWPM5rYZ bRnR+ZqJye+RBOt6AQCCzvlktZtN90aSqOzws/kdAN6/9SZRX8U/Wky7GsD1DMdY BGG+XhgWCSsGAQQB2kcPAQEHQJdSHuo9Rskie1lg7qfTsFQqdD8ahdzvjJyyLKTl VCeaAAEA8SfLYlRMxy2taRPx0j5s3SfySsx2Gf3TZdkabFbFMK0Ql8LAvwQYFgoB MQWCYb5eGAkQViua3uf3ifZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnDFiGJZtLM7Lv/3T11+fj/sD0i8QY02cniY257CgWttUCmwK+oAQZ FgoAbwWCYb5eGAkQ8rC5WqRUiNpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnoJhvfn3R3HwvXDiX03CaGK3yxPykQMjwIplh2kLXzMsWIQQ1 c2HWR2/nYcR4h1jysLlapFSI2gAAOKAA/RZK+U2y6Po8SWRnGkle17ovGYCrRPf7 5yHnDgAK8up/AP9Ordmy2X5QiP2EHmhq2HgACICz6h4o40bXd1ReQhU9DBYhBHQy wSN2G5TsUNUM9lYrmt7n94n2AABFyQD6A2f0xuWh2ceeqLxeMyy6ZyGPV4kghnp/ Awr3c1lQ5L4A/3VZ6bznkhLoYg6BbjUzXcTmDpxs9wlyrWVW/9Ii8VgG =1CMi -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/puny-code/carol.pgp000064400000000000000000000031131046102023000177440ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYb5eGBYJKwYBBAHaRw8BAQdAU1nm6ngUIGEAwJqKHfRU83nPipGZWJawUd2o ZnZKnCvCwAsEHxYKAH0FgmG+XhgDCwkHCRBWK5re5/eJ9kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdTFuOqygaXJ+MtCylqsUyPftVPHEYc TzSFIo57cJjkKQMVCggCmwECHgEWIQR0MsEjdhuU7FDVDPZWK5re5/eJ9gAAsEgB AJaVBY42rWGwxuW8jWi1r2iZztCAHFp5iFLOg3N7yFJSAP93JIHBPkUWpXDxhwpb TxaLiyU3CB5fPxrk3UMS7x8UDc0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYb5eGAMLCQcJEFYrmt7n94n2RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ4JGKTVlZ/XToSXrlJdySpJmkWVtANeCMgKlDXlbJt4KAxUK CAKZAQKbAQIeARYhBHQywSN2G5TsUNUM9lYrmt7n94n2AADlAQEAnR6msNsYfyyc +f+4cF9xY8zmthltGdH5monJ75EE63oBAILO+WS1m033RpKo7PCz+R0A3r/1JlFf xT9aTLsawPUMwsAHBBAWCgB5BYJhvl5UBYMJZ5o7A4UBZAkQnehn5spqJ1ZHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1Fe/1KSDN6ysQHt8 JeONCHcVmM+04X5DFOE/PuMvvMUWIQR0dnxPKxX1fzOU/Kmd6GfmymonVgAAYNUA /R2fw0BYl/nJQ728PpfEjBct877YSWc5gLyXFiPjcOoCAP0X3uGSeCYQ6sx6hU37 DWRXdwO5TStUlrPufxK4xqFqBs4zBGG+XhgWCSsGAQQB2kcPAQEHQJdSHuo9Rski e1lg7qfTsFQqdD8ahdzvjJyyLKTlVCeawsC/BBgWCgExBYJhvl4YCRBWK5re5/eJ 9kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcMWIYlm0sz su//dPXX5+P+wPSLxBjTZyeJjbnsKBa21QKbAr6gBBkWCgBvBYJhvl4YCRDysLla pFSI2kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmegmG9+ fdHcfC9cOJfTcJoYrfLE/KRAyPAimWHaQtfMyxYhBDVzYdZHb+dhxHiHWPKwuVqk VIjaAAA4oAD9Fkr5TbLo+jxJZGcaSV7Xui8ZgKtE9/vnIecOAAry6n8A/06t2bLZ flCI/YQeaGrYeAAIgLPqHijjRtd3VF5CFT0MFiEEdDLBI3YblOxQ1Qz2Viua3uf3 ifYAAEXJAPoDZ/TG5aHZx56ovF4zLLpnIY9XiSCGen8DCvdzWVDkvgD/dVnpvOeS EuhiDoFuNTNdxOYOnGz3CXKtZVb/0iLxWAY= =s9aR -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/puny-code/hÄNS-priv.pgp000064400000000000000000000027671046102023000210370ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7476 7C4F 2B15 F57F 3394 FCA9 9DE8 67E6 CA6A 2756 Comment: xVgEYb5eGBYJKwYBBAHaRw8BAQdA5jXihq6121tJx4chWt7hzOwwkC64QruuhXiS mAbCCOcAAQC231CMnYwVfRQBw8tUsgSDkRbJVW4SajbSzWmFE3vxzg8cwsALBB8W CgB9BYJhvl4YAwsJBwkQnehn5spqJ1ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JntZ5Zqn/lm+lS7oM0MDrbiluO9ZjibYfFeCi60zGIPLMD FQoIApsBAh4BFiEEdHZ8TysV9X8zlPypnehn5spqJ1YAAB4UAQDh7fZhbE76iSzb d0yRChm2w9ZmwfSyhw6lKNXKG4ctRAD7BWj4qyIyYzdeaADE4c8dXWoB4KBP9IfE xYIcAbZ3FwXNEzxow4ROU0Biw7xjaGVyLnRsZD7CwA4EExYKAIAFgmG+XhgDCwkH CRCd6GfmymonVkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmd2w6jcEVXJPi7I3P6c9eDf5/G8ph95lQ5eWc6NebzhGwMVCggCmQECmwECHgEW IQR0dnxPKxX1fzOU/Kmd6GfmymonVgAAxw4A/3cbVzAiZGK2PZyEXbIeXcilnbWI D/UZCh83sc8Hx0w5AQDBODm0hkv7Dk3whKlZJhDm2/xgzcEvXjAJCtc4nP37AMdY BGG+XhgWCSsGAQQB2kcPAQEHQGlDT4iKs4T8pz5e+WkfEwsqX5KIYGsv/G5st9wA F3jVAAEApvY6QBYmKHWLAujlmbLhULqY1hCkg8oIYRQcuHZO22gPR8LAvwQYFgoB MQWCYb5eGAkQnehn5spqJ1ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnJjcGwBle2bBWFfKtLYJTVFe4V6WS/lcNmLJUHqBbHW0CmwK+oAQZ FgoAbwWCYb5eGAkQ9sQrFEvEpstHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnHZMt0Wz/Lq9EHK6LAPclPMHlb2qSY4wOlfG/TvucvL0WIQQR OijbxNtm4aWbsgD2xCsUS8SmywAAZWsBAOFkIagKqfuPcN5IS+bbaVDQrehg8A6/ laLhsEqDYj2vAQD98M4OQJ/QBCRit4HgwS9Jnnthtcd/66gxmtuDSeZvAxYhBHR2 fE8rFfV/M5T8qZ3oZ+bKaidWAAATMAD+On2WgvqqG+XmF5zRVdx4bmypZQRs19BI R9aGbxsZMzEBAIc6hBvMwoMRJLrdXLvgIH7d11s2rg+FmDLdzAEUv4cP =TqJE -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/puny-code/hÄNS.pgp000064400000000000000000000031131046102023000200430ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYb5eGBYJKwYBBAHaRw8BAQdA5jXihq6121tJx4chWt7hzOwwkC64QruuhXiS mAbCCOfCwAsEHxYKAH0FgmG+XhgDCwkHCRCd6GfmymonVkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme1nlmqf+Wb6VLugzQwOtuKW471mOJt h8V4KLrTMYg8swMVCggCmwECHgEWIQR0dnxPKxX1fzOU/Kmd6GfmymonVgAAHhQB AOHt9mFsTvqJLNt3TJEKGbbD1mbB9LKHDqUo1cobhy1EAPsFaPirIjJjN15oAMTh zx1dagHgoE/0h8TFghwBtncXBc0TPGjDhE5TQGLDvGNoZXIudGxkPsLADgQTFgoA gAWCYb5eGAMLCQcJEJ3oZ+bKaidWRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ3bDqNwRVck+Lsjc/pz14N/n8bymH3mVDl5Zzo15vOEbAxUK CAKZAQKbAQIeARYhBHR2fE8rFfV/M5T8qZ3oZ+bKaidWAADHDgD/dxtXMCJkYrY9 nIRdsh5dyKWdtYgP9RkKHzexzwfHTDkBAME4ObSGS/sOTfCEqVkmEObb/GDNwS9e MAkK1zic/fsAwsAHBBAWCgB5BYJhvl5UBYMJZ5o7A4UCZAkQsc7G080A5p1HFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnmbv/FcH0zrsIDWP0 ahOFHpyOxOEBNGUDAd2l0BnR3zUWIQS42osxgUmxyMDL0eyxzsbTzQDmnQAAhjwA /0oCpk9JEhPFcHPM2EaDQm0mcHFfH4D2+yIJ1xcpk+2cAP9VoeJKDOHpn/1hTIQr B/Rj2dzgpM32kr9lVM+5XyGVCM4zBGG+XhgWCSsGAQQB2kcPAQEHQGlDT4iKs4T8 pz5e+WkfEwsqX5KIYGsv/G5st9wAF3jVwsC/BBgWCgExBYJhvl4YCRCd6Gfmymon VkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcmNwbAGV7Z sFYV8q0tglNUV7hXpZL+Vw2YslQeoFsdbQKbAr6gBBkWCgBvBYJhvl4YCRD2xCsU S8Smy0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcdky3R bP8ur0QcrosA9yU8weVvapJjjA6V8b9O+5y8vRYhBBE6KNvE22bhpZuyAPbEKxRL xKbLAABlawEA4WQhqAqp+49w3khL5ttpUNCt6GDwDr+VouGwSoNiPa8BAP3wzg5A n9AEJGK3geDBL0mee2G1x3/rqDGa24NJ5m8DFiEEdHZ8TysV9X8zlPypnehn5spq J1YAABMwAP46fZaC+qob5eYXnNFV3HhubKllBGzX0EhH1oZvGxkzMQEAhzqEG8zC gxEkut1cu+Agft3XWzauD4WYMt3MARS/hw8= =e3LF -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/puny-code.pgp000064400000000000000000000104561046102023000166540ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYb5eGBYJKwYBBAHaRw8BAQdAU1nm6ngUIGEAwJqKHfRU83nPipGZWJawUd2o ZnZKnCvCwAsEHxYKAH0FgmG+XhgDCwkHCRBWK5re5/eJ9kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdTFuOqygaXJ+MtCylqsUyPftVPHEYc TzSFIo57cJjkKQMVCggCmwECHgEWIQR0MsEjdhuU7FDVDPZWK5re5/eJ9gAAsEgB AJaVBY42rWGwxuW8jWi1r2iZztCAHFp5iFLOg3N7yFJSAP93JIHBPkUWpXDxhwpb TxaLiyU3CB5fPxrk3UMS7x8UDc0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYb5eGAMLCQcJEFYrmt7n94n2RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ4JGKTVlZ/XToSXrlJdySpJmkWVtANeCMgKlDXlbJt4KAxUK CAKZAQKbAQIeARYhBHQywSN2G5TsUNUM9lYrmt7n94n2AADlAQEAnR6msNsYfyyc +f+4cF9xY8zmthltGdH5monJ75EE63oBAILO+WS1m033RpKo7PCz+R0A3r/1JlFf xT9aTLsawPUMwsAHBBAWCgB5BYJhvl5UBYMJZ5o7A4UBZAkQnehn5spqJ1ZHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1Fe/1KSDN6ysQHt8 JeONCHcVmM+04X5DFOE/PuMvvMUWIQR0dnxPKxX1fzOU/Kmd6GfmymonVgAAYNUA /R2fw0BYl/nJQ728PpfEjBct877YSWc5gLyXFiPjcOoCAP0X3uGSeCYQ6sx6hU37 DWRXdwO5TStUlrPufxK4xqFqBs4zBGG+XhgWCSsGAQQB2kcPAQEHQJdSHuo9Rski e1lg7qfTsFQqdD8ahdzvjJyyLKTlVCeawsC/BBgWCgExBYJhvl4YCRBWK5re5/eJ 9kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcMWIYlm0sz su//dPXX5+P+wPSLxBjTZyeJjbnsKBa21QKbAr6gBBkWCgBvBYJhvl4YCRDysLla pFSI2kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmegmG9+ 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 Lqf39H1ma/rXuEebYHsrScSQtQA= =Rfni -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/puny-code.sh000075500000000000000000000003131046102023000164720ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=puny-code ${@:+"$@"} key alice key 'hÄNS@bücher.tld' key carol certify alice -a 100 -d 2 hÄNS '' certify hÄNS -a 100 -d 1 carol finish sequoia-wot-0.11.0/tests/data/regex-1/README.md000064400000000000000000000011311046102023000167560ustar 00000000000000alice makes bob a trusted introducer for the "example.org" domain. bob makes dave a trusted introducer for the "other.org" domain. This means that A - B - D - E is invalid, because ed@example.org is out of scope of the B - D delegation (i.e., it does not match other.org). ``` alice@some.org | 100/3/example.org bob@example.org 150/0 / \ 100/3/other.org carol@example.org dave@other.org 100/0 / \ 100/0 ed@example.org frank@other.org ``` sequoia-wot-0.11.0/tests/data/regex-1/alice-priv.pgp000064400000000000000000000027601046102023000202530ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3AD1 F297 E4B1 50F7 5DBF C434 76FB 81BF E066 5C3A Comment: xVgEYVcGVxYJKwYBBAHaRw8BAQdAnnyYUB9L5rYOvJjIsdEgY33Hz4EToH1AXBQN j6KUiqAAAQDOX/4Z0/hkipfkOLtJgkCJXrmS/LywcXi2qpikf03XThKHwsALBB8W CgB9BYJhVwZXAwsJBwkQdvuBv+BmXDpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn32+BGL+KvYladOCOIZCFgDA6t2rq5mr6zHuaYMBW54kD FQoIApsBAh4BFiEEOtHyl+SxUPddv8Q0dvuBv+BmXDoAADusAQDy5w1+bj5Wffsf 8wel213L6EsNybajQZOdMwWZjShmwAEAy9Dbyc5peFgIwjLu5yah3YC4z0XUg5Tx 19EdP75YvwLNEDxhbGljZUBzb21lLm9yZz7CwA4EExYKAIAFgmFXBlcDCwkHCRB2 +4G/4GZcOkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeW W1bw3Lm1dkdYiYkals9/Z+atDCCyVrqVi4Z9aXfOugMVCggCmQECmwECHgEWIQQ6 0fKX5LFQ912/xDR2+4G/4GZcOgAAGeoA/16yqrw8R00RzpKQ4kNvbWLpfycmwIXd p9tNY0CDhixMAQCLVz/cU8Nu0dIvJftSSbS6KL1878qkB7GgYfSrs7W6AcdYBGFX BlcWCSsGAQQB2kcPAQEHQA05kCQ66O3xZa1j2FLqnqABfJHVmjuy+CEiFeYkMe8s AAD+NhcrXxeaPhBkQnnfdKpw2zpWlqABhMcb4CxmPzg4J14NDsLAvwQYFgoBMQWC YVcGVwkQdvuBv+BmXDpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnQm09bsBijma+/NRH53iJwWPANNr9kQaewRMYnXsQZKICmwK+oAQZFgoA bwWCYVcGVwkQA0aBvzdx2ftHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnNWIR/dGFPhwsy27go1TUP89ok6ImMTTiV6q7lDqlddwWIQRubz2U ghsYIYaZptIDRoG/N3HZ+wAA4KgA/3Jmv8ExtxqJLVaxj1Gi97p6v5JcpQzPV6jh nZ6g6FeaAQC8dw1x10CWXgBBUMYA4CNDwAomenwpNJ8JnC4wgedOABYhBDrR8pfk sVD3Xb/ENHb7gb/gZlw6AADxHAD/YC1tF2r7cPEupntSaJnr0JT0l4pzGZkDSWR4 qpJmAzsA/REdR7D8iucnzHRvDehKwkkWBoKfY7tGAEMCSafoJ5YO =Gp4Z -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1/alice.pgp000064400000000000000000000026151046102023000172740ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 3AD1 F297 E4B1 50F7 5DBF C434 76FB 81BF E066 5C3A Comment: xjMEYVcGVxYJKwYBBAHaRw8BAQdAnnyYUB9L5rYOvJjIsdEgY33Hz4EToH1AXBQN j6KUiqDCwAsEHxYKAH0FgmFXBlcDCwkHCRB2+4G/4GZcOkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmffb4EYv4q9iVp04I4hkIWAMDq3aurm avrMe5pgwFbniQMVCggCmwECHgEWIQQ60fKX5LFQ912/xDR2+4G/4GZcOgAAO6wB APLnDX5uPlZ9+x/zB6XbXcvoSw3JtqNBk50zBZmNKGbAAQDL0NvJzml4WAjCMu7n JqHdgLjPRdSDlPHX0R0/vli/As0QPGFsaWNlQHNvbWUub3JnPsLADgQTFgoAgAWC YVcGVwMLCQcJEHb7gb/gZlw6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ5ZbVvDcubV2R1iJiRqWz39n5q0MILJWupWLhn1pd866AxUKCAKZ AQKbAQIeARYhBDrR8pfksVD3Xb/ENHb7gb/gZlw6AAAZ6gD/XrKqvDxHTRHOkpDi Q29tYul/JybAhd2n201jQIOGLEwBAItXP9xTw27R0i8l+1JJtLoovXzvyqQHsaBh 9KuztboBzjMEYVcGVxYJKwYBBAHaRw8BAQdADTmQJDro7fFlrWPYUuqeoAF8kdWa O7L4ISIV5iQx7yzCwL8EGBYKATEFgmFXBlcJEHb7gb/gZlw6RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0JtPW7AYo5mvvzUR+d4icFjwDTa /ZEGnsETGJ17EGSiApsCvqAEGRYKAG8FgmFXBlcJEANGgb83cdn7RxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzViEf3RhT4cLMtu4KNU1D/P aJOiJjE04lequ5Q6pXXcFiEEbm89lIIbGCGGmabSA0aBvzdx2fsAAOCoAP9yZr/B MbcaiS1WsY9Rove6er+SXKUMz1eo4Z2eoOhXmgEAvHcNcddAll4AQVDGAOAjQ8AK Jnp8KTSfCZwuMIHnTgAWIQQ60fKX5LFQ912/xDR2+4G/4GZcOgAA8RwA/2AtbRdq +3DxLqZ7UmiZ69CU9JeKcxmZA0lkeKqSZgM7AP0RHUew/IrnJ8x0bw3oSsJJFgaC n2O7RgBDAkmn6CeWDg== =50By -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1/bob-priv.pgp000064400000000000000000000027651046102023000177450ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 20C8 1211 7FB2 A394 0EAE 9160 FEE6 B4E4 7A09 6FD1 Comment: xVgEYVcGVxYJKwYBBAHaRw8BAQdAy7NAyOBSV7gWMUBUs7Xz2O3bIU52d9Ct1gco dgB4bkgAAQDri7kp6pfOoLsKEE8voND469py5z2/xoeedmHlpdVeJxLDwsALBB8W CgB9BYJhVwZXAwsJBwkQ/ua05HoJb9FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnUoS1A7UzeHTZVmgfIXJMCxjXiKgoRQmJaEFniCZrNysD FQoIApsBAh4BFiEEIMgSEX+yo5QOrpFg/ua05HoJb9EAAPfKAP9kS7XVp7Oj4rSp VLi+VTv/Q9gAhKhYoYe6x+F9yLgakAEAqqtDy8aB2AqqIuISsGs32GYInNXe5kft 4CsQaTdcYA7NETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhVwZXAwsJBwkQ /ua05HoJb9FHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn vAnovyA5URXsL96BF0xOrRd9tDAKSIYFMc/5RgC6F5UDFQoIApkBApsBAh4BFiEE IMgSEX+yo5QOrpFg/ua05HoJb9EAADF4AQCqneKGrCeOMFt+IFJclu3q41pJXq/T xQ/17GATbHDiSAD8C6KzgrzWS0KBW2vikdnIrS2mV/KwAqcGFxJCU+Hk8AvHWARh VwZXFgkrBgEEAdpHDwEBB0ACt/UN5MpJ4bKmaqQgsjxMMOTbKmNyQcDimi6BrLhv jQAA/2gvRojrhllP1qOdlo7AaavW0awR5cKiCmEpkyUSjqiiEW7CwL8EGBYKATEF gmFXBlcJEP7mtOR6CW/RRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ+7PZzo2kojfgWX+jrgS2QTjtkJgokWMOYbcNWilriKIApsCvqAEGRYK AG8FgmFXBlcJEFkrJD0RumJzRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ9cIOUjyMmLsaZc/ekrRPqVtoBB7As8yosJWa2CoDudJFiEEBSYR r8eI4MJb9ngSWSskPRG6YnMAAN2iAQDZNlYk0ZHQzcvYMCXqxN0bj57FmcRRB5KB kfqctDPGYQD9Hoeo4W7Ko3N0xJzyh+EbtU5QZEfvHLGDuyFa7k1bwgkWIQQgyBIR f7KjlA6ukWD+5rTkeglv0QAAgCsA/3PTz9Fhm2enwVh/2cFV07BrM5auZnbkWFCs eaZyPkIKAQCGfZD3rkYAbeZleH2Kkv6wYLtSmuO1X5hmjNPaLaksAQ== =N7r6 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1/bob.pgp000064400000000000000000000031541046102023000167600ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcGVxYJKwYBBAHaRw8BAQdAy7NAyOBSV7gWMUBUs7Xz2O3bIU52d9Ct1gco dgB4bkjCwAsEHxYKAH0FgmFXBlcDCwkHCRD+5rTkeglv0UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdShLUDtTN4dNlWaB8hckwLGNeIqChF CYloQWeIJms3KwMVCggCmwECHgEWIQQgyBIRf7KjlA6ukWD+5rTkeglv0QAA98oA /2RLtdWns6PitKlUuL5VO/9D2ACEqFihh7rH4X3IuBqQAQCqq0PLxoHYCqoi4hKw azfYZgic1d7mR+3gKxBpN1xgDs0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFXBlcDCwkHCRD+5rTkeglv0UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcme8Cei/IDlRFewv3oEXTE6tF320MApIhgUxz/lGALoXlQMVCggC mQECmwECHgEWIQQgyBIRf7KjlA6ukWD+5rTkeglv0QAAMXgBAKqd4oasJ44wW34g UlyW7erjWkler9PFD/XsYBNscOJIAPwLorOCvNZLQoFba+KR2citLaZX8rACpwYX EkJT4eTwC8LAIgQQFgoAlAWCYVcGkwWDCWeaOwOFA2QahjxbXj5dK1tALl1leGFt cGxlXC5vcmc+JAAJEHb7gb/gZlw6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ5rK7lOD9oPM6sOunpdYRijjkRLw0djrbWQdXiZF4MA5FiEE OtHyl+SxUPddv8Q0dvuBv+BmXDoAALICAP9V7qZ5gdL20yGT+Nac8YNnMKyF2d6B xsyuhrpUw4PUpQEA48GDSSwxIt0aAQJIwJLExg38uQ7oSxRjVVrYLeum4gnOMwRh VwZXFgkrBgEEAdpHDwEBB0ACt/UN5MpJ4bKmaqQgsjxMMOTbKmNyQcDimi6BrLhv jcLAvwQYFgoBMQWCYVcGVwkQ/ua05HoJb9FHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jn7s9nOjaSiN+BZf6OuBLZBOO2QmCiRYw5htw1aKWu IogCmwK+oAQZFgoAbwWCYVcGVwkQWSskPRG6YnNHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1wg5SPIyYuxplz96StE+pW2gEHsCzzKiwlZr YKgO50kWIQQFJhGvx4jgwlv2eBJZKyQ9EbpicwAA3aIBANk2ViTRkdDNy9gwJerE 3RuPnsWZxFEHkoGR+py0M8ZhAP0eh6jhbsqjc3TEnPKH4Ru1TlBkR+8csYO7IVru TVvCCRYhBCDIEhF/sqOUDq6RYP7mtOR6CW/RAACAKwD/c9PP0WGbZ6fBWH/ZwVXT sGszlq5mduRYUKx5pnI+QgoBAIZ9kPeuRgBt5mV4fYqS/rBgu1Ka47VfmGaM09ot qSwB =P2t0 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1/carol-priv.pgp000064400000000000000000000027671046102023000203050ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: BC30 9783 45D7 89CA DECD E492 F54B 42E1 625E 1A1D Comment: xVgEYVcGVxYJKwYBBAHaRw8BAQdA70kq9pBLDB2loVcuFnXkPYBtwswWCgth98AC BYFvUH4AAP96KsXharxLxc+K3XXR0j93Xespau8BqIoqID++uET7+RK3wsALBB8W CgB9BYJhVwZXAwsJBwkQ9UtC4WJeGh1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JndF/ZR2vwAbPD5yCCyVbA7ciD8n0104EMOss/JnnYjkgD FQoIApsBAh4BFiEEvDCXg0XXicrezeSS9UtC4WJeGh0AAFHFAP0a8LhTSXWpFA9n wspaF/ydi6i9PorhQWaEl8o2r6rcrQEArWJm4y0ypnw6204jebqJCGZORR/RM0g+ jTaw2AiUwwXNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFXBlcDCwkH CRD1S0LhYl4aHUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeTUKihLtpmCDRRlvorIvUGadEDVchBAYV2dKihm1u6fwMVCggCmQECmwECHgEW IQS8MJeDRdeJyt7N5JL1S0LhYl4aHQAAu3oA/iZwzCCIiW3cdhX3fyAlr6OapcaJ 9+kULRh3FiaKpb0PAQC5r73rGowS+oJmxbF+/FhC75Oc1rE9I6G3fhRdaHygAsdY BGFXBlcWCSsGAQQB2kcPAQEHQE/+sj7UGSAlhEddglTjZm/Yjs7ROIHUAoEgCfB8 ucMlAAEAk79f+61jISWUoszg8WtMJFik7k84W6LjunPi9LoonkkRzsLAvwQYFgoB MQWCYVcGVwkQ9UtC4WJeGh1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jny/vQzJpuUhZUtMkz3ZfQASV0AoUMGEO/iHNipCP9tL0CmwK+oAQZ FgoAbwWCYVcGVwkQhu6J95X6e0tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnxn9CZLnnm2dtWPnuI5GJ/Z4fe6l9gYJvPOIHxUQh6TEWIQSg Q7bcQjyUiIiFaVeG7on3lfp7SwAAxrkBAJ93hrJmaUSk+HMHsxVoxSRBftshB2Kd 5V0Or5gdAjZNAQCcOhDbTbgpv9BkOzKPAVAdxMsBrbJOI8N2pPhsdrv8DBYhBLww l4NF14nK3s3kkvVLQuFiXhodAAASvgEA9lTgyHGEIQ6m5oIcD9q2YKnRqwmbXgBj +mzEjVH7qYwBAPVm5NXLftT1kKw0QoPPf8C4FHjMcIBMrB7ns9zDGn8D =zzaW -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1/carol.pgp000064400000000000000000000031131046102023000173110ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcGVxYJKwYBBAHaRw8BAQdA70kq9pBLDB2loVcuFnXkPYBtwswWCgth98AC BYFvUH7CwAsEHxYKAH0FgmFXBlcDCwkHCRD1S0LhYl4aHUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd0X9lHa/ABs8PnIILJVsDtyIPyfTXT gQw6yz8mediOSAMVCggCmwECHgEWIQS8MJeDRdeJyt7N5JL1S0LhYl4aHQAAUcUA /RrwuFNJdakUD2fCyloX/J2LqL0+iuFBZoSXyjavqtytAQCtYmbjLTKmfDrbTiN5 uokIZk5FH9EzSD6NNrDYCJTDBc0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVcGVwMLCQcJEPVLQuFiXhodRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ5NQqKEu2mYINFGW+isi9QZp0QNVyEEBhXZ0qKGbW7p/AxUK CAKZAQKbAQIeARYhBLwwl4NF14nK3s3kkvVLQuFiXhodAAC7egD+JnDMIIiJbdx2 Ffd/ICWvo5qlxon36RQtGHcWJoqlvQ8BALmvvesajBL6gmbFsX78WELvk5zWsT0j obd+FF1ofKACwsAHBBAWCgB5BYJhVwaTBYMJZ5o7A4UBZAkQ/ua05HoJb9FHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnpb9ObBnjo4yC1s8a 5pJWUYhC+xxFG/hGX2to8aTIvjQWIQQgyBIRf7KjlA6ukWD+5rTkeglv0QAAwqkB AOg421OeLz+0X7x4mMgpV8HLnduQSOYuqa+BQWtecZ/iAQC8cx2vNZ1v2UqLDD+g EDoEyzZIGeS/pu8E+e5gqCbNDM4zBGFXBlcWCSsGAQQB2kcPAQEHQE/+sj7UGSAl hEddglTjZm/Yjs7ROIHUAoEgCfB8ucMlwsC/BBgWCgExBYJhVwZXCRD1S0LhYl4a HUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfL+9DMmm5S FlS0yTPdl9ABJXQChQwYQ7+Ic2KkI/20vQKbAr6gBBkWCgBvBYJhVwZXCRCG7on3 lfp7S0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfGf0Jk ueebZ21Y+e4jkYn9nh97qX2Bgm884gfFRCHpMRYhBKBDttxCPJSIiIVpV4buifeV +ntLAADGuQEAn3eGsmZpRKT4cwezFWjFJEF+2yEHYp3lXQ6vmB0CNk0BAJw6ENtN uCm/0GQ7Mo8BUB3EywGtsk4jw3ak+Gx2u/wMFiEEvDCXg0XXicrezeSS9UtC4WJe Gh0AABK+AQD2VODIcYQhDqbmghwP2rZgqdGrCZteAGP6bMSNUfupjAEA9Wbk1ct+ 1PWQrDRCg89/wLgUeMxwgEysHuez3MMafwM= =gKTh -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1/dave-priv.pgp000064400000000000000000000027601046102023000201150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3198 10FA D46C BE96 DAD7 F1F5 B014 9025 9299 9B21 Comment: xVgEYVcGVxYJKwYBBAHaRw8BAQdAGa5zLlBLCpTsTM6C9eskos9iHzEx8+LJ1djj cJbIsdcAAQCcPQ7PEFaNBd5gVlanJl91kFhFFLAbzvVuYmFA3fEJCg1bwsALBB8W CgB9BYJhVwZXAwsJBwkQsBSQJZKZmyFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn/lMajzBEnKsQjBf0RJt86BPeMTgSOrttiLqgo1d0C/8D FQoIApsBAh4BFiEEMZgQ+tRsvpba1/H1sBSQJZKZmyEAAIV4AQDWpoh7kBPTtVPG ve7Bhactn9g8nUzSr0zCr3iP1YMQeAEAkxj+HXwnCZUsbcYc2l6ebo0j1Ls5M5KG SB+2gHyiAADNEDxkYXZlQG90aGVyLm9yZz7CwA4EExYKAIAFgmFXBlcDCwkHCRCw FJAlkpmbIUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcg xU9dlyFFZqT7bJQ2a1WGPERwzqRVwKYi2X1tm2gzHQMVCggCmQECmwECHgEWIQQx mBD61Gy+ltrX8fWwFJAlkpmbIQAABKYA/j2bydPX7bhVv+VOGpq8EQZzTPFHnUmF jWsWqc0rGKiSAQCRVq8nY98V3dC3JPJX+5f+8OYQ7ZnAvAeqiL+RUTf3C8dYBGFX BlcWCSsGAQQB2kcPAQEHQCyWXqi8zK1mLNZZZtSZX4cwlqw/6EFlaEeRfdVmINVC AAD7B8YqgUueUMRNv6Ikgz9JiCIvUk89L3I7uZR11rwrf/YO1MLAvwQYFgoBMQWC YVcGVwkQsBSQJZKZmyFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn9JBNov46LV1n18GEsoTuZ6jkyhaSo4Ktcc13kAZV+ngCmwK+oAQZFgoA bwWCYVcGVwkQd0Dw4UyPEjJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn8uX59k5JqxxqoFtX7SI+REBxk+TtCTnM97ULPE0hLCsWIQQ+Iabw RR2SdynMv113QPDhTI8SMgAAyS4A/And0om7UIDrpWKE1IdKPN0Flp596pCIgwew shwA1LgtAPwPOCjhX9vIcn0+NXBPO9gHafcbmTybIQUsaJPg3tFMDhYhBDGYEPrU bL6W2tfx9bAUkCWSmZshAAAGhQD9HxgnpwKm0JJyVOoRSJHGIX2Q/38FyuVNHZ14 PpB+Ez0A/1rzVzAdw6LRe8UbXRJLhN+/WHtt0QnUWFnG/gWPhGoB =Dw+N -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1/dave.pgp000064400000000000000000000031471046102023000171370ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcGVxYJKwYBBAHaRw8BAQdAGa5zLlBLCpTsTM6C9eskos9iHzEx8+LJ1djj cJbIsdfCwAsEHxYKAH0FgmFXBlcDCwkHCRCwFJAlkpmbIUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf+UxqPMEScqxCMF/REm3zoE94xOBI6 u22IuqCjV3QL/wMVCggCmwECHgEWIQQxmBD61Gy+ltrX8fWwFJAlkpmbIQAAhXgB ANamiHuQE9O1U8a97sGFpy2f2DydTNKvTMKveI/VgxB4AQCTGP4dfCcJlSxtxhza Xp5ujSPUuzkzkoZIH7aAfKIAAM0QPGRhdmVAb3RoZXIub3JnPsLADgQTFgoAgAWC YVcGVwMLCQcJELAUkCWSmZshRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZyDFT12XIUVmpPtslDZrVYY8RHDOpFXApiLZfW2baDMdAxUKCAKZ AQKbAQIeARYhBDGYEPrUbL6W2tfx9bAUkCWSmZshAAAEpgD+PZvJ09ftuFW/5U4a mrwRBnNM8UedSYWNaxapzSsYqJIBAJFWrydj3xXd0Lck8lf7l/7w5hDtmcC8B6qI v5FRN/cLwsAgBBAWCgCSBYJhVwaTBYMJZ5o7A4UBZBiGPFtePl0rW0AuXW90aGVy XC5vcmc+JAAJEP7mtOR6CW/RRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ4RdwcKHzGCpSrmeUu7u8/p9HLNZq/5uf+tjEMSR5aooFiEEIMgS EX+yo5QOrpFg/ua05HoJb9EAAGvUAQCqY7z0/jGnKUh8qnOmtI+BPpTVGdP4NEy0 vZ6OBGv4qAEA3n79TAD4oAagEjnRb2evdv6grlVZbOpqHd/ZFCghUwvOMwRhVwZX FgkrBgEEAdpHDwEBB0Asll6ovMytZizWWWbUmV+HMJasP+hBZWhHkX3VZiDVQsLA vwQYFgoBMQWCYVcGVwkQsBSQJZKZmyFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn9JBNov46LV1n18GEsoTuZ6jkyhaSo4Ktcc13kAZV+ngC mwK+oAQZFgoAbwWCYVcGVwkQd0Dw4UyPEjJHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3Jn8uX59k5JqxxqoFtX7SI+REBxk+TtCTnM97ULPE0h LCsWIQQ+IabwRR2SdynMv113QPDhTI8SMgAAyS4A/And0om7UIDrpWKE1IdKPN0F lp596pCIgwewshwA1LgtAPwPOCjhX9vIcn0+NXBPO9gHafcbmTybIQUsaJPg3tFM DhYhBDGYEPrUbL6W2tfx9bAUkCWSmZshAAAGhQD9HxgnpwKm0JJyVOoRSJHGIX2Q /38FyuVNHZ14PpB+Ez0A/1rzVzAdw6LRe8UbXRJLhN+/WHtt0QnUWFnG/gWPhGoB =ThT+ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1/ed-priv.pgp000064400000000000000000000027601046102023000175660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 23D7 418E A0C6 A42A 54C3 2DBE 8D4F E491 1ED0 8467 Comment: xVgEYVcGVxYJKwYBBAHaRw8BAQdAqiDS6t6QSGbXPC7QzGh4MA0FPlAWtdZRkp9T 8zh8OiQAAP44KfsF2BA/gRDed0AF5VwkAZP+212LScwb/HoJdMAvvQ86wsALBB8W CgB9BYJhVwZXAwsJBwkQjU/kkR7QhGdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnOcDih5z+5yoeLNRRL6xLV5FeXzTaKsO10G8GVjk3R4ID FQoIApsBAh4BFiEEI9dBjqDGpCpUwy2+jU/kkR7QhGcAACd2APwOt57208XpXBZd gRVqXU5NZZqFp2YxKQyCcSqUHBCYSgD/RwTp9T/wFT1tBntxYF5StF9dHj/j0lpc yMM/1m/XdgPNEDxlZEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFXBlcDCwkHCRCN T+SRHtCEZ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeZ LOSyAM3GTdba1YTuQEfYb9IcAI87DXvZuBc3w5AGAgMVCggCmQECmwECHgEWIQQj 10GOoMakKlTDLb6NT+SRHtCEZwAAascA/12NRVK49DtJt87TtvjGkhvxk6NNLTPB J++qbSkcY79dAP4oGEjriZIhB+wqbWwbDCCxgE1LXpC1SPN/q4oGqTDZAMdYBGFX BlcWCSsGAQQB2kcPAQEHQHY5l2V02rn6W7EBxRlNYqJj2YkeoGF55+3303EWmmZO AAD/YSkHIB1im2R+jLoqM8C0SLlqoqLciT/ZvYHOtIOed6wQ88LAvwQYFgoBMQWC YVcGVwkQjU/kkR7QhGdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnTegbpT98PN+GMPnJSjCxM9AoO4nLMjvnIMvG+vJu/ewCmwK+oAQZFgoA bwWCYVcGVwkQlfwoLQD81/ZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnKSzNgIZwJM1/Oj13Tea4ki8dAvo8ThBqXCntNG187pgWIQSA+IUq jJv9QlwZBseV/CgtAPzX9gAAcr0BAPXP4vGws6hc7pSHTg+K80HQxYIEfVcTWbgF F6thMlPFAQDKJo38gv687NlnHwj8TfAVgFkE+ZZN84cDqPr+saJOBBYhBCPXQY6g xqQqVMMtvo1P5JEe0IRnAAA9cgEAjA9YCERyXRBTbvdm6Uu9g2fUhnorQmmZhZ5x zMkWiesBALUrG6idy2BPAVowIX3q8y2cDTqo5BjbV//ceEHenkAP =fTH6 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1/ed.pgp000064400000000000000000000031071046102023000166040ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcGVxYJKwYBBAHaRw8BAQdAqiDS6t6QSGbXPC7QzGh4MA0FPlAWtdZRkp9T 8zh8OiTCwAsEHxYKAH0FgmFXBlcDCwkHCRCNT+SRHtCEZ0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc5wOKHnP7nKh4s1FEvrEtXkV5fNNoq w7XQbwZWOTdHggMVCggCmwECHgEWIQQj10GOoMakKlTDLb6NT+SRHtCEZwAAJ3YA /A63nvbTxelcFl2BFWpdTk1lmoWnZjEpDIJxKpQcEJhKAP9HBOn1P/AVPW0Ge3Fg XlK0X10eP+PSWlzIwz/Wb9d2A80QPGVkQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YVcGVwMLCQcJEI1P5JEe0IRnRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ5ks5LIAzcZN1trVhO5AR9hv0hwAjzsNe9m4FzfDkAYCAxUKCAKZ AQKbAQIeARYhBCPXQY6gxqQqVMMtvo1P5JEe0IRnAABqxwD/XY1FUrj0O0m3ztO2 +MaSG/GTo00tM8En76ptKRxjv10A/igYSOuJkiEH7CptbBsMILGATUtekLVI83+r igapMNkAwsAHBBAWCgB5BYJhVwaTBYMJZ5o7A4UBZAkQsBSQJZKZmyFHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JneFmrNgu+z3tQITEDqCYb VHVTNgr8GW+IK2gl8/jX0rcWIQQxmBD61Gy+ltrX8fWwFJAlkpmbIQAAfGkBAJSj ZA7Z+f7tF9mkqvBtEqxQHKwt4fOlsjj/d8smpwCxAQCdaWPTQOxuXrpGpoRpn0ah xJkB+s4y2hv6nDmJXhQICM4zBGFXBlcWCSsGAQQB2kcPAQEHQHY5l2V02rn6W7EB xRlNYqJj2YkeoGF55+3303EWmmZOwsC/BBgWCgExBYJhVwZXCRCNT+SRHtCEZ0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdN6BulP3w834Yw +clKMLEz0Cg7icsyO+cgy8b68m797AKbAr6gBBkWCgBvBYJhVwZXCRCV/CgtAPzX 9kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcpLM2AhnAk zX86PXdN5riSLx0C+jxOEGpcKe00bXzumBYhBID4hSqMm/1CXBkGx5X8KC0A/Nf2 AAByvQEA9c/i8bCzqFzulIdOD4rzQdDFggR9VxNZuAUXq2EyU8UBAMomjfyC/rzs 2WcfCPxN8BWAWQT5lk3zhwOo+v6xok4EFiEEI9dBjqDGpCpUwy2+jU/kkR7QhGcA AD1yAQCMD1gIRHJdEFNu92bpS72DZ9SGeitCaZmFnnHMyRaJ6wEAtSsbqJ3LYE8B WjAhferzLZwNOqjkGNtX/9x4Qd6eQA8= =bWyF -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1/frank-priv.pgp000064400000000000000000000027651046102023000203040ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7FAE 20D6 8EE8 7F74 368A F275 A0C4 0E74 1FC1 C50F Comment: xVgEYVcGVxYJKwYBBAHaRw8BAQdASXvsgncwfwzKSgGOgVKOGx6liY63VonCF7Ob GZjMHO4AAQCM3/FDtAGKOR9dThQhyA/vh9GyMwg3wMbXVMZ7Iz7IDg6CwsALBB8W CgB9BYJhVwZXAwsJBwkQoMQOdB/BxQ9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jno/NgWF27WBzmKpqCNU9w11hv2CVPZpuM/pGbmFvw0v8D FQoIApsBAh4BFiEEf64g1o7of3Q2ivJ1oMQOdB/BxQ8AAD5gAQCWbd09wfHpMEMg FQ5ku+5g8NeK49xUOalZubu20UAcggD/bVq10zHAEvr0MGZtsUdwyUyukquC0pE9 xlSpb8hAzgbNETxmcmFua0BvdGhlci5vcmc+wsAOBBMWCgCABYJhVwZXAwsJBwkQ oMQOdB/BxQ9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn frGHxi8NdZ0uLIfiGFH9FGRPnVLSd7LXYoo/WaPoZh0DFQoIApkBApsBAh4BFiEE f64g1o7of3Q2ivJ1oMQOdB/BxQ8AANevAPwLGj2j5nTHca9CxQ2Dfh/d25Qg68Ez m4mj0xNTeWJIdAEAtAEykqomc02UmKPkN4Z00X16gCBTW+OfPnBLe3Z6bQHHWARh VwZXFgkrBgEEAdpHDwEBB0CWIazX8S9UUphRSP0ar2ZkyL9506Qa+x9dp1G7gvfO 0wABAOGvpwjqIgXSW6zy/7wmRGMcWwahzlMkOXBzW1vgZDwsDoXCwL8EGBYKATEF gmFXBlcJEKDEDnQfwcUPRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ75HkIIfmb23OheFnIlu58JR7RfTa+D4laln7vS9YEV5ApsCvqAEGRYK AG8FgmFXBlcJEMVkosiplUq0RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ6mxCwhr9OgLYFKaIPanHhBbkqBENJffG+S1+xkR60/GFiEE8NpC hNWIA+Z8y95axWSiyKmVSrQAADEhAQDij/w3ClZKIhw9B5qtPSZZx2q8rEcufcc4 dveKEbikkQEA6ynqt7AfXdW/v82x53CsrO176BTWjLckEltF4VjQRgQWIQR/riDW juh/dDaK8nWgxA50H8HFDwAAv/cBANDeTP7PMt0WUoqrgOTZlN9DCDeMkj97Oo9K FV55OLRZAP9r57IrlD8dIWhJ7c5Kf/944aReDJuPUJOwpdAslb81Cw== =gVEr -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1/frank.pgp000064400000000000000000000031071046102023000173150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcGVxYJKwYBBAHaRw8BAQdASXvsgncwfwzKSgGOgVKOGx6liY63VonCF7Ob GZjMHO7CwAsEHxYKAH0FgmFXBlcDCwkHCRCgxA50H8HFD0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmej82BYXbtYHOYqmoI1T3DXWG/YJU9m m4z+kZuYW/DS/wMVCggCmwECHgEWIQR/riDWjuh/dDaK8nWgxA50H8HFDwAAPmAB AJZt3T3B8ekwQyAVDmS77mDw14rj3FQ5qVm5u7bRQByCAP9tWrXTMcAS+vQwZm2x R3DJTK6Sq4LSkT3GVKlvyEDOBs0RPGZyYW5rQG90aGVyLm9yZz7CwA4EExYKAIAF gmFXBlcDCwkHCRCgxA50H8HFD0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmd+sYfGLw11nS4sh+IYUf0UZE+dUtJ3stdiij9Zo+hmHQMVCggC mQECmwECHgEWIQR/riDWjuh/dDaK8nWgxA50H8HFDwAA168A/AsaPaPmdMdxr0LF DYN+H93blCDrwTObiaPTE1N5Ykh0AQC0ATKSqiZzTZSYo+Q3hnTRfXqAIFNb458+ cEt7dnptAcLABwQQFgoAeQWCYVcGkwWDCWeaOwOFAWQJELAUkCWSmZshRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/fkNSQ6IdDlY19LxQl7 16f0NTH6Z2tDGRsRLIHKkQFoFiEEMZgQ+tRsvpba1/H1sBSQJZKZmyEAAIuUAQC3 x1QF1nmBvzob07cu0v0/FhwV6na2htq0PTIm4wVBTAEAkqx0vnSNrcJTSx7Ofscg GphNUWrlzhwk8WfnhH5CEAvOMwRhVwZXFgkrBgEEAdpHDwEBB0CWIazX8S9UUphR SP0ar2ZkyL9506Qa+x9dp1G7gvfO08LAvwQYFgoBMQWCYVcGVwkQoMQOdB/BxQ9H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnvkeQgh+Zvbc6 F4WciW7nwlHtF9Nr4PiVqWfu9L1gRXkCmwK+oAQZFgoAbwWCYVcGVwkQxWSiyKmV SrRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnqbELCGv0 6AtgUpog9qceEFuSoEQ0l98b5LX7GRHrT8YWIQTw2kKE1YgD5nzL3lrFZKLIqZVK tAAAMSEBAOKP/DcKVkoiHD0Hmq09JlnHarysRy59xzh294oRuKSRAQDrKeq3sB9d 1b+/zbHncKys7XvoFNaMtyQSW0XhWNBGBBYhBH+uINaO6H90NorydaDEDnQfwcUP AAC/9wEA0N5M/s8y3RZSiquA5NmU30MIN4ySP3s6j0oVXnk4tFkA/2vnsiuUPx0h aEntzkp//3jhpF4Mm49Qk7Cl0CyVvzUL =iFXI -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1.pgp000064400000000000000000000215211046102023000162140ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcGVxYJKwYBBAHaRw8BAQdA70kq9pBLDB2loVcuFnXkPYBtwswWCgth98AC BYFvUH7CwAsEHxYKAH0FgmFXBlcDCwkHCRD1S0LhYl4aHUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd0X9lHa/ABs8PnIILJVsDtyIPyfTXT gQw6yz8mediOSAMVCggCmwECHgEWIQS8MJeDRdeJyt7N5JL1S0LhYl4aHQAAUcUA /RrwuFNJdakUD2fCyloX/J2LqL0+iuFBZoSXyjavqtytAQCtYmbjLTKmfDrbTiN5 uokIZk5FH9EzSD6NNrDYCJTDBc0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVcGVwMLCQcJEPVLQuFiXhodRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ5NQqKEu2mYINFGW+isi9QZp0QNVyEEBhXZ0qKGbW7p/AxUK CAKZAQKbAQIeARYhBLwwl4NF14nK3s3kkvVLQuFiXhodAAC7egD+JnDMIIiJbdx2 Ffd/ICWvo5qlxon36RQtGHcWJoqlvQ8BALmvvesajBL6gmbFsX78WELvk5zWsT0j obd+FF1ofKACwsAHBBAWCgB5BYJhVwaTBYMJZ5o7A4UBZAkQ/ua05HoJb9FHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnpb9ObBnjo4yC1s8a 5pJWUYhC+xxFG/hGX2to8aTIvjQWIQQgyBIRf7KjlA6ukWD+5rTkeglv0QAAwqkB AOg421OeLz+0X7x4mMgpV8HLnduQSOYuqa+BQWtecZ/iAQC8cx2vNZ1v2UqLDD+g EDoEyzZIGeS/pu8E+e5gqCbNDM4zBGFXBlcWCSsGAQQB2kcPAQEHQE/+sj7UGSAl hEddglTjZm/Yjs7ROIHUAoEgCfB8ucMlwsC/BBgWCgExBYJhVwZXCRD1S0LhYl4a HUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfL+9DMmm5S FlS0yTPdl9ABJXQChQwYQ7+Ic2KkI/20vQKbAr6gBBkWCgBvBYJhVwZXCRCG7on3 lfp7S0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfGf0Jk ueebZ21Y+e4jkYn9nh97qX2Bgm884gfFRCHpMRYhBKBDttxCPJSIiIVpV4buifeV +ntLAADGuQEAn3eGsmZpRKT4cwezFWjFJEF+2yEHYp3lXQ6vmB0CNk0BAJw6ENtN uCm/0GQ7Mo8BUB3EywGtsk4jw3ak+Gx2u/wMFiEEvDCXg0XXicrezeSS9UtC4WJe Gh0AABK+AQD2VODIcYQhDqbmghwP2rZgqdGrCZteAGP6bMSNUfupjAEA9Wbk1ct+ 1PWQrDRCg89/wLgUeMxwgEysHuez3MMafwPGMwRhVwZXFgkrBgEEAdpHDwEBB0AZ rnMuUEsKlOxMzoL16ySiz2IfMTHz4snV2ONwlsix18LACwQfFgoAfQWCYVcGVwML CQcJELAUkCWSmZshRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ/5TGo8wRJyrEIwX9ESbfOgT3jE4Ejq7bYi6oKNXdAv/AxUKCAKbAQIeARYh BDGYEPrUbL6W2tfx9bAUkCWSmZshAACFeAEA1qaIe5AT07VTxr3uwYWnLZ/YPJ1M 0q9Mwq94j9WDEHgBAJMY/h18JwmVLG3GHNpenm6NI9S7OTOShkgftoB8ogAAzRA8 ZGF2ZUBvdGhlci5vcmc+wsAOBBMWCgCABYJhVwZXAwsJBwkQsBSQJZKZmyFHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnIMVPXZchRWak+2yU NmtVhjxEcM6kVcCmItl9bZtoMx0DFQoIApkBApsBAh4BFiEEMZgQ+tRsvpba1/H1 sBSQJZKZmyEAAASmAP49m8nT1+24Vb/lThqavBEGc0zxR51JhY1rFqnNKxiokgEA kVavJ2PfFd3QtyTyV/uX/vDmEO2ZwLwHqoi/kVE39wvCwCAEEBYKAJIFgmFXBpMF gwlnmjsDhQFkGIY8W14+XStbQC5db3RoZXJcLm9yZz4kAAkQ/ua05HoJb9FHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnhF3BwofMYKlKuZ5S 7u7z+n0cs1mr/m5/62MQxJHlqigWIQQgyBIRf7KjlA6ukWD+5rTkeglv0QAAa9QB AKpjvPT+MacpSHyqc6a0j4E+lNUZ0/g0TLS9no4Ea/ioAQDefv1MAPigBqASOdFv Z692/qCuVVls6mod39kUKCFTC84zBGFXBlcWCSsGAQQB2kcPAQEHQCyWXqi8zK1m LNZZZtSZX4cwlqw/6EFlaEeRfdVmINVCwsC/BBgWCgExBYJhVwZXCRCwFJAlkpmb IUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf0kE2i/jot XWfXwYSyhO5nqOTKFpKjgq1xzXeQBlX6eAKbAr6gBBkWCgBvBYJhVwZXCRB3QPDh TI8SMkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfy5fn2 TkmrHGqgW1ftIj5EQHGT5O0JOcz3tQs8TSEsKxYhBD4hpvBFHZJ3Kcy/XXdA8OFM jxIyAADJLgD8Cd3SibtQgOulYoTUh0o83QWWnn3qkIiDB7CyHADUuC0A/A84KOFf 28hyfT41cE872Adp9xuZPJshBSxok+De0UwOFiEEMZgQ+tRsvpba1/H1sBSQJZKZ myEAAAaFAP0fGCenAqbQknJU6hFIkcYhfZD/fwXK5U0dnXg+kH4TPQD/WvNXMB3D otF7xRtdEkuE379Ye23RCdRYWcb+BY+EagHGMwRhVwZXFgkrBgEEAdpHDwEBB0Ce fJhQH0vmtg68mMix0SBjfcfPgROgfUBcFA2PopSKoMLACwQfFgoAfQWCYVcGVwML CQcJEHb7gb/gZlw6RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ99vgRi/ir2JWnTgjiGQhYAwOrdq6uZq+sx7mmDAVueJAxUKCAKbAQIeARYh BDrR8pfksVD3Xb/ENHb7gb/gZlw6AAA7rAEA8ucNfm4+Vn37H/MHpdtdy+hLDcm2 o0GTnTMFmY0oZsABAMvQ28nOaXhYCMIy7ucmod2AuM9F1IOU8dfRHT++WL8CzRA8 YWxpY2VAc29tZS5vcmc+wsAOBBMWCgCABYJhVwZXAwsJBwkQdvuBv+BmXDpHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnlltW8Ny5tXZHWImJ GpbPf2fmrQwgsla6lYuGfWl3zroDFQoIApkBApsBAh4BFiEEOtHyl+SxUPddv8Q0 dvuBv+BmXDoAABnqAP9esqq8PEdNEc6SkOJDb21i6X8nJsCF3afbTWNAg4YsTAEA i1c/3FPDbtHSLyX7Ukm0uii9fO/KpAexoGH0q7O1ugHOMwRhVwZXFgkrBgEEAdpH DwEBB0ANOZAkOujt8WWtY9hS6p6gAXyR1Zo7svghIhXmJDHvLMLAvwQYFgoBMQWC YVcGVwkQdvuBv+BmXDpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnQm09bsBijma+/NRH53iJwWPANNr9kQaewRMYnXsQZKICmwK+oAQZFgoA bwWCYVcGVwkQA0aBvzdx2ftHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnNWIR/dGFPhwsy27go1TUP89ok6ImMTTiV6q7lDqlddwWIQRubz2U ghsYIYaZptIDRoG/N3HZ+wAA4KgA/3Jmv8ExtxqJLVaxj1Gi97p6v5JcpQzPV6jh nZ6g6FeaAQC8dw1x10CWXgBBUMYA4CNDwAomenwpNJ8JnC4wgedOABYhBDrR8pfk sVD3Xb/ENHb7gb/gZlw6AADxHAD/YC1tF2r7cPEupntSaJnr0JT0l4pzGZkDSWR4 qpJmAzsA/REdR7D8iucnzHRvDehKwkkWBoKfY7tGAEMCSafoJ5YOxjMEYVcGVxYJ KwYBBAHaRw8BAQdAqiDS6t6QSGbXPC7QzGh4MA0FPlAWtdZRkp9T8zh8OiTCwAsE HxYKAH0FgmFXBlcDCwkHCRCNT+SRHtCEZ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmc5wOKHnP7nKh4s1FEvrEtXkV5fNNoqw7XQbwZWOTdH ggMVCggCmwECHgEWIQQj10GOoMakKlTDLb6NT+SRHtCEZwAAJ3YA/A63nvbTxelc Fl2BFWpdTk1lmoWnZjEpDIJxKpQcEJhKAP9HBOn1P/AVPW0Ge3FgXlK0X10eP+PS WlzIwz/Wb9d2A80QPGVkQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVcGVwMLCQcJ EI1P5JEe0IRnRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5ks5LIAzcZN1trVhO5AR9hv0hwAjzsNe9m4FzfDkAYCAxUKCAKZAQKbAQIeARYh BCPXQY6gxqQqVMMtvo1P5JEe0IRnAABqxwD/XY1FUrj0O0m3ztO2+MaSG/GTo00t M8En76ptKRxjv10A/igYSOuJkiEH7CptbBsMILGATUtekLVI83+rigapMNkAwsAH BBAWCgB5BYJhVwaTBYMJZ5o7A4UBZAkQsBSQJZKZmyFHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JneFmrNgu+z3tQITEDqCYbVHVTNgr8GW+I K2gl8/jX0rcWIQQxmBD61Gy+ltrX8fWwFJAlkpmbIQAAfGkBAJSjZA7Z+f7tF9mk qvBtEqxQHKwt4fOlsjj/d8smpwCxAQCdaWPTQOxuXrpGpoRpn0ahxJkB+s4y2hv6 nDmJXhQICM4zBGFXBlcWCSsGAQQB2kcPAQEHQHY5l2V02rn6W7EBxRlNYqJj2Yke oGF55+3303EWmmZOwsC/BBgWCgExBYJhVwZXCRCNT+SRHtCEZ0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdN6BulP3w834Yw+clKMLEz0Cg7 icsyO+cgy8b68m797AKbAr6gBBkWCgBvBYJhVwZXCRCV/CgtAPzX9kcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcpLM2AhnAkzX86PXdN5riS Lx0C+jxOEGpcKe00bXzumBYhBID4hSqMm/1CXBkGx5X8KC0A/Nf2AAByvQEA9c/i 8bCzqFzulIdOD4rzQdDFggR9VxNZuAUXq2EyU8UBAMomjfyC/rzs2WcfCPxN8BWA WQT5lk3zhwOo+v6xok4EFiEEI9dBjqDGpCpUwy2+jU/kkR7QhGcAAD1yAQCMD1gI RHJdEFNu92bpS72DZ9SGeitCaZmFnnHMyRaJ6wEAtSsbqJ3LYE8BWjAhferzLZwN OqjkGNtX/9x4Qd6eQA/GMwRhVwZXFgkrBgEEAdpHDwEBB0BJe+yCdzB/DMpKAY6B Uo4bHqWJjrdWicIXs5sZmMwc7sLACwQfFgoAfQWCYVcGVwMLCQcJEKDEDnQfwcUP RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6PzYFhdu1gc 5iqagjVPcNdYb9glT2abjP6Rm5hb8NL/AxUKCAKbAQIeARYhBH+uINaO6H90Nory daDEDnQfwcUPAAA+YAEAlm3dPcHx6TBDIBUOZLvuYPDXiuPcVDmpWbm7ttFAHIIA /21atdMxwBL69DBmbbFHcMlMrpKrgtKRPcZUqW/IQM4GzRE8ZnJhbmtAb3RoZXIu b3JnPsLADgQTFgoAgAWCYVcGVwMLCQcJEKDEDnQfwcUPRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ36xh8YvDXWdLiyH4hhR/RRkT51S0ney 12KKP1mj6GYdAxUKCAKZAQKbAQIeARYhBH+uINaO6H90NorydaDEDnQfwcUPAADX rwD8Cxo9o+Z0x3GvQsUNg34f3duUIOvBM5uJo9MTU3liSHQBALQBMpKqJnNNlJij 5DeGdNF9eoAgU1vjnz5wS3t2em0BwsAHBBAWCgB5BYJhVwaTBYMJZ5o7A4UBZAkQ sBSQJZKZmyFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 9+Q1JDoh0OVjX0vFCXvXp/Q1Mfpna0MZGxEsgcqRAWgWIQQxmBD61Gy+ltrX8fWw FJAlkpmbIQAAi5QBALfHVAXWeYG/OhvTty7S/T8WHBXqdraG2rQ9MibjBUFMAQCS rHS+dI2twlNLHs5+xyAamE1RauXOHCTxZ+eEfkIQC84zBGFXBlcWCSsGAQQB2kcP AQEHQJYhrNfxL1RSmFFI/RqvZmTIv3nTpBr7H12nUbuC987TwsC/BBgWCgExBYJh VwZXCRCgxA50H8HFD0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcme+R5CCH5m9tzoXhZyJbufCUe0X02vg+JWpZ+70vWBFeQKbAr6gBBkWCgBv BYJhVwZXCRDFZKLIqZVKtEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmepsQsIa/ToC2BSmiD2px4QW5KgRDSX3xvktfsZEetPxhYhBPDaQoTV iAPmfMveWsVkosiplUq0AAAxIQEA4o/8NwpWSiIcPQearT0mWcdqvKxHLn3HOHb3 ihG4pJEBAOsp6rewH13Vv7/NsedwrKzte+gU1oy3JBJbReFY0EYEFiEEf64g1o7o f3Q2ivJ1oMQOdB/BxQ8AAL/3AQDQ3kz+zzLdFlKKq4Dk2ZTfQwg3jJI/ezqPShVe eTi0WQD/a+eyK5Q/HSFoSe3OSn//eOGkXgybj1CTsKXQLJW/NQvGMwRhVwZXFgkr BgEEAdpHDwEBB0DLs0DI4FJXuBYxQFSztfPY7dshTnZ30K3WByh2AHhuSMLACwQf FgoAfQWCYVcGVwMLCQcJEP7mtOR6CW/RRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ1KEtQO1M3h02VZoHyFyTAsY14ioKEUJiWhBZ4gmazcr AxUKCAKbAQIeARYhBCDIEhF/sqOUDq6RYP7mtOR6CW/RAAD3ygD/ZEu11aezo+K0 qVS4vlU7/0PYAISoWKGHusfhfci4GpABAKqrQ8vGgdgKqiLiErBrN9hmCJzV3uZH 7eArEGk3XGAOzRE8Ym9iQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVcGVwMLCQcJ EP7mtOR6CW/RRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7wJ6L8gOVEV7C/egRdMTq0XfbQwCkiGBTHP+UYAuheVAxUKCAKZAQKbAQIeARYh BCDIEhF/sqOUDq6RYP7mtOR6CW/RAAAxeAEAqp3ihqwnjjBbfiBSXJbt6uNaSV6v 08UP9exgE2xw4kgA/Auis4K81ktCgVtr4pHZyK0tplfysAKnBhcSQlPh5PALwsAi BBAWCgCUBYJhVwaTBYMJZ5o7A4UDZBqGPFtePl0rW0AuXWV4YW1wbGVcLm9yZz4k AAkQdvuBv+BmXDpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnmsruU4P2g8zqw66el1hGKOOREvDR2OttZB1eJkXgwDkWIQQ60fKX5LFQ912/ xDR2+4G/4GZcOgAAsgIA/1XupnmB0vbTIZP41pzxg2cwrIXZ3oHGzK6GulTDg9Sl AQDjwYNJLDEi3RoBAkjAksTGDfy5DuhLFGNVWtgt66biCc4zBGFXBlcWCSsGAQQB 2kcPAQEHQAK39Q3kyknhsqZqpCCyPEww5NsqY3JBwOKaLoGsuG+NwsC/BBgWCgEx BYJhVwZXCRD+5rTkeglv0UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfuz2c6NpKI34Fl/o64EtkE47ZCYKJFjDmG3DVopa4iiAKbAr6gBBkW CgBvBYJhVwZXCRBZKyQ9Ebpic0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfXCDlI8jJi7GmXP3pK0T6lbaAQewLPMqLCVmtgqA7nSRYhBAUm Ea/HiODCW/Z4ElkrJD0RumJzAADdogEA2TZWJNGR0M3L2DAl6sTdG4+exZnEUQeS gZH6nLQzxmEA/R6HqOFuyqNzdMSc8ofhG7VOUGRH7xyxg7shWu5NW8IJFiEEIMgS EX+yo5QOrpFg/ua05HoJb9EAAIArAP9z08/RYZtnp8FYf9nBVdOwazOWrmZ25FhQ rHmmcj5CCgEAhn2Q965GAG3mZXh9ipL+sGC7UprjtV+YZozT2i2pLAE= =sg1w -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-1.sh000075500000000000000000000005621046102023000160450ustar 00000000000000#! /bin/bash set -e . gen-helper.sh --directory=regex-1 ${@:+"$@"} key alice@some.org key bob key carol key dave@other.org key ed key frank@other.org certify alice -a 100 -d 3 --domain=example.org bob certify bob -a 100 -d 1 carol certify bob -a 100 -d 1 --domain=other.org dave@other.org certify dave -a 100 -d 1 ed certify dave -a 100 -d 1 frank@other.org finish sequoia-wot-0.11.0/tests/data/regex-2/README.md000064400000000000000000000004341046102023000167640ustar 00000000000000A - B - C should be valid. The regex only applies to the target. ``` alice@some.org | 100/7 bob@some.org | 100/7/example.org carol@other.org | 100/7 dave@their.org | 100/7 ed@example.org ``` sequoia-wot-0.11.0/tests/data/regex-2/alice-priv.pgp000064400000000000000000000027601046102023000202540ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5C39 6C92 0399 8984 61F1 7CB7 47FD BF3E B345 3919 Comment: xVgEYVcIrhYJKwYBBAHaRw8BAQdAWZgx9C6tWfRVHapSZFIu8EoKIkpFEt4tfjNg 62TzsSIAAQDzmHFmtNTKTBiOoA7hEBJnnWV+1LiVyLqtuYZu2IOX/RIrwsALBB8W CgB9BYJhVwiuAwsJBwkQR/2/PrNFORlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnIUgxicueb8MzsQg8ZtyDZGrehWUpTT1TcWFA5KxjTh0D FQoIApsBAh4BFiEEXDlskgOZiYRh8Xy3R/2/PrNFORkAAC53AP9zd5IAyvYXqSJU 1jR0Tr5BV9yuncf4hdDnWi+AyYjorwEAwzrBd4v3B3WXOY9JX/UZLZ4tVmKRzIBq pNA3IeAtvQnNEDxhbGljZUBzb21lLm9yZz7CwA4EExYKAIAFgmFXCK4DCwkHCRBH /b8+s0U5GUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeu DTi3+6mq5drwGjSNyfPZqj36mcAHREPqWggzLDVRlQMVCggCmQECmwECHgEWIQRc OWySA5mJhGHxfLdH/b8+s0U5GQAAupgA/ikV66fWiFoUcC5DyKa7r9JiSeLHho3k I7VEL1NTnd67AP9+JE2l+uHylN8fZaF4tLJ3GFNNMyx9j5c8Dz4NPzIkDMdYBGFX CK4WCSsGAQQB2kcPAQEHQBIF+8CAHCgNoUIe4vQNd/Cpo+l5otBdguJuZ4eJDdUE AAEArH/Wu5TcC0p3sw94KO3+kjRPtFe5YRLLzWs/RPy8QbYQx8LAvwQYFgoBMQWC YVcIrgkQR/2/PrNFORlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnxQzPgUcBtfRiFysevdhEPT/qBXGT6dbe/y07OEYRUhkCmwK+oAQZFgoA bwWCYVcIrgkQWZQVbY+YLJVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnUM78pcSNI6x/ZVjWHeoscwYydrRRJlSOmDzXrVtz4TwWIQSsIiLk 1PHNvsfWJKFZlBVtj5gslQAAXnUBANpq7KXzVHtPogvfjwaWnnpUkPsvABohdmC7 na54s7fFAP9WqaWodKUXBw58WtxXsP8zYiIEnN5Cx9ANXImG9JzTChYhBFw5bJID mYmEYfF8t0f9vz6zRTkZAADpJQD+Kib4DznuUAWrIs7AqzHir06rHFPFSmbI7TSE izNrsysA/RPlvR6rWDPfFZ9+p+liOaBb0wHLW5171lTIT7E5xN8K =vFN0 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-2/alice.pgp000064400000000000000000000026151046102023000172750ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 5C39 6C92 0399 8984 61F1 7CB7 47FD BF3E B345 3919 Comment: xjMEYVcIrhYJKwYBBAHaRw8BAQdAWZgx9C6tWfRVHapSZFIu8EoKIkpFEt4tfjNg 62TzsSLCwAsEHxYKAH0FgmFXCK4DCwkHCRBH/b8+s0U5GUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmchSDGJy55vwzOxCDxm3INkat6FZSlN PVNxYUDkrGNOHQMVCggCmwECHgEWIQRcOWySA5mJhGHxfLdH/b8+s0U5GQAALncA /3N3kgDK9hepIlTWNHROvkFX3K6dx/iF0OdaL4DJiOivAQDDOsF3i/cHdZc5j0lf 9Rktni1WYpHMgGqk0Dch4C29Cc0QPGFsaWNlQHNvbWUub3JnPsLADgQTFgoAgAWC YVcIrgMLCQcJEEf9vz6zRTkZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ64NOLf7qarl2vAaNI3J89mqPfqZwAdEQ+paCDMsNVGVAxUKCAKZ AQKbAQIeARYhBFw5bJIDmYmEYfF8t0f9vz6zRTkZAAC6mAD+KRXrp9aIWhRwLkPI pruv0mJJ4seGjeQjtUQvU1Od3rsA/34kTaX64fKU3x9loXi0sncYU00zLH2PlzwP Pg0/MiQMzjMEYVcIrhYJKwYBBAHaRw8BAQdAEgX7wIAcKA2hQh7i9A138Kmj6Xmi 0F2C4m5nh4kN1QTCwL8EGBYKATEFgmFXCK4JEEf9vz6zRTkZRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8UMz4FHAbX0YhcrHr3YRD0/6gVx k+nW3v8tOzhGEVIZApsCvqAEGRYKAG8FgmFXCK4JEFmUFW2PmCyVRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1DO/KXEjSOsf2VY1h3qLHMG Mna0USZUjpg8161bc+E8FiEErCIi5NTxzb7H1iShWZQVbY+YLJUAAF51AQDaauyl 81R7T6IL348Glp56VJD7LwAaIXZgu52ueLO3xQD/VqmlqHSlFwcOfFrcV7D/M2Ii BJzeQsfQDVyJhvSc0woWIQRcOWySA5mJhGHxfLdH/b8+s0U5GQAA6SUA/iom+A85 7lAFqyLOwKsx4q9OqxxTxUpmyO00hIsza7MrAP0T5b0eq1gz3xWffqfpYjmgW9MB y1ude9ZUyE+xOcTfCg== =K2CR -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-2/bob-priv.pgp000064400000000000000000000027561046102023000177460ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 584D 195A D89C E035 4D2C CBAE BCDD 9EBC 0969 2780 Comment: xVgEYVcIrhYJKwYBBAHaRw8BAQdAYAbkh6h4ltkfPXKI9lcFyElV3b1IQUagZ19M tmqzMekAAQDU9VIRge9HM7wnF8bQFwBr6WlzaRS3iSdU4gd1XFSjnw52wsALBB8W CgB9BYJhVwiuAwsJBwkQvN2evAlpJ4BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnZ9uF5lIPmLbmWMdhOJd99NnVSUiZ/OfyNP0OTJhbc0ED FQoIApsBAh4BFiEEWE0ZWtic4DVNLMuuvN2evAlpJ4AAAKXiAQDSyuU9Ra48+c4Q 8AIzQRSmOkkKUnn+qguQLzPMnm17EQEAqwa7rK49+sxpOsKKPVIaW6b5K40fn1yd Y+tXQRy7ug3NDjxib2JAc29tZS5vcmc+wsAOBBMWCgCABYJhVwiuAwsJBwkQvN2e vAlpJ4BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn885Q WE9P/jjHolFR/oDLTGk50l0K8OevpXs5YaDqsgwDFQoIApkBApsBAh4BFiEEWE0Z Wtic4DVNLMuuvN2evAlpJ4AAAEw+AP0T6YcDAcGD16sX6IHje0ifuhgyGSvt5w9C sP49FAP/8wEAoKBiUorfJiOtKvV0FG+weAQIG4F2P8CHEqAjGSjT6g/HWARhVwiu FgkrBgEEAdpHDwEBB0BJpzof3a9sPsCPmDkTk+yo28YJz1GqeDZ5lqFAe9e8GgAA /jaVMTyRXDcodc6sZWJbMCywuurHZ0JeuvrjbRKtLhv5EBbCwL8EGBYKATEFgmFX CK4JELzdnrwJaSeARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ0xFuScu6MB3sfI6b2ghMFq/q4UXIJmpg0tyoM/YzX1jApsCvqAEGRYKAG8F gmFXCK4JEJcOuiDIjvfQRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZxFJ6U4bL/127XthceuezPveL5Xzrd2HrNhh9Bve49usFiEEzABGTXjY arkr49gulw66IMiO99AAAH3vAP41EoY7u3kO4CiVuCbA6MGGLE1aRVDUYtgDCR5W Z0qpWgEA3Pe83z1R9eEgOkNKk9QMqZZYZQw9RVgGZmj0wsI8HAcWIQRYTRla2Jzg NU0sy6683Z68CWkngAAA+dMA/1PRxoS2lQcCse66k+flo/dt/hL8bQKMkVBlpfH4 bo2QAQDYdubinWE/FuNKCxRWNi55RhRisfJLH/GROjFsPyWfAQ== =0rzM -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-2/bob.pgp000064400000000000000000000031031046102023000167530ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcIrhYJKwYBBAHaRw8BAQdAYAbkh6h4ltkfPXKI9lcFyElV3b1IQUagZ19M tmqzMenCwAsEHxYKAH0FgmFXCK4DCwkHCRC83Z68CWkngEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdn24XmUg+YtuZYx2E4l3302dVJSJn8 5/I0/Q5MmFtzQQMVCggCmwECHgEWIQRYTRla2JzgNU0sy6683Z68CWkngAAApeIB ANLK5T1Frjz5zhDwAjNBFKY6SQpSef6qC5AvM8yebXsRAQCrBrusrj36zGk6woo9 UhpbpvkrjR+fXJ1j61dBHLu6Dc0OPGJvYkBzb21lLm9yZz7CwA4EExYKAIAFgmFX CK4DCwkHCRC83Z68CWkngEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfzzlBYT0/+OMeiUVH+gMtMaTnSXQrw56+lezlhoOqyDAMVCggCmQEC mwECHgEWIQRYTRla2JzgNU0sy6683Z68CWkngAAATD4A/RPphwMBwYPXqxfogeN7 SJ+6GDIZK+3nD0Kw/j0UA//zAQCgoGJSit8mI60q9XQUb7B4BAgbgXY/wIcSoCMZ KNPqD8LABwQQFgoAeQWCYVcI6gWDCWeaOwOFB2QJEEf9vz6zRTkZRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/7NQDSnUtx/XEfzX4z8gKtg EGE2uJjICBpvGMWYpsnKFiEEXDlskgOZiYRh8Xy3R/2/PrNFORkAANupAQDsB2ZP 6KMpx3YyivJnuTD4h6X+a0sX/t5qMSrCVet6JQEA4TyEfjU2utg+yZ01K+7MQf66 8xpkPGj1f3NVSoB59wTOMwRhVwiuFgkrBgEEAdpHDwEBB0BJpzof3a9sPsCPmDkT k+yo28YJz1GqeDZ5lqFAe9e8GsLAvwQYFgoBMQWCYVcIrgkQvN2evAlpJ4BHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnTEW5Jy7owHex8jpv aCEwWr+rhRcgmamDS3Kgz9jNfWMCmwK+oAQZFgoAbwWCYVcIrgkQlw66IMiO99BH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEUnpThsv/Xbt e2Fx657M+94vlfOt3Yes2GH0G97j26wWIQTMAEZNeNhquSvj2C6XDrogyI730AAA fe8A/jUShju7eQ7gKJW4JsDowYYsTVpFUNRi2AMJHlZnSqlaAQDc97zfPVH14SA6 Q0qT1AypllhlDD1FWAZmaPTCwjwcBxYhBFhNGVrYnOA1TSzLrrzdnrwJaSeAAAD5 0wD/U9HGhLaVBwKx7rqT5+Wj923+EvxtAoyRUGWl8fhujZABANh25uKdYT8W40oL FFY2LnlGFGKx8ksf8ZE6MWw/JZ8B =iTcO -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-2/carol-priv.pgp000064400000000000000000000027651046102023000203040ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: FC7A 96D4 810D 0CF4 7703 1956 AED5 8C64 4370 C183 Comment: xVgEYVcIrhYJKwYBBAHaRw8BAQdARJJiZ2Wc1uFzI6QrB0GbAzYFV+oc2xFVhNw3 K/4MFcAAAQCAEDuUiJQ1Xu7+5a/NcC2zmSZsOLyF1k7d7YhkyEh4GhDMwsALBB8W CgB9BYJhVwiuAwsJBwkQrtWMZENwwYNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn5hoeiidRbOXi3LeQNEvFGZGrR0UVg2Kaq67ZtOeuiOoD FQoIApsBAh4BFiEE/HqW1IENDPR3AxlWrtWMZENwwYMAADnBAQDRu+oNOSkbM/tE QT/ny8cYx4kJGtLqn4ZWkBHp8E28nQD+JdyfScH8uMTUZsfRonNQxxJfPfoNxOpd nRmpH3MJlQXNETxjYXJvbEBvdGhlci5vcmc+wsAOBBMWCgCABYJhVwiuAwsJBwkQ rtWMZENwwYNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 0y4Rs/vqIfBme2Ju0zlYQZs6fEtX11nuN3uVJwOBml8DFQoIApkBApsBAh4BFiEE /HqW1IENDPR3AxlWrtWMZENwwYMAAOdVAP97cXc88yCn7slb7WQSIGsXXeOvcieR 5NjadtfrTASYJQEA1IyW43Vu/zxMFRLWGOgyMIuQvQ7tmmESaedJ8dZ7ZQnHWARh VwiuFgkrBgEEAdpHDwEBB0DGjluQX1ZLlT8xFvPmqGTOECgRq+CBQ6H9x2CbltPv tgAA/RwxgGHe9yAzCGY1/EslnF6OpvIZ+53mlmB22TcdziT4EJzCwL8EGBYKATEF gmFXCK4JEK7VjGRDcMGDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ6b8Uc6Q5ZJuntpQb5+xM4PsPDh4FgcamblAQTMrOcgxApsCvqAEGRYK AG8FgmFXCK4JENVgiy0cOldsRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZyvaku9bHQ4jXh1c9r8xa0zJHXXJUgmpCeH4nYshXW7pFiEEqGsR iA/IP5qqQpi21WCLLRw6V2wAABhYAPsEBDsj3gX0KLPSxCA73J2sScZDANKjNe7l h2g3kjGOewD/SNS7hQ2V9+8IcRwJI36JflR89gEQIv2JImEBfbg3JAgWIQT8epbU gQ0M9HcDGVau1YxkQ3DBgwAAJcMBAOO2ChKB9iy5jPc0N/qSs3PtqrtNt8XA+wQ4 zTukm6CxAQDE0Gimj+d6c52f4cGVgc1lcOyYMHpGqOP9N23T2VQLDw== =FFXv -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-2/carol.pgp000064400000000000000000000031541046102023000173170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcIrhYJKwYBBAHaRw8BAQdARJJiZ2Wc1uFzI6QrB0GbAzYFV+oc2xFVhNw3 K/4MFcDCwAsEHxYKAH0FgmFXCK4DCwkHCRCu1YxkQ3DBg0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfmGh6KJ1Fs5eLct5A0S8UZkatHRRWD Ypqrrtm0566I6gMVCggCmwECHgEWIQT8epbUgQ0M9HcDGVau1YxkQ3DBgwAAOcEB ANG76g05KRsz+0RBP+fLxxjHiQka0uqfhlaQEenwTbydAP4l3J9Jwfy4xNRmx9Gi c1DHEl89+g3E6l2dGakfcwmVBc0RPGNhcm9sQG90aGVyLm9yZz7CwA4EExYKAIAF gmFXCK4DCwkHCRCu1YxkQ3DBg0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfTLhGz++oh8GZ7Ym7TOVhBmzp8S1fXWe43e5UnA4GaXwMVCggC mQECmwECHgEWIQT8epbUgQ0M9HcDGVau1YxkQ3DBgwAA51UA/3txdzzzIKfuyVvt ZBIgaxdd469yJ5Hk2Np21+tMBJglAQDUjJbjdW7/PEwVEtYY6DIwi5C9Du2aYRJp 50nx1ntlCcLAIgQQFgoAlAWCYVcI6gWDCWeaOwOFB2QahjxbXj5dK1tALl1leGFt cGxlXC5vcmc+JAAJELzdnrwJaSeARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ1kt4QIPsZYh93250KIHm2KLufj36Am92Ci5Oj+V9Aj9FiEE WE0ZWtic4DVNLMuuvN2evAlpJ4AAAKL1AQD2WqMv49zixIWwlzyXq/TjzVef1Seu OgObeNOp8h0oBAEAjoXibkEdDsDbhDI7/EO7kkLofOZsgKo3xMvlKRGZHA7OMwRh VwiuFgkrBgEEAdpHDwEBB0DGjluQX1ZLlT8xFvPmqGTOECgRq+CBQ6H9x2CbltPv tsLAvwQYFgoBMQWCYVcIrgkQrtWMZENwwYNHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnpvxRzpDlkm6e2lBvn7Ezg+w8OHgWBxqZuUBBMys5 yDECmwK+oAQZFgoAbwWCYVcIrgkQ1WCLLRw6V2xHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnK9qS71sdDiNeHVz2vzFrTMkddclSCakJ4fid iyFdbukWIQSoaxGID8g/mqpCmLbVYIstHDpXbAAAGFgA+wQEOyPeBfQos9LEIDvc naxJxkMA0qM17uWHaDeSMY57AP9I1LuFDZX37whxHAkjfol+VHz2ARAi/YkiYQF9 uDckCBYhBPx6ltSBDQz0dwMZVq7VjGRDcMGDAAAlwwEA47YKEoH2LLmM9zQ3+pKz c+2qu023xcD7BDjNO6SboLEBAMTQaKaP53pznZ/hwZWBzWVw7Jgwekao4/03bdPZ VAsP =qyue -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-2/dave-priv.pgp000064400000000000000000000027601046102023000201160ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 5807 7E65 9732 526C 1B8B F983 7EFC 0EDE 07B5 06A8 Comment: xVgEYVcIrhYJKwYBBAHaRw8BAQdAHWKX2waT0MCeu6kda2P+sLJQBAqGw/7apb3/ 9yUO3vUAAQD3Cq+i4g/3Exm7s6J3yPCJp6kSQSPkieFMmtyP1MQO1BIOwsALBB8W CgB9BYJhVwiuAwsJBwkQfvwO3ge1BqhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnNZWjCjtmXSgYZmyunifb47bo0IE19M12LQxDkp99wOkD FQoIApsBAh4BFiEEWAd+ZZcyUmwbi/mDfvwO3ge1BqgAAPcFAQCAmf+Wzei4Oqjn vts0ACi1rjRhcGgCanbEZRryOE/XggD/fy7ri+xpw1sMnkrisW677bST+MQIIuQI cGS3sU/9ng/NEDxkYXZlQHRoZWlyLm9yZz7CwA4EExYKAIAFgmFXCK4DCwkHCRB+ /A7eB7UGqEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd6 FSXLPZRALtQ6CySix28gn8zZYIHWPEfZkzmHAZBS2wMVCggCmQECmwECHgEWIQRY B35llzJSbBuL+YN+/A7eB7UGqAAAcFQA/1GHEKCHk/Npqs2BwoK2idWv2jWM1Cb1 ahKoeLU0VdzJAP4jgOlSe74DRl2SvVAt8GUWnSP7H0KaNVo3sU/uYWOSCMdYBGFX CK4WCSsGAQQB2kcPAQEHQPzlcJ264z/EslqHP0SBWU7EwVv5uqRl3svTZn/VOHdi AAD/aGFCfrAVDqvVGS4DjzlEWQHLKksI23mUWZ6kxHzj+dkPS8LAvwQYFgoBMQWC YVcIrgkQfvwO3ge1BqhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnCxxg3i+jHEDbfjlVK8sFMo7GJUG1F+j4j1uuQ5NIMRcCmwK+oAQZFgoA bwWCYVcIrgkQPjSzmBi8MQpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnPj7ljJ2DRyyb4q0XTO8dmNuh9DqkIQYRMSnVQR/47hMWIQQGhSCS V+BJ3hUWAbA+NLOYGLwxCgAAEwAA/RJzbOSwNI5muCqFzy/sws5TjgP7w9oQIoeU RAu225lIAPwLHT8aVs8jpugDyXVyhgNPM3dFZ4Qz2ace32kCIOl3DxYhBFgHfmWX MlJsG4v5g378Dt4HtQaoAADZTwD/YGZIFHAVOjt4nKTMJWZrYbHDA8SFYUBy3AQs BUDr+iQBAPA71MeHPQZ1H2YNoac4mql5K38kNuJf4oejBQ467hYO =juaF -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-2/dave.pgp000064400000000000000000000031071046102023000171340ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcIrhYJKwYBBAHaRw8BAQdAHWKX2waT0MCeu6kda2P+sLJQBAqGw/7apb3/ 9yUO3vXCwAsEHxYKAH0FgmFXCK4DCwkHCRB+/A7eB7UGqEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc1laMKO2ZdKBhmbK6eJ9vjtujQgTX0 zXYtDEOSn33A6QMVCggCmwECHgEWIQRYB35llzJSbBuL+YN+/A7eB7UGqAAA9wUB AICZ/5bN6Lg6qOe+2zQAKLWuNGFwaAJqdsRlGvI4T9eCAP9/LuuL7GnDWwyeSuKx brvttJP4xAgi5AhwZLexT/2eD80QPGRhdmVAdGhlaXIub3JnPsLADgQTFgoAgAWC YVcIrgMLCQcJEH78Dt4HtQaoRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ3oVJcs9lEAu1DoLJKLHbyCfzNlggdY8R9mTOYcBkFLbAxUKCAKZ AQKbAQIeARYhBFgHfmWXMlJsG4v5g378Dt4HtQaoAABwVAD/UYcQoIeT82mqzYHC graJ1a/aNYzUJvVqEqh4tTRV3MkA/iOA6VJ7vgNGXZK9UC3wZRadI/sfQpo1Wjex T+5hY5IIwsAHBBAWCgB5BYJhVwjqBYMJZ5o7A4UHZAkQrtWMZENwwYNHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7G2wXFDUGB8S0nxQVEcN fA9WoN2U07TwIBLQEfoRzmgWIQT8epbUgQ0M9HcDGVau1YxkQ3DBgwAAgQMBAPWt AzG+2e+F6L9WpYla/qcneFCN4kdRCX3XD6PNPi4FAQDbwS3dkxRnuBLU2Rd5ahTP J4CAIruT0zxIPNmdsDoBAs4zBGFXCK4WCSsGAQQB2kcPAQEHQPzlcJ264z/EslqH P0SBWU7EwVv5uqRl3svTZn/VOHdiwsC/BBgWCgExBYJhVwiuCRB+/A7eB7UGqEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcLHGDeL6McQNt+ OVUrywUyjsYlQbUX6PiPW65Dk0gxFwKbAr6gBBkWCgBvBYJhVwiuCRA+NLOYGLwx CkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc+PuWMnYNH LJvirRdM7x2Y26H0OqQhBhExKdVBH/juExYhBAaFIJJX4EneFRYBsD40s5gYvDEK AAATAAD9EnNs5LA0jma4KoXPL+zCzlOOA/vD2hAih5REC7bbmUgA/AsdPxpWzyOm 6APJdXKGA08zd0VnhDPZpx7faQIg6XcPFiEEWAd+ZZcyUmwbi/mDfvwO3ge1BqgA ANlPAP9gZkgUcBU6O3icpMwlZmthscMDxIVhQHLcBCwFQOv6JAEA8DvUx4c9BnUf Zg2hpziaqXkrfyQ24l/ih6MFDjruFg4= =yILl -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-2/ed-priv.pgp000064400000000000000000000027601046102023000175670ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3608 9C49 F18B F6FC 6BCA 35E3 BB85 8777 66C0 09E4 Comment: xVgEYVcIrhYJKwYBBAHaRw8BAQdAglEwcZ9qqVYZGN84YMV0h7mNTv9lxPojsLwg +4KYWiUAAP9gbNVFR8PgwGJlKWi+3Fs5RC1QbtGG4lw2jdTKrPtuahG5wsALBB8W CgB9BYJhVwiuAwsJBwkQu4WHd2bACeRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn1k2jDjxhvoHuFVyZ+YlN/czei9IlEquXaxeHd1UOgh0D FQoIApsBAh4BFiEENgicSfGL9vxryjXju4WHd2bACeQAADmOAQCX6QqZL+qo3WKe Ei7Dd3bdTxJo02bufQg4tdcL4vA/PQD+IKcS08UrPuqzcPU5Z4nKXhjM9xYoLznO bwhKACSkzwPNEDxlZEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFXCK4DCwkHCRC7 hYd3ZsAJ5EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf/ CfFx/7Do6EZyUGMRDEmIgWmW240NISitVU68TzV+2gMVCggCmQECmwECHgEWIQQ2 CJxJ8Yv2/GvKNeO7hYd3ZsAJ5AAAarsA/1FU4niaugNdmZwPoIGSCW+jFc11kKy3 jZPkXfQ+eX82AP4qoKOpnn0un3YhgwvTAipDFc7fIYIFi0rC11ZGn6YyC8dYBGFX CK4WCSsGAQQB2kcPAQEHQIoeDfJ+7KDFRjGRgMnVBpd+jwh9GAMk0tlqo/iv95Dh AAEArfQZjjFqBVZYjKvC2AQHuj6Giq6zuvnQJUXRqPeMuHgQ9cLAvwQYFgoBMQWC YVcIrgkQu4WHd2bACeRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jngvkh2uSTafLv7hMXg371oyzHOr+G2hgrRnBAWX+ELiwCmwK+oAQZFgoA bwWCYVcIrgkQXOxQWupBSgJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnpM1rtJdWj5ZWJMvgYgJ950Fgp4ZU+qRafze57f5cajwWIQTackfW 1CmdlMliX01c7FBa6kFKAgAAONUBAPMSPyWs/u+hxL4l4hNLxs4WPq0PUnJ+YVKY ksKFPUvGAP9omdVK6Oeq3gwFaHwMBomEqt+a4lr4Zmt+wm2YsgeGAhYhBDYInEnx i/b8a8o147uFh3dmwAnkAAB+WAD/QOFZtUbotzVSOztOvYQMhsbOKDGt6jlBGXK+ G5ao3lYA/RHw3WRnpl6c8Dm+4Cedr2mqGN+t06TOd0H55vvcDAYG =FHBx -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-2/ed.pgp000064400000000000000000000031071046102023000166050ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcIrhYJKwYBBAHaRw8BAQdAglEwcZ9qqVYZGN84YMV0h7mNTv9lxPojsLwg +4KYWiXCwAsEHxYKAH0FgmFXCK4DCwkHCRC7hYd3ZsAJ5EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfWTaMOPGG+ge4VXJn5iU39zN6L0iUS q5drF4d3VQ6CHQMVCggCmwECHgEWIQQ2CJxJ8Yv2/GvKNeO7hYd3ZsAJ5AAAOY4B AJfpCpkv6qjdYp4SLsN3dt1PEmjTZu59CDi11wvi8D89AP4gpxLTxSs+6rNw9Tln icpeGMz3FigvOc5vCEoAJKTPA80QPGVkQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YVcIrgMLCQcJELuFh3dmwAnkRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ/8J8XH/sOjoRnJQYxEMSYiBaZbbjQ0hKK1VTrxPNX7aAxUKCAKZ AQKbAQIeARYhBDYInEnxi/b8a8o147uFh3dmwAnkAABquwD/UVTieJq6A12ZnA+g gZIJb6MVzXWQrLeNk+Rd9D55fzYA/iqgo6mefS6fdiGDC9MCKkMVzt8hggWLSsLX VkafpjILwsAHBBAWCgB5BYJhVwjqBYMJZ5o7A4UHZAkQfvwO3ge1BqhHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1VyW6fg+TSg9OwkL/rOf ZyDL9sCgK/60mKlhEsJXdC0WIQRYB35llzJSbBuL+YN+/A7eB7UGqAAArTwBAIvh 98l6blb+hhaSyYFIrYz+Vnzv2vhoSL6MhyJSp+4oAP4/ZiOyDho5Q1wSsg08tNPJ 9iFLmuoa0yNs1k3NpGmDCM4zBGFXCK4WCSsGAQQB2kcPAQEHQIoeDfJ+7KDFRjGR gMnVBpd+jwh9GAMk0tlqo/iv95DhwsC/BBgWCgExBYJhVwiuCRC7hYd3ZsAJ5EcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeC+SHa5JNp8u/u ExeDfvWjLMc6v4baGCtGcEBZf4QuLAKbAr6gBBkWCgBvBYJhVwiuCRBc7FBa6kFK AkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmekzWu0l1aP llYky+BiAn3nQWCnhlT6pFp/N7nt/lxqPBYhBNpyR9bUKZ2UyWJfTVzsUFrqQUoC AAA41QEA8xI/Jaz+76HEviXiE0vGzhY+rQ9Scn5hUpiSwoU9S8YA/2iZ1Uro56re DAVofAwGiYSq35riWvhma37CbZiyB4YCFiEENgicSfGL9vxryjXju4WHd2bACeQA AH5YAP9A4Vm1Rui3NVI7O069hAyGxs4oMa3qOUEZcr4blqjeVgD9EfDdZGemXpzw Ob7gJ52vaaoY363TpM53Qfnm+9wMBgY= =g3xl -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-2.pgp000064400000000000000000000164611046102023000162240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcIrhYJKwYBBAHaRw8BAQdAHWKX2waT0MCeu6kda2P+sLJQBAqGw/7apb3/ 9yUO3vXCwAsEHxYKAH0FgmFXCK4DCwkHCRB+/A7eB7UGqEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc1laMKO2ZdKBhmbK6eJ9vjtujQgTX0 zXYtDEOSn33A6QMVCggCmwECHgEWIQRYB35llzJSbBuL+YN+/A7eB7UGqAAA9wUB AICZ/5bN6Lg6qOe+2zQAKLWuNGFwaAJqdsRlGvI4T9eCAP9/LuuL7GnDWwyeSuKx brvttJP4xAgi5AhwZLexT/2eD80QPGRhdmVAdGhlaXIub3JnPsLADgQTFgoAgAWC YVcIrgMLCQcJEH78Dt4HtQaoRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ3oVJcs9lEAu1DoLJKLHbyCfzNlggdY8R9mTOYcBkFLbAxUKCAKZ AQKbAQIeARYhBFgHfmWXMlJsG4v5g378Dt4HtQaoAABwVAD/UYcQoIeT82mqzYHC graJ1a/aNYzUJvVqEqh4tTRV3MkA/iOA6VJ7vgNGXZK9UC3wZRadI/sfQpo1Wjex T+5hY5IIwsAHBBAWCgB5BYJhVwjqBYMJZ5o7A4UHZAkQrtWMZENwwYNHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn7G2wXFDUGB8S0nxQVEcN fA9WoN2U07TwIBLQEfoRzmgWIQT8epbUgQ0M9HcDGVau1YxkQ3DBgwAAgQMBAPWt AzG+2e+F6L9WpYla/qcneFCN4kdRCX3XD6PNPi4FAQDbwS3dkxRnuBLU2Rd5ahTP J4CAIruT0zxIPNmdsDoBAs4zBGFXCK4WCSsGAQQB2kcPAQEHQPzlcJ264z/EslqH P0SBWU7EwVv5uqRl3svTZn/VOHdiwsC/BBgWCgExBYJhVwiuCRB+/A7eB7UGqEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcLHGDeL6McQNt+ OVUrywUyjsYlQbUX6PiPW65Dk0gxFwKbAr6gBBkWCgBvBYJhVwiuCRA+NLOYGLwx CkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc+PuWMnYNH LJvirRdM7x2Y26H0OqQhBhExKdVBH/juExYhBAaFIJJX4EneFRYBsD40s5gYvDEK AAATAAD9EnNs5LA0jma4KoXPL+zCzlOOA/vD2hAih5REC7bbmUgA/AsdPxpWzyOm 6APJdXKGA08zd0VnhDPZpx7faQIg6XcPFiEEWAd+ZZcyUmwbi/mDfvwO3ge1BqgA ANlPAP9gZkgUcBU6O3icpMwlZmthscMDxIVhQHLcBCwFQOv6JAEA8DvUx4c9BnUf Zg2hpziaqXkrfyQ24l/ih6MFDjruFg7GMwRhVwiuFgkrBgEEAdpHDwEBB0BEkmJn ZZzW4XMjpCsHQZsDNgVX6hzbEVWE3Dcr/gwVwMLACwQfFgoAfQWCYVcIrgMLCQcJ EK7VjGRDcMGDRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+YaHoonUWzl4ty3kDRLxRmRq0dFFYNimquu2bTnrojqAxUKCAKbAQIeARYhBPx6 ltSBDQz0dwMZVq7VjGRDcMGDAAA5wQEA0bvqDTkpGzP7REE/58vHGMeJCRrS6p+G VpAR6fBNvJ0A/iXcn0nB/LjE1GbH0aJzUMcSXz36DcTqXZ0ZqR9zCZUFzRE8Y2Fy b2xAb3RoZXIub3JnPsLADgQTFgoAgAWCYVcIrgMLCQcJEK7VjGRDcMGDRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9MuEbP76iHwZntibtM5 WEGbOnxLV9dZ7jd7lScDgZpfAxUKCAKZAQKbAQIeARYhBPx6ltSBDQz0dwMZVq7V jGRDcMGDAADnVQD/e3F3PPMgp+7JW+1kEiBrF13jr3InkeTY2nbX60wEmCUBANSM luN1bv88TBUS1hjoMjCLkL0O7ZphEmnnSfHWe2UJwsAiBBAWCgCUBYJhVwjqBYMJ Z5o7A4UHZBqGPFtePl0rW0AuXWV4YW1wbGVcLm9yZz4kAAkQvN2evAlpJ4BHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnWS3hAg+xliH3fbnQ ogebYou5+PfoCb3YKLk6P5X0CP0WIQRYTRla2JzgNU0sy6683Z68CWkngAAAovUB APZaoy/j3OLEhbCXPJer9OPNV5/VJ646A5t406nyHSgEAQCOheJuQR0OwNuEMjv8 Q7uSQuh85myAqjfEy+UpEZkcDs4zBGFXCK4WCSsGAQQB2kcPAQEHQMaOW5BfVkuV PzEW8+aoZM4QKBGr4IFDof3HYJuW0++2wsC/BBgWCgExBYJhVwiuCRCu1YxkQ3DB g0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmem/FHOkOWS bp7aUG+fsTOD7Dw4eBYHGpm5QEEzKznIMQKbAr6gBBkWCgBvBYJhVwiuCRDVYIst HDpXbEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcr2pLv Wx0OI14dXPa/MWtMyR11yVIJqQnh+J2LIV1u6RYhBKhrEYgPyD+aqkKYttVgiy0c OldsAAAYWAD7BAQ7I94F9Ciz0sQgO9ydrEnGQwDSozXu5YdoN5IxjnsA/0jUu4UN lffvCHEcCSN+iX5UfPYBECL9iSJhAX24NyQIFiEE/HqW1IENDPR3AxlWrtWMZENw wYMAACXDAQDjtgoSgfYsuYz3NDf6krNz7aq7TbfFwPsEOM07pJugsQEAxNBopo/n enOdn+HBlYHNZXDsmDB6Rqjj/Tdt09lUCw/GMwRhVwiuFgkrBgEEAdpHDwEBB0Bg BuSHqHiW2R89coj2VwXISVXdvUhBRqBnX0y2arMx6cLACwQfFgoAfQWCYVcIrgML CQcJELzdnrwJaSeARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ2fbheZSD5i25ljHYTiXffTZ1UlImfzn8jT9DkyYW3NBAxUKCAKbAQIeARYh BFhNGVrYnOA1TSzLrrzdnrwJaSeAAACl4gEA0srlPUWuPPnOEPACM0EUpjpJClJ5 /qoLkC8zzJ5texEBAKsGu6yuPfrMaTrCij1SGlum+SuNH59cnWPrV0Ecu7oNzQ48 Ym9iQHNvbWUub3JnPsLADgQTFgoAgAWCYVcIrgMLCQcJELzdnrwJaSeARxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/POUFhPT/44x6JRUf6A y0xpOdJdCvDnr6V7OWGg6rIMAxUKCAKZAQKbAQIeARYhBFhNGVrYnOA1TSzLrrzd nrwJaSeAAABMPgD9E+mHAwHBg9erF+iB43tIn7oYMhkr7ecPQrD+PRQD//MBAKCg YlKK3yYjrSr1dBRvsHgECBuBdj/AhxKgIxko0+oPwsAHBBAWCgB5BYJhVwjqBYMJ Z5o7A4UHZAkQR/2/PrNFORlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn/s1ANKdS3H9cR/NfjPyAq2AQYTa4mMgIGm8YxZimycoWIQRcOWyS A5mJhGHxfLdH/b8+s0U5GQAA26kBAOwHZk/ooynHdjKK8me5MPiHpf5rSxf+3mox KsJV63olAQDhPIR+NTa62D7JnTUr7sxB/rrzGmQ8aPV/c1VKgHn3BM4zBGFXCK4W CSsGAQQB2kcPAQEHQEmnOh/dr2w+wI+YOROT7KjbxgnPUap4NnmWoUB717wawsC/ BBgWCgExBYJhVwiuCRC83Z68CWkngEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdMRbknLujAd7HyOm9oITBav6uFFyCZqYNLcqDP2M19YwKb Ar6gBBkWCgBvBYJhVwiuCRCXDrogyI730EcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcRSelOGy/9du17YXHrnsz73i+V863dh6zYYfQb3uPb rBYhBMwARk142Gq5K+PYLpcOuiDIjvfQAAB97wD+NRKGO7t5DuAolbgmwOjBhixN WkVQ1GLYAwkeVmdKqVoBANz3vN89UfXhIDpDSpPUDKmWWGUMPUVYBmZo9MLCPBwH FiEEWE0ZWtic4DVNLMuuvN2evAlpJ4AAAPnTAP9T0caEtpUHArHuupPn5aP3bf4S /G0CjJFQZaXx+G6NkAEA2Hbm4p1hPxbjSgsUVjYueUYUYrHySx/xkToxbD8lnwHG MwRhVwiuFgkrBgEEAdpHDwEBB0BZmDH0Lq1Z9FUdqlJkUi7wSgoiSkUS3i1+M2Dr ZPOxIsLACwQfFgoAfQWCYVcIrgMLCQcJEEf9vz6zRTkZRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyFIMYnLnm/DM7EIPGbcg2Rq3oVlKU09 U3FhQOSsY04dAxUKCAKbAQIeARYhBFw5bJIDmYmEYfF8t0f9vz6zRTkZAAAudwD/ c3eSAMr2F6kiVNY0dE6+QVfcrp3H+IXQ51ovgMmI6K8BAMM6wXeL9wd1lzmPSV/1 GS2eLVZikcyAaqTQNyHgLb0JzRA8YWxpY2VAc29tZS5vcmc+wsAOBBMWCgCABYJh VwiuAwsJBwkQR/2/PrNFORlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnrg04t/upquXa8Bo0jcnz2ao9+pnAB0RD6loIMyw1UZUDFQoIApkB ApsBAh4BFiEEXDlskgOZiYRh8Xy3R/2/PrNFORkAALqYAP4pFeun1ohaFHAuQ8im u6/SYknix4aN5CO1RC9TU53euwD/fiRNpfrh8pTfH2WheLSydxhTTTMsfY+XPA8+ DT8yJAzOMwRhVwiuFgkrBgEEAdpHDwEBB0ASBfvAgBwoDaFCHuL0DXfwqaPpeaLQ XYLibmeHiQ3VBMLAvwQYFgoBMQWCYVcIrgkQR/2/PrNFORlHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnxQzPgUcBtfRiFysevdhEPT/qBXGT 6dbe/y07OEYRUhkCmwK+oAQZFgoAbwWCYVcIrgkQWZQVbY+YLJVHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnUM78pcSNI6x/ZVjWHeoscwYy drRRJlSOmDzXrVtz4TwWIQSsIiLk1PHNvsfWJKFZlBVtj5gslQAAXnUBANpq7KXz VHtPogvfjwaWnnpUkPsvABohdmC7na54s7fFAP9WqaWodKUXBw58WtxXsP8zYiIE nN5Cx9ANXImG9JzTChYhBFw5bJIDmYmEYfF8t0f9vz6zRTkZAADpJQD+Kib4Dznu UAWrIs7AqzHir06rHFPFSmbI7TSEizNrsysA/RPlvR6rWDPfFZ9+p+liOaBb0wHL W5171lTIT7E5xN8KxjMEYVcIrhYJKwYBBAHaRw8BAQdAglEwcZ9qqVYZGN84YMV0 h7mNTv9lxPojsLwg+4KYWiXCwAsEHxYKAH0FgmFXCK4DCwkHCRC7hYd3ZsAJ5EcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfWTaMOPGG+ge4V XJn5iU39zN6L0iUSq5drF4d3VQ6CHQMVCggCmwECHgEWIQQ2CJxJ8Yv2/GvKNeO7 hYd3ZsAJ5AAAOY4BAJfpCpkv6qjdYp4SLsN3dt1PEmjTZu59CDi11wvi8D89AP4g pxLTxSs+6rNw9TlnicpeGMz3FigvOc5vCEoAJKTPA80QPGVkQGV4YW1wbGUub3Jn PsLADgQTFgoAgAWCYVcIrgMLCQcJELuFh3dmwAnkRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/8J8XH/sOjoRnJQYxEMSYiBaZbbjQ0hKK1V TrxPNX7aAxUKCAKZAQKbAQIeARYhBDYInEnxi/b8a8o147uFh3dmwAnkAABquwD/ UVTieJq6A12ZnA+ggZIJb6MVzXWQrLeNk+Rd9D55fzYA/iqgo6mefS6fdiGDC9MC KkMVzt8hggWLSsLXVkafpjILwsAHBBAWCgB5BYJhVwjqBYMJZ5o7A4UHZAkQfvwO 3ge1BqhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1VyW 6fg+TSg9OwkL/rOfZyDL9sCgK/60mKlhEsJXdC0WIQRYB35llzJSbBuL+YN+/A7e B7UGqAAArTwBAIvh98l6blb+hhaSyYFIrYz+Vnzv2vhoSL6MhyJSp+4oAP4/ZiOy Dho5Q1wSsg08tNPJ9iFLmuoa0yNs1k3NpGmDCM4zBGFXCK4WCSsGAQQB2kcPAQEH QIoeDfJ+7KDFRjGRgMnVBpd+jwh9GAMk0tlqo/iv95DhwsC/BBgWCgExBYJhVwiu CRC7hYd3ZsAJ5EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmeC+SHa5JNp8u/uExeDfvWjLMc6v4baGCtGcEBZf4QuLAKbAr6gBBkWCgBvBYJh VwiuCRBc7FBa6kFKAkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmekzWu0l1aPllYky+BiAn3nQWCnhlT6pFp/N7nt/lxqPBYhBNpyR9bUKZ2U yWJfTVzsUFrqQUoCAAA41QEA8xI/Jaz+76HEviXiE0vGzhY+rQ9Scn5hUpiSwoU9 S8YA/2iZ1Uro56reDAVofAwGiYSq35riWvhma37CbZiyB4YCFiEENgicSfGL9vxr yjXju4WHd2bACeQAAH5YAP9A4Vm1Rui3NVI7O069hAyGxs4oMa3qOUEZcr4blqje VgD9EfDdZGemXpzwOb7gJ52vaaoY363TpM53Qfnm+9wMBgY= =yaa7 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-2.sh000075500000000000000000000005421046102023000160440ustar 00000000000000#! /bin/bash set -e . gen-helper.sh --directory=regex-2 ${@:+"$@"} key alice@some.org key bob@some.org key carol@other.org key dave@their.org key ed@example.org certify alice -a 100 -d 7 bob@some.org certify bob -a 100 -d 7 --domain=example.org carol@other.org certify carol -a 100 -d 7 dave@their.org certify dave -a 100 -d 7 ed@example.org finish sequoia-wot-0.11.0/tests/data/regex-3/README.md000064400000000000000000000007611046102023000167700ustar 00000000000000Here we have multiple regular expressions on a single delegation. ``` alice@some.org | 100/3/example.org|other.org _ bob@example.org _ 100/0 / | 100/3/their.org|other.org \ carol@example.org _ dave@other.org _ henry@their.org 100/0 / | 100/0 \ 100/0 ed@example.org frank@other.org george@their.org ``` sequoia-wot-0.11.0/tests/data/regex-3/alice-priv.pgp000064400000000000000000000027601046102023000202550ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D8CF EBBA 006E 2ED5 7CF4 5CC4 13F0 BAE0 9D94 FE4E Comment: xVgEYVcsqRYJKwYBBAHaRw8BAQdAU4Je04mhZvJcLr5gs5bf5zR/y3d0uVGksdcw O0M8mhMAAP0epR8hdJ8yphsOcFnBcLdPxaoxsrPYkskUwDrqyPcMSBBXwsALBB8W CgB9BYJhVyypAwsJBwkQE/C64J2U/k5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnEjbtfWPSYHkbhBkQmMKXP6YhU3aLcBl4Uc/7sVEuJxkD FQoIApsBAh4BFiEE2M/rugBuLtV89FzEE/C64J2U/k4AAOj7AP0aQEW2+Si/sHNo sQMppAc9cblssT5PheyUns/XaowMvwEAm3GdMEOOyyO3JyEWS3RBTK8TiQvNViK9 S9sC6b7vHAfNEDxhbGljZUBzb21lLm9yZz7CwA4EExYKAIAFgmFXLKkDCwkHCRAT 8LrgnZT+TkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdj H16df4JowlH0LJh/lqiq9iWz02OkB6mk/HV7Fd/RTAMVCggCmQECmwECHgEWIQTY z+u6AG4u1Xz0XMQT8LrgnZT+TgAANKEBAInh9ghYTG0VWm9X7Siy130iQKjKzu8l CFbQHEgnTEFRAQCdM/4/wsGXyg9j8g2YgfKG4tX+2WrU1MfV96O9J4KrAcdYBGFX LKkWCSsGAQQB2kcPAQEHQNlJ8+qJgz5YpUE617aBH5bztMLUtrUrVpSXpWkMGgjx AAD7B4zXTeKVxnCQJHwE6bkf3kfgSG2y6Ft5YGu86JFJJG0RVsLAvwQYFgoBMQWC YVcsqQkQE/C64J2U/k5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnTalVJvOBR3FQ29zRVT/GUX3GLFQXlNWMuftw9lh1oNQCmwK+oAQZFgoA bwWCYVcsqQkQFlIj0UBKFVhHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnjr9eKE7SjNTRDzVlSUgKpWfwbmwc/mPfj9v3dieorF0WIQQuVMOW RL+EHfsQemcWUiPRQEoVWAAAGiwA/2MP7yqLkvyIxdq1HVJjGEUMXF5CLGIl2o5L gX0a1WDrAQDAZhzHJoZdbgtFFMTuHC0/DhDXwVrpSJRxZ4DDlcrgCRYhBNjP67oA bi7VfPRcxBPwuuCdlP5OAACTjAD/QnE5ULVf5HHSsyNEwCtxKFDhXBHZbIv4tMwL VNpcKEABAOXvVXWHoB5SZrWOu5j100EsbtW/WDViWb2rbjjIdEgD =ttg5 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/alice.pgp000064400000000000000000000026151046102023000172760ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: D8CF EBBA 006E 2ED5 7CF4 5CC4 13F0 BAE0 9D94 FE4E Comment: xjMEYVcsqRYJKwYBBAHaRw8BAQdAU4Je04mhZvJcLr5gs5bf5zR/y3d0uVGksdcw O0M8mhPCwAsEHxYKAH0FgmFXLKkDCwkHCRAT8LrgnZT+TkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcSNu19Y9JgeRuEGRCYwpc/piFTdotw GXhRz/uxUS4nGQMVCggCmwECHgEWIQTYz+u6AG4u1Xz0XMQT8LrgnZT+TgAA6PsA /RpARbb5KL+wc2ixAymkBz1xuWyxPk+F7JSez9dqjAy/AQCbcZ0wQ47LI7cnIRZL dEFMrxOJC81WIr1L2wLpvu8cB80QPGFsaWNlQHNvbWUub3JnPsLADgQTFgoAgAWC YVcsqQMLCQcJEBPwuuCdlP5ORxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ2MfXp1/gmjCUfQsmH+WqKr2JbPTY6QHqaT8dXsV39FMAxUKCAKZ AQKbAQIeARYhBNjP67oAbi7VfPRcxBPwuuCdlP5OAAA0oQEAieH2CFhMbRVab1ft KLLXfSJAqMrO7yUIVtAcSCdMQVEBAJ0z/j/CwZfKD2PyDZiB8obi1f7ZatTUx9X3 o70ngqsBzjMEYVcsqRYJKwYBBAHaRw8BAQdA2Unz6omDPlilQTrXtoEflvO0wtS2 tStWlJelaQwaCPHCwL8EGBYKATEFgmFXLKkJEBPwuuCdlP5ORxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ02pVSbzgUdxUNvc0VU/xlF9xixU F5TVjLn7cPZYdaDUApsCvqAEGRYKAG8FgmFXLKkJEBZSI9FAShVYRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ46/XihO0ozU0Q81ZUlICqVn 8G5sHP5j34/b93YnqKxdFiEELlTDlkS/hB37EHpnFlIj0UBKFVgAABosAP9jD+8q i5L8iMXatR1SYxhFDFxeQixiJdqOS4F9GtVg6wEAwGYcxyaGXW4LRRTE7hwtPw4Q 18Fa6UiUcWeAw5XK4AkWIQTYz+u6AG4u1Xz0XMQT8LrgnZT+TgAAk4wA/0JxOVC1 X+Rx0rMjRMArcShQ4VwR2WyL+LTMC1TaXChAAQDl71V1h6AeUma1jruY9dNBLG7V v1g1Ylm9q244yHRIAw== =Ofc/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/bob-priv.pgp000064400000000000000000000027651046102023000177470ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A75D C1A1 EDA5 282F 3A73 81B5 1824 E46B BCC8 01F0 Comment: xVgEYVcsqRYJKwYBBAHaRw8BAQdApIvw+GEPabyGFJ5z0YXRlTFj1397FaIpS7Ez V6P8OysAAP9YphUi4D132l1HKyRwXWK4ELdMXXb/VTFG/gm8BohEiQ5LwsALBB8W CgB9BYJhVyypAwsJBwkQGCTka7zIAfBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn0FoGo2bJKDmri22mAX1719nPiSOU9+6MWVs9hQyJqeID FQoIApsBAh4BFiEEp13Boe2lKC86c4G1GCTka7zIAfAAAD+iAP9Lz92HHtoQ+/HC L7YzQbhHYDS+pDLC73+6UZ6DJsn0rwEA/MUqmK0z1d+DjAjgLLj8LNjBCGCZCie2 E7AFad+MaAzNETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhVyypAwsJBwkQ GCTka7zIAfBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn TLU6PeMtTGCD4zvxo/iv83RQvtzkVYlrlGJKKMOmWDUDFQoIApkBApsBAh4BFiEE p13Boe2lKC86c4G1GCTka7zIAfAAAOaqAQCuZCYnKaMG5tKo/GYGXphe5GvUE8fY AYNygVln/SBndgD/ap0/C2KHvctaDyzPzXA7dbus6JhTT39dZhrNRq1hkQPHWARh VyypFgkrBgEEAdpHDwEBB0DfOSVYa1WhgwIqlKPVyOkXMUj8sQtLN90z8rJFlcCW eAAA/0dLjZj5Vb04a6663/KA3sJnChjCSNDpj5jf9XQAG6BDEnbCwL8EGBYKATEF gmFXLKkJEBgk5Gu8yAHwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZzuRuQvR10P0Jza+Z2AwusCqfQX/InmWBGplzeE56UyXApsCvqAEGRYK AG8FgmFXLKkJEI5mzCfWREUVRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ328Ub4hi8iCg4o4f/eOnjjNjfFcn9fEEF+NoliMWkigFiEEnuie xRUedoSebuOAjmbMJ9ZERRUAANIUAQCF/ABgqNB4IHiY8PIwjz3IHSo3bMrbrgGI zqMnCgaeAQD/XfMkEfLl92PnW2MamdOcl8o4z2iMySImM3mBsdpSkwcWIQSnXcGh 7aUoLzpzgbUYJORrvMgB8AAAq/gA/0xUvMuK8ikgkCuWrEoSJxFRT8wlKHJO5+53 8fAgnxg6AP0fjv6KtVK0kd0tdZXmSWpCf+3oP5jMd5Dss55tVPy4Bg== =TWDI -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/bob.pgp000064400000000000000000000032201046102023000167540ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcsqRYJKwYBBAHaRw8BAQdApIvw+GEPabyGFJ5z0YXRlTFj1397FaIpS7Ez V6P8OyvCwAsEHxYKAH0FgmFXLKkDCwkHCRAYJORrvMgB8EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfQWgajZskoOauLbaYBfXvX2c+JI5T3 7oxZWz2FDImp4gMVCggCmwECHgEWIQSnXcGh7aUoLzpzgbUYJORrvMgB8AAAP6IA /0vP3Yce2hD78cIvtjNBuEdgNL6kMsLvf7pRnoMmyfSvAQD8xSqYrTPV34OMCOAs uPws2MEIYJkKJ7YTsAVp34xoDM0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFXLKkDCwkHCRAYJORrvMgB8EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdMtTo94y1MYIPjO/Gj+K/zdFC+3ORViWuUYkoow6ZYNQMVCggC mQECmwECHgEWIQSnXcGh7aUoLzpzgbUYJORrvMgB8AAA5qoBAK5kJicpowbm0qj8 ZgZemF7ka9QTx9gBg3KBWWf9IGd2AP9qnT8LYoe9y1oPLM/NcDt1u6zomFNPf11m Gs1GrWGRA8LAOwQQFgoArQWCYVcs5QWDCWeaOwOFA2QahjxbXj5dK1tALl1leGFt cGxlXC5vcmc+JAAYhjxbXj5dK1tALl1vdGhlclwub3JnPiQACRAT8LrgnZT+TkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeXcItiJWyeZtI5 kJBSXWoqPJeUx0c8rPYYVKFBJJ+pZRYhBNjP67oAbi7VfPRcxBPwuuCdlP5OAABm DwD9FC6/uHHi9gb2ZcgA8M6aosr9t9rfx4jCkgkzY8Dzok4BANB4f7VEgPqb5vgh 0A4+N7NRHKmt0d6GrH9y0El7lRsJzjMEYVcsqRYJKwYBBAHaRw8BAQdA3zklWGtV oYMCKpSj1cjpFzFI/LELSzfdM/KyRZXAlnjCwL8EGBYKATEFgmFXLKkJEBgk5Gu8 yAHwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzuRuQvR 10P0Jza+Z2AwusCqfQX/InmWBGplzeE56UyXApsCvqAEGRYKAG8FgmFXLKkJEI5m zCfWREUVRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ328 Ub4hi8iCg4o4f/eOnjjNjfFcn9fEEF+NoliMWkigFiEEnuiexRUedoSebuOAjmbM J9ZERRUAANIUAQCF/ABgqNB4IHiY8PIwjz3IHSo3bMrbrgGIzqMnCgaeAQD/XfMk EfLl92PnW2MamdOcl8o4z2iMySImM3mBsdpSkwcWIQSnXcGh7aUoLzpzgbUYJORr vMgB8AAAq/gA/0xUvMuK8ikgkCuWrEoSJxFRT8wlKHJO5+538fAgnxg6AP0fjv6K tVK0kd0tdZXmSWpCf+3oP5jMd5Dss55tVPy4Bg== =UUvw -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/carol-priv.pgp000064400000000000000000000027671046102023000203070ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4BCD 4325 BDAC A452 F030 1227 A30C B4BC C329 E769 Comment: xVgEYVcsqRYJKwYBBAHaRw8BAQdA43CitfPY0bYLwarPSZrR66eOGwa8N7QpcYUI MI6uFmYAAP96B2wU+lHewBb2gWtjZzANb17tUS84EbxNM5uqTwc8uA42wsALBB8W CgB9BYJhVyypAwsJBwkQowy0vMMp52lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnkGX2UQ+p3YpA957VRIMFpT9YoBSRQHPjKD0yBirxnqsD FQoIApsBAh4BFiEES81DJb2spFLwMBInowy0vMMp52kAAMLvAP9LNKsOqxK2ps5S QyZuRxBge+fSxfyaqxZ5cFtbvT5jKgEA8ZpXys77PTHTACQZszeaVYOZUQEWB2aq xHL34DzmQwHNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFXLKkDCwkH CRCjDLS8wynnaUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcjYmf926Lv5DhL1tYpk9S/zSD8upS6U7dRSVdSjylOrwMVCggCmQECmwECHgEW IQRLzUMlvaykUvAwEiejDLS8wynnaQAAAdMBAI2KdBgH3C39s6OnhW5GGBk10Nmu 5oHVsKkLnACOZ2u5AP9DgFR4O+0j5n5cxX5N8Lu8Ne/SQn2dGGx/P4SDS7t7D8dY BGFXLKkWCSsGAQQB2kcPAQEHQEWa2HX1r1ILtMIGMdIJM57m/RsfyF6mK49Mnks0 aAxKAAEA1pqKZI9vY0bF3FrP9Cqr70oEx2x6RofJqiIRjvINvhMQVMLAvwQYFgoB MQWCYVcsqQkQowy0vMMp52lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn8j9YtN1tNIc43SfTOEKnd5z/ErWwNVN1awmd8sCusFsCmwK+oAQZ FgoAbwWCYVcsqQkQEvgcQmqKJplHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnRGU2TIAJggJEFcfNromaRqiHWhHWziFqkXeUDlpOfSYWIQRx nP7OyE4yklkXB9oS+BxCaoommQAAIpoA/0n0iTR6qv1BLsHqnzbbGLw8XyLwKr4o sWHEecZ3TMZeAQCCzcdQvbbY2LDm7EbWWH3L3XnqT4xbfm0kMYLOkSB+ABYhBEvN QyW9rKRS8DASJ6MMtLzDKedpAAA7hQEA3dhDUj+mZv6qJROjfycr7GFYE445o1mc 1Qz3VHM3W78BAJq4VjEONntQAa9ak5qmRexh+NUwwODuJ0DAPhgM9oEN =L7+/ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/carol.pgp000064400000000000000000000031131046102023000173130ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcsqRYJKwYBBAHaRw8BAQdA43CitfPY0bYLwarPSZrR66eOGwa8N7QpcYUI MI6uFmbCwAsEHxYKAH0FgmFXLKkDCwkHCRCjDLS8wynnaUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeQZfZRD6ndikD3ntVEgwWlP1igFJFA c+MoPTIGKvGeqwMVCggCmwECHgEWIQRLzUMlvaykUvAwEiejDLS8wynnaQAAwu8A /0s0qw6rEramzlJDJm5HEGB759LF/JqrFnlwW1u9PmMqAQDxmlfKzvs9MdMAJBmz N5pVg5lRARYHZqrEcvfgPOZDAc0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVcsqQMLCQcJEKMMtLzDKedpRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZyNiZ/3bou/kOEvW1imT1L/NIPy6lLpTt1FJV1KPKU6vAxUK CAKZAQKbAQIeARYhBEvNQyW9rKRS8DASJ6MMtLzDKedpAAAB0wEAjYp0GAfcLf2z o6eFbkYYGTXQ2a7mgdWwqQucAI5na7kA/0OAVHg77SPmflzFfk3wu7w179JCfZ0Y bH8/hINLu3sPwsAHBBAWCgB5BYJhVyzlBYMJZ5o7A4UBZAkQGCTka7zIAfBHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnjGTBmXJC0YHFgWe0 stKbxoSYH9gHuGJK87oQnMVB68QWIQSnXcGh7aUoLzpzgbUYJORrvMgB8AAASwcA /3aQN1ghVV3MyQWWXuPSqbtCe//eMzu24sq+VJlipZ6+AQDOSl8oAQBFc6Fu5CLS pfY+xATZrdgIO8JrTU+Sp97SDs4zBGFXLKkWCSsGAQQB2kcPAQEHQEWa2HX1r1IL tMIGMdIJM57m/RsfyF6mK49Mnks0aAxKwsC/BBgWCgExBYJhVyypCRCjDLS8wynn aUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfyP1i03W00 hzjdJ9M4Qqd3nP8StbA1U3VrCZ3ywK6wWwKbAr6gBBkWCgBvBYJhVyypCRAS+BxC aoommUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdEZTZM gAmCAkQVx82uiZpGqIdaEdbOIWqRd5QOWk59JhYhBHGc/s7ITjKSWRcH2hL4HEJq iiaZAAAimgD/SfSJNHqq/UEuweqfNtsYvDxfIvAqviixYcR5xndMxl4BAILNx1C9 ttjYsObsRtZYfcvdeepPjFt+bSQxgs6RIH4AFiEES81DJb2spFLwMBInowy0vMMp 52kAADuFAQDd2ENSP6Zm/qolE6N/JyvsYVgTjjmjWZzVDPdUczdbvwEAmrhWMQ42 e1ABr1qTmqZF7GH41TDA4O4nQMA+GAz2gQ0= =0OGy -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/dave-priv.pgp000064400000000000000000000027601046102023000201170ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2E1A AA8D 9A22 C94A CCA3 62A2 2B34 031C D5CB 9380 Comment: xVgEYVcsqRYJKwYBBAHaRw8BAQdAz1NtV4r2WnU4sFGlJGxnii4IE7zNAPgULlNU Iy0DyIUAAP9hrxWKLeuxZ8n1N/dZplz8jVh+15EgQCFmEm9KXD62zBC6wsALBB8W CgB9BYJhVyypAwsJBwkQKzQDHNXLk4BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnPJuCG8pL/Jwf5PdCKRcMs6POUT/JWAhpaJ1z4UIu1v0D FQoIApsBAh4BFiEELhqqjZoiyUrMo2KiKzQDHNXLk4AAAELPAQD0MWFbGTQqMAVi v/Z7dLB4O2xX1yVxdlqK1+T6hUKu3wD8DWgfWperdkXeKwoKQydI/CGUSmS3KQXw /l52lUeCYw3NEDxkYXZlQG90aGVyLm9yZz7CwA4EExYKAIAFgmFXLKkDCwkHCRAr NAMc1cuTgEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcG UlGzkb/gYXQtlEYEiktQ4EBOPZcKxNM68vV0wBW5lAMVCggCmQECmwECHgEWIQQu GqqNmiLJSsyjYqIrNAMc1cuTgAAA/d8BAJg5QxhlHgFndAlsNXVrjdne62K4djR9 2KY7tBwRj0voAP9iSFrtP7gMKO5hIT+9wti5m+4V/toxKliaM6K4NMucC8dYBGFX LKkWCSsGAQQB2kcPAQEHQNvSPj6pkz/sjIpCmyuKg65fTAnfiIQHKTtld5Ri+6RD AAEAmNCcpI8dF3l6aIEtMulvSMldNwmNX7CoE0kivCuemeAObcLAvwQYFgoBMQWC YVcsqQkQKzQDHNXLk4BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn1fRWEKIigZSjxA1QAylz5uYacYZn+PRTjjlw+xNgX7ACmwK+oAQZFgoA bwWCYVcsqQkQn3/K19pW9GBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnuMPcVDdYalY2zzDD91Msn/9I67CxB1BycuQfv3t+cO8WIQTTznTZ XU2Xz+oRlDCff8rX2lb0YAAADfYA/0oNIJmU4Gl5cfvbPsA5BNgwe56BVxuk80DY UfDbH1YHAQCf4kJT6QYBlE/jaky7gms0JdQqcVSo4oAtz7APbrlCDxYhBC4aqo2a IslKzKNiois0AxzVy5OAAACvGwD/Ygv5oRIHePA1J840hiza+uXnFuHvs6EvtBJ7 e78xFxQA/imuV4PCvjCkMq3I+ioG5kQgbWGhJXiNSHPRX7Qx/l4B =9W5E -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/dave.pgp000064400000000000000000000032141046102023000171340ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcsqRYJKwYBBAHaRw8BAQdAz1NtV4r2WnU4sFGlJGxnii4IE7zNAPgULlNU Iy0DyIXCwAsEHxYKAH0FgmFXLKkDCwkHCRArNAMc1cuTgEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc8m4Ibykv8nB/k90IpFwyzo85RP8lY CGlonXPhQi7W/QMVCggCmwECHgEWIQQuGqqNmiLJSsyjYqIrNAMc1cuTgAAAQs8B APQxYVsZNCowBWK/9nt0sHg7bFfXJXF2WorX5PqFQq7fAPwNaB9al6t2Rd4rCgpD J0j8IZRKZLcpBfD+XnaVR4JjDc0QPGRhdmVAb3RoZXIub3JnPsLADgQTFgoAgAWC YVcsqQMLCQcJECs0AxzVy5OARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZwZSUbORv+BhdC2URgSKS1DgQE49lwrE0zry9XTAFbmUAxUKCAKZ AQKbAQIeARYhBC4aqo2aIslKzKNiois0AxzVy5OAAAD93wEAmDlDGGUeAWd0CWw1 dWuN2d7rYrh2NH3Ypju0HBGPS+gA/2JIWu0/uAwo7mEhP73C2Lmb7hX+2jEqWJoz org0y5wLwsA5BBAWCgCrBYJhVyzlBYMJZ5o7A4UBZBiGPFtePl0rW0AuXXRoZWly XC5vcmc+JAAYhjxbXj5dK1tALl1vdGhlclwub3JnPiQACRAYJORrvMgB8EcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcTGrXfbe1O95lSNK18 Lp+P/ZPNMSt2dmjauea1oPDJlhYhBKddwaHtpSgvOnOBtRgk5Gu8yAHwAABZswEA g/YtHYycfOYXorpjOG7DCyOKOjRvpbFsU7b3B8myhqkA/j1p1ukZnjWJoXI4y/6T R/D4xtr9VgLlq4Hoy/2zXigJzjMEYVcsqRYJKwYBBAHaRw8BAQdA29I+PqmTP+yM ikKbK4qDrl9MCd+IhAcpO2V3lGL7pEPCwL8EGBYKATEFgmFXLKkJECs0AxzVy5OA RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9X0VhCiIoGU o8QNUAMpc+bmGnGGZ/j0U445cPsTYF+wApsCvqAEGRYKAG8FgmFXLKkJEJ9/ytfa VvRgRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7jD3FQ3 WGpWNs8ww/dTLJ//SOuwsQdQcnLkH797fnDvFiEE08502V1Nl8/qEZQwn3/K19pW 9GAAAA32AP9KDSCZlOBpeXH72z7AOQTYMHuegVcbpPNA2FHw2x9WBwEAn+JCU+kG AZRP42pMu4JrNCXUKnFUqOKALc+wD265Qg8WIQQuGqqNmiLJSsyjYqIrNAMc1cuT gAAArxsA/2IL+aESB3jwNSfONIYs2vrl5xbh77OhL7QSe3u/MRcUAP4prleDwr4w pDKtyPoqBuZEIG1hoSV4jUhz0V+0Mf5eAQ== =k1V5 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/ed-priv.pgp000064400000000000000000000027601046102023000175700ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: F645 D081 F480 BE26 C7D2 C84D 941B 3E2C E53F AF16 Comment: xVgEYVcsqRYJKwYBBAHaRw8BAQdA7C8Ak0Zcp6lfjHJgxjX12ZWeqD8f71qM8n76 py5LZtwAAQDhgnDJzvk8NdeqBqQlGsheriIRoIbv4Ekxi9tHnddkvBD2wsALBB8W CgB9BYJhVyypAwsJBwkQlBs+LOU/rxZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnTLYp6UI8iLJ64rRh8RDmGWiz8BknH+6WF8pHHZYy3EUD FQoIApsBAh4BFiEE9kXQgfSAvibH0shNlBs+LOU/rxYAACKzAQD6DJyfM7upqdq7 fV35dgLbxV6KJGyodAdCT/GRRbFtDwD/Q/zS3zX/T3mOECOsj6CxrX5kUxPV3eu9 itIJqtx43AbNEDxlZEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFXLKkDCwkHCRCU Gz4s5T+vFkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfX JwTrePyhjbGNYCGP89OE70M+6lF2gIxL3tBadImTGgMVCggCmQECmwECHgEWIQT2 RdCB9IC+JsfSyE2UGz4s5T+vFgAA5h0A/iMxTeyqzLMqTJ0IvtBdPg5qTuom4yI/ j3GBVDVZo4NKAQDov0STRAesPRPpvt/0zUzL2BDJxWF4FLx4IkQK9KTaCcdYBGFX LKkWCSsGAQQB2kcPAQEHQMDDPdMYqeoFNjqCMWpNyPdFwZ3NUeHGmbD2QqvrFpac AAD/aGVt/BtsqIcMqeGjDnkht3hcy66e3AObPGOAdGIgP4UPwcLAvwQYFgoBMQWC YVcsqQkQlBs+LOU/rxZHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jn0E0O5nPWa7blvQdBipc4f8UVBEnVnDg6ZNaZUN2XKk0CmwK+oAQZFgoA bwWCYVcsqQkQyUWScMYH7jJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnZGqy2cy6eWpPg/ENCHi98BIOlD4sVcwIzqsuSA/s6rgWIQT+BHYy pcgyyjj6vLXJRZJwxgfuMgAAXy0A/0qcNj76zpIp5EyVAS6rMlmzYAiDIOzc0YAv wDGldCUBAQCbsVuY74g0HtAJH7tcZ9lQx2afZPAY+XHRASmU+QSoAxYhBPZF0IH0 gL4mx9LITZQbPizlP68WAACHeQEA+7vZExlLEXR2Oh3YZoBNseIwnnjdwm/9znN4 TIGvfdMA/juTAcXQ6JoIll2NfjQPj1u8LVlQ53YhWeUspesuXHsP =1cdj -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/ed.pgp000064400000000000000000000031071046102023000166060ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcsqRYJKwYBBAHaRw8BAQdA7C8Ak0Zcp6lfjHJgxjX12ZWeqD8f71qM8n76 py5LZtzCwAsEHxYKAH0FgmFXLKkDCwkHCRCUGz4s5T+vFkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdMtinpQjyIsnritGHxEOYZaLPwGScf 7pYXykcdljLcRQMVCggCmwECHgEWIQT2RdCB9IC+JsfSyE2UGz4s5T+vFgAAIrMB APoMnJ8zu6mp2rt9Xfl2AtvFXookbKh0B0JP8ZFFsW0PAP9D/NLfNf9PeY4QI6yP oLGtfmRTE9Xd672K0gmq3HjcBs0QPGVkQGV4YW1wbGUub3JnPsLADgQTFgoAgAWC YVcsqQMLCQcJEJQbPizlP68WRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ9cnBOt4/KGNsY1gIY/z04TvQz7qUXaAjEve0Fp0iZMaAxUKCAKZ AQKbAQIeARYhBPZF0IH0gL4mx9LITZQbPizlP68WAADmHQD+IzFN7KrMsypMnQi+ 0F0+DmpO6ibjIj+PcYFUNVmjg0oBAOi/RJNEB6w9E+m+3/TNTMvYEMnFYXgUvHgi RAr0pNoJwsAHBBAWCgB5BYJhVyzlBYMJZ5o7A4UBZAkQKzQDHNXLk4BHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnu3tgcKh1g7+MPWRI2wQ7 609dljlBz9PIaKkqY5IFALAWIQQuGqqNmiLJSsyjYqIrNAMc1cuTgAAA09MBAOT1 J7UWCPN9Z3g+Xl/uopEySgFiJ5Uic1Wb9Ku6KVojAQDBBuvgCtOydm2zgzXJuxyF MX0BLNrUz4ZDxHwB6Hu6As4zBGFXLKkWCSsGAQQB2kcPAQEHQMDDPdMYqeoFNjqC MWpNyPdFwZ3NUeHGmbD2QqvrFpacwsC/BBgWCgExBYJhVyypCRCUGz4s5T+vFkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfQTQ7mc9ZrtuW9 B0GKlzh/xRUESdWcODpk1plQ3ZcqTQKbAr6gBBkWCgBvBYJhVyypCRDJRZJwxgfu MkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdkarLZzLp5 ak+D8Q0IeL3wEg6UPixVzAjOqy5ID+zquBYhBP4EdjKlyDLKOPq8tclFknDGB+4y AABfLQD/Spw2PvrOkinkTJUBLqsyWbNgCIMg7NzRgC/AMaV0JQEBAJuxW5jviDQe 0Akfu1xn2VDHZp9k8Bj5cdEBKZT5BKgDFiEE9kXQgfSAvibH0shNlBs+LOU/rxYA AId5AQD7u9kTGUsRdHY6HdhmgE2x4jCeeN3Cb/3Oc3hMga990wD+O5MBxdDomgiW XY1+NA+PW7wtWVDndiFZ5Syl6y5cew8= =oMww -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/frank-priv.pgp000064400000000000000000000027651046102023000203060ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: AFAB 11F1 A37F D20C 85CF 8093 F494 1D1A 0EC5 749F Comment: xVgEYVcsqRYJKwYBBAHaRw8BAQdATriu/j6ll5ePfkkh6N/x8lGRsExnxXc2MK3x 2G6o5uMAAQCftfqZyHVV1GoL75ihQAUJE7TDtgtjk/d5o52R4BNBjBB7wsALBB8W CgB9BYJhVyypAwsJBwkQ9JQdGg7FdJ9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnTQKAMDy81wABGqa/UAZ6MynB+JRU5QSGDInB7Dxymm4D FQoIApsBAh4BFiEEr6sR8aN/0gyFz4CT9JQdGg7FdJ8AADM7AQCVRfDPGDEOjpQW 8qeUT0YhLADVUCGe4TA7vJhiD4OZ5QD+Oi8kn8SC77LYvWET4le11+nzAAsuvKFg FnQ47+jjFg/NETxmcmFua0BvdGhlci5vcmc+wsAOBBMWCgCABYJhVyypAwsJBwkQ 9JQdGg7FdJ9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn sdwpJPVSlndwBYgNBycg578M/Ex07E0ySBSJx/wXAy0DFQoIApkBApsBAh4BFiEE r6sR8aN/0gyFz4CT9JQdGg7FdJ8AAEqKAQD+xfl46PeMqRJVVlY7lXlCNTEUVu0s UrL6Z7ULSgiNYwEAwYRSFxIs/TIDvldaaa924S4v1+n1iPetagCK5okLbQbHWARh VyypFgkrBgEEAdpHDwEBB0DKfRuYQLiLIZIaXYfYErNla1aQZzWu5uubPneclmj9 wwABALHa77a4F3RLg7cCrSdN1mewzJGyk3Rzzrp6fVFlZFZ4EPnCwL8EGBYKATEF gmFXLKkJEPSUHRoOxXSfRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ2D6vr/GICW8OK5Qg6C0PSAWMPAAuN4HGssrJNB8FlpzApsCvqAEGRYK AG8FgmFXLKkJEKbWJriJ7sy/RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ7xC0GlMZobWntmaWONYqocwbw1l65TgKiQ9CI3C6t7yFiEEegMU KS4tcB/vYSSoptYmuInuzL8AACePAQCRJ3hb5v2Yu2QtP/ouQLnATrZoFuzG7NMI kLJOTDbvZAD/RuaCuEF0fx+3NG+PIZZGktlrcW6noT3jRcDXk40oWAoWIQSvqxHx o3/SDIXPgJP0lB0aDsV0nwAA5PUA/3/t4f6ix1bQkUHihQMysMHd/nDw3Z8I4v92 AlzAW4rhAP94CbYrRcf86l8hO3NF0XD/PpVOvIMMzCQa9+mrNuQxBw== =2RvX -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/frank.pgp000064400000000000000000000031071046102023000173170ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcsqRYJKwYBBAHaRw8BAQdATriu/j6ll5ePfkkh6N/x8lGRsExnxXc2MK3x 2G6o5uPCwAsEHxYKAH0FgmFXLKkDCwkHCRD0lB0aDsV0n0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdNAoAwPLzXAAEapr9QBnozKcH4lFTl BIYMicHsPHKabgMVCggCmwECHgEWIQSvqxHxo3/SDIXPgJP0lB0aDsV0nwAAMzsB AJVF8M8YMQ6OlBbyp5RPRiEsANVQIZ7hMDu8mGIPg5nlAP46LySfxILvsti9YRPi V7XX6fMACy68oWAWdDjv6OMWD80RPGZyYW5rQG90aGVyLm9yZz7CwA4EExYKAIAF gmFXLKkDCwkHCRD0lB0aDsV0n0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmex3Ckk9VKWd3AFiA0HJyDnvwz8THTsTTJIFInH/BcDLQMVCggC mQECmwECHgEWIQSvqxHxo3/SDIXPgJP0lB0aDsV0nwAASooBAP7F+Xjo94ypElVW VjuVeUI1MRRW7SxSsvpntQtKCI1jAQDBhFIXEiz9MgO+V1ppr3bhLi/X6fWI961q AIrmiQttBsLABwQQFgoAeQWCYVcs5QWDCWeaOwOFAWQJECs0AxzVy5OARxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/X8U79SVYIxeK/+qxRW wYWp+502MznPswlFSCuGqNO/FiEELhqqjZoiyUrMo2KiKzQDHNXLk4AAAJ/RAP9U SWb3Lv+kOV34oBwnFp+T0SO8bar11GjrrUi/ENMMygEAlgkIAagPPlBj1EvrAl+k cvS/AIfGCDmb8N9oCl0sigHOMwRhVyypFgkrBgEEAdpHDwEBB0DKfRuYQLiLIZIa XYfYErNla1aQZzWu5uubPneclmj9w8LAvwQYFgoBMQWCYVcsqQkQ9JQdGg7FdJ9H FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnYPq+v8YgJbw4 rlCDoLQ9IBYw8AC43gcayysk0HwWWnMCmwK+oAQZFgoAbwWCYVcsqQkQptYmuInu zL9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnvELQaUxm htae2ZpY41iqhzBvDWXrlOAqJD0IjcLq3vIWIQR6AxQpLi1wH+9hJKim1ia4ie7M vwAAJ48BAJEneFvm/Zi7ZC0/+i5AucBOtmgW7Mbs0wiQsk5MNu9kAP9G5oK4QXR/ H7c0b48hlkaS2WtxbqehPeNFwNeTjShYChYhBK+rEfGjf9IMhc+Ak/SUHRoOxXSf AADk9QD/f+3h/qLHVtCRQeKFAzKwwd3+cPDdnwji/3YCXMBbiuEA/3gJtitFx/zq XyE7c0XRcP8+lU68gwzMJBr36as25DEH =TNMm -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/george-priv.pgp000064400000000000000000000027661046102023000204560ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D01C 8752 D9BA 9F3F 5F06 B21F 394E 9119 38D6 DB0A Comment: xVgEYVcsqRYJKwYBBAHaRw8BAQdA81ZY/doE1a5WsylSJ3nEocmzxy4hmLCBAjV0 PxVvCH0AAPwNS1xQxewVmh8MTfVKea/WviS/aDPufNZbWPV0TXzHHxBcwsALBB8W CgB9BYJhVyypAwsJBwkQOU6RGTjW2wpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jntx54vDqKtNTFNqLUV9AewUOnzU/lCCIZ/wmRtOneBkMD FQoIApsBAh4BFiEE0ByHUtm6nz9fBrIfOU6RGTjW2woAAMKDAP0Yl3+2JlGH8box LRlUGoRQmDDdG4kSlXSQy+6iz/cVegD/dDqjHGjfPuKRaG/brIn2faP72gGRaLIt Hsar556TTQDNEjxnZW9yZ2VAdGhlaXIub3JnPsLADgQTFgoAgAWCYVcsqQMLCQcJ EDlOkRk41tsKRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z7JV0Ci8D7rDFxK3XsAtsp/ah67MLBCXKzFqmQrM2j7rAxUKCAKZAQKbAQIeARYh BNAch1LZup8/XwayHzlOkRk41tsKAACWZAD8DVglYl4P/fth8bt3Td7NNdV7Zld5 rAFWE6LYt+pWPvkA/11RDYFtNIFdqOQLpkNq3Ty6wozEruNCt66SRPFDLlgPx1gE YVcsqRYJKwYBBAHaRw8BAQdA0PDH5zvTKDd7B2+mFgu6JQs8TZLtY6qVoHhPxxjz 3pwAAP9xvXpwgUWjpdoLflA7DL9S/nP0inLo19oMtkS6rFZTUxGSwsC/BBgWCgEx BYJhVyypCRA5TpEZONbbCkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfHtuET/AnTqAHAHsQxCBfMJ9EXQKtC/R/VyjCNISyVQQKbAr6gBBkW CgBvBYJhVyypCRD2IVTMxsU+wUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmf6fnHdGMioO/d6CVsCqCGVru6X0lWhprUEBIh014CYmBYhBCEV VHF2wiJEKkGa//YhVMzGxT7BAAB2eQEA85sXL1gvZCKHC+KosC+GZ1yQV+/iGDfT 5B2De0et3bMA/R0BR4TH0XPgjyAnPRlqx2YG1pF4Mxu5i0NYHTa3Y6YKFiEE0ByH Utm6nz9fBrIfOU6RGTjW2woAABjRAQCXTm1YBtzqDE/wx6a3rRmN8wKHOAqAB849 SLI854Vg4gEAvE/km8rjkrBPWlRk+R65bxCr/tMHRpfrbdHNJLzdDQo= =k2V6 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/george.pgp000064400000000000000000000031131046102023000174630ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcsqRYJKwYBBAHaRw8BAQdA81ZY/doE1a5WsylSJ3nEocmzxy4hmLCBAjV0 PxVvCH3CwAsEHxYKAH0FgmFXLKkDCwkHCRA5TpEZONbbCkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme3Hni8Ooq01MU2otRX0B7BQ6fNT+UI Ihn/CZG06d4GQwMVCggCmwECHgEWIQTQHIdS2bqfP18Gsh85TpEZONbbCgAAwoMA /RiXf7YmUYfxujEtGVQahFCYMN0biRKVdJDL7qLP9xV6AP90OqMcaN8+4pFob9us ifZ9o/vaAZFosi0exqvnnpNNAM0SPGdlb3JnZUB0aGVpci5vcmc+wsAOBBMWCgCA BYJhVyypAwsJBwkQOU6RGTjW2wpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnslXQKLwPusMXErdewC2yn9qHrswsEJcrMWqZCszaPusDFQoI ApkBApsBAh4BFiEE0ByHUtm6nz9fBrIfOU6RGTjW2woAAJZkAPwNWCViXg/9+2Hx u3dN3s011XtmV3msAVYToti36lY++QD/XVENgW00gV2o5AumQ2rdPLrCjMSu40K3 rpJE8UMuWA/CwAcEEBYKAHkFgmFXLOUFgwlnmjsDhQFkCRArNAMc1cuTgEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeC7J/7kHEXPNfVs0IG Tx2ps8r2ZT/nVnvsYof2HdiB2RYhBC4aqo2aIslKzKNiois0AxzVy5OAAAATswD/ dwoKx3NRrJmuClc9mINpwM5k3EXT5NMTycPV2kLOA04BAKSwYomzh9qUfn6ihFC3 p/UlgxJmn2BqgxbKYZf8pQ0BzjMEYVcsqRYJKwYBBAHaRw8BAQdA0PDH5zvTKDd7 B2+mFgu6JQs8TZLtY6qVoHhPxxjz3pzCwL8EGBYKATEFgmFXLKkJEDlOkRk41tsK RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8e24RP8CdOo AcAexDEIF8wn0RdAq0L9H9XKMI0hLJVBApsCvqAEGRYKAG8FgmFXLKkJEPYhVMzG xT7BRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/p+cd0Y yKg793oJWwKoIZWu7pfSVaGmtQQEiHTXgJiYFiEEIRVUcXbCIkQqQZr/9iFUzMbF PsEAAHZ5AQDzmxcvWC9kIocL4qiwL4ZnXJBX7+IYN9PkHYN7R63dswD9HQFHhMfR c+CPICc9GWrHZgbWkXgzG7mLQ1gdNrdjpgoWIQTQHIdS2bqfP18Gsh85TpEZONbb CgAAGNEBAJdObVgG3OoMT/DHpretGY3zAoc4CoAHzj1IsjznhWDiAQC8T+SbyuOS sE9aVGT5HrlvEKv+0wdGl+tt0c0kvN0NCg== =pu5X -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/henry-priv.pgp000064400000000000000000000027651046102023000203320ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B99A 8696 FD82 0192 CEEE 285D 3A25 3E49 F1D9 7109 Comment: xVgEYVcsqRYJKwYBBAHaRw8BAQdAeFZjKFC0DjRyuyVW0PQ62QtBULmSBOEmrIgX w75gsogAAQDl3rXUXBv/+hpOPW9E88HBBko0FYhz0Wzs4+baAWl85xG3wsALBB8W CgB9BYJhVyypAwsJBwkQOiU+SfHZcQlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnZ3Kkod7p5oBWwonjVxC8CJLI3NJDgzg+Sk8ok7PCsYUD FQoIApsBAh4BFiEEuZqGlv2CAZLO7ihdOiU+SfHZcQkAALC2AP40xzzOiEEpGgM8 FfaKVSavXwyNggOCs4ptv83+cUzEWQD/cVvXzNyGFbEknt0vZQw3qirxrQmBd1Ma AZb+gB9Y+Q7NETxoZW5yeUB0aGVpci5vcmc+wsAOBBMWCgCABYJhVyypAwsJBwkQ OiU+SfHZcQlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn tDUnIo2uD82pO9OjW+zyZiYvcxdL4DxHrjP+QO56/DUDFQoIApkBApsBAh4BFiEE uZqGlv2CAZLO7ihdOiU+SfHZcQkAABAsAP4+pjXyEJqdCGyzJZsbcyGdQQ8oQJma 00r8G7+KxajgHAEAw/6wNLIjracTtqvtUWDfG/LcQr56YPl6FJm7LN+jdgvHWARh VyypFgkrBgEEAdpHDwEBB0BOGH1ye5YmElTg6dlrXwtluPTrfIXxZr36KPKjOLYW BQABAOSAfrRwkqlX/+gCld4jaxgwatyIbzxN3KuE4KBnmrk0EQrCwL8EGBYKATEF gmFXLKkJEDolPknx2XEJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ1B/TBnVLCqgXNiPNjlN0gkSwFPbEOGBBTTlQnX4nK+VApsCvqAEGRYK AG8FgmFXLKkJEAUAt9BQDD3ERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZwjrfq2B7XlxmSFZBtkS7o+tHOTF8lngTJAz9f/5jSAKFiEEO/Dc FwSxxds0vvvOBQC30FAMPcQAANpxAP4ySA3FgTOIIiJrJsTeIae3yqBIQ3antiMj G7oDFKDT0QEA4/ZbSp538kvrG/J5fSVsqdyANIPV/8jsqW93BHAYkgIWIQS5moaW /YIBks7uKF06JT5J8dlxCQAA03wBAJi37HNN+KrwXXsvCJ6P1SIRldEpWxpHs7Mb bTZfN15dAQDduFoAVyw4L0MLQI+rvO+Fl3NHhH9DnYp+iYJ3clrKDw== =R+XP -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3/henry.pgp000064400000000000000000000031071046102023000173430ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcsqRYJKwYBBAHaRw8BAQdAeFZjKFC0DjRyuyVW0PQ62QtBULmSBOEmrIgX w75gsojCwAsEHxYKAH0FgmFXLKkDCwkHCRA6JT5J8dlxCUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdncqSh3unmgFbCieNXELwIksjc0kOD OD5KTyiTs8KxhQMVCggCmwECHgEWIQS5moaW/YIBks7uKF06JT5J8dlxCQAAsLYA /jTHPM6IQSkaAzwV9opVJq9fDI2CA4Kzim2/zf5xTMRZAP9xW9fM3IYVsSSe3S9l DDeqKvGtCYF3UxoBlv6AH1j5Ds0RPGhlbnJ5QHRoZWlyLm9yZz7CwA4EExYKAIAF gmFXLKkDCwkHCRA6JT5J8dlxCUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcme0NScija4Pzak706Nb7PJmJi9zF0vgPEeuM/5A7nr8NQMVCggC mQECmwECHgEWIQS5moaW/YIBks7uKF06JT5J8dlxCQAAECwA/j6mNfIQmp0IbLMl mxtzIZ1BDyhAmZrTSvwbv4rFqOAcAQDD/rA0siOtpxO2q+1RYN8b8txCvnpg+XoU mbss36N2C8LABwQQFgoAeQWCYVcs5QWDCWeaOwOFAWQJEBgk5Gu8yAHwRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1/rSa7StEf6tY0unI71 jCxrSRXPhrkhwDJ9PPsKu3qsFiEEp13Boe2lKC86c4G1GCTka7zIAfAAAKsRAQDZ YvaYPWJiBhbSYZmtG0x9GXF910Jaw0QWBUGoi0gGQwEAzLtYZ9L6tJHOM7tu1Ica XSOTHs9F8I5uvc5C+Ruq8gvOMwRhVyypFgkrBgEEAdpHDwEBB0BOGH1ye5YmElTg 6dlrXwtluPTrfIXxZr36KPKjOLYWBcLAvwQYFgoBMQWCYVcsqQkQOiU+SfHZcQlH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnUH9MGdUsKqBc 2I82OU3SCRLAU9sQ4YEFNOVCdficr5UCmwK+oAQZFgoAbwWCYVcsqQkQBQC30FAM PcRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnCOt+rYHt eXGZIVkG2RLuj60c5MXyWeBMkDP1//mNIAoWIQQ78NwXBLHF2zS++84FALfQUAw9 xAAA2nEA/jJIDcWBM4giImsmxN4hp7fKoEhDdqe2IyMbugMUoNPRAQDj9ltKnnfy S+sb8nl9JWyp3IA0g9X/yOypb3cEcBiSAhYhBLmahpb9ggGSzu4oXTolPknx2XEJ AADTfAEAmLfsc034qvBdey8Ino/VIhGV0SlbGkezsxttNl83Xl0BAN24WgBXLDgv QwtAj6u874WXc0eEf0Odin6JgndyWsoP =JzzN -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3.pgp000064400000000000000000000276051046102023000162270ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVcsqRYJKwYBBAHaRw8BAQdApIvw+GEPabyGFJ5z0YXRlTFj1397FaIpS7Ez V6P8OyvCwAsEHxYKAH0FgmFXLKkDCwkHCRAYJORrvMgB8EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfQWgajZskoOauLbaYBfXvX2c+JI5T3 7oxZWz2FDImp4gMVCggCmwECHgEWIQSnXcGh7aUoLzpzgbUYJORrvMgB8AAAP6IA /0vP3Yce2hD78cIvtjNBuEdgNL6kMsLvf7pRnoMmyfSvAQD8xSqYrTPV34OMCOAs uPws2MEIYJkKJ7YTsAVp34xoDM0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFXLKkDCwkHCRAYJORrvMgB8EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdMtTo94y1MYIPjO/Gj+K/zdFC+3ORViWuUYkoow6ZYNQMVCggC mQECmwECHgEWIQSnXcGh7aUoLzpzgbUYJORrvMgB8AAA5qoBAK5kJicpowbm0qj8 ZgZemF7ka9QTx9gBg3KBWWf9IGd2AP9qnT8LYoe9y1oPLM/NcDt1u6zomFNPf11m Gs1GrWGRA8LAOwQQFgoArQWCYVcs5QWDCWeaOwOFA2QahjxbXj5dK1tALl1leGFt cGxlXC5vcmc+JAAYhjxbXj5dK1tALl1vdGhlclwub3JnPiQACRAT8LrgnZT+TkcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeXcItiJWyeZtI5 kJBSXWoqPJeUx0c8rPYYVKFBJJ+pZRYhBNjP67oAbi7VfPRcxBPwuuCdlP5OAABm DwD9FC6/uHHi9gb2ZcgA8M6aosr9t9rfx4jCkgkzY8Dzok4BANB4f7VEgPqb5vgh 0A4+N7NRHKmt0d6GrH9y0El7lRsJzjMEYVcsqRYJKwYBBAHaRw8BAQdA3zklWGtV oYMCKpSj1cjpFzFI/LELSzfdM/KyRZXAlnjCwL8EGBYKATEFgmFXLKkJEBgk5Gu8 yAHwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzuRuQvR 10P0Jza+Z2AwusCqfQX/InmWBGplzeE56UyXApsCvqAEGRYKAG8FgmFXLKkJEI5m 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 ma4KVz2Yg2nAzmTcRdPk0xPJw9XaQs4DTgEApLBiibOH2pR+fqKEULen9SWDEmaf YGqDFsphl/ylDQHOMwRhVyypFgkrBgEEAdpHDwEBB0DQ8MfnO9MoN3sHb6YWC7ol CzxNku1jqpWgeE/HGPPenMLAvwQYFgoBMQWCYVcsqQkQOU6RGTjW2wpHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnx7bhE/wJ06gBwB7EMQgX zCfRF0CrQv0f1cowjSEslUECmwK+oAQZFgoAbwWCYVcsqQkQ9iFUzMbFPsFHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn+n5x3RjIqDv3eglb Aqghla7ul9JVoaa1BASIdNeAmJgWIQQhFVRxdsIiRCpBmv/2IVTMxsU+wQAAdnkB APObFy9YL2QihwviqLAvhmdckFfv4hg30+Qdg3tHrd2zAP0dAUeEx9Fz4I8gJz0Z asdmBtaReDMbuYtDWB02t2OmChYhBNAch1LZup8/XwayHzlOkRk41tsKAAAY0QEA l05tWAbc6gxP8Memt60ZjfMChzgKgAfOPUiyPOeFYOIBALxP5JvK45KwT1pUZPke uW8Qq/7TB0aX623RzSS83Q0KxjMEYVcsqRYJKwYBBAHaRw8BAQdATriu/j6ll5eP fkkh6N/x8lGRsExnxXc2MK3x2G6o5uPCwAsEHxYKAH0FgmFXLKkDCwkHCRD0lB0a DsV0n0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdNAoAw PLzXAAEapr9QBnozKcH4lFTlBIYMicHsPHKabgMVCggCmwECHgEWIQSvqxHxo3/S DIXPgJP0lB0aDsV0nwAAMzsBAJVF8M8YMQ6OlBbyp5RPRiEsANVQIZ7hMDu8mGIP g5nlAP46LySfxILvsti9YRPiV7XX6fMACy68oWAWdDjv6OMWD80RPGZyYW5rQG90 aGVyLm9yZz7CwA4EExYKAIAFgmFXLKkDCwkHCRD0lB0aDsV0n0cUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmex3Ckk9VKWd3AFiA0HJyDnvwz8 THTsTTJIFInH/BcDLQMVCggCmQECmwECHgEWIQSvqxHxo3/SDIXPgJP0lB0aDsV0 nwAASooBAP7F+Xjo94ypElVWVjuVeUI1MRRW7SxSsvpntQtKCI1jAQDBhFIXEiz9 MgO+V1ppr3bhLi/X6fWI961qAIrmiQttBsLABwQQFgoAeQWCYVcs5QWDCWeaOwOF AWQJECs0AxzVy5OARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ/X8U79SVYIxeK/+qxRWwYWp+502MznPswlFSCuGqNO/FiEELhqqjZoiyUrM o2KiKzQDHNXLk4AAAJ/RAP9USWb3Lv+kOV34oBwnFp+T0SO8bar11GjrrUi/ENMM ygEAlgkIAagPPlBj1EvrAl+kcvS/AIfGCDmb8N9oCl0sigHOMwRhVyypFgkrBgEE AdpHDwEBB0DKfRuYQLiLIZIaXYfYErNla1aQZzWu5uubPneclmj9w8LAvwQYFgoB MQWCYVcsqQkQ9JQdGg7FdJ9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnYPq+v8YgJbw4rlCDoLQ9IBYw8AC43gcayysk0HwWWnMCmwK+oAQZ FgoAbwWCYVcsqQkQptYmuInuzL9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnvELQaUxmhtae2ZpY41iqhzBvDWXrlOAqJD0IjcLq3vIWIQR6 AxQpLi1wH+9hJKim1ia4ie7MvwAAJ48BAJEneFvm/Zi7ZC0/+i5AucBOtmgW7Mbs 0wiQsk5MNu9kAP9G5oK4QXR/H7c0b48hlkaS2WtxbqehPeNFwNeTjShYChYhBK+r EfGjf9IMhc+Ak/SUHRoOxXSfAADk9QD/f+3h/qLHVtCRQeKFAzKwwd3+cPDdnwji /3YCXMBbiuEA/3gJtitFx/zqXyE7c0XRcP8+lU68gwzMJBr36as25DEHxjMEYVcs qRYJKwYBBAHaRw8BAQdAz1NtV4r2WnU4sFGlJGxnii4IE7zNAPgULlNUIy0DyIXC wAsEHxYKAH0FgmFXLKkDCwkHCRArNAMc1cuTgEcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmc8m4Ibykv8nB/k90IpFwyzo85RP8lYCGlonXPh Qi7W/QMVCggCmwECHgEWIQQuGqqNmiLJSsyjYqIrNAMc1cuTgAAAQs8BAPQxYVsZ NCowBWK/9nt0sHg7bFfXJXF2WorX5PqFQq7fAPwNaB9al6t2Rd4rCgpDJ0j8IZRK ZLcpBfD+XnaVR4JjDc0QPGRhdmVAb3RoZXIub3JnPsLADgQTFgoAgAWCYVcsqQML CQcJECs0AxzVy5OARxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZwZSUbORv+BhdC2URgSKS1DgQE49lwrE0zry9XTAFbmUAxUKCAKZAQKbAQIe ARYhBC4aqo2aIslKzKNiois0AxzVy5OAAAD93wEAmDlDGGUeAWd0CWw1dWuN2d7r Yrh2NH3Ypju0HBGPS+gA/2JIWu0/uAwo7mEhP73C2Lmb7hX+2jEqWJozorg0y5wL wsA5BBAWCgCrBYJhVyzlBYMJZ5o7A4UBZBiGPFtePl0rW0AuXXRoZWlyXC5vcmc+ JAAYhjxbXj5dK1tALl1vdGhlclwub3JnPiQACRAYJORrvMgB8EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcTGrXfbe1O95lSNK18Lp+P/ZPN MSt2dmjauea1oPDJlhYhBKddwaHtpSgvOnOBtRgk5Gu8yAHwAABZswEAg/YtHYyc fOYXorpjOG7DCyOKOjRvpbFsU7b3B8myhqkA/j1p1ukZnjWJoXI4y/6TR/D4xtr9 VgLlq4Hoy/2zXigJzjMEYVcsqRYJKwYBBAHaRw8BAQdA29I+PqmTP+yMikKbK4qD rl9MCd+IhAcpO2V3lGL7pEPCwL8EGBYKATEFgmFXLKkJECs0AxzVy5OARxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9X0VhCiIoGUo8QNUAMp c+bmGnGGZ/j0U445cPsTYF+wApsCvqAEGRYKAG8FgmFXLKkJEJ9/ytfaVvRgRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7jD3FQ3WGpWNs8w w/dTLJ//SOuwsQdQcnLkH797fnDvFiEE08502V1Nl8/qEZQwn3/K19pW9GAAAA32 AP9KDSCZlOBpeXH72z7AOQTYMHuegVcbpPNA2FHw2x9WBwEAn+JCU+kGAZRP42pM u4JrNCXUKnFUqOKALc+wD265Qg8WIQQuGqqNmiLJSsyjYqIrNAMc1cuTgAAArxsA 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 PWJiBhbSYZmtG0x9GXF910Jaw0QWBUGoi0gGQwEAzLtYZ9L6tJHOM7tu1IcaXSOT Hs9F8I5uvc5C+Ruq8gvOMwRhVyypFgkrBgEEAdpHDwEBB0BOGH1ye5YmElTg6dlr XwtluPTrfIXxZr36KPKjOLYWBcLAvwQYFgoBMQWCYVcsqQkQOiU+SfHZcQlHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnUH9MGdUsKqBc2I82 OU3SCRLAU9sQ4YEFNOVCdficr5UCmwK+oAQZFgoAbwWCYVcsqQkQBQC30FAMPcRH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnCOt+rYHteXGZ IVkG2RLuj60c5MXyWeBMkDP1//mNIAoWIQQ78NwXBLHF2zS++84FALfQUAw9xAAA 2nEA/jJIDcWBM4giImsmxN4hp7fKoEhDdqe2IyMbugMUoNPRAQDj9ltKnnfyS+sb 8nl9JWyp3IA0g9X/yOypb3cEcBiSAhYhBLmahpb9ggGSzu4oXTolPknx2XEJAADT fAEAmLfsc034qvBdey8Ino/VIhGV0SlbGkezsxttNl83Xl0BAN24WgBXLDgvQwtA j6u874WXc0eEf0Odin6JgndyWsoPxjMEYVcsqRYJKwYBBAHaRw8BAQdA7C8Ak0Zc p6lfjHJgxjX12ZWeqD8f71qM8n76py5LZtzCwAsEHxYKAH0FgmFXLKkDCwkHCRCU Gz4s5T+vFkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdM tinpQjyIsnritGHxEOYZaLPwGScf7pYXykcdljLcRQMVCggCmwECHgEWIQT2RdCB 9IC+JsfSyE2UGz4s5T+vFgAAIrMBAPoMnJ8zu6mp2rt9Xfl2AtvFXookbKh0B0JP 8ZFFsW0PAP9D/NLfNf9PeY4QI6yPoLGtfmRTE9Xd672K0gmq3HjcBs0QPGVkQGV4 YW1wbGUub3JnPsLADgQTFgoAgAWCYVcsqQMLCQcJEJQbPizlP68WRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9cnBOt4/KGNsY1gIY/z04Tv Qz7qUXaAjEve0Fp0iZMaAxUKCAKZAQKbAQIeARYhBPZF0IH0gL4mx9LITZQbPizl P68WAADmHQD+IzFN7KrMsypMnQi+0F0+DmpO6ibjIj+PcYFUNVmjg0oBAOi/RJNE B6w9E+m+3/TNTMvYEMnFYXgUvHgiRAr0pNoJwsAHBBAWCgB5BYJhVyzlBYMJZ5o7 A4UBZAkQKzQDHNXLk4BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3Jnu3tgcKh1g7+MPWRI2wQ7609dljlBz9PIaKkqY5IFALAWIQQuGqqNmiLJ SsyjYqIrNAMc1cuTgAAA09MBAOT1J7UWCPN9Z3g+Xl/uopEySgFiJ5Uic1Wb9Ku6 KVojAQDBBuvgCtOydm2zgzXJuxyFMX0BLNrUz4ZDxHwB6Hu6As4zBGFXLKkWCSsG AQQB2kcPAQEHQMDDPdMYqeoFNjqCMWpNyPdFwZ3NUeHGmbD2QqvrFpacwsC/BBgW CgExBYJhVyypCRCUGz4s5T+vFkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfQTQ7mc9ZrtuW9B0GKlzh/xRUESdWcODpk1plQ3ZcqTQKbAr6g BBkWCgBvBYJhVyypCRDJRZJwxgfuMkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdkarLZzLp5ak+D8Q0IeL3wEg6UPixVzAjOqy5ID+zquBYh BP4EdjKlyDLKOPq8tclFknDGB+4yAABfLQD/Spw2PvrOkinkTJUBLqsyWbNgCIMg 7NzRgC/AMaV0JQEBAJuxW5jviDQe0Akfu1xn2VDHZp9k8Bj5cdEBKZT5BKgDFiEE 9kXQgfSAvibH0shNlBs+LOU/rxYAAId5AQD7u9kTGUsRdHY6HdhmgE2x4jCeeN3C b/3Oc3hMga990wD+O5MBxdDomgiWXY1+NA+PW7wtWVDndiFZ5Syl6y5cew8= =nldu -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/regex-3.sh000075500000000000000000000010231046102023000160400ustar 00000000000000#! /bin/bash set -e . gen-helper.sh --directory=regex-3 ${@:+"$@"} key alice@some.org key bob key carol key dave@other.org key ed key frank@other.org key george@their.org key henry@their.org certify alice -a 100 -d 3 --domain=example.org --domain=other.org bob certify bob -a 100 -d 1 carol certify bob -a 100 -d 1 --domain=their.org --domain=other.org dave@other.org certify bob -a 100 -d 1 henry@their.org certify dave -a 100 -d 1 ed certify dave -a 100 -d 1 frank@other.org certify dave -a 100 -d 1 george@their.org finish sequoia-wot-0.11.0/tests/data/roundabout/README.md000064400000000000000000000011661046102023000177000ustar 00000000000000The best way from A to B, G and H is via C-D-E-F. The best way from A to I is via B! (A has two local optima.) J complicates things a bit when doing a backwards propagation. ``` A | \ 6,120 | C | | 5,120 | D 100,60 | | 4,120 5,100 | E <----------------- J | | 3,120 | | F | v / 2,120 | 1,100 B | 2,120 | | v | G <---------------------' 1,120 | v H 0,120 | v I ``` sequoia-wot-0.11.0/tests/data/roundabout/alice-priv.pgp000064400000000000000000000027671046102023000211740ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 41E9 B069 C96E B6D4 7525 294B 10BB BD00 912B EA02 Comment: xVgEYVR62xYJKwYBBAHaRw8BAQdAOmmEwGhaRyGUE+kRN5IGFRdx7CM5PWxp6bAZ UwdPjtsAAP9+IKsgwLUZdZEEqz3jCUzamTLZ3leU7LEWpI3Vco3qZBFtwsALBB8W CgB9BYJhVHrbAwsJBwkQELu9AJEr6gJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnofkpONjXbKopBmALMd2FILc2J1paHB0/OWZEaJJ+vckD FQoIApsBAh4BFiEEQemwacluttR1JSlLELu9AJEr6gIAAPqtAQCQxdbnJrKgUmjJ VJ92k8z9gn+FQiJhYxBVeBbYK3qFigD9H1YgPFyWVf7e1p4IR7qtd7L6XUpJZ7gK il8d6qxf1QTNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFUetsDCwkH CRAQu70AkSvqAkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfOuLLQdCVJSYDbBJgp5Uv38KTr3SUNTHjYWKPsCH3BzgMVCggCmQECmwECHgEW IQRB6bBpyW621HUlKUsQu70AkSvqAgAAUIUA/AijKrJ1GjDL28Jla5fXpgO//wtF tTgKY7KgywvaCVCsAQCYLAnq3d+Ge+J1fNEgKho1xpAPowsW5G7DjSQ5FmijCMdY BGFUetsWCSsGAQQB2kcPAQEHQDsxG5PBcQbxn/WG5z+89KjdcsP1J9rV9XHDMwhI h7xlAAD+NT7JaWlT02n28bdNIgWrpfiZr81G9ADcGock/60nmnERw8LAvwQYFgoB MQWCYVR62wkQELu9AJEr6gJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnhS7n2yNxjcuh4ioAxZ9ndpxcOqpclLkuX82CYo6fP1UCmwK+oAQZ FgoAbwWCYVR62wkQGYweM8CV69xHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jna9nR2rqaUASG3GPyjwuvb/5GJTN5Lm3S23lCOZuXPz4WIQQ4 UUIO9pHKpr/uR1wZjB4zwJXr3AAAK1MBAJmagUZt58PSLIGvpqxeOgkczpkSQWos Ytvb3NGx98+qAP9o7T514i5fxvtwfLWSWJKDfu42if6haWW4AsvvcCwhDxYhBEHp sGnJbrbUdSUpSxC7vQCRK+oCAAC/0gEApDnyZdtVCUBC2tNBh7QGH/IO/YdE8QeC aeDdKMru434BAK6B4El98+yCb0/t+NbwOSEj+Nh+ACkLCopAsTy18QII =DsvU -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/alice.pgp000064400000000000000000000026241046102023000202060ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 41E9 B069 C96E B6D4 7525 294B 10BB BD00 912B EA02 Comment: xjMEYVR62xYJKwYBBAHaRw8BAQdAOmmEwGhaRyGUE+kRN5IGFRdx7CM5PWxp6bAZ UwdPjtvCwAsEHxYKAH0FgmFUetsDCwkHCRAQu70AkSvqAkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeh+Sk42NdsqikGYAsx3YUgtzYnWloc HT85ZkRokn69yQMVCggCmwECHgEWIQRB6bBpyW621HUlKUsQu70AkSvqAgAA+q0B AJDF1ucmsqBSaMlUn3aTzP2Cf4VCImFjEFV4FtgreoWKAP0fViA8XJZV/t7WnghH uq13svpdSklnuAqKXx3qrF/VBM0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVR62wMLCQcJEBC7vQCRK+oCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ864stB0JUlJgNsEmCnlS/fwpOvdJQ1MeNhYo+wIfcHOAxUK CAKZAQKbAQIeARYhBEHpsGnJbrbUdSUpSxC7vQCRK+oCAABQhQD8CKMqsnUaMMvb wmVrl9emA7//C0W1OApjsqDLC9oJUKwBAJgsCerd34Z74nV80SAqGjXGkA+jCxbk bsONJDkWaKMIzjMEYVR62xYJKwYBBAHaRw8BAQdAOzEbk8FxBvGf9YbnP7z0qN1y w/Un2tX1ccMzCEiHvGXCwL8EGBYKATEFgmFUetsJEBC7vQCRK+oCRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ4Uu59sjcY3LoeIqAMWfZ3ac XDqqXJS5Ll/NgmKOnz9VApsCvqAEGRYKAG8FgmFUetsJEBmMHjPAlevcRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2vZ0dq6mlAEhtxj8o8L r2/+RiUzeS5t0tt5Qjmblz8+FiEEOFFCDvaRyqa/7kdcGYweM8CV69wAACtTAQCZ moFGbefD0iyBr6asXjoJHM6ZEkFqLGLb29zRsffPqgD/aO0+deIuX8b7cHy1kliS g37uNon+oWlluALL73AsIQ8WIQRB6bBpyW621HUlKUsQu70AkSvqAgAAv9IBAKQ5 8mXbVQlAQtrTQYe0Bh/yDv2HRPEHgmng3SjK7uN+AQCugeBJffPsgm9P7fjW8Dkh I/jYfgApCwqKQLE8tfECCA== =Igyy -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/bob-priv.pgp000064400000000000000000000027611046102023000206530ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2E90 AEE9 66DF 28CB 9164 39B2 0397 E086 E705 AC1A Comment: xVcEYVR62xYJKwYBBAHaRw8BAQdA/0Rv6SD6ho0USVrL7vyYiBRUAQu1escnES8S bUixj5wAAPikEoFePbDsUN71kRplRQuKq1/k+Tvurw597/XuRP1uEj7CwAsEHxYK AH0FgmFUetsDCwkHCRADl+CG5wWsGkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcme1A8kGtrkQ4o9c7QoqDIN4siYVMnRFjP9k9XZurOLtyQMV CggCmwECHgEWIQQukK7pZt8oy5FkObIDl+CG5wWsGgAA0FoBANNPw/uC/HWkoh2y tyFo9xOlAytoBzAF1khF3NuRZQE/AQDSrp9qpTpwfbqTPQl3m8zx6XHbVw0aGRcX r0sFxJQaBc0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFUetsDCwkHCRAD l+CG5wWsGkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmee vOXKks1aWCiynekJQ0Nske3Na3jF7B6QvHEQWwzMRQMVCggCmQECmwECHgEWIQQu kK7pZt8oy5FkObIDl+CG5wWsGgAACPkA+wezw0e3zJ3qmSqqhTopsOzv83nx7v/f JyjFO1MPmVE5AQCdbg7r7rgLGncFCjdP11SHIm94DKT7iabOFAp8tsHsBsdYBGFU etsWCSsGAQQB2kcPAQEHQB+svg994BRb19NFtxnMtXYIcFobX+QNUtPnsOwptmIP AAD7BPQhjg0IGWglzKXZ0wnvVrURN6tGpowChq1qQSJKssYOrMLAvwQYFgoBMQWC YVR62wkQA5fghucFrBpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnApQ1Ic/qHKHd5GMDpk9cFQFbckc8aM8m2J1e2ANlikMCmwK+oAQZFgoA bwWCYVR62wkQY7tCkEe8Ie5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnxl5Ik+9O1hanrIYMOzZ90f6M3zl+WBkjg8f2HKV0HOAWIQSyPkVL Qstd2CyeEnRju0KQR7wh7gAA1xgBAOW6WcYczLQk9CcMf/NX6Kqd5QkoZO8OYf7j e3dgct+KAP9EGhbx0bNu1qK85VQcvJVsw9gbsPzVn9sStIXzOQUSCBYhBC6Qrulm 3yjLkWQ5sgOX4IbnBawaAABQhAEA83vQhBcdbVsrfiylnZ9KjQ0USMXUUcUer2CL RG1VtVwA/3nzl1Rc0CT0r0MVHJufqzxraEaKb0FkixRPqXVSYbYP =oLf1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/bob.pgp000064400000000000000000000035331046102023000176730ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVR62xYJKwYBBAHaRw8BAQdA/0Rv6SD6ho0USVrL7vyYiBRUAQu1escnES8S bUixj5zCwAsEHxYKAH0FgmFUetsDCwkHCRADl+CG5wWsGkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme1A8kGtrkQ4o9c7QoqDIN4siYVMnRF jP9k9XZurOLtyQMVCggCmwECHgEWIQQukK7pZt8oy5FkObIDl+CG5wWsGgAA0FoB ANNPw/uC/HWkoh2ytyFo9xOlAytoBzAF1khF3NuRZQE/AQDSrp9qpTpwfbqTPQl3 m8zx6XHbVw0aGRcXr0sFxJQaBc0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFUetsDCwkHCRADl+CG5wWsGkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeevOXKks1aWCiynekJQ0Nske3Na3jF7B6QvHEQWwzMRQMVCggC mQECmwECHgEWIQQukK7pZt8oy5FkObIDl+CG5wWsGgAACPkA+wezw0e3zJ3qmSqq hTopsOzv83nx7v/fJyjFO1MPmVE5AQCdbg7r7rgLGncFCjdP11SHIm94DKT7iabO FAp8tsHsBsLABwQQFgoAeQWCYVR7GAWDCWeaOwOFAngJEN9Pm6WDHZHaRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZz6mJh4akBTY6qf08hAe ixhD+q1B93eyoGoWuJT2IlsAFiEEMmfUYkfSYQGz5QFM30+bpYMdkdoAADzoAQDL fr7n6LWGp2pfCd4bxy/nk/ESFkRhnLTKOUjL0k2tYwEAh46Gead8d2ci6iIf/Nq7 v1ZMHdp06OcZ3mOPFmqFjg/CwAcEEBYKAHkFgmFUexcFgwlnmjsDhWQ8CRAQu70A kSvqAkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfGW+Ut eY7IM7M4n17pQCahOaIMuUX0fn081cLbDU37zBYhBEHpsGnJbrbUdSUpSxC7vQCR K+oCAACDzgD/XlQFYmFrd8YpxmES+lSjjfjHBdy4KDp7Eah9VXCtscIBAN4jXNpJ JukW9RFMsQzjpfcBnWZ5vkStCuJuNPKs9QcIzjMEYVR62xYJKwYBBAHaRw8BAQdA H6y+D33gFFvX00W3Gcy1dghwWhtf5A1S0+ew7Cm2Yg/CwL8EGBYKATEFgmFUetsJ EAOX4IbnBawaRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZwKUNSHP6hyh3eRjA6ZPXBUBW3JHPGjPJtidXtgDZYpDApsCvqAEGRYKAG8FgmFU etsJEGO7QpBHvCHuRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ8ZeSJPvTtYWp6yGDDs2fdH+jN85flgZI4PH9hyldBzgFiEEsj5FS0LLXdgs nhJ0Y7tCkEe8Ie4AANcYAQDlulnGHMy0JPQnDH/zV+iqneUJKGTvDmH+43t3YHLf igD/RBoW8dGzbtaivOVUHLyVbMPYG7D81Z/bErSF8zkFEggWIQQukK7pZt8oy5Fk ObIDl+CG5wWsGgAAUIQBAPN70IQXHW1bK34spZ2fSo0NFEjF1FHFHq9gi0RtVbVc AP9585dUXNAk9K9DFRybn6s8a2hGim9BZIsUT6l1UmG2Dw== =yjeX -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/carol-priv.pgp000064400000000000000000000027671046102023000212170ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 92DD E874 7C8E 6ED0 9D41 A4E1 330D 1190 E858 754C Comment: xVgEYVR62xYJKwYBBAHaRw8BAQdAr6Y/e1p5QstITKqT07OaAr0S/c9y99CAzbxo KQfjMLEAAQC7m17tOq1VdYqpZMGSHOMCDXZHNsRiz+HNRT+90OkLAA/mwsALBB8W CgB9BYJhVHrbAwsJBwkQMw0RkOhYdUxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnFdxnxRDqo1Pq2L2ABx4Z00vog9NvjuVubpK/VUy0rCQD FQoIApsBAh4BFiEEkt3odHyObtCdQaThMw0RkOhYdUwAAPiIAP4jl31f2sMwSBHj XQASvEPRYeboH/lB3eKrhWSu9t17DgD/WB0rTOPegzs1G3FzRhSmjg/kkNLq9SNO imQSsA7PWA7NEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFUetsDCwkH CRAzDRGQ6Fh1TEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcub1q9H0Zp0BZGTZ/4XIa+NPBX/2oZwE8qk4a8riIX+wMVCggCmQECmwECHgEW IQSS3eh0fI5u0J1BpOEzDRGQ6Fh1TAAAIwUA/RYVeJTfq9bVqftv3UOEZNWRpNJO hmsEQSH24jNvmMAyAQD2YRytW5dTjp2P3ppF3h9YW4+jsSaiHjF6usTOonb+DcdY BGFUetsWCSsGAQQB2kcPAQEHQH5CgRW2UHMittHVqypKlnoY6Y4slzCQW1Ba71YS /tz6AAEAz8EVA3jl5dY4oGxX5E7cDG5yQXI7UIac7OG9/IXSsboR/sLAvwQYFgoB MQWCYVR62wkQMw0RkOhYdUxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnRnRm/v2+8WnYAtkcPeeRvDOj5ozZXXJuPcKbYgyUiNwCmwK+oAQZ FgoAbwWCYVR62wkQTZBS4xsUvs9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnAm13dX35pzJea6T0skV3WvNKGh+nAKUFjIZwyO5ICdUWIQQi vpYUOTKKL2eewaFNkFLjGxS+zwAAmboA/0XXOCpLkpZNXOFzBvVPKGmy3wY4Nu0b jidLLyEIOTZNAQDnCMvgn3rtz0HLwV6B4tEFOQV8RNoqMrMP4bqGOdypBBYhBJLd 6HR8jm7QnUGk4TMNEZDoWHVMAABRWAEAk1Ee387fHaGVgDiJPxLd67J5V3e9PU1I t6HjkHJYryoBAPWqMbKByqkp9S9iIh14PK5TIdxCSPEDp9zuXmQTGnUC =CSSv -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/carol.pgp000064400000000000000000000031131046102023000202230ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVR62xYJKwYBBAHaRw8BAQdAr6Y/e1p5QstITKqT07OaAr0S/c9y99CAzbxo KQfjMLHCwAsEHxYKAH0FgmFUetsDCwkHCRAzDRGQ6Fh1TEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcV3GfFEOqjU+rYvYAHHhnTS+iD02+O 5W5ukr9VTLSsJAMVCggCmwECHgEWIQSS3eh0fI5u0J1BpOEzDRGQ6Fh1TAAA+IgA /iOXfV/awzBIEeNdABK8Q9Fh5ugf+UHd4quFZK723XsOAP9YHStM496DOzUbcXNG FKaOD+SQ0ur1I06KZBKwDs9YDs0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVR62wMLCQcJEDMNEZDoWHVMRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZy5vWr0fRmnQFkZNn/hchr408Ff/ahnATyqThryuIhf7AxUK CAKZAQKbAQIeARYhBJLd6HR8jm7QnUGk4TMNEZDoWHVMAAAjBQD9FhV4lN+r1tWp +2/dQ4Rk1ZGk0k6GawRBIfbiM2+YwDIBAPZhHK1bl1OOnY/emkXeH1hbj6OxJqIe MXq6xM6idv4NwsAHBBAWCgB5BYJhVHsXBYMJZ5o7A4UGeAkQELu9AJEr6gJHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnBac6q804qRA/gacG 2cONbrhTTm+qoVgLmht+AkXiPUwWIQRB6bBpyW621HUlKUsQu70AkSvqAgAA7cUB ALCsi20xyIlJ99JVIi5V11ykdmGlvQo06WOt1hZpUTMOAP9JZYexQmxurYO5rgvP BDs7DTDK7p4WaMAUCNRHgtsxCs4zBGFUetsWCSsGAQQB2kcPAQEHQH5CgRW2UHMi ttHVqypKlnoY6Y4slzCQW1Ba71YS/tz6wsC/BBgWCgExBYJhVHrbCRAzDRGQ6Fh1 TEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdGdGb+/b7x adgC2Rw955G8M6PmjNldcm49wptiDJSI3AKbAr6gBBkWCgBvBYJhVHrbCRBNkFLj GxS+z0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcCbXd1 ffmnMl5rpPSyRXda80oaH6cApQWMhnDI7kgJ1RYhBCK+lhQ5MoovZ57BoU2QUuMb FL7PAACZugD/Rdc4KkuSlk1c4XMG9U8oabLfBjg27RuOJ0svIQg5Nk0BAOcIy+Cf eu3PQcvBXoHi0QU5BXxE2ioysw/huoY53KkEFiEEkt3odHyObtCdQaThMw0RkOhY dUwAAFFYAQCTUR7fzt8doZWAOIk/Et3rsnlXd709TUi3oeOQclivKgEA9aoxsoHK qSn1L2IiHXg8rlMh3EJI8QOn3O5eZBMadQI= =CPQd -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/dave-priv.pgp000064400000000000000000000027661046102023000210350ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: D451 5E66 1908 4ED8 142D F858 9059 E384 6A02 5611 Comment: xVgEYVR62xYJKwYBBAHaRw8BAQdA+ELIvx1nB8BnAr6h7G9UMjkh+bKYbqn7ofHX aYQk9moAAP9Txm7eYfWsQ+ifM7slzDGCl9sEi+2/vstKiCOChUScMRIFwsALBB8W CgB9BYJhVHrbAwsJBwkQkFnjhGoCVhFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnmaa8qY+hEwfBWzwoSMpLFBJbWALBPvtzRBWwhL7Khk4D FQoIApsBAh4BFiEE1FFeZhkITtgULfhYkFnjhGoCVhEAAIvkAP4gqxlDtrq8iSR/ 9JnyLXr3BPwH8auADI/yAi5w4e6mmQEAht6DXet96tORUcd1ICoFMzt2dxpAwKrb eYcYSxbnLw7NEjxkYXZlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVR62wMLCQcJ EJBZ44RqAlYRRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z4OxuhORuQjYnYMT3RXFonfXkDq1G/MuAbIavBE6FKG7AxUKCAKZAQKbAQIeARYh BNRRXmYZCE7YFC34WJBZ44RqAlYRAAA+yAEA7KtrmYvHGK+d1XOTFCbVLd1GTfZR yQWHJf1yzlv+Q0YA/0cmhKD8Jc8XcqXBz3gDxCri00QRkbkH6ls867ICvlkNx1gE YVR62xYJKwYBBAHaRw8BAQdAeKK4ZWkM7bbIkfRp25dxO3LQ+4LE6MfpCx4rskaY rkEAAP0fhfeH9j6ynh7U8IAfmRzIxNEutXhyrn6146dZ87wdLBK/wsC/BBgWCgEx BYJhVHrbCRCQWeOEagJWEUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmdiy1+48bfVMoUvFfCNPrrd/SdtSXBGxyAvUgTuFcz7ygKbAr6gBBkW CgBvBYJhVHrbCRDSz+70cu/Z9EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc0aF3mXHCLXyxLz5OxBarM/5sNzQhjIqrV1vAO6W7WzRYhBB6z KTXZDpSjFn6JGNLP7vRy79n0AAD4YwEA0wuijmrTHshNd7XgePfnTwGbivGgmgq8 cCvDD7bHRJMBAPL+5F/tFO2bLLHsUp6c8MX2p3vXHZkXOxp6fR6AiVMPFiEE1FFe ZhkITtgULfhYkFnjhGoCVhEAANdjAQCQZp4EeBdAGpsmSlPUMlg0mkH7PTuaFHDx Z3GeijSKVQEA40izkmNnFqRfVodU0WaBFHieB8AlF4kDR8FOV3KGIgE= =Rm3t -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/dave.pgp000064400000000000000000000031131046102023000200420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVR62xYJKwYBBAHaRw8BAQdA+ELIvx1nB8BnAr6h7G9UMjkh+bKYbqn7ofHX aYQk9mrCwAsEHxYKAH0FgmFUetsDCwkHCRCQWeOEagJWEUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeZprypj6ETB8FbPChIyksUEltYAsE+ +3NEFbCEvsqGTgMVCggCmwECHgEWIQTUUV5mGQhO2BQt+FiQWeOEagJWEQAAi+QA /iCrGUO2uryJJH/0mfItevcE/Afxq4AMj/ICLnDh7qaZAQCG3oNd633q05FRx3Ug KgUzO3Z3GkDAqtt5hxhLFucvDs0SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJhVHrbAwsJBwkQkFnjhGoCVhFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jng7G6E5G5CNidgxPdFcWid9eQOrUb8y4Bshq8EToUobsDFQoI ApkBApsBAh4BFiEE1FFeZhkITtgULfhYkFnjhGoCVhEAAD7IAQDsq2uZi8cYr53V c5MUJtUt3UZN9lHJBYcl/XLOW/5DRgD/RyaEoPwlzxdypcHPeAPEKuLTRBGRuQfq WzzrsgK+WQ3CwAcEEBYKAHkFgmFUexcFgwlnmjsDhQV4CRAzDRGQ6Fh1TEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc7/3JrMtfloJDx9Gmx tBbHjqEtO2xg+dhcihC+hOON6BYhBJLd6HR8jm7QnUGk4TMNEZDoWHVMAADluwEA vVukwx8sCfDksQj1R4DxS781NaFpbUwpP/NJ76HMojMA/AwmVQ1PRxNwyea7t3uH 24v298lGOiJC0axh6h1S5AQOzjMEYVR62xYJKwYBBAHaRw8BAQdAeKK4ZWkM7bbI kfRp25dxO3LQ+4LE6MfpCx4rskaYrkHCwL8EGBYKATEFgmFUetsJEJBZ44RqAlYR RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2LLX7jxt9Uy hS8V8I0+ut39J21JcEbHIC9SBO4VzPvKApsCvqAEGRYKAG8FgmFUetsJENLP7vRy 79n0RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzRoXeZc cItfLEvPk7EFqsz/mw3NCGMiqtXW8A7pbtbNFiEEHrMpNdkOlKMWfokY0s/u9HLv 2fQAAPhjAQDTC6KOatMeyE13teB49+dPAZuK8aCaCrxwK8MPtsdEkwEA8v7kX+0U 7ZsssexSnpzwxfane9cdmRc7Gnp9HoCJUw8WIQTUUV5mGQhO2BQt+FiQWeOEagJW EQAA12MBAJBmngR4F0AamyZKU9QyWDSaQfs9O5oUcPFncZ6KNIpVAQDjSLOSY2cW pF9Wh1TRZoEUeJ4HwCUXiQNHwU5XcoYiAQ== =ks+/ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/elmar-priv.pgp000064400000000000000000000027671046102023000212170ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E553 C11D CFA7 77F3 205E 5090 F5EE 59C2 795C DBA2 Comment: xVgEYVR62xYJKwYBBAHaRw8BAQdAbTuaBphO9IhF8b41dBEw/g4o+bOCruhQLdvl bN+2bMsAAP4jMNKys8DoLvUJkNWGrlIGpnpN1pnt3Yv3a3NkNIXe5hM0wsALBB8W CgB9BYJhVHrbAwsJBwkQ9e5Zwnlc26JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnEFt10E+gQgJ9F7tFG3kEY0ofx8yMFnFcvKZvryRSEfgD FQoIApsBAh4BFiEE5VPBHc+nd/MgXlCQ9e5Zwnlc26IAABCrAP9J8AmURmHDLn5A ssa7i+7Fq2WeJ8NRaNtWYT+Zl3gcvgEAlrn79Ppfz5yLux1q8oK53B0n3ofAO5NU hLN8rnjO8wDNEzxlbG1hckBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFUetsDCwkH CRD17lnCeVzbokcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcCo0axVXfLfX9KElCde717j21P+xk3YXpAid7fnZu/gwMVCggCmQECmwECHgEW IQTlU8Edz6d38yBeUJD17lnCeVzbogAAgbwBALIy1C4+YWOgkQppbqBtdNYHWFgf iYzDStpCn13PGPoYAQC1rTreMAcI+bN5dJ7f7PxYoN694krH4AxQ1nPQGsKCC8dY BGFUetsWCSsGAQQB2kcPAQEHQLN2PTbDePKhCxrFHDD1q5UV9u4IK+fmU3iYWjsO O3Y+AAD+MCoFtRZiqdpo0/0WNQzRPEiDiXl6X2/SZ802bzr7ISAO38LAvwQYFgoB MQWCYVR62wkQ9e5Zwnlc26JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jns8+M6iQZ8TdPmKSJrLbRHAw/0Wq0DEcnLsdxIPsoRR4CmwK+oAQZ FgoAbwWCYVR62wkQdqq8aXZmmIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnuIMFd+9z8ssoKYHwO+XqloK/8kWcLhZf9xKjecf0JmkWIQSy N3kbFL6f5DWEsYx2qrxpdmaYgQAATKIBAP8oAXr4KzexpYEEmWOsCuJO3/BgQHLT AQ37hueXVyytAPwIqMTbjmMZez9TFrUICzA7UvFMaYrVGepcgXG0wpkrCBYhBOVT wR3Pp3fzIF5QkPXuWcJ5XNuiAAADpwEArDAjKL7mcIlf8CVd/La4AKm2TGcDi7J6 KbY46b1c1kgA/3YIIVyAQOVO66IE/dUIErhIhcQppFfdjgfuGF2WOQUA =OnJ5 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/elmar.pgp000064400000000000000000000035331046102023000202310ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVR62xYJKwYBBAHaRw8BAQdAbTuaBphO9IhF8b41dBEw/g4o+bOCruhQLdvl bN+2bMvCwAsEHxYKAH0FgmFUetsDCwkHCRD17lnCeVzbokcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcQW3XQT6BCAn0Xu0UbeQRjSh/HzIwW cVy8pm+vJFIR+AMVCggCmwECHgEWIQTlU8Edz6d38yBeUJD17lnCeVzbogAAEKsA /0nwCZRGYcMufkCyxruL7sWrZZ4nw1Fo21ZhP5mXeBy+AQCWufv0+l/PnIu7HWry grncHSfeh8A7k1SEs3yueM7zAM0TPGVsbWFyQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVR62wMLCQcJEPXuWcJ5XNuiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZwKjRrFVd8t9f0oSUJ17vXuPbU/7GTdhekCJ3t+dm7+DAxUK CAKZAQKbAQIeARYhBOVTwR3Pp3fzIF5QkPXuWcJ5XNuiAACBvAEAsjLULj5hY6CR CmluoG101gdYWB+JjMNK2kKfXc8Y+hgBALWtOt4wBwj5s3l0nt/s/Fig3r3iSsfg DFDWc9AawoILwsAHBBAWCgB5BYJhVHsYBYMJZ5o7A4UFZAkQnCRH5h/9uxVHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnU5ooBa1b1s4tIJrI Dl9yP6bcPRETQW7QTgMRGrolhPMWIQSuQFeJYkETVvlgnKqcJEfmH/27FQAAWd8B AM5RHDsTxKycydS5hAMB12HWTclCK2qB+FijH5XOdXYPAP9Bc0qfpyK21hyGPZdd CWrUb+eFhHOERsOhQ71dzFb3C8LABwQQFgoAeQWCYVR7FwWDCWeaOwOFBHgJEJBZ 44RqAlYRRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzUn c0DHcaKbw6/vbHt4lj+0IAzddzdVBtaRNWDvka6LFiEE1FFeZhkITtgULfhYkFnj hGoCVhEAAHhmAQCNebncriN+X7Vd6FVd/F0B01u/jj4s0bU2CbdVC4LP7QD+OPmi ofjrtl2LzFDbtVS4RchGokjQP15ObVBbLwWoXQPOMwRhVHrbFgkrBgEEAdpHDwEB B0Czdj02w3jyoQsaxRww9auVFfbuCCvn5lN4mFo7Djt2PsLAvwQYFgoBMQWCYVR6 2wkQ9e5Zwnlc26JHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jns8+M6iQZ8TdPmKSJrLbRHAw/0Wq0DEcnLsdxIPsoRR4CmwK+oAQZFgoAbwWC YVR62wkQdqq8aXZmmIFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnuIMFd+9z8ssoKYHwO+XqloK/8kWcLhZf9xKjecf0JmkWIQSyN3kbFL6f 5DWEsYx2qrxpdmaYgQAATKIBAP8oAXr4KzexpYEEmWOsCuJO3/BgQHLTAQ37hueX VyytAPwIqMTbjmMZez9TFrUICzA7UvFMaYrVGepcgXG0wpkrCBYhBOVTwR3Pp3fz IF5QkPXuWcJ5XNuiAAADpwEArDAjKL7mcIlf8CVd/La4AKm2TGcDi7J6KbY46b1c 1kgA/3YIIVyAQOVO66IE/dUIErhIhcQppFfdjgfuGF2WOQUA =5R1H -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/frank-priv.pgp000064400000000000000000000027671046102023000212200ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3267 D462 47D2 6101 B3E5 014C DF4F 9BA5 831D 91DA Comment: xVgEYVR62xYJKwYBBAHaRw8BAQdAGSw7Tmk5TZ7M0q0s7+SpjrUWnceX6BnO21H9 kXFt1/MAAQDrwYo4E4q4wN4UGnOiQVDQ2kyXs0uvyS6X0ZrnuYCBkxGdwsALBB8W CgB9BYJhVHrbAwsJBwkQ30+bpYMdkdpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn/ih8nT+V3T9t7W4sTq4dnLXHFpAkFlfQT6uPX/a86RED FQoIApsBAh4BFiEEMmfUYkfSYQGz5QFM30+bpYMdkdoAAMPdAPwM7yZbz36CtcXl UPDo8eC/68IYG5WCXbZVjyCTlDpjdAEA4sNubNLKxzCUCb0iqd0H0iQUaVDbs0nF Y1TcPUAeiwnNEzxmcmFua0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFUetsDCwkH CRDfT5ulgx2R2kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcyMQZPzMnr8dVTUsG8oAui+uJ8g5MsylWSn7C+Hd3xFwMVCggCmQECmwECHgEW IQQyZ9RiR9JhAbPlAUzfT5ulgx2R2gAAbO8BAPcdQzpEsGNhv+3rdEQS8uXw/N0J SBNIYTv1sH+ux3XUAP9fWSJEjCzkBJcuARRyLCYJXeTGUkWYcTQBXhU9uKkSD8dY BGFUetsWCSsGAQQB2kcPAQEHQKbhlw121XWzGmLzBxlZl+Ukyys3OPI2P5t87Lt5 VKDCAAD+J9bHM4DipvznmJmtmj+TZ2JoUf8z9rqW/RYJX4UMMRQRdcLAvwQYFgoB MQWCYVR62wkQ30+bpYMdkdpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnMCClI4uhmLqQ84ZmlkMbdfS8f6bXe3kjll4l5IR9gbgCmwK+oAQZ FgoAbwWCYVR62wkQmDa+mrGtQnVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn5aYxYMWIsTcJPdlynAHKZyADTPxXY2Yce4OcJkxO19IWIQQ/ S/GfwtlWNgs5/Y2YNr6asa1CdQAAxTUA/3z8jgsiJpCMERfh7jpXtN7XJf0xjpf4 RkxZV3uBewq5AP48jzt9QFQGCB6KVvV47KlxNPGGvIR2lnJf6fm1WCJoDhYhBDJn 1GJH0mEBs+UBTN9Pm6WDHZHaAAAxqwD/bZbelefT4L1Jd+uKyM5uroQNzZ24S6xd Pv+xAPGYOIMA/jJE3oLXBI2qAG3qt83px9gmjqTzV6wFaUxubRQXAs0D =YFPr -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/frank.pgp000064400000000000000000000031131046102023000202240ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVR62xYJKwYBBAHaRw8BAQdAGSw7Tmk5TZ7M0q0s7+SpjrUWnceX6BnO21H9 kXFt1/PCwAsEHxYKAH0FgmFUetsDCwkHCRDfT5ulgx2R2kcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf+KHydP5XdP23tbixOrh2ctccWkCQW V9BPq49f9rzpEQMVCggCmwECHgEWIQQyZ9RiR9JhAbPlAUzfT5ulgx2R2gAAw90A /AzvJlvPfoK1xeVQ8Ojx4L/rwhgblYJdtlWPIJOUOmN0AQDiw25s0srHMJQJvSKp 3QfSJBRpUNuzScVjVNw9QB6LCc0TPGZyYW5rQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVR62wMLCQcJEN9Pm6WDHZHaRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZzIxBk/Myevx1VNSwbygC6L64nyDkyzKVZKfsL4d3fEXAxUK CAKZAQKbAQIeARYhBDJn1GJH0mEBs+UBTN9Pm6WDHZHaAABs7wEA9x1DOkSwY2G/ 7et0RBLy5fD83QlIE0hhO/Wwf67HddQA/19ZIkSMLOQEly4BFHIsJgld5MZSRZhx NAFeFT24qRIPwsAHBBAWCgB5BYJhVHsYBYMJZ5o7A4UDeAkQ9e5Zwnlc26JHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnu9z0m7sqN7rLA/4e xu0hRYjMeFyxatBo7cu8zjhdfqsWIQTlU8Edz6d38yBeUJD17lnCeVzbogAA3nUB AKM9vyK1tMHn7TPSnFcr50JsnZzlpDfO4gb/quW5bGUnAQCEh4PEMFLjNs8T2sWL S4hT8uaOrVfSfaSLl78AMctsCc4zBGFUetsWCSsGAQQB2kcPAQEHQKbhlw121XWz GmLzBxlZl+Ukyys3OPI2P5t87Lt5VKDCwsC/BBgWCgExBYJhVHrbCRDfT5ulgx2R 2kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcwIKUji6GY upDzhmaWQxt19Lx/ptd7eSOWXiXkhH2BuAKbAr6gBBkWCgBvBYJhVHrbCRCYNr6a sa1CdUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmflpjFg xYixNwk92XKcAcpnIANM/FdjZhx7g5wmTE7X0hYhBD9L8Z/C2VY2Czn9jZg2vpqx rUJ1AADFNQD/fPyOCyImkIwRF+HuOle03tcl/TGOl/hGTFlXe4F7CrkA/jyPO31A VAYIHopW9XjsqXE08Ya8hHaWcl/p+bVYImgOFiEEMmfUYkfSYQGz5QFM30+bpYMd kdoAADGrAP9tlt6V59PgvUl364rIzm6uhA3NnbhLrF0+/7EA8Zg4gwD+MkTegtcE jaoAbeq3zenH2CaOpPNXrAVpTG5tFBcCzQM= =jzdc -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/george-priv.pgp000064400000000000000000000027741046102023000213650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CCD5 DB27 BD7C 4F8E 2010 0836 05EF 17E8 A93E B652 Comment: xVgEYVR62xYJKwYBBAHaRw8BAQdAzs8utd9wQoW8tWotWLbvm4WYxVgrcsE13ZrK 4+nrFtcAAQCxS0LGaU3u+th2WdUe2yQmmgYw1viHAhcyt8B4P0O4cQ9swsALBB8W CgB9BYJhVHrbAwsJBwkQBe8X6Kk+tlJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn/EgnwdzF1anCcbTzoi2BE2nMGSjK+7FxYWp2OokcQWcD FQoIApsBAh4BFiEEzNXbJ718T44gEAg2Be8X6Kk+tlIAALDZAQChHLsOKenhMi3D 73lVouFrfdViBTzN4NoqrDXeA+0b2wD+KEXR5lJxqZXkOmtUMyti5N0wtxi8CnpA 5sI6GxkkDwbNFDxnZW9yZ2VAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhVHrbAwsJ BwkQBe8X6Kk+tlJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnVkjZKCZKXJD35UNiA5zd52gGyojZlDQj4nZ4NzFvmxIDFQoIApkBApsBAh4B FiEEzNXbJ718T44gEAg2Be8X6Kk+tlIAANreAQD+tN+Ru6ERiCjqcTN/dQKc4iuO TOE4mGYNTUbAV6d9ggD/WgRI07sbu90V3JHEznjIKApcoSoRESy3VeYlsck3mAXH WARhVHrbFgkrBgEEAdpHDwEBB0AeOeMdZZOCW8eoWtl15RGVUEuGX8nvdVcerrL3 K6MNIwABAJsJz1EYGcTzTIqbhMK0t1jo+bz0foW3gW/EDKaZcWDhEiPCwL8EGBYK ATEFgmFUetsJEAXvF+ipPrZSRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ6aaNMLp74z2u3ES6CqNEzV5E8403Y0MZVY8NRVrRHbLApsCvqAE GRYKAG8FgmFUetsJEHJPuzWJeYvdRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ/0F+nh+U/HiBRGPm0YUCMHAaZabN6baSawnqI0zBFroFiEE 7Ml+t4dJ98UzhYGAck+7NYl5i90AABp+AP48Id/I+I6s/sYFc+GsFHuN93MWf6AK moJXBydbZ7W7uAD/fwJyDQmvWH/eimvwFtcELU7uN1SyYhlnZF4qQKYoSQ8WIQTM 1dsnvXxPjiAQCDYF7xfoqT62UgAAGxQA/jtHTmHHqpz8uMec8i1khSyxLEKjvUJB k2ysVzUIYn6UAP0Ye3XjKOEsdE+SVIVORvmXwIkTz2/8SLFVpdE7vyOrBQ== =BhRi -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/george.pgp000064400000000000000000000035371046102023000204050ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVR62xYJKwYBBAHaRw8BAQdAzs8utd9wQoW8tWotWLbvm4WYxVgrcsE13ZrK 4+nrFtfCwAsEHxYKAH0FgmFUetsDCwkHCRAF7xfoqT62UkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf8SCfB3MXVqcJxtPOiLYETacwZKMr7 sXFhanY6iRxBZwMVCggCmwECHgEWIQTM1dsnvXxPjiAQCDYF7xfoqT62UgAAsNkB AKEcuw4p6eEyLcPveVWi4Wt91WIFPM3g2iqsNd4D7RvbAP4oRdHmUnGpleQ6a1Qz K2Lk3TC3GLwKekDmwjobGSQPBs0UPGdlb3JnZUBleGFtcGxlLm9yZz7CwA4EExYK AIAFgmFUetsDCwkHCRAF7xfoqT62UkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmdWSNkoJkpckPflQ2IDnN3naAbKiNmUNCPidng3MW+bEgMV CggCmQECmwECHgEWIQTM1dsnvXxPjiAQCDYF7xfoqT62UgAA2t4BAP6035G7oRGI KOpxM391ApziK45M4TiYZg1NRsBXp32CAP9aBEjTuxu73RXckcTOeMgoClyhKhER LLdV5iWxyTeYBcLABwQQFgoAeQWCYVR7GAWDCWeaOwOFAWQJEJwkR+Yf/bsVRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ80DC7XnpKNKPj17 r+RDSnU9Ko7/I4hfNMKCDKO2vqj2FiEErkBXiWJBE1b5YJyqnCRH5h/9uxUAAGIY AQCiOowGTyeKRaH74MNGol2LMiJJJyGR2JpcZTIl8vF4iQD/Su0tKqWo2xtFs5b4 MbH1c3SE03pVGKfEunFl/t17zAfCwAcEEBYKAHkFgmFUexcFgwlnmjsDhQJ4CRAD l+CG5wWsGkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcn ZZfP8VptvjdAe8ylO1OQSc7tBWo+VLxfegQwkS6p3hYhBC6Qrulm3yjLkWQ5sgOX 4IbnBawaAAAxJgD8CCryvgk86SqGCW9PUrKhX6u25NADEdiGXObKT8qS5XABAJTd dqa+Wn7hPoB8aZWL3/RsY64e5lTchbLM4V9Vw84KzjMEYVR62xYJKwYBBAHaRw8B AQdAHjnjHWWTglvHqFrZdeURlVBLhl/J73VXHq6y9yujDSPCwL8EGBYKATEFgmFU etsJEAXvF+ipPrZSRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ6aaNMLp74z2u3ES6CqNEzV5E8403Y0MZVY8NRVrRHbLApsCvqAEGRYKAG8F gmFUetsJEHJPuzWJeYvdRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ/0F+nh+U/HiBRGPm0YUCMHAaZabN6baSawnqI0zBFroFiEE7Ml+t4dJ 98UzhYGAck+7NYl5i90AABp+AP48Id/I+I6s/sYFc+GsFHuN93MWf6AKmoJXBydb Z7W7uAD/fwJyDQmvWH/eimvwFtcELU7uN1SyYhlnZF4qQKYoSQ8WIQTM1dsnvXxP jiAQCDYF7xfoqT62UgAAGxQA/jtHTmHHqpz8uMec8i1khSyxLEKjvUJBk2ysVzUI Yn6UAP0Ye3XjKOEsdE+SVIVORvmXwIkTz2/8SLFVpdE7vyOrBQ== =guTa -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/henry-priv.pgp000064400000000000000000000027671046102023000212440ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7F62 EF97 091A E1FC B4E1 C67E C8D9 E94C 4731 529B Comment: xVgEYVR62xYJKwYBBAHaRw8BAQdAv1w5GJmu7+w8Ec1iRP7jms9MRRa1HK7yN6GD X/OOrB4AAQCxKMef6efsJJl314wtOafQt6T42IvEoPfOatP/j2z/nBUhwsALBB8W CgB9BYJhVHrbAwsJBwkQyNnpTEcxUptHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn7BnvJfOggeJbdEkC3jg0jd3+UEwRF/OUjMPDwjfmrh4D FQoIApsBAh4BFiEEf2Lvlwka4fy04cZ+yNnpTEcxUpsAACIeAQCaY5v5xXw2hXV3 BfCI6ujQd45QhNrMVDQhnveFktBClQD/T/b7b/nBeCeGhxeCq6w0P1hzXg7Qf60t NVYqKeP9eQDNEzxoZW5yeUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFUetsDCwkH CRDI2elMRzFSm0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cme+AXlZj6Hz6u2vI/yA3nCRzLSv1v3TuRkGpnQWlc3xxwMVCggCmQECmwECHgEW IQR/Yu+XCRrh/LThxn7I2elMRzFSmwAAWj4A/2OcRLaCGvrBcdFynNoAPZvWFP6t WcFWDozpNRY0za+vAQDaqsdpAwXE1Y+J7qk6b3vWOAYtQhldiUN7Ixp8gb4KBMdY BGFUetsWCSsGAQQB2kcPAQEHQOr8kNpTR5ZzvTvXw+49yOzwYgTKyf67RVmW950N hEnOAAEA5Uf/UU9hla+Wy4XIdET+aicTqvd37bCwn9Vd2HWdiV0Sf8LAvwQYFgoB MQWCYVR62wkQyNnpTEcxUptHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jnb3OrXDyB8YFq61bADOKwoAuLk8kVYTZr2Vti+0WiL0wCmwK+oAQZ FgoAbwWCYVR62wkQMXDjnYQnN45HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnpfRt+NmhcFlDTFxi8f/zoecPCTr4kPk5tr6/m4xX9AsWIQS7 wqyglvJb0FmF7jsxcOOdhCc3jgAAZFEBAP6vl/Q6hNKQGRHBfUKRKPG6WPRhVi8I vG0iTeNC62XrAPwP59K6jA71Xs6Km9+CpJjCdQDg5hEqPHgrqBx91eSKCRYhBH9i 75cJGuH8tOHGfsjZ6UxHMVKbAABLZwEA7tF0X9ECKgKdmQ+mH+cdqTS7NaELQGpz dB43+0Bgkr0A/inf5THOctzGRKGhHc/5lInkXQiecOCCt1lJfyX7a6QA =WHv0 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/henry.pgp000064400000000000000000000031131046102023000202500ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVR62xYJKwYBBAHaRw8BAQdAv1w5GJmu7+w8Ec1iRP7jms9MRRa1HK7yN6GD X/OOrB7CwAsEHxYKAH0FgmFUetsDCwkHCRDI2elMRzFSm0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfsGe8l86CB4lt0SQLeODSN3f5QTBEX 85SMw8PCN+auHgMVCggCmwECHgEWIQR/Yu+XCRrh/LThxn7I2elMRzFSmwAAIh4B AJpjm/nFfDaFdXcF8Ijq6NB3jlCE2sxUNCGe94WS0EKVAP9P9vtv+cF4J4aHF4Kr rDQ/WHNeDtB/rS01Viop4/15AM0TPGhlbnJ5QGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVR62wMLCQcJEMjZ6UxHMVKbRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ74BeVmPofPq7a8j/IDecJHMtK/W/dO5GQamdBaVzfHHAxUK CAKZAQKbAQIeARYhBH9i75cJGuH8tOHGfsjZ6UxHMVKbAABaPgD/Y5xEtoIa+sFx 0XKc2gA9m9YU/q1ZwVYOjOk1FjTNr68BANqqx2kDBcTVj4nuqTpve9Y4Bi1CGV2J Q3sjGnyBvgoEwsAHBBAWCgB5BYJhVHsYBYMJZ5o7A4UBeAkQBe8X6Kk+tlJHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnwMKd+RTRWXGmO4Ot YNe3bvP6cwu7q7fuCnPo/YklMcUWIQTM1dsnvXxPjiAQCDYF7xfoqT62UgAAP94A /RujDantedVOm8do2x7ZxfS0P/inEqe9Z1+XBlAyOJLvAP9zkFPztIog1+wQUTK8 00yHVDiyhGEHZA5Rn2U5Ynq0As4zBGFUetsWCSsGAQQB2kcPAQEHQOr8kNpTR5Zz vTvXw+49yOzwYgTKyf67RVmW950NhEnOwsC/BBgWCgExBYJhVHrbCRDI2elMRzFS m0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdvc6tcPIHx gWrrVsAM4rCgC4uTyRVhNmvZW2L7RaIvTAKbAr6gBBkWCgBvBYJhVHrbCRAxcOOd hCc3jkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmel9G34 2aFwWUNMXGLx//Oh5w8JOviQ+Tm2vr+bjFf0CxYhBLvCrKCW8lvQWYXuOzFw452E JzeOAABkUQEA/q+X9DqE0pAZEcF9QpEo8bpY9GFWLwi8bSJN40LrZesA/A/n0rqM DvVezoqb34KkmMJ1AODmESo8eCuoHH3V5IoJFiEEf2Lvlwka4fy04cZ+yNnpTEcx UpsAAEtnAQDu0XRf0QIqAp2ZD6Yf5x2pNLs1oQtAanN0Hjf7QGCSvQD+Kd/lMc5y 3MZEoaEdz/mUieRdCJ5w4IK3WUl/JftrpAA= =N7GD -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/isaac-priv.pgp000064400000000000000000000027671046102023000211770ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 32FD 4D68 B322 7334 CD05 83E9 FA07 21F4 9D2F 395D Comment: xVgEYVR62xYJKwYBBAHaRw8BAQdA6M009Xu6l3K06fYHAJnlQl8KOGeTwFfWcLXJ d1Vs2LQAAP9tEuud8/X7OaNwW18BquVMbxZsN2qKoDkpxRC9OPkXCw/OwsALBB8W CgB9BYJhVHrbAwsJBwkQ+gch9J0vOV1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnTikMUlhfO30+Ez5uqwb2cVhLyxdavQxQIuVdtJvtG/oD FQoIApsBAh4BFiEEMv1NaLMiczTNBYPp+gch9J0vOV0AAPQsAP4oCt0Oh1bsoSBE NfqoWcyYH2idEJbYuJ27/fL7xNjb2wD+P3xfCHnhxvmUUf8RkDPTBX2c1uxECas6 OJPU3tKHBQjNEzxpc2FhY0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFUetsDCwkH CRD6ByH0nS85XUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cme/rlZwtbdGXq02O1cRgHQ3WOzXa8xzkD5XajCR1kME/wMVCggCmQECmwECHgEW IQQy/U1osyJzNM0Fg+n6ByH0nS85XQAAy2gBAMG6Tb4nw2V2wNI3OZOlLQufBRWG Jved4eOtwzb7LrvQAP4rtInegi2idsvFT6WU+W9zhnfBlwECtZyMVGUr6UcIAMdY BGFUetsWCSsGAQQB2kcPAQEHQAl2NZoLbZdEJwiGea+GQfIv7Q0KwuiWQ1qs0tuV l7zaAAD/X0FsBhhALAvh7iYrnEkwRo9QpM18jpJZx50DsN+mS/8PRsLAvwQYFgoB MQWCYVR62wkQ+gch9J0vOV1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn5r8TYNZOUx+YTNNFyv3qB2jI9yh1rMvnu05yRkN8r/cCmwK+oAQZ FgoAbwWCYVR62wkQNb7cVJWY0+RHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnVZEBJE4ko+FYkRJJB2eInV5k4hOXNMl0xhcFyaIJuq4WIQQ4 A6HIOSJ8knqY/Y41vtxUlZjT5AAAUtkA/0XohrLe7pPetz+GvEIU+/OyG9jkUeUw W7v3NfOOar6tAP4xu40q94kzKvOB+eOMZeIvZ8lbzsEBI3s9JixIzuE4CxYhBDL9 TWizInM0zQWD6foHIfSdLzldAABOEgEAzEHvL2RdU7FAZ0MryWBaNhR5/6K+L03I pXwck9SrE9sBAMFM/G5jjErcvG8wnf/4VE3xVKEeHItrt76i/REX00YM =YsQq -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/isaac.pgp000064400000000000000000000031071046102023000202060ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVR62xYJKwYBBAHaRw8BAQdA6M009Xu6l3K06fYHAJnlQl8KOGeTwFfWcLXJ d1Vs2LTCwAsEHxYKAH0FgmFUetsDCwkHCRD6ByH0nS85XUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdOKQxSWF87fT4TPm6rBvZxWEvLF1q9 DFAi5V20m+0b+gMVCggCmwECHgEWIQQy/U1osyJzNM0Fg+n6ByH0nS85XQAA9CwA /igK3Q6HVuyhIEQ1+qhZzJgfaJ0Qlti4nbv98vvE2NvbAP4/fF8IeeHG+ZRR/xGQ M9MFfZzW7EQJqzo4k9Te0ocFCM0TPGlzYWFjQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVR62wMLCQcJEPoHIfSdLzldRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7+uVnC1t0ZerTY7VxGAdDdY7NdrzHOQPldqMJHWQwT/AxUK CAKZAQKbAQIeARYhBDL9TWizInM0zQWD6foHIfSdLzldAADLaAEAwbpNvifDZXbA 0jc5k6UtC58FFYYm953h463DNvsuu9AA/iu0id6CLaJ2y8VPpZT5b3OGd8GXAQK1 nIxUZSvpRwgAwsADBBAWCgB1BYJhVHsYBYMJZ5o7CRDI2elMRzFSm0cUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdlFt5BXqpPPzeGDSJi6ApA 8a1cUu79ZsQq5kDo+O7xtBYhBH9i75cJGuH8tOHGfsjZ6UxHMVKbAAAZQwD+JEug eivQsrMgXLw+L0qHDtvp15vpaX0LGYlXqNbsUqgBAJFiarH1LufQSJr0NjCmyg2n A1mP6s52Z9Eg5bAHwf8OzjMEYVR62xYJKwYBBAHaRw8BAQdACXY1mgttl0QnCIZ5 r4ZB8i/tDQrC6JZDWqzS25WXvNrCwL8EGBYKATEFgmFUetsJEPoHIfSdLzldRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+a/E2DWTlMfmEzT Rcr96gdoyPcodazL57tOckZDfK/3ApsCvqAEGRYKAG8FgmFUetsJEDW+3FSVmNPk RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1WRASROJKPh WJESSQdniJ1eZOITlzTJdMYXBcmiCbquFiEEOAOhyDkifJJ6mP2ONb7cVJWY0+QA AFLZAP9F6Iay3u6T3rc/hrxCFPvzshvY5FHlMFu79zXzjmq+rQD+MbuNKveJMyrz gfnjjGXiL2fJW87BASN7PSYsSM7hOAsWIQQy/U1osyJzNM0Fg+n6ByH0nS85XQAA ThIBAMxB7y9kXVOxQGdDK8lgWjYUef+ivi9NyKV8HJPUqxPbAQDBTPxuY4xK3Lxv MJ3/+FRN8VShHhyLa7e+ov0RF9NGDA== =WFMC -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/jenny-priv.pgp000064400000000000000000000027671046102023000212420ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: AE40 5789 6241 1356 F960 9CAA 9C24 47E6 1FFD BB15 Comment: xVgEYVR62xYJKwYBBAHaRw8BAQdA8gk5SRwNlEoyhtLyJmW+X9kLeIVVmRDxyWgh ssoJod8AAPkBVLQgVkUOADIUchfzWy50yBamax2GqJ4cb6NnP4J6ZgyYwsALBB8W CgB9BYJhVHrbAwsJBwkQnCRH5h/9uxVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnv4Ni7CvGwpJXiCPcsyhHX1sEosdOVO9R30zDVxnTovED FQoIApsBAh4BFiEErkBXiWJBE1b5YJyqnCRH5h/9uxUAADoGAQDLUptpH+LM8JCx vW0baDNz0WRYIyLlWrpMBM7MDmXfewD+OUcgfCmcyfC/5rsFv1A07MN1wSeH/Mkx /Uj80ZTVYgPNEzxqZW5ueUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFUetsDCwkH CRCcJEfmH/27FUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcidu6Uu3U2nK1LMzHytXJRQZjimi1ifl8e1XQXyfAd1AMVCggCmQECmwECHgEW IQSuQFeJYkETVvlgnKqcJEfmH/27FQAA7DEBAJjp2Xxp/nMjrZJ2pugyLpL+biiB gRh5vi2ID/h4joJoAP9XrBaNH52D19d5CJwAjMNWTBkNDAuC/xIueP7aDnQFA8dY BGFUetsWCSsGAQQB2kcPAQEHQNP9nX/Bcq6Y6NOLrP8KZl8Qi9LCWp9HKc5ulrMm 3zENAAD/WdXOmdrBh2EwCaqnXu3v0zWEaYCxROjZLMfhoQHnEzISqMLAvwQYFgoB MQWCYVR62wkQnCRH5h/9uxVHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn3zJFnE7BteuZmK2VClSXfwKeRoKiAJCEV0faMK5W62oCmwK+oAQZ FgoAbwWCYVR62wkQXQcXO/swkntHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnGScDv5FSK9mLfzo+JtOerni5daOw3aU40K0PyAnqZccWIQSO 8Q7Os6vLm1qGfCJdBxc7+zCSewAAXVcBAJstQITmhWbMjDkfLIYFop86WLEn9W92 A92uGgo0qj6FAP0YEjwwnFkmxAe6Vgqcqpyh2R3A2cXnl97NQznHQV/nBRYhBK5A V4liQRNW+WCcqpwkR+Yf/bsVAADiVgD/XF5L3IJXsnk3ZFjP8XWvroc24iVOgZRl vHiDp3AasGgBAP2am3WpBZ+1Wlax4gs247whc0Q3aZE5kQmSOIu5na0O =zfkB -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout/jenny.pgp000064400000000000000000000026241046102023000202540ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: AE40 5789 6241 1356 F960 9CAA 9C24 47E6 1FFD BB15 Comment: xjMEYVR62xYJKwYBBAHaRw8BAQdA8gk5SRwNlEoyhtLyJmW+X9kLeIVVmRDxyWgh ssoJod/CwAsEHxYKAH0FgmFUetsDCwkHCRCcJEfmH/27FUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme/g2LsK8bCkleII9yzKEdfWwSix05U 71HfTMNXGdOi8QMVCggCmwECHgEWIQSuQFeJYkETVvlgnKqcJEfmH/27FQAAOgYB AMtSm2kf4szwkLG9bRtoM3PRZFgjIuVaukwEzswOZd97AP45RyB8KZzJ8L/muwW/ UDTsw3XBJ4f8yTH9SPzRlNViA80TPGplbm55QGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVR62wMLCQcJEJwkR+Yf/bsVRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZyJ27pS7dTacrUszMfK1clFBmOKaLWJ+Xx7VdBfJ8B3UAxUK CAKZAQKbAQIeARYhBK5AV4liQRNW+WCcqpwkR+Yf/bsVAADsMQEAmOnZfGn+cyOt knam6DIukv5uKIGBGHm+LYgP+HiOgmgA/1esFo0fnYPX13kInACMw1ZMGQ0MC4L/ Ei54/toOdAUDzjMEYVR62xYJKwYBBAHaRw8BAQdA0/2df8Fyrpjo04us/wpmXxCL 0sJan0cpzm6WsybfMQ3CwL8EGBYKATEFgmFUetsJEJwkR+Yf/bsVRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ98yRZxOwbXrmZitlQpUl38C nkaCogCQhFdH2jCuVutqApsCvqAEGRYKAG8FgmFUetsJEF0HFzv7MJJ7RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxknA7+RUivZi386PibT nq54uXWjsN2lONCtD8gJ6mXHFiEEjvEOzrOry5tahnwiXQcXO/swknsAAF1XAQCb LUCE5oVmzIw5HyyGBaKfOlixJ/VvdgPdrhoKNKo+hQD9GBI8MJxZJsQHulYKnKqc odkdwNnF55fezUM5x0Ff5wUWIQSuQFeJYkETVvlgnKqcJEfmH/27FQAA4lYA/1xe S9yCV7J5N2RYz/F1r66HNuIlToGUZbx4g6dwGrBoAQD9mpt1qQWftVpWseILNuO8 IXNEN2mROZEJkjiLuZ2tDg== =urQK -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout.pgp000064400000000000000000000364371046102023000171420ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVR62xYJKwYBBAHaRw8BAQdA+ELIvx1nB8BnAr6h7G9UMjkh+bKYbqn7ofHX aYQk9mrCwAsEHxYKAH0FgmFUetsDCwkHCRCQWeOEagJWEUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeZprypj6ETB8FbPChIyksUEltYAsE+ +3NEFbCEvsqGTgMVCggCmwECHgEWIQTUUV5mGQhO2BQt+FiQWeOEagJWEQAAi+QA /iCrGUO2uryJJH/0mfItevcE/Afxq4AMj/ICLnDh7qaZAQCG3oNd633q05FRx3Ug KgUzO3Z3GkDAqtt5hxhLFucvDs0SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJhVHrbAwsJBwkQkFnjhGoCVhFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jng7G6E5G5CNidgxPdFcWid9eQOrUb8y4Bshq8EToUobsDFQoI ApkBApsBAh4BFiEE1FFeZhkITtgULfhYkFnjhGoCVhEAAD7IAQDsq2uZi8cYr53V c5MUJtUt3UZN9lHJBYcl/XLOW/5DRgD/RyaEoPwlzxdypcHPeAPEKuLTRBGRuQfq WzzrsgK+WQ3CwAcEEBYKAHkFgmFUexcFgwlnmjsDhQV4CRAzDRGQ6Fh1TEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmc7/3JrMtfloJDx9Gmx tBbHjqEtO2xg+dhcihC+hOON6BYhBJLd6HR8jm7QnUGk4TMNEZDoWHVMAADluwEA vVukwx8sCfDksQj1R4DxS781NaFpbUwpP/NJ76HMojMA/AwmVQ1PRxNwyea7t3uH 24v298lGOiJC0axh6h1S5AQOzjMEYVR62xYJKwYBBAHaRw8BAQdAeKK4ZWkM7bbI kfRp25dxO3LQ+4LE6MfpCx4rskaYrkHCwL8EGBYKATEFgmFUetsJEJBZ44RqAlYR RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ2LLX7jxt9Uy hS8V8I0+ut39J21JcEbHIC9SBO4VzPvKApsCvqAEGRYKAG8FgmFUetsJENLP7vRy 79n0RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzRoXeZc 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 w40kORZoowjOMwRhVHrbFgkrBgEEAdpHDwEBB0A7MRuTwXEG8Z/1huc/vPSo3XLD 9Sfa1fVxwzMISIe8ZcLAvwQYFgoBMQWCYVR62wkQELu9AJEr6gJHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnhS7n2yNxjcuh4ioAxZ9ndpxc OqpclLkuX82CYo6fP1UCmwK+oAQZFgoAbwWCYVR62wkQGYweM8CV69xHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jna9nR2rqaUASG3GPyjwuv b/5GJTN5Lm3S23lCOZuXPz4WIQQ4UUIO9pHKpr/uR1wZjB4zwJXr3AAAK1MBAJma gUZt58PSLIGvpqxeOgkczpkSQWosYtvb3NGx98+qAP9o7T514i5fxvtwfLWSWJKD fu42if6haWW4AsvvcCwhDxYhBEHpsGnJbrbUdSUpSxC7vQCRK+oCAAC/0gEApDny ZdtVCUBC2tNBh7QGH/IO/YdE8QeCaeDdKMru434BAK6B4El98+yCb0/t+NbwOSEj +Nh+ACkLCopAsTy18QIIxjMEYVR62xYJKwYBBAHaRw8BAQdAzs8utd9wQoW8tWot WLbvm4WYxVgrcsE13ZrK4+nrFtfCwAsEHxYKAH0FgmFUetsDCwkHCRAF7xfoqT62 UkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf8SCfB3MXV qcJxtPOiLYETacwZKMr7sXFhanY6iRxBZwMVCggCmwECHgEWIQTM1dsnvXxPjiAQ CDYF7xfoqT62UgAAsNkBAKEcuw4p6eEyLcPveVWi4Wt91WIFPM3g2iqsNd4D7Rvb AP4oRdHmUnGpleQ6a1QzK2Lk3TC3GLwKekDmwjobGSQPBs0UPGdlb3JnZUBleGFt cGxlLm9yZz7CwA4EExYKAIAFgmFUetsDCwkHCRAF7xfoqT62UkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdWSNkoJkpckPflQ2IDnN3naAbK iNmUNCPidng3MW+bEgMVCggCmQECmwECHgEWIQTM1dsnvXxPjiAQCDYF7xfoqT62 UgAA2t4BAP6035G7oRGIKOpxM391ApziK45M4TiYZg1NRsBXp32CAP9aBEjTuxu7 3RXckcTOeMgoClyhKhERLLdV5iWxyTeYBcLABwQQFgoAeQWCYVR7GAWDCWeaOwOF AWQJEJwkR+Yf/bsVRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ80DC7XnpKNKPj17r+RDSnU9Ko7/I4hfNMKCDKO2vqj2FiEErkBXiWJBE1b5 YJyqnCRH5h/9uxUAAGIYAQCiOowGTyeKRaH74MNGol2LMiJJJyGR2JpcZTIl8vF4 iQD/Su0tKqWo2xtFs5b4MbH1c3SE03pVGKfEunFl/t17zAfCwAcEEBYKAHkFgmFU excFgwlnmjsDhQJ4CRADl+CG5wWsGkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmcnZZfP8VptvjdAe8ylO1OQSc7tBWo+VLxfegQwkS6p3hYh BC6Qrulm3yjLkWQ5sgOX4IbnBawaAAAxJgD8CCryvgk86SqGCW9PUrKhX6u25NAD EdiGXObKT8qS5XABAJTddqa+Wn7hPoB8aZWL3/RsY64e5lTchbLM4V9Vw84KzjME YVR62xYJKwYBBAHaRw8BAQdAHjnjHWWTglvHqFrZdeURlVBLhl/J73VXHq6y9yuj DSPCwL8EGBYKATEFgmFUetsJEAXvF+ipPrZSRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ6aaNMLp74z2u3ES6CqNEzV5E8403Y0MZVY8NRVr RHbLApsCvqAEGRYKAG8FgmFUetsJEHJPuzWJeYvdRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/0F+nh+U/HiBRGPm0YUCMHAaZabN6baSawn qI0zBFroFiEE7Ml+t4dJ98UzhYGAck+7NYl5i90AABp+AP48Id/I+I6s/sYFc+Gs FHuN93MWf6AKmoJXBydbZ7W7uAD/fwJyDQmvWH/eimvwFtcELU7uN1SyYhlnZF4q QKYoSQ8WIQTM1dsnvXxPjiAQCDYF7xfoqT62UgAAGxQA/jtHTmHHqpz8uMec8i1k hSyxLEKjvUJBk2ysVzUIYn6UAP0Ye3XjKOEsdE+SVIVORvmXwIkTz2/8SLFVpdE7 vyOrBcYzBGFUetsWCSsGAQQB2kcPAQEHQK+mP3taeULLSEyqk9OzmgK9Ev3PcvfQ gM28aCkH4zCxwsALBB8WCgB9BYJhVHrbAwsJBwkQMw0RkOhYdUxHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnFdxnxRDqo1Pq2L2ABx4Z00vo g9NvjuVubpK/VUy0rCQDFQoIApsBAh4BFiEEkt3odHyObtCdQaThMw0RkOhYdUwA APiIAP4jl31f2sMwSBHjXQASvEPRYeboH/lB3eKrhWSu9t17DgD/WB0rTOPegzs1 G3FzRhSmjg/kkNLq9SNOimQSsA7PWA7NEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4E ExYKAIAFgmFUetsDCwkHCRAzDRGQ6Fh1TEcUAAAAAAAeACBzYWx0QG5vdGF0aW9u cy5zZXF1b2lhLXBncC5vcmcub1q9H0Zp0BZGTZ/4XIa+NPBX/2oZwE8qk4a8riIX +wMVCggCmQECmwECHgEWIQSS3eh0fI5u0J1BpOEzDRGQ6Fh1TAAAIwUA/RYVeJTf q9bVqftv3UOEZNWRpNJOhmsEQSH24jNvmMAyAQD2YRytW5dTjp2P3ppF3h9YW4+j sSaiHjF6usTOonb+DcLABwQQFgoAeQWCYVR7FwWDCWeaOwOFBngJEBC7vQCRK+oC RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwWnOqvNOKkQ P4GnBtnDjW64U05vqqFYC5obfgJF4j1MFiEEQemwacluttR1JSlLELu9AJEr6gIA AO3FAQCwrIttMciJSffSVSIuVddcpHZhpb0KNOljrdYWaVEzDgD/SWWHsUJsbq2D ua4LzwQ7Ow0wyu6eFmjAFAjUR4LbMQrOMwRhVHrbFgkrBgEEAdpHDwEBB0B+QoEV tlBzIrbR1asqSpZ6GOmOLJcwkFtQWu9WEv7c+sLAvwQYFgoBMQWCYVR62wkQMw0R kOhYdUxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnRnRm /v2+8WnYAtkcPeeRvDOj5ozZXXJuPcKbYgyUiNwCmwK+oAQZFgoAbwWCYVR62wkQ TZBS4xsUvs9HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn Am13dX35pzJea6T0skV3WvNKGh+nAKUFjIZwyO5ICdUWIQQivpYUOTKKL2eewaFN kFLjGxS+zwAAmboA/0XXOCpLkpZNXOFzBvVPKGmy3wY4Nu0bjidLLyEIOTZNAQDn CMvgn3rtz0HLwV6B4tEFOQV8RNoqMrMP4bqGOdypBBYhBJLd6HR8jm7QnUGk4TMN EZDoWHVMAABRWAEAk1Ee387fHaGVgDiJPxLd67J5V3e9PU1It6HjkHJYryoBAPWq MbKByqkp9S9iIh14PK5TIdxCSPEDp9zuXmQTGnUCxjMEYVR62xYJKwYBBAHaRw8B AQdAbTuaBphO9IhF8b41dBEw/g4o+bOCruhQLdvlbN+2bMvCwAsEHxYKAH0FgmFU etsDCwkHCRD17lnCeVzbokcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmcQW3XQT6BCAn0Xu0UbeQRjSh/HzIwWcVy8pm+vJFIR+AMVCggCmwEC HgEWIQTlU8Edz6d38yBeUJD17lnCeVzbogAAEKsA/0nwCZRGYcMufkCyxruL7sWr ZZ4nw1Fo21ZhP5mXeBy+AQCWufv0+l/PnIu7HWrygrncHSfeh8A7k1SEs3yueM7z AM0TPGVsbWFyQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVR62wMLCQcJEPXuWcJ5 XNuiRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwKjRrFV d8t9f0oSUJ17vXuPbU/7GTdhekCJ3t+dm7+DAxUKCAKZAQKbAQIeARYhBOVTwR3P p3fzIF5QkPXuWcJ5XNuiAACBvAEAsjLULj5hY6CRCmluoG101gdYWB+JjMNK2kKf Xc8Y+hgBALWtOt4wBwj5s3l0nt/s/Fig3r3iSsfgDFDWc9AawoILwsAHBBAWCgB5 BYJhVHsYBYMJZ5o7A4UFZAkQnCRH5h/9uxVHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnU5ooBa1b1s4tIJrIDl9yP6bcPRETQW7QTgMRGrol hPMWIQSuQFeJYkETVvlgnKqcJEfmH/27FQAAWd8BAM5RHDsTxKycydS5hAMB12HW TclCK2qB+FijH5XOdXYPAP9Bc0qfpyK21hyGPZddCWrUb+eFhHOERsOhQ71dzFb3 C8LABwQQFgoAeQWCYVR7FwWDCWeaOwOFBHgJEJBZ44RqAlYRRxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzUnc0DHcaKbw6/vbHt4lj+0IAzd dzdVBtaRNWDvka6LFiEE1FFeZhkITtgULfhYkFnjhGoCVhEAAHhmAQCNebncriN+ X7Vd6FVd/F0B01u/jj4s0bU2CbdVC4LP7QD+OPmiofjrtl2LzFDbtVS4RchGokjQ P15ObVBbLwWoXQPOMwRhVHrbFgkrBgEEAdpHDwEBB0Czdj02w3jyoQsaxRww9auV FfbuCCvn5lN4mFo7Djt2PsLAvwQYFgoBMQWCYVR62wkQ9e5Zwnlc26JHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jns8+M6iQZ8TdPmKSJrLbR HAw/0Wq0DEcnLsdxIPsoRR4CmwK+oAQZFgoAbwWCYVR62wkQdqq8aXZmmIFHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnuIMFd+9z8ssoKYHw O+XqloK/8kWcLhZf9xKjecf0JmkWIQSyN3kbFL6f5DWEsYx2qrxpdmaYgQAATKIB AP8oAXr4KzexpYEEmWOsCuJO3/BgQHLTAQ37hueXVyytAPwIqMTbjmMZez9TFrUI CzA7UvFMaYrVGepcgXG0wpkrCBYhBOVTwR3Pp3fzIF5QkPXuWcJ5XNuiAAADpwEA rDAjKL7mcIlf8CVd/La4AKm2TGcDi7J6KbY46b1c1kgA/3YIIVyAQOVO66IE/dUI ErhIhcQppFfdjgfuGF2WOQUAxjMEYVR62xYJKwYBBAHaRw8BAQdA8gk5SRwNlEoy htLyJmW+X9kLeIVVmRDxyWghssoJod/CwAsEHxYKAH0FgmFUetsDCwkHCRCcJEfm H/27FUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme/g2Ls K8bCkleII9yzKEdfWwSix05U71HfTMNXGdOi8QMVCggCmwECHgEWIQSuQFeJYkET VvlgnKqcJEfmH/27FQAAOgYBAMtSm2kf4szwkLG9bRtoM3PRZFgjIuVaukwEzswO Zd97AP45RyB8KZzJ8L/muwW/UDTsw3XBJ4f8yTH9SPzRlNViA80TPGplbm55QGV4 YW1wbGUub3JnPsLADgQTFgoAgAWCYVR62wMLCQcJEJwkR+Yf/bsVRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyJ27pS7dTacrUszMfK1clFB mOKaLWJ+Xx7VdBfJ8B3UAxUKCAKZAQKbAQIeARYhBK5AV4liQRNW+WCcqpwkR+Yf /bsVAADsMQEAmOnZfGn+cyOtknam6DIukv5uKIGBGHm+LYgP+HiOgmgA/1esFo0f nYPX13kInACMw1ZMGQ0MC4L/Ei54/toOdAUDzjMEYVR62xYJKwYBBAHaRw8BAQdA 0/2df8Fyrpjo04us/wpmXxCL0sJan0cpzm6WsybfMQ3CwL8EGBYKATEFgmFUetsJ EJwkR+Yf/bsVRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z98yRZxOwbXrmZitlQpUl38CnkaCogCQhFdH2jCuVutqApsCvqAEGRYKAG8FgmFU etsJEF0HFzv7MJJ7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZxknA7+RUivZi386PibTnq54uXWjsN2lONCtD8gJ6mXHFiEEjvEOzrOry5ta hnwiXQcXO/swknsAAF1XAQCbLUCE5oVmzIw5HyyGBaKfOlixJ/VvdgPdrhoKNKo+ hQD9GBI8MJxZJsQHulYKnKqcodkdwNnF55fezUM5x0Ff5wUWIQSuQFeJYkETVvlg nKqcJEfmH/27FQAA4lYA/1xeS9yCV7J5N2RYz/F1r66HNuIlToGUZbx4g6dwGrBo AQD9mpt1qQWftVpWseILNuO8IXNEN2mROZEJkjiLuZ2tDsYzBGFUetsWCSsGAQQB 2kcPAQEHQBksO05pOU2ezNKtLO/kqY61Fp3Hl+gZzttR/ZFxbdfzwsALBB8WCgB9 BYJhVHrbAwsJBwkQ30+bpYMdkdpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn/ih8nT+V3T9t7W4sTq4dnLXHFpAkFlfQT6uPX/a86REDFQoI ApsBAh4BFiEEMmfUYkfSYQGz5QFM30+bpYMdkdoAAMPdAPwM7yZbz36CtcXlUPDo 8eC/68IYG5WCXbZVjyCTlDpjdAEA4sNubNLKxzCUCb0iqd0H0iQUaVDbs0nFY1Tc PUAeiwnNEzxmcmFua0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFUetsDCwkHCRDf T5ulgx2R2kcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcy MQZPzMnr8dVTUsG8oAui+uJ8g5MsylWSn7C+Hd3xFwMVCggCmQECmwECHgEWIQQy Z9RiR9JhAbPlAUzfT5ulgx2R2gAAbO8BAPcdQzpEsGNhv+3rdEQS8uXw/N0JSBNI YTv1sH+ux3XUAP9fWSJEjCzkBJcuARRyLCYJXeTGUkWYcTQBXhU9uKkSD8LABwQQ FgoAeQWCYVR7GAWDCWeaOwOFA3gJEPXuWcJ5XNuiRxQAAAAAAB4AIHNhbHRAbm90 YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7vc9Ju7Kje6ywP+HsbtIUWIzHhcsWrQaO3L vM44XX6rFiEE5VPBHc+nd/MgXlCQ9e5Zwnlc26IAAN51AQCjPb8itbTB5+0z0pxX K+dCbJ2c5aQ3zuIG/6rluWxlJwEAhIeDxDBS4zbPE9rFi0uIU/Lmjq1X0n2ki5e/ ADHLbAnOMwRhVHrbFgkrBgEEAdpHDwEBB0Cm4ZcNdtV1sxpi8wcZWZflJMsrNzjy Nj+bfOy7eVSgwsLAvwQYFgoBMQWCYVR62wkQ30+bpYMdkdpHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnMCClI4uhmLqQ84ZmlkMbdfS8f6bX e3kjll4l5IR9gbgCmwK+oAQZFgoAbwWCYVR62wkQmDa+mrGtQnVHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn5aYxYMWIsTcJPdlynAHKZyAD TPxXY2Yce4OcJkxO19IWIQQ/S/GfwtlWNgs5/Y2YNr6asa1CdQAAxTUA/3z8jgsi JpCMERfh7jpXtN7XJf0xjpf4RkxZV3uBewq5AP48jzt9QFQGCB6KVvV47KlxNPGG vIR2lnJf6fm1WCJoDhYhBDJn1GJH0mEBs+UBTN9Pm6WDHZHaAAAxqwD/bZbelefT 4L1Jd+uKyM5uroQNzZ24S6xdPv+xAPGYOIMA/jJE3oLXBI2qAG3qt83px9gmjqTz V6wFaUxubRQXAs0DxjMEYVR62xYJKwYBBAHaRw8BAQdAv1w5GJmu7+w8Ec1iRP7j ms9MRRa1HK7yN6GDX/OOrB7CwAsEHxYKAH0FgmFUetsDCwkHCRDI2elMRzFSm0cU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfsGe8l86CB4lt0 SQLeODSN3f5QTBEX85SMw8PCN+auHgMVCggCmwECHgEWIQR/Yu+XCRrh/LThxn7I 2elMRzFSmwAAIh4BAJpjm/nFfDaFdXcF8Ijq6NB3jlCE2sxUNCGe94WS0EKVAP9P 9vtv+cF4J4aHF4KrrDQ/WHNeDtB/rS01Viop4/15AM0TPGhlbnJ5QGV4YW1wbGUu b3JnPsLADgQTFgoAgAWCYVR62wMLCQcJEMjZ6UxHMVKbRxQAAAAAAB4AIHNhbHRA bm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ74BeVmPofPq7a8j/IDecJHMtK/W/dO5 GQamdBaVzfHHAxUKCAKZAQKbAQIeARYhBH9i75cJGuH8tOHGfsjZ6UxHMVKbAABa PgD/Y5xEtoIa+sFx0XKc2gA9m9YU/q1ZwVYOjOk1FjTNr68BANqqx2kDBcTVj4nu qTpve9Y4Bi1CGV2JQ3sjGnyBvgoEwsAHBBAWCgB5BYJhVHsYBYMJZ5o7A4UBeAkQ Be8X6Kk+tlJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn wMKd+RTRWXGmO4OtYNe3bvP6cwu7q7fuCnPo/YklMcUWIQTM1dsnvXxPjiAQCDYF 7xfoqT62UgAAP94A/RujDantedVOm8do2x7ZxfS0P/inEqe9Z1+XBlAyOJLvAP9z kFPztIog1+wQUTK800yHVDiyhGEHZA5Rn2U5Ynq0As4zBGFUetsWCSsGAQQB2kcP AQEHQOr8kNpTR5ZzvTvXw+49yOzwYgTKyf67RVmW950NhEnOwsC/BBgWCgExBYJh VHrbCRDI2elMRzFSm0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmdvc6tcPIHxgWrrVsAM4rCgC4uTyRVhNmvZW2L7RaIvTAKbAr6gBBkWCgBv BYJhVHrbCRAxcOOdhCc3jkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmel9G342aFwWUNMXGLx//Oh5w8JOviQ+Tm2vr+bjFf0CxYhBLvCrKCW 8lvQWYXuOzFw452EJzeOAABkUQEA/q+X9DqE0pAZEcF9QpEo8bpY9GFWLwi8bSJN 40LrZesA/A/n0rqMDvVezoqb34KkmMJ1AODmESo8eCuoHH3V5IoJFiEEf2Lvlwka 4fy04cZ+yNnpTEcxUpsAAEtnAQDu0XRf0QIqAp2ZD6Yf5x2pNLs1oQtAanN0Hjf7 QGCSvQD+Kd/lMc5y3MZEoaEdz/mUieRdCJ5w4IK3WUl/JftrpADGMwRhVHrbFgkr BgEEAdpHDwEBB0D/RG/pIPqGjRRJWsvu/JiIFFQBC7V6xycRLxJtSLGPnMLACwQf FgoAfQWCYVR62wMLCQcJEAOX4IbnBawaRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZ7UDyQa2uRDij1ztCioMg3iyJhUydEWM/2T1dm6s4u3J AxUKCAKbAQIeARYhBC6Qrulm3yjLkWQ5sgOX4IbnBawaAADQWgEA00/D+4L8daSi HbK3IWj3E6UDK2gHMAXWSEXc25FlAT8BANKun2qlOnB9upM9CXebzPHpcdtXDRoZ FxevSwXElBoFzRE8Ym9iQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVR62wMLCQcJ EAOX4IbnBawaRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z5685cqSzVpYKLKd6QlDQ2yR7c1reMXsHpC8cRBbDMxFAxUKCAKZAQKbAQIeARYh BC6Qrulm3yjLkWQ5sgOX4IbnBawaAAAI+QD7B7PDR7fMneqZKqqFOimw7O/zefHu /98nKMU7Uw+ZUTkBAJ1uDuvuuAsadwUKN0/XVIcib3gMpPuJps4UCny2wewGwsAH BBAWCgB5BYJhVHsYBYMJZ5o7A4UCeAkQ30+bpYMdkdpHFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnPqYmHhqQFNjqp/TyEB6LGEP6rUH3d7Kg aha4lPYiWwAWIQQyZ9RiR9JhAbPlAUzfT5ulgx2R2gAAPOgBAMt+vufotYanal8J 3hvHL+eT8RIWRGGctMo5SMvSTa1jAQCHjoZ5p3x3ZyLqIh/82ru/Vkwd2nTo5xne Y48WaoWOD8LABwQQFgoAeQWCYVR7FwWDCWeaOwOFZDwJEBC7vQCRK+oCRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ8Zb5S15jsgzszifXulA JqE5ogy5RfR+fTzVwtsNTfvMFiEEQemwacluttR1JSlLELu9AJEr6gIAAIPOAP9e VAViYWt3xinGYRL6VKON+McF3LgoOnsRqH1VcK2xwgEA3iNc2kkm6Rb1EUyxDOOl 9wGdZnm+RK0K4m408qz1BwjOMwRhVHrbFgkrBgEEAdpHDwEBB0AfrL4PfeAUW9fT RbcZzLV2CHBaG1/kDVLT57DsKbZiD8LAvwQYFgoBMQWCYVR62wkQA5fghucFrBpH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnApQ1Ic/qHKHd 5GMDpk9cFQFbckc8aM8m2J1e2ANlikMCmwK+oAQZFgoAbwWCYVR62wkQY7tCkEe8 Ie5HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnxl5Ik+9O 1hanrIYMOzZ90f6M3zl+WBkjg8f2HKV0HOAWIQSyPkVLQstd2CyeEnRju0KQR7wh 7gAA1xgBAOW6WcYczLQk9CcMf/NX6Kqd5QkoZO8OYf7je3dgct+KAP9EGhbx0bNu 1qK85VQcvJVsw9gbsPzVn9sStIXzOQUSCBYhBC6Qrulm3yjLkWQ5sgOX4IbnBawa AABQhAEA83vQhBcdbVsrfiylnZ9KjQ0USMXUUcUer2CLRG1VtVwA/3nzl1Rc0CT0 r0MVHJufqzxraEaKb0FkixRPqXVSYbYP =tfhi -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/roundabout.sh000075500000000000000000000010101046102023000167440ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=roundabout ${@:+"$@"} key alice key bob key carol key dave key elmar key frank key george key henry key isaac key jenny certify alice -a 60 -d 100 bob certify alice -a 120 -d 6 carol certify bob -a 120 -d 2 george certify carol -a 120 -d 5 dave certify dave -a 120 -d 4 elmar certify elmar -a 120 -d 3 frank certify frank -a 120 -d 2 bob certify george -a 120 -d 1 henry certify henry -a 120 -d 0 isaac certify jenny -a 100 -d 5 elmar certify jenny -a 100 -d 1 george finish sequoia-wot-0.11.0/tests/data/self-signed/README.md000064400000000000000000000004741046102023000177170ustar 00000000000000B tsigns and we want to authenticate c1. This should work when B is a root as C is considered a trusted introducer. But it should not work when A is considered a root a C can't introduce c2. ``` A 1/100 | B 1/90 / c1 - C - c2 | 120 | D ``` sequoia-wot-0.11.0/tests/data/self-signed/alice-priv.pgp000064400000000000000000000015651046102023000212050ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8384 54E0 D61D 0463 00B4 08A9 08A4 FDB4 F368 ECB9 Comment: xVgEYf/xiBYJKwYBBAHaRw8BAQdAw/VNUVd71dfAgLpsjWhrVdqkvbiiE66cIREi FuKC2TwAAP9k6v74OyJodHXjxl0eUdEavBDlImKcuDgsKzqAS5RzmxAQwsALBB8W CgB9BYJh//GIAwsJBwkQCKT9tPNo7LlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnsyht56/kF5H4Kk4l2Rgf5flE9terDLDDpUtt4+r6EykD FQoIApsBAh4BFiEEg4RU4NYdBGMAtAipCKT9tPNo7LkAAIizAP9GSnCGTuRU16Nc s5rWioR9s3ven1XorsU8I/tHvYdpTAEAqEoMTqEjquInrCFQRT1Q706wsv2mLKib 6kbijb2e8A/NEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmH/8YgDCwkH CRAIpP2082jsuUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmd3js16H7YMe2Hs2TSuQk7uIyOqGe/ql5BNhUV5PK9ZpgMVCggCmQECmwECHgEW IQSDhFTg1h0EYwC0CKkIpP2082jsuQAAmLYBAO1CSrO6PjL3odY8I0JM+uOLbFef EtdDTj2Fz392dKMTAQCO0YI7jjEJ6dCPjxJV5aI1JSX5aZX7RQt0IPyaK/BnAg== =srOo -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/self-signed/alice.pgp000064400000000000000000000014771046102023000202310ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 8384 54E0 D61D 0463 00B4 08A9 08A4 FDB4 F368 ECB9 Comment: xjMEYf/xiBYJKwYBBAHaRw8BAQdAw/VNUVd71dfAgLpsjWhrVdqkvbiiE66cIREi FuKC2TzCwAsEHxYKAH0FgmH/8YgDCwkHCRAIpP2082jsuUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmezKG3nr+QXkfgqTiXZGB/l+UT216sM sMOlS23j6voTKQMVCggCmwECHgEWIQSDhFTg1h0EYwC0CKkIpP2082jsuQAAiLMA /0ZKcIZO5FTXo1yzmtaKhH2ze96fVeiuxTwj+0e9h2lMAQCoSgxOoSOq4iesIVBF PVDvTrCy/aYsqJvqRuKNvZ7wD80TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYf/xiAMLCQcJEAik/bTzaOy5RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ3eOzXoftgx7YezZNK5CTu4jI6oZ7+qXkE2FRXk8r1mmAxUK CAKZAQKbAQIeARYhBIOEVODWHQRjALQIqQik/bTzaOy5AACYtgEA7UJKs7o+Mveh 1jwjQkz644tsV58S10NOPYXPf3Z0oxMBAI7RgjuOMQnp0I+PElXlojUlJflplftF C3Qg/Jor8GcC =Fl41 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/self-signed/bob-priv.pgp000064400000000000000000000015571046102023000206730ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 7A7B 5DE6 C8F4 64CA B78B EFB9 CE14 BEE5 1D4D EC01 Comment: xVgEYf/xiBYJKwYBBAHaRw8BAQdAKQBh64jyKaojWn2CkyWX9EoCjxvmV5uI4m4A ENqBSFEAAQDWrOfjfPE+7im2RDnVKqBMXEVtII8bI9wtPtmEVIvKew/wwsALBB8W CgB9BYJh//GIAwsJBwkQzhS+5R1N7AFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJyUWPNusgtJ6932aeu7DRPo2rQXAL1cezWy1IdQIu/8D FQoIApsBAh4BFiEEentd5sj0ZMq3i++5zhS+5R1N7AEAACH0AQD6Gp7Ml7VJeeWh cfcd7tSO24Vx8og7k/JBt8dd3Aqi+wD7BOwqhyQGWPWjywHzlqmcNhc71kzsE6E+ qn9CHYr11QbNETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJh//GIAwsJBwkQ zhS+5R1N7AFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn syqU1ylcbrnkq1P4ldpHTzrCd+0/ofIJLdXeqgtq4H0DFQoIApkBApsBAh4BFiEE entd5sj0ZMq3i++5zhS+5R1N7AEAAFdiAP9bI5QUAv/tu+lqji9d6ZhfpJlJEaco 3kBYxmcL7gi4iwEAgDlMX8Six46eOW7gyHGzH2ooC73mynryPZKuMoZ98Qg= =KZa3 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/self-signed/bob.pgp000064400000000000000000000017561046102023000177160ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYf/xiBYJKwYBBAHaRw8BAQdAKQBh64jyKaojWn2CkyWX9EoCjxvmV5uI4m4A ENqBSFHCwAsEHxYKAH0FgmH/8YgDCwkHCRDOFL7lHU3sAUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnJRY826yC0nr3fZp67sNE+jatBcAv Vx7NbLUh1Ai7/wMVCggCmwECHgEWIQR6e13myPRkyreL77nOFL7lHU3sAQAAIfQB APoansyXtUl55aFx9x3u1I7bhXHyiDuT8kG3x13cCqL7APsE7CqHJAZY9aPLAfOW qZw2FzvWTOwToT6qf0IdivXVBs0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmH/8YgDCwkHCRDOFL7lHU3sAUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmezKpTXKVxuueSrU/iV2kdPOsJ37T+h8gkt1d6qC2rgfQMVCggC mQECmwECHgEWIQR6e13myPRkyreL77nOFL7lHU3sAQAAV2IA/1sjlBQC/+276WqO L13pmF+kmUkRpyjeQFjGZwvuCLiLAQCAOUxfxKLHjp45buDIcbMfaigLvebKevI9 kq4yhn3xCMLAAQQQFgoAcwWCYf/xxAOFAWQJEAik/bTzaOy5RxQAAAAAAB4AIHNh bHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZxKAhx+mhMEo0gSQRDCu5+5MQVm6 FAfEu/eNZ/HclhefFiEEg4RU4NYdBGMAtAipCKT9tPNo7LkAAI0OAQDkjDLCYsh6 2+C134BEfkjDZ4njfBU4CzvoZuh8mNeBfwEAsvAOP3TH7Scz+AoQq7Gu5qoeptKB IL9GCGXG+4hzggQ= =HJoY -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/self-signed/carol-priv.pgp000064400000000000000000000023011046102023000212150ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 8302 3006 1426 EE99 A045 5E6A DA86 9CF8 79A5 630D Comment: Comment: xVgEYf/xiBYJKwYBBAHaRw8BAQdAkFbSMIjcgmJMmSSBg0YfmpkxjLwW8TRFTKII 11MsNVcAAP4m1Zc1IajyjWZDIUNxtru1mn5+3FDg4CijzrA+iz7wyRI8wsALBB8W CgB9BYJh//GIAwsJBwkQ2oac+HmlYw1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnJ761rL7pDhj2R7DpUeQSzihcOix0AAQPZ2Tefs5pItUD FQoIApsBAh4BFiEEgwIwBhQm7pmgRV5q2oac+HmlYw0AAFZQAQCX2xYwWG4VxKvk VZHeKXqTE3HzLFA/Pvcg7mgCYCC6NwEA//Lj4nFSnYWT7hzEGpAY75sMhftS0etW Rjkn6aRbFwvNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmH/8YgDCwkH CRDahpz4eaVjDUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cme5N37gu4UrrYM2lcUrp6MsIf1PyLhqQPtQRAbOv2sVPQMVCggCmQECmwECHgEW IQSDAjAGFCbumaBFXmrahpz4eaVjDQAA7BEA/1Da2n2goGjGdCRUyCH9pmDTJ+qa zvYnwnElMuRq4Tm1AP9Zuo4oyIUwD2SkUxdKpYEHDCJ46PTC4NK0yvKyjUMTDc0R PGNhcm9sQG90aGVyLm9yZz7CwAsEExYKAH0FgmH/8YgDCwkHCRDahpz4eaVjDUcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdcMud8P7bqc/at RzCIInd+1LlbfKqAcjCd4LS/yKyuWwMVCggCmwECHgEWIQSDAjAGFCbumaBFXmra hpz4eaVjDQAA86AA/RwAE3idsw6QmEVTyMNgzDEi26ZTb7S3BzFZnbiCOuiaAQDe 1ZnDQVK7kAedDNurSCgrHi8UAoXj7MRngBFSYjx/Cw== =ymB8 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/self-signed/carol.pgp000064400000000000000000000024421046102023000202450ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYf/xiBYJKwYBBAHaRw8BAQdAkFbSMIjcgmJMmSSBg0YfmpkxjLwW8TRFTKII 11MsNVfCwAsEHxYKAH0FgmH/8YgDCwkHCRDahpz4eaVjDUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnvrWsvukOGPZHsOlR5BLOKFw6LHQA BA9nZN5+zmki1QMVCggCmwECHgEWIQSDAjAGFCbumaBFXmrahpz4eaVjDQAAVlAB AJfbFjBYbhXEq+RVkd4pepMTcfMsUD8+9yDuaAJgILo3AQD/8uPicVKdhZPuHMQa kBjvmwyF+1LR61ZGOSfppFsXC80TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYf/xiAMLCQcJENqGnPh5pWMNRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7k3fuC7hSutgzaVxSunoywh/U/IuGpA+1BEBs6/axU9AxUK CAKZAQKbAQIeARYhBIMCMAYUJu6ZoEVeatqGnPh5pWMNAADsEQD/UNrafaCgaMZ0 JFTIIf2mYNMn6prO9ifCcSUy5GrhObUA/1m6jijIhTAPZKRTF0qlgQcMInjo9MLg 0rTK8rKNQxMNwsABBBAWCgBzBYJh//HEA4UBWgkQzhS+5R1N7AFHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnETGBPAigPXVb+fCd/MVz2t7J +ePTolQOHzbK/dszt6YWIQR6e13myPRkyreL77nOFL7lHU3sAQAAxqAA/i4Zpuij fEcdrptWWtTIcSd//3c5g0tRePW+xSRP4eNiAP0endA4KViXp6ztWTKrWurJc6Ix 74Oy4Lz0cGUTRYIjBM0RPGNhcm9sQG90aGVyLm9yZz7CwAsEExYKAH0FgmH/8YgD CwkHCRDahpz4eaVjDUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmdcMud8P7bqc/atRzCIInd+1LlbfKqAcjCd4LS/yKyuWwMVCggCmwECHgEW IQSDAjAGFCbumaBFXmrahpz4eaVjDQAA86AA/RwAE3idsw6QmEVTyMNgzDEi26ZT b7S3BzFZnbiCOuiaAQDe1ZnDQVK7kAedDNurSCgrHi8UAoXj7MRngBFSYjx/Cw== =clYB -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/self-signed/dave-priv.pgp000064400000000000000000000015601046102023000210420ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 51A5 E15F 87AC 6ECA FBEA 930F A5F3 0AF6 EB6E F14A Comment: xVgEYf/xiBYJKwYBBAHaRw8BAQdA+x+GI010aorGV6fLQeG57iqSvdu1JIVt/uaQ fnt13BwAAQC/QyNyvq84XQTYBrr7/1k7ZtrND6OyWBs4IZGaMvLjoA/TwsALBB8W CgB9BYJh//GIAwsJBwkQpfMK9utu8UpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnpJIUzj1IQ3r/+1oBX1QetlM9BQ1Cyfkw9rIHVJqlB2YD FQoIApsBAh4BFiEEUaXhX4esbsr76pMPpfMK9utu8UoAACFdAP0Yy8sHtyAp8VHz CSBXXJWr8zgBObdPZKZCw7H8mb1gsAD/R/vkf9vRckiH4YkuR3bTdEDh0k1SGTbi xwfgMe2B2A/NEjxkYXZlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYf/xiAMLCQcJ EKXzCvbrbvFKRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Z+79C54bUCKGG8o3OUBZsWsJdQbKc+WNYJIHZ5kIprnPAxUKCAKZAQKbAQIeARYh BFGl4V+HrG7K++qTD6XzCvbrbvFKAAB2tQD+NM7Z3iEhWVZcXi6b5QNs/MyIb/V6 Ueg3IOitj4Uh2aQA/0tA53KipE0qUrpa5IMCqIMZNOIiCU+y2Xl3cQMbWcQF =PLvf -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/self-signed/dave.pgp000064400000000000000000000017521046102023000200670ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYf/xiBYJKwYBBAHaRw8BAQdA+x+GI010aorGV6fLQeG57iqSvdu1JIVt/uaQ fnt13BzCwAsEHxYKAH0FgmH/8YgDCwkHCRCl8wr2627xSkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmekkhTOPUhDev/7WgFfVB62Uz0FDULJ +TD2sgdUmqUHZgMVCggCmwECHgEWIQRRpeFfh6xuyvvqkw+l8wr2627xSgAAIV0A /RjLywe3ICnxUfMJIFdclavzOAE5t09kpkLDsfyZvWCwAP9H++R/29FySIfhiS5H dtN0QOHSTVIZNuLHB+Ax7YHYD80SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh//GIAwsJBwkQpfMK9utu8UpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn7v0LnhtQIoYbyjc5QFmxawl1Bspz5Y1gkgdnmQimuc8DFQoI ApkBApsBAh4BFiEEUaXhX4esbsr76pMPpfMK9utu8UoAAHa1AP40ztneISFZVlxe LpvlA2z8zIhv9XpR6Dcg6K2PhSHZpAD/S0DncqKkTSpSulrkgwKogxk04iIJT7LZ eXdxAxtZxAXCvQQQFgoAbwWCYf/xxAkQ2oac+HmlYw1HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnn1OnwRsW+rk9rs4+1MEdcxOs4ysA/Zgo lnneV58oDv4WIQSDAjAGFCbumaBFXmrahpz4eaVjDQAAiXgBAIUKg23w+gCQP+Q3 62KL2MJ6btqwdLtyvC5FpEksLABmAP0fKTdy0YvoMt0oa6VkusIVQLnDcTmLKlYq 3+hJANuUBg== =IQ8k -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/self-signed.pgp000064400000000000000000000073551046102023000171550ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYf/xiBYJKwYBBAHaRw8BAQdA+x+GI010aorGV6fLQeG57iqSvdu1JIVt/uaQ fnt13BzCwAsEHxYKAH0FgmH/8YgDCwkHCRCl8wr2627xSkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmekkhTOPUhDev/7WgFfVB62Uz0FDULJ +TD2sgdUmqUHZgMVCggCmwECHgEWIQRRpeFfh6xuyvvqkw+l8wr2627xSgAAIV0A /RjLywe3ICnxUfMJIFdclavzOAE5t09kpkLDsfyZvWCwAP9H++R/29FySIfhiS5H dtN0QOHSTVIZNuLHB+Ax7YHYD80SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJh//GIAwsJBwkQpfMK9utu8UpHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn7v0LnhtQIoYbyjc5QFmxawl1Bspz5Y1gkgdnmQimuc8DFQoI ApkBApsBAh4BFiEEUaXhX4esbsr76pMPpfMK9utu8UoAAHa1AP40ztneISFZVlxe LpvlA2z8zIhv9XpR6Dcg6K2PhSHZpAD/S0DncqKkTSpSulrkgwKogxk04iIJT7LZ eXdxAxtZxAXCvQQQFgoAbwWCYf/xxAkQ2oac+HmlYw1HFAAAAAAAHgAgc2FsdEBu b3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnn1OnwRsW+rk9rs4+1MEdcxOs4ysA/Zgo lnneV58oDv4WIQSDAjAGFCbumaBFXmrahpz4eaVjDQAAiXgBAIUKg23w+gCQP+Q3 62KL2MJ6btqwdLtyvC5FpEksLABmAP0fKTdy0YvoMt0oa6VkusIVQLnDcTmLKlYq 3+hJANuUBsYzBGH/8YgWCSsGAQQB2kcPAQEHQCkAYeuI8imqI1p9gpMll/RKAo8b 5lebiOJuABDagUhRwsALBB8WCgB9BYJh//GIAwsJBwkQzhS+5R1N7AFHFAAAAAAA HgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnJyUWPNusgtJ6932aeu7D RPo2rQXAL1cezWy1IdQIu/8DFQoIApsBAh4BFiEEentd5sj0ZMq3i++5zhS+5R1N 7AEAACH0AQD6Gp7Ml7VJeeWhcfcd7tSO24Vx8og7k/JBt8dd3Aqi+wD7BOwqhyQG WPWjywHzlqmcNhc71kzsE6E+qn9CHYr11QbNETxib2JAZXhhbXBsZS5vcmc+wsAO BBMWCgCABYJh//GIAwsJBwkQzhS+5R1N7AFHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnsyqU1ylcbrnkq1P4ldpHTzrCd+0/ofIJLdXeqgtq 4H0DFQoIApkBApsBAh4BFiEEentd5sj0ZMq3i++5zhS+5R1N7AEAAFdiAP9bI5QU Av/tu+lqji9d6ZhfpJlJEaco3kBYxmcL7gi4iwEAgDlMX8Six46eOW7gyHGzH2oo C73mynryPZKuMoZ98QjCwAEEEBYKAHMFgmH/8cQDhQFkCRAIpP2082jsuUcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcSgIcfpoTBKNIEkEQw rufuTEFZuhQHxLv3jWfx3JYXnxYhBIOEVODWHQRjALQIqQik/bTzaOy5AACNDgEA 5IwywmLIetvgtd+ARH5Iw2eJ43wVOAs76GbofJjXgX8BALLwDj90x+0nM/gKEKux ruaqHqbSgSC/RghlxvuIc4IExjMEYf/xiBYJKwYBBAHaRw8BAQdAkFbSMIjcgmJM mSSBg0YfmpkxjLwW8TRFTKII11MsNVfCwAsEHxYKAH0FgmH/8YgDCwkHCRDahpz4 eaVjDUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcnvrWs vukOGPZHsOlR5BLOKFw6LHQABA9nZN5+zmki1QMVCggCmwECHgEWIQSDAjAGFCbu maBFXmrahpz4eaVjDQAAVlABAJfbFjBYbhXEq+RVkd4pepMTcfMsUD8+9yDuaAJg ILo3AQD/8uPicVKdhZPuHMQakBjvmwyF+1LR61ZGOSfppFsXC80TPGNhcm9sQGV4 YW1wbGUub3JnPsLADgQTFgoAgAWCYf/xiAMLCQcJENqGnPh5pWMNRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ7k3fuC7hSutgzaVxSunoywh /U/IuGpA+1BEBs6/axU9AxUKCAKZAQKbAQIeARYhBIMCMAYUJu6ZoEVeatqGnPh5 pWMNAADsEQD/UNrafaCgaMZ0JFTIIf2mYNMn6prO9ifCcSUy5GrhObUA/1m6jijI hTAPZKRTF0qlgQcMInjo9MLg0rTK8rKNQxMNwsABBBAWCgBzBYJh//HEA4UBWgkQ zhS+5R1N7AFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn ETGBPAigPXVb+fCd/MVz2t7J+ePTolQOHzbK/dszt6YWIQR6e13myPRkyreL77nO FL7lHU3sAQAAxqAA/i4ZpuijfEcdrptWWtTIcSd//3c5g0tRePW+xSRP4eNiAP0e ndA4KViXp6ztWTKrWurJc6Ix74Oy4Lz0cGUTRYIjBM0RPGNhcm9sQG90aGVyLm9y Zz7CwAsEExYKAH0FgmH/8YgDCwkHCRDahpz4eaVjDUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmdcMud8P7bqc/atRzCIInd+1LlbfKqAcjCd 4LS/yKyuWwMVCggCmwECHgEWIQSDAjAGFCbumaBFXmrahpz4eaVjDQAA86AA/RwA E3idsw6QmEVTyMNgzDEi26ZTb7S3BzFZnbiCOuiaAQDe1ZnDQVK7kAedDNurSCgr Hi8UAoXj7MRngBFSYjx/C8YzBGH/8YgWCSsGAQQB2kcPAQEHQMP1TVFXe9XXwIC6 bI1oa1XapL24ohOunCERIhbigtk8wsALBB8WCgB9BYJh//GIAwsJBwkQCKT9tPNo 7LlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnsyht56/k F5H4Kk4l2Rgf5flE9terDLDDpUtt4+r6EykDFQoIApsBAh4BFiEEg4RU4NYdBGMA tAipCKT9tPNo7LkAAIizAP9GSnCGTuRU16Ncs5rWioR9s3ven1XorsU8I/tHvYdp TAEAqEoMTqEjquInrCFQRT1Q706wsv2mLKib6kbijb2e8A/NEzxhbGljZUBleGFt cGxlLm9yZz7CwA4EExYKAIAFgmH/8YgDCwkHCRAIpP2082jsuUcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmd3js16H7YMe2Hs2TSuQk7uIyOq Ge/ql5BNhUV5PK9ZpgMVCggCmQECmwECHgEWIQSDhFTg1h0EYwC0CKkIpP2082js uQAAmLYBAO1CSrO6PjL3odY8I0JM+uOLbFefEtdDTj2Fz392dKMTAQCO0YI7jjEJ 6dCPjxJV5aI1JSX5aZX7RQt0IPyaK/BnAg== =H3/F -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/self-signed.sh000075500000000000000000000003251046102023000167720ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=self-signed ${@:+"$@"} key alice key bob key carol carol@other.org key dave certify -a 100 -d 1 alice bob certify -a 90 -d 1 bob carol certify -a 120 carol dave finish sequoia-wot-0.11.0/tests/data/sha1/README.txt000064400000000000000000000000771046102023000165710ustar 00000000000000Certifications made prior to 1673363202 are made with SHA-1. sequoia-wot-0.11.0/tests/data/sha1/alice-priv.pgp000064400000000000000000000004011046102023000176250ustar 00000000000000Xc} +G@a/CTͦ^<^0 J?z8[7%)i` Znr2jqp8!o}`S(g8Lc}    S(g8L E,;'}9M3*Q/2$bݿȴP;Ηv3Nw; ~ sequoia-wot-0.11.0/tests/data/sha1/alice.pgp000064400000000000000000000003341046102023000166540ustar 000000000000003c} +G@a/CTͦ^<^0 J?д8!o}`S(g8Lc}    S(g8L E,;'}9M3*Q/2$bݿȴP;Ηv3Nw; ~ sequoia-wot-0.11.0/tests/data/sha1/bob-priv.pgp000064400000000000000000000003771046102023000173260ustar 00000000000000Xc} +G@rgj*ȜxBI/"46BR_4-P&7&.\ wD&;_a{8!#īb,, Tc}    , T۟m3XH |&}^[၃ Dƣb yG\^zDnÊ$sequoia-wot-0.11.0/tests/data/sha1/bob.pgp000064400000000000000000000013051046102023000163400ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEY7191xYJKwYBBAHaRw8BAQdAt3Jnair5yJx4QkkXlq/BL5OaIv3CNOChNkJS k8pfhzTNETxib2JAZXhhbXBsZS5vcmc+wpAEExYIADgWIQQjG8SrnYyrhtFiLOAs DOVUmY7s2wUCY7191wIbAQULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRAsDOVU mY7s25+FAP0ezeFt0jP8WKlIlxYHCXyRJgijCH1eW+GBgwwFrJ+h6AD9EqdExqPx GWKVCXmB/JSEz0cEhlyOXqx6RG6TFsOKJAjCeQQQFggAIRYhBLX6CJunb+PhfcEW YJYOUyhnOPlMBQJjvYAcAwUBPAAKCRCWDlMoZzj5TDh7AQCmcYXLprJMytroUFt6 hGgd0iUolF6sK+pKR8jGxJbZHgEAqcc8WqVfddwYgzSSuzDiWmceXEhKOMyAVyyh PhhcAwLCeQQQFgIAIRYhBLX6CJunb+PhfcEWYJYOUyhnOPlMBQJjvX6hAwUBeAAK CRCWDlMoZzj5TPUAAQCH9Ok7E3gBmtiZ+X94D4xxgICW37rEvBUhm5nB3R2fbQEA /ZOPalMWA6FSlYGDmaPxmiPyRTbFOUnzQWd7Ey0aVgQ= =Xn6n -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/sha1/carol-priv.pgp000064400000000000000000000004011046102023000176500ustar 00000000000000Xc} +G@3دzh h \6x`+gN}Y|b 㭺5U}aN 4cnj8!տ:tRc}    :tRl( z_i?p7S[!ˮ=[Q'ߛ u/1.S sequoia-wot-0.11.0/tests/data/sha1/carol.pgp000064400000000000000000000013011046102023000166720ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEY7194BYJKwYBBAHaRw8BAQdAM/bYr/h69mgL+2j4CVy3tbU27njqFGD8vCtn iYLdTn3NEzxjYXJvbEBleGFtcGxlLm9yZz7CkAQTFggAOBYhBPq6hIWy1NW/FYKq ljqBFed0+phSBQJjvX3gAhsBBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEDqB Fed0+phSFwIBAPPjbKWpKK2EhA2BE3pfab2F0D/RBnA3U1u4EeHn95ghAQDE5YbO y67HPVtRJ9+b4wx17RQv+NoxlsouU9MeHvkNDsJ5BBAWCAAhFiEEIxvEq52Mq4bR YizgLAzlVJmO7NsFAmO9gEEDBQE8AAoJECwM5VSZjuzbPp0BAN0Sz7zJPowGPe7T my07b5YQi4nNwSIeaAW5NsONX52aAP9jIr9eJk35Zt+frsdjLKkZAHMwtCXL8soz 4cnIb7bGBsJ1BBAWAgAdFiEEIxvEq52Mq4bRYizgLAzlVJmO7NsFAmO9fs4ACgkQ LAzlVJmO7Nv06gEA5g0gIH7BsKN5vFhBu1jUBVQyOEwkTaELqZpEG33aR/QBAPM2 PSocPKKISF7ilaELKsUS2V+WLWmwE2U5yD8GjoML =/Dg6 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/sha1.pgp000064400000000000000000000033661046102023000156070ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xVgEY7191xYJKwYBBAHaRw8BAQdAt3Jnair5yJx4QkkXlq/BL5OaIv3CNOChNkJS k8pfhzQAAP4thMBQGCbMFzftJi5cCq93+QHkRPfvJjsCqqb1X2GngA97zRE8Ym9i QGV4YW1wbGUub3JnPsKQBBMWCAA4FiEEIxvEq52Mq4bRYizgLAzlVJmO7NsFAmO9 fdcCGwEFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQLAzlVJmO7NufhQD9Hs3h bdIz/FipSJcWBwl8kSYIowh9XlvhgYMMBayfoegA/RKnRMaj8RlilQl5gfyUhM9H BIZcjl6sekRukxbDiiQIwnkEEBYIACEWIQS1+gibp2/j4X3BFmCWDlMoZzj5TAUC Y72AHAMFATwACgkQlg5TKGc4+Uw4ewEApnGFy6ayTMra6FBbeoRoHdIlKJRerCvq SkfIxsSW2R4BAKnHPFqlX3XcGIM0krsw4lpnHlxISjjMgFcsoT4YXAMCwnkEEBYC ACEWIQS1+gibp2/j4X3BFmCWDlMoZzj5TAUCY71+oQMFAXgACgkQlg5TKGc4+Uz1 AAEAh/TpOxN4AZrYmfl/eA+McYCAlt+6xLwVIZuZwd0dn20BAP2Tj2pTFgOhUpWB g5mj8Zoj8kU2xTlJ80FnexMtGlYExVgEY719zhYJKwYBBAHaRw8BAQdA87Vhi+ek HS8TQ8xU5c2mgB1ezzzdXjDRIPOgSuCiP9AAAP0bejiDjIlbxBf+N7aKzSUpyGlg DVoFj24Dm6CRcjJqcQ5wzRM8YWxpY2VAZXhhbXBsZS5vcmc+wpAEExYIADgWIQS1 +gibp2/j4X3BFmCWDlMoZzj5TAUCY719zgIbAQULCQgHAgYVCgkICwIEFgIDAQIe AQIXgAAKCRCWDlMoZzj5TAwBAP9FLJeKOyd9+DnITTOSKusHUb8TL54yFSQUYhGx t92/1gEArci0UDsVzpcddpQzToyQyHcUraQ7FoWPCAnqfpG1qQzFWARjvX3gFgkr BgEEAdpHDwEBB0Az9tiv+Hr2aAv7aPgJXLe1tTbueOoUYPy8K2eJgt1OfQABAKxZ fGL/qwuY4626kefpvDWAVbZ9u2FO+QzuNGO6x4zWEqzNEzxjYXJvbEBleGFtcGxl Lm9yZz7CkAQTFggAOBYhBPq6hIWy1NW/FYKqljqBFed0+phSBQJjvX3gAhsBBQsJ CAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEDqBFed0+phSFwIBAPPjbKWpKK2EhA2B E3pfab2F0D/RBnA3U1u4EeHn95ghAQDE5YbOy67HPVtRJ9+b4wx17RQv+Noxlsou U9MeHvkNDsJ5BBAWCAAhFiEEIxvEq52Mq4bRYizgLAzlVJmO7NsFAmO9gEEDBQE8 AAoJECwM5VSZjuzbPp0BAN0Sz7zJPowGPe7Tmy07b5YQi4nNwSIeaAW5NsONX52a AP9jIr9eJk35Zt+frsdjLKkZAHMwtCXL8soz4cnIb7bGBsJ1BBAWAgAdFiEEIxvE q52Mq4bRYizgLAzlVJmO7NsFAmO9fs4ACgkQLAzlVJmO7Nv06gEA5g0gIH7BsKN5 vFhBu1jUBVQyOEwkTaELqZpEG33aR/QBAPM2PSocPKKISF7ilaELKsUS2V+WLWmw E2U5yD8GjoML =Up35 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/README.md000064400000000000000000000005621046102023000170060ustar 00000000000000A straightforward certification chain. Note: when A is the root, she can authenticate D, but not E due to depth constraints. ```text o A | 2/100 v o B | 1/100 v o C o Frank | 1/100 v o D | 1/100 v o E ``` sequoia-wot-0.11.0/tests/data/simple/alice-priv.pgp000064400000000000000000000027671046102023000203030ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 85DA B657 13B2 D0AB FC5A 4F28 BC10 C9CE 4A69 9D8D Comment: xVgEYVwdmxYJKwYBBAHaRw8BAQdA8uA9nQIUSGk+eVWb/VEr6RMv7IO1CUzEZUse Ia5m5YMAAPsGVyC99zPuSxzU44t6oYLf29GmJ0Ug+Kh5Oy2PYKGkSRFOwsALBB8W CgB9BYJhXB2bAwsJBwkQvBDJzkppnY1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JncaJ9DnhSIvo7UgIj8uNoFSqNoYBUGAaqfwGfDqVzzakD FQoIApsBAh4BFiEEhdq2VxOy0Kv8Wk8ovBDJzkppnY0AAE38AP4iuwG/da8xExkF 5pUQrx9WKO6KYT5jUWtLK3Yk+Kf8sAEAy7CW2WPTD3FYfNg8S9cP7wtNc12ztABp RGFEAxsQSwHNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFcHZsDCwkH CRC8EMnOSmmdjUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfftLOHb8eXGu9HR8Yiz86L63vjarYJVC+mMa50QGBdYwMVCggCmQECmwECHgEW IQSF2rZXE7LQq/xaTyi8EMnOSmmdjQAAGdIBALpz79DizA0bDgOf6lUha3/RESvS shnrI7OxEPUZeZYjAP9sVf1/NA8CmNMraBehpqsa+cDEp7OWXLwwWxiZe6jODcdY BGFcHZsWCSsGAQQB2kcPAQEHQFttcBUA4nJk2vs7HkOgvKhl0ohrP7+q5yS4Dvy7 CULJAAEAufpgEaoxraqlqZcqUf7g6aoznQLT/J6Gyz3zz2U9LOMSaMLAvwQYFgoB MQWCYVwdmwkQvBDJzkppnY1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn+OaKWEws2gSrwv1qYrDom4BBCx6zhmweN3c9olmDJN4CmwK+oAQZ FgoAbwWCYVwdmwkQH47LEb9Ns3RHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnl34Iudjcr/l3riIUdfOjw2npXnMhSz7pLuq7DsDdibAWIQRU jHMtHegFVAf9s44fjssRv02zdAAAm/IBAK+yrUZ9g/6Ycp51tfUymJbgVtgVHXHD M3zQ2m4X9xf9AP4r0JIV8xgO14Xz0DyhcZJo8awrftmzjOdIvInCB8V9CRYhBIXa tlcTstCr/FpPKLwQyc5KaZ2NAAA27gD8D+npzYiYSLQ9aHNyWt7X738P96Dv+AiJ JQLjQ6IKC2EBAOCsSnrs9AE+4YEGkShi6Yx2UNlYfnnMibphkQpS/DwB =CsTD -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/alice.pgp000064400000000000000000000026241046102023000173150ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 85DA B657 13B2 D0AB FC5A 4F28 BC10 C9CE 4A69 9D8D Comment: xjMEYVwdmxYJKwYBBAHaRw8BAQdA8uA9nQIUSGk+eVWb/VEr6RMv7IO1CUzEZUse Ia5m5YPCwAsEHxYKAH0FgmFcHZsDCwkHCRC8EMnOSmmdjUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdxon0OeFIi+jtSAiPy42gVKo2hgFQY Bqp/AZ8OpXPNqQMVCggCmwECHgEWIQSF2rZXE7LQq/xaTyi8EMnOSmmdjQAATfwA /iK7Ab91rzETGQXmlRCvH1Yo7ophPmNRa0srdiT4p/ywAQDLsJbZY9MPcVh82DxL 1w/vC01zXbO0AGlEYUQDGxBLAc0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVwdmwMLCQcJELwQyc5KaZ2NRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ9+0s4dvx5ca70dHxiLPzovre+NqtglUL6YxrnRAYF1jAxUK CAKZAQKbAQIeARYhBIXatlcTstCr/FpPKLwQyc5KaZ2NAAAZ0gEAunPv0OLMDRsO A5/qVSFrf9ERK9KyGesjs7EQ9Rl5liMA/2xV/X80DwKY0ytoF6Gmqxr5wMSns5Zc vDBbGJl7qM4NzjMEYVwdmxYJKwYBBAHaRw8BAQdAW21wFQDicmTa+zseQ6C8qGXS iGs/v6rnJLgO/LsJQsnCwL8EGBYKATEFgmFcHZsJELwQyc5KaZ2NRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/jmilhMLNoEq8L9amKw6JuA QQses4ZsHjd3PaJZgyTeApsCvqAEGRYKAG8FgmFcHZsJEB+OyxG/TbN0RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5d+CLnY3K/5d64iFHXz o8Np6V5zIUs+6S7quw7A3YmwFiEEVIxzLR3oBVQH/bOOH47LEb9Ns3QAAJvyAQCv sq1GfYP+mHKedbX1MpiW4FbYFR1xwzN80NpuF/cX/QD+K9CSFfMYDteF89A8oXGS aPGsK37Zs4znSLyJwgfFfQkWIQSF2rZXE7LQq/xaTyi8EMnOSmmdjQAANu4A/A/p 6c2ImEi0PWhzclre1+9/D/eg7/gIiSUC40OiCgthAQDgrEp67PQBPuGBBpEoYumM dlDZWH55zIm6YZEKUvw8AQ== =lOoq -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/bob-priv.pgp000064400000000000000000000027651046102023000177660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 39A4 7981 6C93 4B9E 0464 F1F4 BC1D CFDE ADA4 EE90 Comment: xVgEYVwdmxYJKwYBBAHaRw8BAQdAk8bI3OCZQGs6/5RRr0wdXEkUznIxgIh3oLLZ HLmWT3gAAP9ZSUvotzbT3fTe3AbFmb8bEARPL5ZUAFyYj8lOgGNmHw/bwsALBB8W CgB9BYJhXB2bAwsJBwkQvB3P3q2k7pBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JntzTY6emTOyNRIzM403ccJc+31pxEt+JC+JMKKvnDYjoD FQoIApsBAh4BFiEEOaR5gWyTS54EZPH0vB3P3q2k7pAAAGY5AQDuOByAbV82DYlV BhyYadwNekHosOeYb/WnA4VIzJy9IAEA09nkHxVdei9Pxgqfag4Wq7hT8uzGFRGI nfUCeiR9OgXNETxib2JAZXhhbXBsZS5vcmc+wsAOBBMWCgCABYJhXB2bAwsJBwkQ vB3P3q2k7pBHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn 7iXRCMhIW4+3/iTFYbZRXKo4FFxCS+f8Diu8mF5mO4wDFQoIApkBApsBAh4BFiEE OaR5gWyTS54EZPH0vB3P3q2k7pAAALfDAQC4LBKTAALchEuBVApm5T4FfnIEURAE XIk37fT25zoGgAEAxai9XePNFlPvpMorS+ZlCpcoccY17aD7ZjuoJL8J9Q/HWARh XB2bFgkrBgEEAdpHDwEBB0B81UNLDuv7fN756KUDkJaKcI2hyJ6v2n42VQ5rUiVK IwABAJK5nKwa1rwoC1di87LcDNbBdl/+jFEdW82TKUmrCBpSD2nCwL8EGBYKATEF gmFcHZsJELwdz96tpO6QRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ/23cnk13UNtPCqRGzAOcb5iYAZGUyQd8kZk1uySBdmQApsCvqAEGRYK AG8FgmFcHZsJEHPi+tz8qSIuRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZw1UtVPFpc/ukq2M/E9ywSOaMxtc+75Y4Dx6xq7RWu8lFiEElRvC MirEqSJAyzppc+L63PypIi4AAI5rAP9AckG2FcXKu3RLEbA/sGT0EY2ApYb2mFSo 12/VbkqNigD+O5eeaDQVommdHVvLZDBmzvaq4gEta9G06DQf3sWF7g0WIQQ5pHmB bJNLngRk8fS8Hc/eraTukAAAKNMBAKZD7Xb1O/a16zkDWyqNguHgnyQ2tISF49be 1077evR9AQDdkvN29uPn4BnbUJPhwAMkzFx0sLoETqClHllpgun/Dg== =QaEA -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/bob.pgp000064400000000000000000000031071046102023000167770ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVwdmxYJKwYBBAHaRw8BAQdAk8bI3OCZQGs6/5RRr0wdXEkUznIxgIh3oLLZ HLmWT3jCwAsEHxYKAH0FgmFcHZsDCwkHCRC8Hc/eraTukEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme3NNjp6ZM7I1EjMzjTdxwlz7fWnES3 4kL4kwoq+cNiOgMVCggCmwECHgEWIQQ5pHmBbJNLngRk8fS8Hc/eraTukAAAZjkB AO44HIBtXzYNiVUGHJhp3A16Qeiw55hv9acDhUjMnL0gAQDT2eQfFV16L0/GCp9q DharuFPy7MYVEYid9QJ6JH06Bc0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFcHZsDCwkHCRC8Hc/eraTukEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfuJdEIyEhbj7f+JMVhtlFcqjgUXEJL5/wOK7yYXmY7jAMVCggC mQECmwECHgEWIQQ5pHmBbJNLngRk8fS8Hc/eraTukAAAt8MBALgsEpMAAtyES4FU CmblPgV+cgRREARciTft9PbnOgaAAQDFqL1d480WU++kyitL5mUKlyhxxjXtoPtm O6gkvwn1D8LABgQQFgoAeQWCYVwd1wWDCWeaOwOFAmQJELwQyc5KaZ2NRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZw9BTBFY2ZZ4SmpzUGQv b4/iWzIPaEeXbxnKen9KUDf3FiEEhdq2VxOy0Kv8Wk8ovBDJzkppnY0AAJC+AQCL VDuN70ntwJxtjysSvzYU9qZDFjcAzP/joMh608ve3QD2NqAlAZ0CI7BgvzNigpN1 fR2m1XC0v4yezybC4CQaCs4zBGFcHZsWCSsGAQQB2kcPAQEHQHzVQ0sO6/t83vno pQOQlopwjaHInq/afjZVDmtSJUojwsC/BBgWCgExBYJhXB2bCRC8Hc/eraTukEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf9t3J5Nd1DbTwq kRswDnG+YmAGRlMkHfJGZNbskgXZkAKbAr6gBBkWCgBvBYJhXB2bCRBz4vrc/Kki LkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcNVLVTxaXP 7pKtjPxPcsEjmjMbXPu+WOA8esau0VrvJRYhBJUbwjIqxKkiQMs6aXPi+tz8qSIu AACOawD/QHJBthXFyrt0SxGwP7Bk9BGNgKWG9phUqNdv1W5KjYoA/juXnmg0FaJp nR1by2QwZs72quIBLWvRtOg0H97Fhe4NFiEEOaR5gWyTS54EZPH0vB3P3q2k7pAA ACjTAQCmQ+129Tv2tes5A1sqjYLh4J8kNrSEhePW3tdO+3r0fQEA3ZLzdvbj5+AZ 21CT4cADJMxcdLC6BE6gpR5ZaYLp/w4= =K/Bu -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/carol-priv.pgp000064400000000000000000000027671046102023000203260ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 4353 0F91 B450 EDB2 69AA 5882 1A1C F4DC 7F50 0F04 Comment: xVgEYVwdmxYJKwYBBAHaRw8BAQdAJVWGgHu+ASmg+PfxI6Vsv8hBTkvbAC7c2kh6 dizn+iMAAP4kbvpirh0LC4T/cc8AlKnCfJiAx/LoL5sL9z3vHaWjbhGPwsALBB8W CgB9BYJhXB2bAwsJBwkQGhz03H9QDwRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnAtKIjGxNF5ippS0gATdyVN+OH52v5tlxKrO2dZBmLM8D FQoIApsBAh4BFiEEQ1MPkbRQ7bJpqliCGhz03H9QDwQAAGi9AQDBaFcrSrDA8xKV 54rcKkJJtNogMK1E2W82L1UeDQyb4QEAm0An9DC7jOy0t1Q8fmvnBk68vr7rLdNC iNo3OEdkfwTNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFcHZsDCwkH CRAaHPTcf1APBEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcT5jwVxJRpTHb47iEqLnnGkjRIyaLl+E0SG/7mcz3P8AMVCggCmQECmwECHgEW IQRDUw+RtFDtsmmqWIIaHPTcf1APBAAAiBIBAPeynpHKqwAWZM0bkj6KQuW1abbq mi58/5dEC+rgjI6kAPsGTIygsSXIIXrHJCF6kTl2bN8PvJLUiMpeqoN4yGOGCcdY BGFcHZsWCSsGAQQB2kcPAQEHQKtyRTpYwvuaP2HiGylQjDb9CJyr17NHP2XTr3jE qW9gAAD/VdGrzdc7FGYSrpSwIHwHRzdm1y/DB9Ga8IHn2e3Nd2MRtMLAvwQYFgoB MQWCYVwdmwkQGhz03H9QDwRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnTDIcXsX+ZEV11/RwSQqDIUpilWkruBA4dre5a8YqFVkCmwK+oAQZ FgoAbwWCYVwdmwkQ023HArW5Xc1HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnZzuXnel5gQjyLBSj2ivwFsmehqrsFppU+V5qoT6IpP0WIQTZ r16HeFbmqLwua8LTbccCtbldzQAAyacA/RGRN42BIVHcX4Fja+DXDM9tT4QgyUH9 +ZdZoA34CqYWAQDA+neKxZaRdDGyldAo+sn8njpVY9ouZ29jqeOc9dUjCBYhBENT D5G0UO2yaapYghoc9Nx/UA8EAAACEwD9FMwHizzG81Y/uj/JMGzu5oQB5uEmzWqp zEKa1qWeMTEA/it6W4iaWyhpsa+0PaWtuxJbfYxpkI76VtKkufFiLdEC =P/FQ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/carol.pgp000064400000000000000000000031131046102023000173320ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVwdmxYJKwYBBAHaRw8BAQdAJVWGgHu+ASmg+PfxI6Vsv8hBTkvbAC7c2kh6 dizn+iPCwAsEHxYKAH0FgmFcHZsDCwkHCRAaHPTcf1APBEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcC0oiMbE0XmKmlLSABN3JU344fna/m 2XEqs7Z1kGYszwMVCggCmwECHgEWIQRDUw+RtFDtsmmqWIIaHPTcf1APBAAAaL0B AMFoVytKsMDzEpXnitwqQkm02iAwrUTZbzYvVR4NDJvhAQCbQCf0MLuM7LS3VDx+ a+cGTry+vust00KI2jc4R2R/BM0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVwdmwMLCQcJEBoc9Nx/UA8ERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZxPmPBXElGlMdvjuISouecaSNEjJouX4TRIb/uZzPc/wAxUK CAKZAQKbAQIeARYhBENTD5G0UO2yaapYghoc9Nx/UA8EAACIEgEA97KekcqrABZk zRuSPopC5bVptuqaLnz/l0QL6uCMjqQA+wZMjKCxJcghesckIXqROXZs3w+8ktSI yl6qg3jIY4YJwsAHBBAWCgB5BYJhXB3XBYMJZ5o7A4UBZAkQvB3P3q2k7pBHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnz5bwFrSrVrNV81oX EzOXfRuCKaSMbCtzxaiUFs2faZUWIQQ5pHmBbJNLngRk8fS8Hc/eraTukAAAkaEB AKkYyoymD0ho5G09T8eZ5rcmrcoxIeRNN+MNktMWqdxxAQCqOJevvuZ+jLDN7onU Y0hEOmEihMBbzHCqNtUNdJ/8A84zBGFcHZsWCSsGAQQB2kcPAQEHQKtyRTpYwvua P2HiGylQjDb9CJyr17NHP2XTr3jEqW9gwsC/BBgWCgExBYJhXB2bCRAaHPTcf1AP BEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdMMhxexf5k RXXX9HBJCoMhSmKVaSu4EDh2t7lrxioVWQKbAr6gBBkWCgBvBYJhXB2bCRDTbccC tbldzUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdnO5ed 6XmBCPIsFKPaK/AWyZ6GquwWmlT5XmqhPoik/RYhBNmvXod4VuaovC5rwtNtxwK1 uV3NAADJpwD9EZE3jYEhUdxfgWNr4NcMz21PhCDJQf35l1mgDfgKphYBAMD6d4rF lpF0MbKV0Cj6yfyeOlVj2i5nb2Op45z11SMIFiEEQ1MPkbRQ7bJpqliCGhz03H9Q DwQAAAITAP0UzAeLPMbzVj+6P8kwbO7mhAHm4SbNaqnMQprWpZ4xMQD+K3pbiJpb KGmxr7Q9pa27Elt9jGmQjvpW0qS58WIt0QI= =hg7P -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/dave-priv.pgp000064400000000000000000000027661046102023000201440ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 329D 5AAF 73DC 70B4 E3DD 2D11 677C B70F FBFE 1281 Comment: xVgEYVwdmxYJKwYBBAHaRw8BAQdAi4XlXPZcS+hH6YEgnlZfo6DI8WdE3l7nymhX hMM09EAAAPwJnR3Auci6pbta9krTAKLG64Td4geLC74xa4qqUCOHAhFEwsALBB8W CgB9BYJhXB2bAwsJBwkQZ3y3D/v+EoFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnqctUwf9daXNvExd7/q/NGwT+Bg/fYAIwl+25gxJ34r0D FQoIApsBAh4BFiEEMp1ar3PccLTj3S0RZ3y3D/v+EoEAAK6XAQDUYxMitsDy+rZk 8VHBrDyt0aI1aFDEOL39I2AIG70cAAEAvm4hhYsXrZyZaSRdm+dVDJtYGgRaqoCj id3oDyyKVADNEjxkYXZlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVwdmwMLCQcJ EGd8tw/7/hKBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y Zy1uvKJcSelSs4sSFw05ffACJFvGNZG8Jl+hTgXELzp2AxUKCAKZAQKbAQIeARYh BDKdWq9z3HC0490tEWd8tw/7/hKBAABp/gEAhCqL+aro7N503E7dgKpUOCeRH0bM 9Sg1Sub+lK+heqcA/RWZE39VHb1vz6QNSMzEjjo6CbV+Hu8VO1smO7X4QvANx1gE YVwdmxYJKwYBBAHaRw8BAQdAEZiaUxeJonB6bt4xwCrv6MXUuJo4ifCLtZUhGuxX dX8AAP96afvSZWMd4TU3oEPy1SKDc4X3m3Bn4tTQQV4VZ/zibxJ/wsC/BBgWCgEx BYJhXB2bCRBnfLcP+/4SgUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmfihPOTn4iz+EZi4xgD5LKU442YnM2By/P8OvRFZig2pgKbAr6gBBkW CgBvBYJhXB2bCRDQAAv5CG1lxEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmedPCtmH8KO1sV3KdBt/SYCfJK+0y7jB/qvNKO3qUoR9BYhBMXS zUbOkzNwB0hsktAAC/kIbWXEAACJbgD8DUwU488Sppxi2XvwBDraUq0ap30zkCX0 PCFOEzSwpdAA/04zy+5ViI/jVhIb+63e6h0dhWQcLQklGAbKp/FHqesBFiEEMp1a r3PccLTj3S0RZ3y3D/v+EoEAAD6/AQCZhu/CfaFS23LEktU8YZMHjV3ujx7MwdmZ UC99gTV1EgD+J/MtBMmGZTi2fMCcPnF7BjD24ARyuHm9egY9Wfv5dgk= =OboQ -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/dave.pgp000064400000000000000000000031131046102023000171510ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVwdmxYJKwYBBAHaRw8BAQdAi4XlXPZcS+hH6YEgnlZfo6DI8WdE3l7nymhX hMM09EDCwAsEHxYKAH0FgmFcHZsDCwkHCRBnfLcP+/4SgUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmepy1TB/11pc28TF3v+r80bBP4GD99g AjCX7bmDEnfivQMVCggCmwECHgEWIQQynVqvc9xwtOPdLRFnfLcP+/4SgQAArpcB ANRjEyK2wPL6tmTxUcGsPK3RojVoUMQ4vf0jYAgbvRwAAQC+biGFixetnJlpJF2b 51UMm1gaBFqqgKOJ3egPLIpUAM0SPGRhdmVAZXhhbXBsZS5vcmc+wsAOBBMWCgCA BYJhXB2bAwsJBwkQZ3y3D/v+EoFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnLW68olxJ6VKzixIXDTl98AIkW8Y1kbwmX6FOBcQvOnYDFQoI ApkBApsBAh4BFiEEMp1ar3PccLTj3S0RZ3y3D/v+EoEAAGn+AQCEKov5qujs3nTc Tt2AqlQ4J5EfRsz1KDVK5v6Ur6F6pwD9FZkTf1UdvW/PpA1IzMSOOjoJtX4e7xU7 WyY7tfhC8A3CwAcEEBYKAHkFgmFcHdcFgwlnmjsDhQFkCRAaHPTcf1APBEcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcM8j60jbe10Rx4b52Q Dz3mNU7a7Uj2V06WYF75H9LGrxYhBENTD5G0UO2yaapYghoc9Nx/UA8EAAB6egEA mvFfS9s/4S3xRRxIMM5qz0TmNv6Ontl7zlLPPc1Qgb4BAKs88DVFAwRLtp0/3GDd nATzQ7xNGyWO6zvSxlf2luQAzjMEYVwdmxYJKwYBBAHaRw8BAQdAEZiaUxeJonB6 bt4xwCrv6MXUuJo4ifCLtZUhGuxXdX/CwL8EGBYKATEFgmFcHZsJEGd8tw/7/hKB RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+KE85OfiLP4 RmLjGAPkspTjjZiczYHL8/w69EVmKDamApsCvqAEGRYKAG8FgmFcHZsJENAAC/kI bWXERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ508K2Yf wo7WxXcp0G39JgJ8kr7TLuMH+q80o7epShH0FiEExdLNRs6TM3AHSGyS0AAL+Qht ZcQAAIluAPwNTBTjzxKmnGLZe/AEOtpSrRqnfTOQJfQ8IU4TNLCl0AD/TjPL7lWI j+NWEhv7rd7qHR2FZBwtCSUYBsqn8Uep6wEWIQQynVqvc9xwtOPdLRFnfLcP+/4S gQAAPr8BAJmG78J9oVLbcsSS1TxhkweNXe6PHszB2ZlQL32BNXUSAP4n8y0EyYZl OLZ8wJw+cXsGMPbgBHK4eb16Bj1Z+/l2CQ== =K0RZ -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/ellen-priv.pgp000064400000000000000000000027671046102023000203250ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A731 9A9B 166A B530 A5FB AC8A B43C A77F 7C17 6AF4 Comment: xVgEYVwdmxYJKwYBBAHaRw8BAQdA7LVdaGw77HcQC2PpMKHWLvbDEylm0D43Bev9 wwyKjqwAAP9DPvXS//MD2k6JoTXEjY9GVa7IUvaVvNBVbZlJg9PiYRNawsALBB8W CgB9BYJhXB2bAwsJBwkQtDynf3wXavRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnldCh3hqCxjuJW+x/NvHO2hmLhAohIVIYGw0g4K5RmIID FQoIApsBAh4BFiEEpzGamxZqtTCl+6yKtDynf3wXavQAADwGAQDcJtSYK6DXAMlt QGft1tXaxY/jOsGmNYpqJe3rrogbrgEAhGs/m56KfR1JBT3O40+xyRRFt/P6+fnc rw36vFrlJQnNEzxlbGxlbkBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFcHZsDCwkH CRC0PKd/fBdq9EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfO7AQVklUElpHB0uWlCb00GC+t/VpR92E1PkmHPL9TNwMVCggCmQECmwECHgEW IQSnMZqbFmq1MKX7rIq0PKd/fBdq9AAA+c0BAJr1QgfhNax9Wu8M8L2Fm6JcDH/N 49UQl8yVp/pQAuJXAQD5VQazt8nXvsy9KP5J1K4kA4IArcIAzYVyIe6ksXCTAcdY BGFcHZsWCSsGAQQB2kcPAQEHQHaqD+RDmKJnG5sUXBoVD+8IwAxKUxas8tH/hxzW 9OoYAAEAs1PSFssPU+OuRYKHCJ4+wVjREzfkUzL4Gl3YIegY084PhcLAvwQYFgoB MQWCYVwdmwkQtDynf3wXavRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnGTMWmoOh7alBTD9MiAmgrZwqf7hXC5iP+3ZFGRiTreECmwK+oAQZ FgoAbwWCYVwdmwkQNhsAH3EgoCdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jni29b7AKRh3IsUvJwGZaMkXBbYLEE3zZL240KJ5Yd/NAWIQTS 2X0aQMxF7OMwBG42GwAfcSCgJwAAlwIBAPMitwdPaDSCipP5PTpn73S6QQ/oakY2 GXQQpSILoZ0sAP9ma52ezd3Ef4MS6grWtM7YziFT0TgXJgkqXb9op2K9DRYhBKcx mpsWarUwpfusirQ8p398F2r0AAACigEA2RCf3gA19TtoYYPUeE7wf9CzbeR0plGR hIGYxej2jGwA/RwuDeiIaqwLN99MAY4w5akwDVZOHplXpFms8Ki1WnUH =AdRy -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/ellen.pgp000064400000000000000000000031131046102023000173310ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVwdmxYJKwYBBAHaRw8BAQdA7LVdaGw77HcQC2PpMKHWLvbDEylm0D43Bev9 wwyKjqzCwAsEHxYKAH0FgmFcHZsDCwkHCRC0PKd/fBdq9EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeV0KHeGoLGO4lb7H828c7aGYuECiEh UhgbDSDgrlGYggMVCggCmwECHgEWIQSnMZqbFmq1MKX7rIq0PKd/fBdq9AAAPAYB ANwm1JgroNcAyW1AZ+3W1drFj+M6waY1imol7euuiBuuAQCEaz+bnop9HUkFPc7j T7HJFEW38/r5+dyvDfq8WuUlCc0TPGVsbGVuQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVwdmwMLCQcJELQ8p398F2r0RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ87sBBWSVQSWkcHS5aUJvTQYL639WlH3YTU+SYc8v1M3AxUK CAKZAQKbAQIeARYhBKcxmpsWarUwpfusirQ8p398F2r0AAD5zQEAmvVCB+E1rH1a 7wzwvYWbolwMf83j1RCXzJWn+lAC4lcBAPlVBrO3yde+zL0o/knUriQDggCtwgDN hXIh7qSxcJMBwsAHBBAWCgB5BYJhXB3XBYMJZ5o7A4UBZAkQZ3y3D/v+EoFHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnI9y8rHkIQ+U/BL1d 4L8WTC4R4hfAGl8wIpAE7j6ZX1UWIQQynVqvc9xwtOPdLRFnfLcP+/4SgQAAmHAB ANE4oINcQZ5k6wRWRq2CslhIXMEZf7FTY2szpHoIdHLBAP47NtiS1LywCYTsw50u OBLlGQu57YtJJ9IOZdHavo8ZCc4zBGFcHZsWCSsGAQQB2kcPAQEHQHaqD+RDmKJn G5sUXBoVD+8IwAxKUxas8tH/hxzW9OoYwsC/BBgWCgExBYJhXB2bCRC0PKd/fBdq 9EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcZMxaag6Ht qUFMP0yICaCtnCp/uFcLmI/7dkUZGJOt4QKbAr6gBBkWCgBvBYJhXB2bCRA2GwAf cSCgJ0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeLb1vs ApGHcixS8nAZloyRcFtgsQTfNkvbjQonlh380BYhBNLZfRpAzEXs4zAEbjYbAB9x IKAnAACXAgEA8yK3B09oNIKKk/k9OmfvdLpBD+hqRjYZdBClIguhnSwA/2ZrnZ7N 3cR/gxLqCta0ztjOIVPROBcmCSpdv2inYr0NFiEEpzGamxZqtTCl+6yKtDynf3wX avQAAAKKAQDZEJ/eADX1O2hhg9R4TvB/0LNt5HSmUZGEgZjF6PaMbAD9HC4N6Ihq rAs330wBjjDlqTANVk4emVekWazwqLVadQc= =RmdO -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/frank-priv.pgp000064400000000000000000000027671046102023000203270ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2693 237D 2CED 0BB6 8F11 8D78 DC86 A97C D2C8 19D9 Comment: xVgEYVwdmxYJKwYBBAHaRw8BAQdABcl3GmDmzXv2rTZxAAkU4juiie3hBMjVUSvv eOXVtKcAAQDZZwtgOpZjRhuTfiBB759QeYR6NgSacyG59d9aWGtapg4ZwsALBB8W CgB9BYJhXB2bAwsJBwkQ3IapfNLIGdlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnulTVgQDVcGnq1pIWl911apVKeSdAALgwocRkNlvWKXUD FQoIApsBAh4BFiEEJpMjfSztC7aPEY143IapfNLIGdkAAFO/AP0e2lUgZge4ZyYU L6mh6pZeQOyzKnzPIFtgYq5Fn0eW/gD/WaK5e4h2As7WbeEBm1KkQ28yST1RKDP6 92I1MV2k+AjNEzxmcmFua0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFcHZsDCwkH CRDchql80sgZ2UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcPnps0Dp5p0YJ/AjuWO0Fr+16rqp8oX6VaEy4uMPIgqgMVCggCmQECmwECHgEW IQQmkyN9LO0Lto8RjXjchql80sgZ2QAA4ZQBAPUWBaex2nKunWta81+h0n1uQqFS pLx/wFU1MVxkvJIzAQCdthYV3FUMXBhb/PTEW3rfcU4F0Emm5221x6U4sxn+C8dY BGFcHZsWCSsGAQQB2kcPAQEHQITURTrPxNzEJGkh1r4YUgD8dfWAkfSHg4MX3piL SolfAAEA0TnFPQvm4vH05RGS7G5XZh7SB+Oe0O8f1q3TjzFEnIMSM8LAvwQYFgoB MQWCYVwdmwkQ3IapfNLIGdlHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnmBX8e+8CpCPNJS8nEGg9sFQXvLD2ixvJ2wQV4nVZgdoCmwK+oAQZ FgoAbwWCYVwdmwkQTN8wxpxqLyJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnX9bJT0oISGM4EO19V9U1FCVmhscqx1AX3lvI1m2hCpAWIQQq hErt7coIL9T3maFM3zDGnGovIgAAWTEBAMVkjZzm6yV/INQ9Vi/RKpV/IlCvvgeW 7zL/i3WuaTzaAQD7fKepdXxFjSmV7VsZ2wvUlUpuSZi/GrE0hAw3B2UIAxYhBCaT I30s7Qu2jxGNeNyGqXzSyBnZAABq2AD+Ool9FFWQvfTcZWUTjeHf/iRyrwqwjmg1 +MExIwBa3KIBAKgwzzr2VjtBzvK0dGIr0dcFNJMBxlLo5+FxrdrtxsoB =p787 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple/frank.pgp000064400000000000000000000026241046102023000173410ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 2693 237D 2CED 0BB6 8F11 8D78 DC86 A97C D2C8 19D9 Comment: xjMEYVwdmxYJKwYBBAHaRw8BAQdABcl3GmDmzXv2rTZxAAkU4juiie3hBMjVUSvv eOXVtKfCwAsEHxYKAH0FgmFcHZsDCwkHCRDchql80sgZ2UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme6VNWBANVwaerWkhaX3XVqlUp5J0AA uDChxGQ2W9YpdQMVCggCmwECHgEWIQQmkyN9LO0Lto8RjXjchql80sgZ2QAAU78A /R7aVSBmB7hnJhQvqaHqll5A7LMqfM8gW2BirkWfR5b+AP9Zorl7iHYCztZt4QGb UqRDbzJJPVEoM/r3YjUxXaT4CM0TPGZyYW5rQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYVwdmwMLCQcJENyGqXzSyBnZRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZw+emzQOnmnRgn8CO5Y7QWv7XquqnyhfpVoTLi4w8iCqAxUK CAKZAQKbAQIeARYhBCaTI30s7Qu2jxGNeNyGqXzSyBnZAADhlAEA9RYFp7Hacq6d a1rzX6HSfW5CoVKkvH/AVTUxXGS8kjMBAJ22FhXcVQxcGFv89MRbet9xTgXQSabn bbXHpTizGf4LzjMEYVwdmxYJKwYBBAHaRw8BAQdAhNRFOs/E3MQkaSHWvhhSAPx1 9YCR9IeDgxfemItKiV/CwL8EGBYKATEFgmFcHZsJENyGqXzSyBnZRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ5gV/HvvAqQjzSUvJxBoPbBU F7yw9osbydsEFeJ1WYHaApsCvqAEGRYKAG8FgmFcHZsJEEzfMMacai8iRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1/WyU9KCEhjOBDtfVfV NRQlZobHKsdQF95byNZtoQqQFiEEKoRK7e3KCC/U95mhTN8wxpxqLyIAAFkxAQDF ZI2c5uslfyDUPVYv0SqVfyJQr74Hlu8y/4t1rmk82gEA+3ynqXV8RY0ple1bGdsL 1JVKbkmYvxqxNIQMNwdlCAMWIQQmkyN9LO0Lto8RjXjchql80sgZ2QAAatgA/jqJ fRRVkL303GVlE43h3/4kcq8KsI5oNfjBMSMAWtyiAQCoMM869lY7Qc7ytHRiK9HX BTSTAcZS6Ofhca3a7cbKAQ== =/BVx -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple.pgp000064400000000000000000000210041046102023000162310ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYVwdmxYJKwYBBAHaRw8BAQdAk8bI3OCZQGs6/5RRr0wdXEkUznIxgIh3oLLZ HLmWT3jCwAsEHxYKAH0FgmFcHZsDCwkHCRC8Hc/eraTukEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcme3NNjp6ZM7I1EjMzjTdxwlz7fWnES3 4kL4kwoq+cNiOgMVCggCmwECHgEWIQQ5pHmBbJNLngRk8fS8Hc/eraTukAAAZjkB AO44HIBtXzYNiVUGHJhp3A16Qeiw55hv9acDhUjMnL0gAQDT2eQfFV16L0/GCp9q DharuFPy7MYVEYid9QJ6JH06Bc0RPGJvYkBleGFtcGxlLm9yZz7CwA4EExYKAIAF gmFcHZsDCwkHCRC8Hc/eraTukEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmfuJdEIyEhbj7f+JMVhtlFcqjgUXEJL5/wOK7yYXmY7jAMVCggC mQECmwECHgEWIQQ5pHmBbJNLngRk8fS8Hc/eraTukAAAt8MBALgsEpMAAtyES4FU CmblPgV+cgRREARciTft9PbnOgaAAQDFqL1d480WU++kyitL5mUKlyhxxjXtoPtm O6gkvwn1D8LABgQQFgoAeQWCYVwd1wWDCWeaOwOFAmQJELwQyc5KaZ2NRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZw9BTBFY2ZZ4SmpzUGQv b4/iWzIPaEeXbxnKen9KUDf3FiEEhdq2VxOy0Kv8Wk8ovBDJzkppnY0AAJC+AQCL VDuN70ntwJxtjysSvzYU9qZDFjcAzP/joMh608ve3QD2NqAlAZ0CI7BgvzNigpN1 fR2m1XC0v4yezybC4CQaCs4zBGFcHZsWCSsGAQQB2kcPAQEHQHzVQ0sO6/t83vno pQOQlopwjaHInq/afjZVDmtSJUojwsC/BBgWCgExBYJhXB2bCRC8Hc/eraTukEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmf9t3J5Nd1DbTwq kRswDnG+YmAGRlMkHfJGZNbskgXZkAKbAr6gBBkWCgBvBYJhXB2bCRBz4vrc/Kki LkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcNVLVTxaXP 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 zYVyIe6ksXCTAcLABwQQFgoAeQWCYVwd1wWDCWeaOwOFAWQJEGd8tw/7/hKBRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZyPcvKx5CEPlPwS9 XeC/FkwuEeIXwBpfMCKQBO4+mV9VFiEEMp1ar3PccLTj3S0RZ3y3D/v+EoEAAJhw AQDROKCDXEGeZOsEVkatgrJYSFzBGX+xU2NrM6R6CHRywQD+OzbYktS8sAmE7MOd LjgS5RkLue2LSSfSDmXR2r6PGQnOMwRhXB2bFgkrBgEEAdpHDwEBB0B2qg/kQ5ii ZxubFFwaFQ/vCMAMSlMWrPLR/4cc1vTqGMLAvwQYFgoBMQWCYVwdmwkQtDynf3wX avRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnGTMWmoOh 7alBTD9MiAmgrZwqf7hXC5iP+3ZFGRiTreECmwK+oAQZFgoAbwWCYVwdmwkQNhsA H3EgoCdHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jni29b 7AKRh3IsUvJwGZaMkXBbYLEE3zZL240KJ5Yd/NAWIQTS2X0aQMxF7OMwBG42GwAf cSCgJwAAlwIBAPMitwdPaDSCipP5PTpn73S6QQ/oakY2GXQQpSILoZ0sAP9ma52e zd3Ef4MS6grWtM7YziFT0TgXJgkqXb9op2K9DRYhBKcxmpsWarUwpfusirQ8p398 F2r0AAACigEA2RCf3gA19TtoYYPUeE7wf9CzbeR0plGRhIGYxej2jGwA/RwuDeiI aqwLN99MAY4w5akwDVZOHplXpFms8Ki1WnUHxjMEYVwdmxYJKwYBBAHaRw8BAQdA 8uA9nQIUSGk+eVWb/VEr6RMv7IO1CUzEZUseIa5m5YPCwAsEHxYKAH0FgmFcHZsD CwkHCRC8EMnOSmmdjUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmdxon0OeFIi+jtSAiPy42gVKo2hgFQYBqp/AZ8OpXPNqQMVCggCmwECHgEW IQSF2rZXE7LQq/xaTyi8EMnOSmmdjQAATfwA/iK7Ab91rzETGQXmlRCvH1Yo7oph PmNRa0srdiT4p/ywAQDLsJbZY9MPcVh82DxL1w/vC01zXbO0AGlEYUQDGxBLAc0T PGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoAgAWCYVwdmwMLCQcJELwQyc5KaZ2N RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ9+0s4dvx5ca 70dHxiLPzovre+NqtglUL6YxrnRAYF1jAxUKCAKZAQKbAQIeARYhBIXatlcTstCr /FpPKLwQyc5KaZ2NAAAZ0gEAunPv0OLMDRsOA5/qVSFrf9ERK9KyGesjs7EQ9Rl5 liMA/2xV/X80DwKY0ytoF6Gmqxr5wMSns5ZcvDBbGJl7qM4NzjMEYVwdmxYJKwYB BAHaRw8BAQdAW21wFQDicmTa+zseQ6C8qGXSiGs/v6rnJLgO/LsJQsnCwL8EGBYK ATEFgmFcHZsJELwQyc5KaZ2NRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ/jmilhMLNoEq8L9amKw6JuAQQses4ZsHjd3PaJZgyTeApsCvqAE GRYKAG8FgmFcHZsJEB+OyxG/TbN0RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ5d+CLnY3K/5d64iFHXzo8Np6V5zIUs+6S7quw7A3YmwFiEE VIxzLR3oBVQH/bOOH47LEb9Ns3QAAJvyAQCvsq1GfYP+mHKedbX1MpiW4FbYFR1x wzN80NpuF/cX/QD+K9CSFfMYDteF89A8oXGSaPGsK37Zs4znSLyJwgfFfQkWIQSF 2rZXE7LQq/xaTyi8EMnOSmmdjQAANu4A/A/p6c2ImEi0PWhzclre1+9/D/eg7/gI iSUC40OiCgthAQDgrEp67PQBPuGBBpEoYumMdlDZWH55zIm6YZEKUvw8AcYzBGFc HZsWCSsGAQQB2kcPAQEHQAXJdxpg5s179q02cQAJFOI7oont4QTI1VEr73jl1bSn wsALBB8WCgB9BYJhXB2bAwsJBwkQ3IapfNLIGdlHFAAAAAAAHgAgc2FsdEBub3Rh dGlvbnMuc2VxdW9pYS1wZ3Aub3JnulTVgQDVcGnq1pIWl911apVKeSdAALgwocRk NlvWKXUDFQoIApsBAh4BFiEEJpMjfSztC7aPEY143IapfNLIGdkAAFO/AP0e2lUg Zge4ZyYUL6mh6pZeQOyzKnzPIFtgYq5Fn0eW/gD/WaK5e4h2As7WbeEBm1KkQ28y ST1RKDP692I1MV2k+AjNEzxmcmFua0BleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFc HZsDCwkHCRDchql80sgZ2UcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmcPnps0Dp5p0YJ/AjuWO0Fr+16rqp8oX6VaEy4uMPIgqgMVCggCmQEC mwECHgEWIQQmkyN9LO0Lto8RjXjchql80sgZ2QAA4ZQBAPUWBaex2nKunWta81+h 0n1uQqFSpLx/wFU1MVxkvJIzAQCdthYV3FUMXBhb/PTEW3rfcU4F0Emm5221x6U4 sxn+C84zBGFcHZsWCSsGAQQB2kcPAQEHQITURTrPxNzEJGkh1r4YUgD8dfWAkfSH g4MX3piLSolfwsC/BBgWCgExBYJhXB2bCRDchql80sgZ2UcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeYFfx77wKkI80lLycQaD2wVBe8sPaL G8nbBBXidVmB2gKbAr6gBBkWCgBvBYJhXB2bCRBM3zDGnGovIkcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdf1slPSghIYzgQ7X1X1TUUJWaG xyrHUBfeW8jWbaEKkBYhBCqESu3tyggv1PeZoUzfMMacai8iAABZMQEAxWSNnObr JX8g1D1WL9EqlX8iUK++B5bvMv+Lda5pPNoBAPt8p6l1fEWNKZXtWxnbC9SVSm5J mL8asTSEDDcHZQgDFiEEJpMjfSztC7aPEY143IapfNLIGdkAAGrYAP46iX0UVZC9 9NxlZRON4d/+JHKvCrCOaDX4wTEjAFrcogEAqDDPOvZWO0HO8rR0YivR1wU0kwHG Uujn4XGt2u3GygHGMwRhXB2bFgkrBgEEAdpHDwEBB0CLheVc9lxL6EfpgSCeVl+j oMjxZ0TeXufKaFeEwzT0QMLACwQfFgoAfQWCYVwdmwMLCQcJEGd8tw/7/hKBRxQA AAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6nLVMH/XWlzbxMX e/6vzRsE/gYP32ACMJftuYMSd+K9AxUKCAKbAQIeARYhBDKdWq9z3HC0490tEWd8 tw/7/hKBAACulwEA1GMTIrbA8vq2ZPFRwaw8rdGiNWhQxDi9/SNgCBu9HAABAL5u IYWLF62cmWkkXZvnVQybWBoEWqqAo4nd6A8silQAzRI8ZGF2ZUBleGFtcGxlLm9y Zz7CwA4EExYKAIAFgmFcHZsDCwkHCRBnfLcP+/4SgUcUAAAAAAAeACBzYWx0QG5v dGF0aW9ucy5zZXF1b2lhLXBncC5vcmctbryiXEnpUrOLEhcNOX3wAiRbxjWRvCZf oU4FxC86dgMVCggCmQECmwECHgEWIQQynVqvc9xwtOPdLRFnfLcP+/4SgQAAaf4B AIQqi/mq6OzedNxO3YCqVDgnkR9GzPUoNUrm/pSvoXqnAP0VmRN/VR29b8+kDUjM xI46Ogm1fh7vFTtbJju1+ELwDcLABwQQFgoAeQWCYVwd1wWDCWeaOwOFAWQJEBoc 9Nx/UA8ERxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZwzy PrSNt7XRHHhvnZAPPeY1TtrtSPZXTpZgXvkf0savFiEEQ1MPkbRQ7bJpqliCGhz0 3H9QDwQAAHp6AQCa8V9L2z/hLfFFHEgwzmrPROY2/o6e2XvOUs89zVCBvgEAqzzw NUUDBEu2nT/cYN2cBPNDvE0bJY7rO9LGV/aW5ADOMwRhXB2bFgkrBgEEAdpHDwEB B0ARmJpTF4micHpu3jHAKu/oxdS4mjiJ8Iu1lSEa7Fd1f8LAvwQYFgoBMQWCYVwd mwkQZ3y3D/v+EoFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn4oTzk5+Is/hGYuMYA+SylOONmJzNgcvz/Dr0RWYoNqYCmwK+oAQZFgoAbwWC YVwdmwkQ0AAL+QhtZcRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnnTwrZh/CjtbFdynQbf0mAnySvtMu4wf6rzSjt6lKEfQWIQTF0s1GzpMz cAdIbJLQAAv5CG1lxAAAiW4A/A1MFOPPEqacYtl78AQ62lKtGqd9M5Al9DwhThM0 sKXQAP9OM8vuVYiP41YSG/ut3uodHYVkHC0JJRgGyqfxR6nrARYhBDKdWq9z3HC0 490tEWd8tw/7/hKBAAA+vwEAmYbvwn2hUttyxJLVPGGTB41d7o8ezMHZmVAvfYE1 dRIA/ifzLQTJhmU4tnzAnD5xewYw9uAEcrh5vXoGPVn7+XYJ =0tMR -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/simple.sh000075500000000000000000000003711046102023000160640ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=simple ${@:+"$@"} key alice key bob key carol key dave key ellen key frank certify alice -a 100 -d 2 bob certify bob -a 100 -d 1 carol certify carol -a 100 -d 1 dave certify dave -a 100 -d 1 ellen finish sequoia-wot-0.11.0/tests/data/torust.sh000075500000000000000000000046521046102023000161410ustar 00000000000000#! /bin/bash # # This is a convenience script that generates a stub for a # test vector. For example: # # $ ./torust simple # #[test] # #[allow(unused)] # fn simple() -> Result<()> { # let p = &StandardPolicy::new(); # # let alice_fpr: Fingerprint = # "8C38FE08E54E931B547F0734B1C8B7F2AC3CD6F3" # .parse().expect("valid fingerprint"); # let alice_uid # = UserID::from(""); # ... set -e usage() { echo "Usage: $0 [FILE|DIR]..." >&2 exit 1 } if test $# -eq 0 then usage fi dir="" name="" if test $# -eq 1 -a -d $1 then dir=$1 name=$(echo $dir | tr -- - _) cat< Result<()> { let p = &StandardPolicy::new(); EOF fi for f in $@; do if test -d "$f" then # If $f is a directory, then we list all files. find "$f" -type f -name '*-priv.pgp' | sed 's/-priv[.]pgp$/.pgp/' else echo "$f" fi done | sort | while read f do sq inspect --certifications "$f" \ | awk -F': *' ' $1 ~ /Fingerprint/ { fpr = $2; fpr_printed = 0; userids = 0; } $1 ~ /UserID/ { userid = $2; userids += 1; email = gensub(/<(.*)>/, "\\1", "", userid); var = email; if (userids == 1) { sub("[@].*", "", var); } gsub("[-@.]", "_", var); # printf("userid: %s\n", userid); # printf("email: %s\n", email); # printf("var: %s\n", var); if (fpr_printed == 0) { printf("\n let %s_fpr: Fingerprint =\n\ \"%s\"\n .parse().expect(\"valid fingerprint\");\n", var, fpr); fpr_printed = 1; } printf(" let %s_uid\n = UserID::from(\"%s\");\n", var, userid); } $1 ~ /Alleged certifier/ { printf(" // Certified by: %s\n", $2); } ' done 2>/dev/null if test x != "x$name" then cat < = CertParser::from_bytes( &crate::testdata::data("$dir.pgp"))? .map(|c| c.expect("Valid certificate")) .collect(); let n = Network::from_certs(certs.into_iter(), p, None)?; eprintln!("{:?}", n); /// Tests. Ok(()) } EOF fi sequoia-wot-0.11.0/tests/data/trivial/alice-priv.pgp000064400000000000000000000027671046102023000204640ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: CE39 8BE6 5389 548E C233 4FE8 D16C EC58 EADF 534D Comment: xVgEYW/3iRYJKwYBBAHaRw8BAQdA8uB0F9yjcpTlRsXK9XwrDy6ykTF1ODQRLjeL SgPQXzQAAP4nFJAilDIhRkWwSXy/Snr61aqUURXG9f6JmV35CM+eXBDKwsALBB8W CgB9BYJhb/eJAwsJBwkQ0WzsWOrfU01HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JncfhkWC5dO4Oy10+3/g4QfPunM8B4N+eupU3fW0rtER4D FQoIApsBAh4BFiEEzjmL5lOJVI7CM0/o0WzsWOrfU00AAAYzAQCrscsSFKyPqbf9 3nD5usznA/Lk195FT/8oOXKmf6T+OQEAmCOKASXs8ei79L/vEKXf/I2OtKZy01o9 xYpoe8DyZgbNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgmFv94kDCwkH CRDRbOxY6t9TTUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmfCIjBVQ9nhxZzq7EwRPv3TJ/D0U0zI1VK/mymtucztLgMVCggCmQECmwECHgEW IQTOOYvmU4lUjsIzT+jRbOxY6t9TTQAAmyEA/3yxle7QQ6FCG+6JWuRN3/ee45MM EQ/u9tL0hB3P/U7TAP4hcwdkMviQChhpHN0E3ruVM82gXzoKAXmjpeOyz4k7AcdY BGFv94kWCSsGAQQB2kcPAQEHQESlfG4Jk86HltkeYjEzy3WlbVBUzgamAMg4pV9P un4MAAEAt94m6wFFAcMvfbSzDLSI9esKBXPLd8bGnPB6uHF7q6gROcLAvwQYFgoB MQWCYW/3iQkQ0WzsWOrfU01HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn7sWL0sTBq10p7d2GN7ZgsZkUxVY+JUnn9R4WhFaH06YCmwK+oAQZ FgoAbwWCYW/3iQkQY8VPvdEOAONHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jn+DEKCHP+xYMcV5LLB5K5dH2Iw9BmJxSJckTsAkIX/OQWIQRv o9S/vEXV8ksghTZjxU+90Q4A4wAAorAA/2eO42HYFVH3wJj3SvhqT8EQ7qe/hpMP Ab7uznxhL6CfAP9nlen3sa+Hb1FvEQIjCXjYv0G/vMJMdEujNIydIhgMCxYhBM45 i+ZTiVSOwjNP6NFs7Fjq31NNAABvHwEA0LH6AxAs5hGYltx9cevRYBOBp6IZgcHj Fe8ul+BluRkBAKoOtddLcHVWqkQvwhJfZeFsWh4ZxmCcSRIPhKIQKd8F =VIN8 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/trivial/alice.pgp000064400000000000000000000026241046102023000174760ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: CE39 8BE6 5389 548E C233 4FE8 D16C EC58 EADF 534D Comment: xjMEYW/3iRYJKwYBBAHaRw8BAQdA8uB0F9yjcpTlRsXK9XwrDy6ykTF1ODQRLjeL SgPQXzTCwAsEHxYKAH0FgmFv94kDCwkHCRDRbOxY6t9TTUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdx+GRYLl07g7LXT7f+DhB8+6czwHg3 566lTd9bSu0RHgMVCggCmwECHgEWIQTOOYvmU4lUjsIzT+jRbOxY6t9TTQAABjMB AKuxyxIUrI+pt/3ecPm6zOcD8uTX3kVP/yg5cqZ/pP45AQCYI4oBJezx6Lv0v+8Q pd/8jY60pnLTWj3Fimh7wPJmBs0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCYW/3iQMLCQcJENFs7Fjq31NNRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ8IiMFVD2eHFnOrsTBE+/dMn8PRTTMjVUr+bKa25zO0uAxUK CAKZAQKbAQIeARYhBM45i+ZTiVSOwjNP6NFs7Fjq31NNAACbIQD/fLGV7tBDoUIb 7ola5E3f957jkwwRD+720vSEHc/9TtMA/iFzB2Qy+JAKGGkc3QTeu5UzzaBfOgoB eaOl47LPiTsBzjMEYW/3iRYJKwYBBAHaRw8BAQdARKV8bgmTzoeW2R5iMTPLdaVt UFTOBqYAyDilX0+6fgzCwL8EGBYKATEFgmFv94kJENFs7Fjq31NNRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ+7Fi9LEwatdKe3dhje2YLGZ FMVWPiVJ5/UeFoRWh9OmApsCvqAEGRYKAG8FgmFv94kJEGPFT73RDgDjRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ/gxCghz/sWDHFeSyweS uXR9iMPQZicUiXJE7AJCF/zkFiEEb6PUv7xF1fJLIIU2Y8VPvdEOAOMAAKKwAP9n juNh2BVR98CY90r4ak/BEO6nv4aTDwG+7s58YS+gnwD/Z5Xp97Gvh29RbxECIwl4 2L9Bv7zCTHRLozSMnSIYDAsWIQTOOYvmU4lUjsIzT+jRbOxY6t9TTQAAbx8BANCx +gMQLOYRmJbcfXHr0WATgaeiGYHB4xXvLpfgZbkZAQCqDrXXS3B1VqpEL8ISX2Xh bFoeGcZgnEkSD4SiECnfBQ== =gA2v -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/trivial/bob-priv.pgp000064400000000000000000000027561046102023000201470ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 94E2 EADB A4C3 472A 3832 D5A1 C749 E561 EAD4 4914 Comment: xVgEYW/3iRYJKwYBBAHaRw8BAQdAaTuo6QJUO97wvBRzLjrr3TtHWNDmsqfNW822 cxziIXcAAQCG0uNti6z7Et1BTLK+JYGozmpErc3iVmdCSioixAHRlBCswsALBB8W CgB9BYJhb/eJAwsJBwkQx0nlYerUSRRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnjlV20MqOvSg6gw8Bd7R71EPk3AKN+sdDlRLzv+U4s/8D FQoIApsBAh4BFiEElOLq26TDRyo4MtWhx0nlYerUSRQAANUxAQDfSbDN5kf5n7HP DA7+IwDx35ntRW9ZM33kgBhK8XKFwgD/WElVFCE57uWp/KRKvlb365iN/hpVB3MB 6kcHjWc7sgnNDjxib2JAc29tZS5vcmc+wsAOBBMWCgCABYJhb/eJAwsJBwkQx0nl YerUSRRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnEC10 5kLhgQa6r60HKfWwCUUXnjOohqChmcMmgLhbyYsDFQoIApkBApsBAh4BFiEElOLq 26TDRyo4MtWhx0nlYerUSRQAACsZAQC1WdG375k4mRnUXcJpjddaPI1u2OA5dN6g cTOJp5SJqQD5AfGh2nHSamskxlwBxKQmLIp+Ebm9DK6S/LB1y1RhzwjHWARhb/eJ FgkrBgEEAdpHDwEBB0AsNtNr10tgDuOVAnoJWtwXU+TYtOK1NFJpj2/VXRIhGAAA /2zDkE2Ew9xsbtHMoq7H9eNnVhJ23lCSZkz8lwfxkgE8EqXCwL8EGBYKATEFgmFv 94kJEMdJ5WHq1EkURxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ41GH0QqllsQALkEaVHCZ1En57MWMtsVFME4MydqRO10ApsCvqAEGRYKAG8F gmFv94kJEOs6vG392C4JRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ86fkomLBePz/7g5xsLGlrZYC2aU3jyvKoG42C7SnNW5FiEEDPykgvvB yzNGvjaI6zq8bf3YLgkAABF6AQDtFX16qWvNF6ns6HQtEMPrNehqZu7I6220lBEo T84qUAEAzIgdr/lXc7iV+yl8jSCG5MzFM9zzWtFxESHBi6pc3AMWIQSU4urbpMNH Kjgy1aHHSeVh6tRJFAAAQHQBAODJWp1jEdvVeYZsqqbMAruEKUZcOSoaOeA6Hqve XyhAAP4jffQTxkcTQ8FYnpFvphea08Sy9ywSB+b+k3Rq6BTsDw== =bEOD -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/trivial/bob.pgp000064400000000000000000000030771046102023000171660ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYW/3iRYJKwYBBAHaRw8BAQdAaTuo6QJUO97wvBRzLjrr3TtHWNDmsqfNW822 cxziIXfCwAsEHxYKAH0FgmFv94kDCwkHCRDHSeVh6tRJFEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeOVXbQyo69KDqDDwF3tHvUQ+TcAo36 x0OVEvO/5Tiz/wMVCggCmwECHgEWIQSU4urbpMNHKjgy1aHHSeVh6tRJFAAA1TEB AN9JsM3mR/mfsc8MDv4jAPHfme1Fb1kzfeSAGErxcoXCAP9YSVUUITnu5an8pEq+ VvfrmI3+GlUHcwHqRweNZzuyCc0OPGJvYkBzb21lLm9yZz7CwA4EExYKAIAFgmFv 94kDCwkHCRDHSeVh6tRJFEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lh LXBncC5vcmcQLXTmQuGBBrqvrQcp9bAJRReeM6iGoKGZwyaAuFvJiwMVCggCmQEC mwECHgEWIQSU4urbpMNHKjgy1aHHSeVh6tRJFAAAKxkBALVZ0bfvmTiZGdRdwmmN 11o8jW7Y4Dl03qBxM4mnlImpAPkB8aHacdJqayTGXAHEpCYsin4Rub0MrpL8sHXL VGHPCMLAAwQQFgoAdQWCYXAFSQWDCWeaOwkQE97dmg/lGldHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnQXhNpXB+3MHzGa1xoefNExdGLVxZ YUjz7aFcAhoaKRYWIQQ3B3E3Sb1zXwy91VUT3t2aD+UaVwAAtvoBANTItWBApjgY /JhR6iODkuzs0NgUa8FB7dciX0NKcCvuAPsFEsZ8MvZNpDWrwygyZqBXrfGeVF9X X5gea+YjPszJD84zBGFv94kWCSsGAQQB2kcPAQEHQCw202vXS2AO45UCegla3BdT 5Ni04rU0UmmPb9VdEiEYwsC/BBgWCgExBYJhb/eJCRDHSeVh6tRJFEcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeNRh9EKpZbEAC5BGlRwmdR J+ezFjLbFRTBODMnakTtdAKbAr6gBBkWCgBvBYJhb/eJCRDrOrxt/dguCUcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfOn5KJiwXj8/+4OcbC xpa2WAtmlN48ryqBuNgu0pzVuRYhBAz8pIL7wcszRr42iOs6vG392C4JAAARegEA 7RV9eqlrzRep7Oh0LRDD6zXoambuyOtttJQRKE/OKlABAMyIHa/5V3O4lfspfI0g huTMxTPc81rRcREhwYuqXNwDFiEElOLq26TDRyo4MtWhx0nlYerUSRQAAEB0AQDg yVqdYxHb1XmGbKqmzAK7hClGXDkqGjngOh6r3l8oQAD+I330E8ZHE0PBWJ6Rb6YX mtPEsvcsEgfm/pN0augU7A8= =6K6x -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/trivial/ca-priv.pgp000064400000000000000000000027511046102023000177630ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 3707 7137 49BD 735F 0CBD D555 13DE DD9A 0FE5 1A57 Comment: xVgEYW/3iRYJKwYBBAHaRw8BAQdAnjTe1KqODINdZOIHuaG8s9aOoJxNJ+CunEI5 XM3nCGYAAP9mGukpEKZuLo8qzsi57pcIBDPFQOnOrrC/ErZW2QKVYRB3wsALBB8W CgB9BYJhb/eJAwsJBwkQE97dmg/lGldHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn1/d9UkyzNCZrOj/VuL/FhoYJn7rmjk0/FJrG8eeb0vAD FQoIApsBAh4BFiEENwdxN0m9c18MvdVVE97dmg/lGlcAAMvoAP9ZTF8Tc8UC240L K4qACovpNFm9icZSVNf/W1phllLu/AD+IFFwGHO3lmGuPYorhndgiMJzLvvv+oAN rQlPTo9wWwnNDTxjYUBzb21lLm9yZz7CwA4EExYKAIAFgmFv94kDCwkHCRAT3t2a D+UaV0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmemk6RE Yu+Dv+JFIScmziK4QoDI86p7aFjXS2Qj575e/QMVCggCmQECmwECHgEWIQQ3B3E3 Sb1zXwy91VUT3t2aD+UaVwAAK3QA/RHhRvDspReWspDu3OrsRKH9w2nwMw8yKW2e azQtY6w4AQDlIzz+M/WNONDLD1WWlJwGP9Qs9xJzUpsFMl/JMOaHDsdYBGFv94kW CSsGAQQB2kcPAQEHQHCTaKwm4GF8Pq/4yELj2mDQeavJtS5tseDG7PNofRqtAAD+ JPERZn8thWo7TNqqSf9Mg3+jh48bAw/AQxZABMQB3iENzcLAvwQYFgoBMQWCYW/3 iQkQE97dmg/lGldHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3JnurmBLFSJNEuXMY4UgKFs70/CTuhFVQ9VeXI1byqzbAUCmwK+oAQZFgoAbwWC YW/3iQkQN25smyDQb4tHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnkMbbnRS25wwHSJHg2Br2P0gxiv/Fo2Y+jiHmgfZTfV8WIQRK9FYnZZuJ hmGVhwA3bmybINBviwAAVqMA/j1pWaOhw/xNZrIgs27EBN5MpnpzttM4vcDvSura VkoxAQD3ycJdz++Q37mRZO6BX7NXRLtd2OrKhTV7VgHb/aUgDhYhBDcHcTdJvXNf DL3VVRPe3ZoP5RpXAABW1AEAvqu8yF16QLGD7YJGRS8BOz+hU+jMHHzULFiU4UrN 5dsBALt8Ne3relJuOtmMgO/3vKGKKH9I5hOs5vCfq6YifbwM =LU/6 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/trivial/ca.pgp000064400000000000000000000031431046102023000170010ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYW/3iRYJKwYBBAHaRw8BAQdAnjTe1KqODINdZOIHuaG8s9aOoJxNJ+CunEI5 XM3nCGbCwAsEHxYKAH0FgmFv94kDCwkHCRAT3t2aD+UaV0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfX931STLM0Jms6P9W4v8WGhgmfuuaO TT8Umsbx55vS8AMVCggCmwECHgEWIQQ3B3E3Sb1zXwy91VUT3t2aD+UaVwAAy+gA /1lMXxNzxQLbjQsrioAKi+k0Wb2JxlJU1/9bWmGWUu78AP4gUXAYc7eWYa49iiuG d2CIwnMu++/6gA2tCU9Oj3BbCc0NPGNhQHNvbWUub3JnPsLADgQTFgoAgAWCYW/3 iQMLCQcJEBPe3ZoP5RpXRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ6aTpERi74O/4kUhJybOIrhCgMjzqntoWNdLZCPnvl79AxUKCAKZAQKb AQIeARYhBDcHcTdJvXNfDL3VVRPe3ZoP5RpXAAArdAD9EeFG8OylF5aykO7c6uxE of3DafAzDzIpbZ5rNC1jrDgBAOUjPP4z9Y040MsPVZaUnAY/1Cz3EnNSmwUyX8kw 5ocOwsAfBBAWCgCRBYJhcAVJBYMJZ5o7A4UBKBeGPFtePl0rW0AuXXNvbWVcLm9y Zz4kAAkQ0WzsWOrfU01HFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnTJBFIWL2tBbfuUxHvEXeqG+eYezdu9/ZHLRGhPmaJSgWIQTOOYvmU4lU jsIzT+jRbOxY6t9TTQAAqEIBAOFaZ5WNUYgzLQm0cONZ18NcETl5CLtXs5nAvkOy RCALAP9I9XXLsTZ3yhrQ2DLxY0Ofc2AYnIZbSUoH/Mp4B61oDs4zBGFv94kWCSsG AQQB2kcPAQEHQHCTaKwm4GF8Pq/4yELj2mDQeavJtS5tseDG7PNofRqtwsC/BBgW CgExBYJhb/eJCRAT3t2aD+UaV0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcme6uYEsVIk0S5cxjhSAoWzvT8JO6EVVD1V5cjVvKrNsBQKbAr6g BBkWCgBvBYJhb/eJCRA3bmybINBvi0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmeQxtudFLbnDAdIkeDYGvY/SDGK/8WjZj6OIeaB9lN9XxYh BEr0Vidlm4mGYZWHADdubJsg0G+LAABWowD+PWlZo6HD/E1msiCzbsQE3kymenO2 0zi9wO9K6tpWSjEBAPfJwl3P75DfuZFk7oFfs1dEu13Y6sqFNXtWAdv9pSAOFiEE NwdxN0m9c18MvdVVE97dmg/lGlcAAFbUAQC+q7zIXXpAsYPtgkZFLwE7P6FT6Mwc fNQsWJThSs3l2wEAu3w17et6Um462YyA7/e8oYoof0jmE6zm8J+rpiJ9vAw= =rszw -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/trivial/carol-priv.pgp000064400000000000000000000027651046102023000205050ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: B20E 8ED3 1EB5 C0FD EB47 09EA 526D 10B8 F33C 0349 Comment: xVgEYW/3ihYJKwYBBAHaRw8BAQdA0emGnngjmseNgn3yZ3ZWb7/69PXAlY7dDkQf dI/ZRD8AAP41YnJCjw3hN8y2svwD4eTqbzZZuLpBTjI65HHQqqGb5xI8wsALBB8W CgB9BYJhb/eKAwsJBwkQUm0QuPM8A0lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnK8noaVR6QRwCpiwh6IUTKF2WoBb868+rV8Oz/Ixd1QkD FQoIApsBAh4BFiEEsg6O0x61wP3rRwnqUm0QuPM8A0kAAHQRAQD867IN8AeCp9N3 ZtHNjNPsjag+IH+KFXRZS5RzzyP82QEAh7SinfhixVAotT0jH4ltlN9GR1idOA6u JjaXMdHn6gTNETxjYXJvbEBvdGhlci5vcmc+wsAOBBMWCgCABYJhb/eKAwsJBwkQ Um0QuPM8A0lHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn SlZnsXzU+kGtth2nokFZ1uXRWoefUBYiVHVHL65S+b0DFQoIApkBApsBAh4BFiEE sg6O0x61wP3rRwnqUm0QuPM8A0kAABcUAQDiNebTOePQL9h7olgc6d4amgWB8JbL uTH6pHTMomGhygD/ba9hhvSD4vop2j6BMhNqJsehZiTO1yKyolyKs43PxgnHWARh b/eKFgkrBgEEAdpHDwEBB0C8cR5HbR4L7jlSwJpR1/GQb8KQRjPPLIJmT+BzhFEN VAAA/2+rKQT+4XTfGqdlU5J1cnKprFayhk/OIVqhRxMI69HIEN7CwL8EGBYKATEF gmFv94oJEFJtELjzPANJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZyyvZrTVCn1hbMFSGPoXmek6QbeFvJIxDH8IiTgx2LXaApsCvqAEGRYK AG8FgmFv94oJEFVL1AWo5KwsRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZ5vdUn08uTdpCKTyvFDQiOYJbemhOguSoBlGbunbvYXWFiEEZsOh vCD6arW5g7qnVUvUBajkrCwAAGuvAQCb2J/W/pV0q7AOLDFJ3PmHp6LXdEFyMM8M OsF9HXF0ewD/cqW1f0GnZpUqppVNWJ5UaxzwH4LJN2Syuy5dZgv5PAAWIQSyDo7T HrXA/etHCepSbRC48zwDSQAAsIcBAL9fexChDBcBlscpSSmtzUbheqZRftsm4rzr UlzU3bknAP413jTBeSQItsUjpvwBLM3jFohGLRTI8gu96jWvTXKZBA== =tanG -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/trivial/carol.pgp000064400000000000000000000031031046102023000175120ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEYW/3ihYJKwYBBAHaRw8BAQdA0emGnngjmseNgn3yZ3ZWb7/69PXAlY7dDkQf dI/ZRD/CwAsEHxYKAH0FgmFv94oDCwkHCRBSbRC48zwDSUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcryehpVHpBHAKmLCHohRMoXZagFvzr z6tXw7P8jF3VCQMVCggCmwECHgEWIQSyDo7THrXA/etHCepSbRC48zwDSQAAdBEB APzrsg3wB4Kn03dm0c2M0+yNqD4gf4oVdFlLlHPPI/zZAQCHtKKd+GLFUCi1PSMf iW2U30ZHWJ04Dq4mNpcx0efqBM0RPGNhcm9sQG90aGVyLm9yZz7CwA4EExYKAIAF gmFv94oDCwkHCRBSbRC48zwDSUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmdKVmexfNT6Qa22HaeiQVnW5dFah59QFiJUdUcvrlL5vQMVCggC mQECmwECHgEWIQSyDo7THrXA/etHCepSbRC48zwDSQAAFxQBAOI15tM549Av2Hui WBzp3hqaBYHwlsu5MfqkdMyiYaHKAP9tr2GG9IPi+inaPoEyE2omx6FmJM7XIrKi XIqzjc/GCcLAAwQQFgoAdQWCYXAFSQWDCWeaOwkQE97dmg/lGldHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnOs7fS8AFtZ2MiNpNMyDVGM14 /aVi34dlIo9NtA/tNeEWIQQ3B3E3Sb1zXwy91VUT3t2aD+UaVwAA3v8A/3ipfonn ytY4bhnnDg9jARThrlinZk4y+sfJcdPFtYhWAP4tpJD+rlCF/K5+B5VnGPrXVscx H09xMa1vFBrRaL/sBM4zBGFv94oWCSsGAQQB2kcPAQEHQLxxHkdtHgvuOVLAmlHX 8ZBvwpBGM88sgmZP4HOEUQ1UwsC/BBgWCgExBYJhb/eKCRBSbRC48zwDSUcUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcsr2a01Qp9YWzBUhj6 F5npOkG3hbySMQx/CIk4Mdi12gKbAr6gBBkWCgBvBYJhb/eKCRBVS9QFqOSsLEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeb3VJ9PLk3aQik 8rxQ0IjmCW3poToLkqAZRm7p272F1hYhBGbDobwg+mq1uYO6p1VL1AWo5KwsAABr rwEAm9if1v6VdKuwDiwxSdz5h6ei13RBcjDPDDrBfR1xdHsA/3KltX9Bp2aVKqaV TVieVGsc8B+CyTdksrsuXWYL+TwAFiEEsg6O0x61wP3rRwnqUm0QuPM8A0kAALCH AQC/X3sQoQwXAZbHKUkprc1G4XqmUX7bJuK861Jc1N25JwD+Nd40wXkkCLbFI6b8 ASzN4xaIRi0UyPILveo1r01ymQQ= =tlgc -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/trivial.pgp000064400000000000000000000134561046102023000164260ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- 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 c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn+DEKCHP+xYMcV5LLB5K5dH2I w9BmJxSJckTsAkIX/OQWIQRvo9S/vEXV8ksghTZjxU+90Q4A4wAAorAA/2eO42HY FVH3wJj3SvhqT8EQ7qe/hpMPAb7uznxhL6CfAP9nlen3sa+Hb1FvEQIjCXjYv0G/ vMJMdEujNIydIhgMCxYhBM45i+ZTiVSOwjNP6NFs7Fjq31NNAABvHwEA0LH6AxAs 5hGYltx9cevRYBOBp6IZgcHjFe8ul+BluRkBAKoOtddLcHVWqkQvwhJfZeFsWh4Z xmCcSRIPhKIQKd8FxjMEYW/3iRYJKwYBBAHaRw8BAQdAaTuo6QJUO97wvBRzLjrr 3TtHWNDmsqfNW822cxziIXfCwAsEHxYKAH0FgmFv94kDCwkHCRDHSeVh6tRJFEcU AAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeOVXbQyo69KDqD DwF3tHvUQ+TcAo36x0OVEvO/5Tiz/wMVCggCmwECHgEWIQSU4urbpMNHKjgy1aHH SeVh6tRJFAAA1TEBAN9JsM3mR/mfsc8MDv4jAPHfme1Fb1kzfeSAGErxcoXCAP9Y SVUUITnu5an8pEq+VvfrmI3+GlUHcwHqRweNZzuyCc0OPGJvYkBzb21lLm9yZz7C wA4EExYKAIAFgmFv94kDCwkHCRDHSeVh6tRJFEcUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmcQLXTmQuGBBrqvrQcp9bAJRReeM6iGoKGZwyaA uFvJiwMVCggCmQECmwECHgEWIQSU4urbpMNHKjgy1aHHSeVh6tRJFAAAKxkBALVZ 0bfvmTiZGdRdwmmN11o8jW7Y4Dl03qBxM4mnlImpAPkB8aHacdJqayTGXAHEpCYs in4Rub0MrpL8sHXLVGHPCMLAAwQQFgoAdQWCYXAFSQWDCWeaOwkQE97dmg/lGldH FAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnQXhNpXB+3MHz Ga1xoefNExdGLVxZYUjz7aFcAhoaKRYWIQQ3B3E3Sb1zXwy91VUT3t2aD+UaVwAA tvoBANTItWBApjgY/JhR6iODkuzs0NgUa8FB7dciX0NKcCvuAPsFEsZ8MvZNpDWr wygyZqBXrfGeVF9XX5gea+YjPszJD84zBGFv94kWCSsGAQQB2kcPAQEHQCw202vX S2AO45UCegla3BdT5Ni04rU0UmmPb9VdEiEYwsC/BBgWCgExBYJhb/eJCRDHSeVh 6tRJFEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeNRh9E KpZbEAC5BGlRwmdRJ+ezFjLbFRTBODMnakTtdAKbAr6gBBkWCgBvBYJhb/eJCRDr Orxt/dguCUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfO n5KJiwXj8/+4OcbCxpa2WAtmlN48ryqBuNgu0pzVuRYhBAz8pIL7wcszRr42iOs6 vG392C4JAAARegEA7RV9eqlrzRep7Oh0LRDD6zXoambuyOtttJQRKE/OKlABAMyI Ha/5V3O4lfspfI0ghuTMxTPc81rRcREhwYuqXNwDFiEElOLq26TDRyo4MtWhx0nl YerUSRQAAEB0AQDgyVqdYxHb1XmGbKqmzAK7hClGXDkqGjngOh6r3l8oQAD+I330 E8ZHE0PBWJ6Rb6YXmtPEsvcsEgfm/pN0augU7A/GMwRhb/eKFgkrBgEEAdpHDwEB B0DR6YaeeCOax42CffJndlZvv/r09cCVjt0ORB90j9lEP8LACwQfFgoAfQWCYW/3 igMLCQcJEFJtELjzPANJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZyvJ6GlUekEcAqYsIeiFEyhdlqAW/OvPq1fDs/yMXdUJAxUKCAKbAQIe ARYhBLIOjtMetcD960cJ6lJtELjzPANJAAB0EQEA/OuyDfAHgqfTd2bRzYzT7I2o PiB/ihV0WUuUc88j/NkBAIe0op34YsVQKLU9Ix+JbZTfRkdYnTgOriY2lzHR5+oE zRE8Y2Fyb2xAb3RoZXIub3JnPsLADgQTFgoAgAWCYW/3igMLCQcJEFJtELjzPANJ RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ0pWZ7F81PpB rbYdp6JBWdbl0VqHn1AWIlR1Ry+uUvm9AxUKCAKZAQKbAQIeARYhBLIOjtMetcD9 60cJ6lJtELjzPANJAAAXFAEA4jXm0znj0C/Ye6JYHOneGpoFgfCWy7kx+qR0zKJh ocoA/22vYYb0g+L6Kdo+gTITaibHoWYkztcisqJcirONz8YJwsADBBAWCgB1BYJh cAVJBYMJZ5o7CRAT3t2aD+UaV0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmc6zt9LwAW1nYyI2k0zINUYzXj9pWLfh2Uij020D+014RYhBDcH cTdJvXNfDL3VVRPe3ZoP5RpXAADe/wD/eKl+iefK1jhuGecOD2MBFOGuWKdmTjL6 x8lx08W1iFYA/i2kkP6uUIX8rn4HlWcY+tdWxzEfT3ExrW8UGtFov+wEzjMEYW/3 ihYJKwYBBAHaRw8BAQdAvHEeR20eC+45UsCaUdfxkG/CkEYzzyyCZk/gc4RRDVTC wL8EGBYKATEFgmFv94oJEFJtELjzPANJRxQAAAAAAB4AIHNhbHRAbm90YXRpb25z LnNlcXVvaWEtcGdwLm9yZyyvZrTVCn1hbMFSGPoXmek6QbeFvJIxDH8IiTgx2LXa ApsCvqAEGRYKAG8FgmFv94oJEFVL1AWo5KwsRxQAAAAAAB4AIHNhbHRAbm90YXRp b25zLnNlcXVvaWEtcGdwLm9yZ5vdUn08uTdpCKTyvFDQiOYJbemhOguSoBlGbunb vYXWFiEEZsOhvCD6arW5g7qnVUvUBajkrCwAAGuvAQCb2J/W/pV0q7AOLDFJ3PmH p6LXdEFyMM8MOsF9HXF0ewD/cqW1f0GnZpUqppVNWJ5UaxzwH4LJN2Syuy5dZgv5 PAAWIQSyDo7THrXA/etHCepSbRC48zwDSQAAsIcBAL9fexChDBcBlscpSSmtzUbh eqZRftsm4rzrUlzU3bknAP413jTBeSQItsUjpvwBLM3jFohGLRTI8gu96jWvTXKZ BA== =QO4G -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/trivial.sh000075500000000000000000000004121046102023000162410ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=trivial ${@:+"$@"} key alice@example.org key ca@some.org key bob@some.org key carol@other.org certify alice -a 40 -d 1 --domain some.org ca@some.org certify ca -a 120 bob@some.org certify ca -a 120 carol@other.org finish sequoia-wot-0.11.0/tests/data/userid-revoked/README.md000064400000000000000000000014041046102023000204410ustar 00000000000000If a User ID is revoked, then that overrides any later positive certification. We need to test three cases: 1. We are authenticating a root binding whose User ID was revoked in the past. 2. There is a valid path with length > 0 to a binding whose User ID is revoked. 3. There is a valid path to some binding. The path uses a certification of a revoked User ID. In first two cases, it should not be possible to authenticate the binding. In the latter case, the revocation of the User ID should not invalidate the delegation. To test this, we use the following network: ``` A | 2/60 at t1; 2/90 at t3 v B <- B's User ID is revoked at t2 | 1/60 at t1; 1/90 at t3 v C ``` Using the above network, we can test all three scenarios. sequoia-wot-0.11.0/tests/data/userid-revoked/alice-priv.pgp000064400000000000000000000027671046102023000217420ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 0167 2BB6 7E4B 4047 E5A4 EC0A 731C EA09 2C46 5FC8 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAhT+prBx3w03lEnZeQpaj+S12u/rPca03CKfq mwoG2CkAAP9VucCLtRCK/ZcW3Qr8zAye4VX2WdGIG5sRQekUymVB0BHNwsALBB8W CgB9BYJeC+EAAwsJBwkQcxzqCSxGX8hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnjsOwrhWktLaMSPgh4r2UBtw3xsMKOwIRaGtt56hNo7UD FQoIApsBAh4BFiEEAWcrtn5LQEflpOwKcxzqCSxGX8gAAK1UAP99PI4JXFKVUJiM ctS9TPNNK/4ZAc1a3SNmQy/v2Sd8WAD9EDtCFH5s24SSdjXzDDsfUOG09zCKC/81 BoY4LPqypAHNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRBzHOoJLEZfyEcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmcg70CbicwrIrAi5nay127AqUTP1IkvW1DTXnVgNGDNrQMVCggCmQECmwECHgEW IQQBZyu2fktAR+Wk7ApzHOoJLEZfyAAAI08A/RGKXP9tTDZi2fMg+pey8COX82mj hoM0MxUERSDpDfTaAP4pIc91558Cuuduow3NrhXrR77ZgmU6C1abd0fmB6GDDMdY BF4L4QAWCSsGAQQB2kcPAQEHQN1hfv5nhGuNh5Srcyd5cM02DIYVM6bQYQ+t+KLI sLsMAAEAhZJaqg7BErWcvf2ZDUrHseiYYDi9+c4aHtzH7qWoWRURkMLAvwQYFgoB MQWCXgvhAAkQcxzqCSxGX8hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnVwmw71qtbvQTuDP51sbcUyGxs7HWNqCt3rGZxPxxUtACmwK+oAQZ FgoAbwWCXgvhAAkQYUoYKCTWRPNHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3Jnjx6pXD60EgAcKV3yRFNmwK9FbvoDd9HQHjGRzyqg1c0WIQSn 9f1vX8j0e1BUqMJhShgoJNZE8wAA3E4A/3GMgYVKsqi96AzOgQz6kD8qH/C6xVJf euc6YPOEtyubAP9X2qcwaSdhFtXOrFSxv/aEDau7Y7qylYtxanYHOnY8CxYhBAFn K7Z+S0BH5aTsCnMc6gksRl/IAAB9/QD/ctpSj2pA69nQr5f/QDmNlFFZD1P2jPqy e6qr6DWNYyQBAJmt4k/mr10b84vv0h27V/5PJDXdRQpmtaThyRNDkK8O =0149 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/userid-revoked/alice.pgp000064400000000000000000000026241046102023000207540ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 0167 2BB6 7E4B 4047 E5A4 EC0A 731C EA09 2C46 5FC8 Comment: xjMEXgvhABYJKwYBBAHaRw8BAQdAhT+prBx3w03lEnZeQpaj+S12u/rPca03CKfq mwoG2CnCwAsEHxYKAH0Fgl4L4QADCwkHCRBzHOoJLEZfyEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeOw7CuFaS0toxI+CHivZQG3DfGwwo7 AhFoa23nqE2jtQMVCggCmwECHgEWIQQBZyu2fktAR+Wk7ApzHOoJLEZfyAAArVQA /308jglcUpVQmIxy1L1M800r/hkBzVrdI2ZDL+/ZJ3xYAP0QO0IUfmzbhJJ2NfMM Ox9Q4bT3MIoL/zUGhjgs+rKkAc0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEHMc6gksRl/IRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZyDvQJuJzCsisCLmdrLXbsCpRM/UiS9bUNNedWA0YM2tAxUK CAKZAQKbAQIeARYhBAFnK7Z+S0BH5aTsCnMc6gksRl/IAAAjTwD9EYpc/21MNmLZ 8yD6l7LwI5fzaaOGgzQzFQRFIOkN9NoA/ikhz3XnnwK6526jDc2uFetHvtmCZToL Vpt3R+YHoYMMzjMEXgvhABYJKwYBBAHaRw8BAQdA3WF+/meEa42HlKtzJ3lwzTYM hhUzptBhD634osiwuwzCwL8EGBYKATEFgl4L4QAJEHMc6gksRl/IRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1cJsO9arW70E7gz+dbG3FMh sbOx1jagrd6xmcT8cVLQApsCvqAEGRYKAG8Fgl4L4QAJEGFKGCgk1kTzRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ48eqVw+tBIAHCld8kRT ZsCvRW76A3fR0B4xkc8qoNXNFiEEp/X9b1/I9HtQVKjCYUoYKCTWRPMAANxOAP9x jIGFSrKovegMzoEM+pA/Kh/wusVSX3rnOmDzhLcrmwD/V9qnMGknYRbVzqxUsb/2 hA2ru2O6spWLcWp2Bzp2PAsWIQQBZyu2fktAR+Wk7ApzHOoJLEZfyAAAff0A/3La Uo9qQOvZ0K+X/0A5jZRRWQ9T9oz6snuqq+g1jWMkAQCZreJP5q9dG/OL79Idu1f+ TyQ13UUKZrWk4ckTQ5CvDg== =E6Qc -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/userid-revoked/bob-priv.pgp000064400000000000000000000027611046102023000214210ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: EA47 9A77 CD07 4458 EAFE 56B4 861B F42F F490 C581 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdABqG1qfe/zjOh5+XlsSH3d7ZwCnw8xDXCVPVr yjYr6dYAAQDU2ISWLkmmmOO6O+tRXCVEZJh3xoXYaA3+sXEZmFu5nhDjwsALBB8W CgB9BYJeC+EAAwsJBwkQhhv0L/SQxYFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnBVRPS/4yw2E6aYL1OKg4jqAPg19yI8Z9EqCHeMbVcfYD FQoIApsBAh4BFiEE6kead80HRFjq/la0hhv0L/SQxYEAAEm3AQCaoCf3ThKdDIgl VI0fDCGXCIQyHnBf+TlcP7uMDrTv/gEA110vUCXucs/rFWB2gvomgtagFzR9ZiLJ 5Nst7mmDtgXNETxib2JAZXhhbXBsZS5vcmc+wsANBBMWCgCABYJeC+EAAwsJBwkQ hhv0L/SQxYFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn o858dgBZngY8L734Rej+UxL2mwXmie0oWmWvnKMPjK8DFQoIApkBApsBAh4BFiEE 6kead80HRFjq/la0hhv0L/SQxYEAAFDLAP9hqhcFSkEofFC8wRNVjBlCio4PB311 E0h10MA07P4yFAD4hhZONPGxyHxRf29bsTFlVQGBuPqiTARivLAtopjJA8dYBF4L 4QAWCSsGAQQB2kcPAQEHQOqYatkqBIWEZYSJX5noiiTIL9yK63EmPFlMOC4V/mZu AAD/eKgbHQpu+0nWTax8HEv27Lt/VDSmN0AayOwXMXx5c4cPi8LAvwQYFgoBMQWC XgvhAAkQhhv0L/SQxYFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnOtscJFei2/sGwpWlfdQsY1QwAo7ebOxE+Lhq72wKwTkCmwK+oAQZFgoA bwWCXgvhAAkQmqpanVVz0WxHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3JnomYbhOmVG+3TqMBFzPuDqobsZUQKgG4L4YGyMCYRkKsWIQSjaZe1 qLx6ow8Jo86aqlqdVXPRbAAA4sEA/jfMQI4b6aGdHPg/R19xmFlNqBD9cpCdcXw5 9vBdeAbcAQC15CqqKtaLifpFwhbheRTS4Ink5d6N2e8H4qYr2zhQBRYhBOpHmnfN B0RY6v5WtIYb9C/0kMWBAAB7hQD/WuzstZwUYdsDcHEn0OwNYMOU+9X3cQMmkho6 xLhzQnwBAMAa8l6fyhmdQaNjAsmZtsBHx+2A/1isHJZutulrm6kH =ueeI -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/userid-revoked/bob.pgp000064400000000000000000000041571046102023000204440ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdABqG1qfe/zjOh5+XlsSH3d7ZwCnw8xDXCVPVr yjYr6dbCwAsEHxYKAH0Fgl4L4QADCwkHCRCGG/Qv9JDFgUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcFVE9L/jLDYTppgvU4qDiOoA+DX3Ij xn0SoId4xtVx9gMVCggCmwECHgEWIQTqR5p3zQdEWOr+VrSGG/Qv9JDFgQAASbcB AJqgJ/dOEp0MiCVUjR8MIZcIhDIecF/5OVw/u4wOtO/+AQDXXS9QJe5yz+sVYHaC +iaC1qAXNH1mIsnk2y3uaYO2Bc0RPGJvYkBleGFtcGxlLm9yZz7CwAwEMBYKAH4F gl5a+wAJEIYb9C/0kMWBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEt cGdwLm9yZ5Z9JHWKikOtsIlnM7jaIZmFvLZUrINN9nuTp1IbcMFyDh0gc29tZSBt ZXNzYWdlFiEE6kead80HRFjq/la0hhv0L/SQxYEAAO9nAP9zoGWHecQ0bf++lruu k3Xh7honN+4NASbu/PCD85vRvQEAwE0YDEZbOayhCtByT2gBDjz9KfjTMifiHjpT Oo8ABADCwA0EExYKAIAFgl4L4QADCwkHCRCGG/Qv9JDFgUcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmejznx2AFmeBjwvvfhF6P5TEvabBeaJ 7ShaZa+cow+MrwMVCggCmQECmwECHgEWIQTqR5p3zQdEWOr+VrSGG/Qv9JDFgQAA UMsA/2GqFwVKQSh8ULzBE1WMGUKKjg8HfXUTSHXQwDTs/jIUAPiGFk408bHIfFF/ b1uxMWVVAYG4+qJMBGK8sC2imMkDwsAHBBAWCgB5BYJeg9mABYMJZ5o7A4UCWgkQ cxzqCSxGX8hHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn WX4k1e0PuAI6uIWVDGpBIL7uo2NRHB3ZbtzmxwfeX0QWIQQBZyu2fktAR+Wk7Apz HOoJLEZfyAAAlo0A/1a3a5gskunGLpEpQcQ8Gnt56lTd6PPV+qCihfrH9CixAQDd YjOwKzS3l2Zy8clFdet69k3Rcrm9bUWFYwznthhjAcLABwQQFgoAeQWCXjS/gAWD CWeaOwOFAjwJEHMc6gksRl/IRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVv aWEtcGdwLm9yZwWhmINBE/P7pTZprhqHv7EXn8MXBMgLplIc2q7afLwqFiEEAWcr tn5LQEflpOwKcxzqCSxGX8gAAMKfAQCm729GdduQzsUfh26zm0mNE9BwwvczJ4sk 60ARzftGpwEAx5qW/ewqLbeBYNmMhNGOLIBoIP13jF+RnR7x0nxOIg3OMwReC+EA FgkrBgEEAdpHDwEBB0DqmGrZKgSFhGWEiV+Z6IokyC/ciutxJjxZTDguFf5mbsLA vwQYFgoBMQWCXgvhAAkQhhv0L/SQxYFHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnOtscJFei2/sGwpWlfdQsY1QwAo7ebOxE+Lhq72wKwTkC mwK+oAQZFgoAbwWCXgvhAAkQmqpanVVz0WxHFAAAAAAAHgAgc2FsdEBub3RhdGlv bnMuc2VxdW9pYS1wZ3Aub3JnomYbhOmVG+3TqMBFzPuDqobsZUQKgG4L4YGyMCYR kKsWIQSjaZe1qLx6ow8Jo86aqlqdVXPRbAAA4sEA/jfMQI4b6aGdHPg/R19xmFlN qBD9cpCdcXw59vBdeAbcAQC15CqqKtaLifpFwhbheRTS4Ink5d6N2e8H4qYr2zhQ BRYhBOpHmnfNB0RY6v5WtIYb9C/0kMWBAAB7hQD/WuzstZwUYdsDcHEn0OwNYMOU +9X3cQMmkho6xLhzQnwBAMAa8l6fyhmdQaNjAsmZtsBHx+2A/1isHJZutulrm6kH =TnIg -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/userid-revoked/carol-priv.pgp000064400000000000000000000027671046102023000217650ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 2128 73BB 9C4C C49F 8E5A 6FEA 78BC 5397 470B A7F0 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAnS+hF8lRTjRqZ9SmMLOuAVMGSUzTwGtulzbc vPhcvPQAAQCaU5bVxg1uFhkLfnJmWrRHYGdtx1GNs7264SLb82Ip/w/dwsALBB8W CgB9BYJeC+EAAwsJBwkQeLxTl0cLp/BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnafFLHWhTFu1UjWpdUc02tcoy7K1fMskS5415q4odmJAD FQoIApsBAh4BFiEEIShzu5xMxJ+OWm/qeLxTl0cLp/AAAPbIAQD480LIE92EH5vh 79qSLbAWbqTDTrIW1UasKSwGdsMcOAEAhhMKRSnJx3i6MYBnhIdnGZlvOrYYW+Yi IBSm6f6lDQLNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRB4vFOXRwun8EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmdj3ZuCg1W6HM4EaLL7Xju3dM3/P9zwJCQfiXGBvFDn0AMVCggCmQECmwECHgEW IQQhKHO7nEzEn45ab+p4vFOXRwun8AAA1kIA/ipADvmNJ7oCSOVCTX3kiA/fsyJ6 +duWev12PkEBsdx7AP91zFfhfoB/08OZKP4n/fIfTBsAudtz3zifef1TvFpKBMdY BF4L4QAWCSsGAQQB2kcPAQEHQGRGU6WM8GgoNpXOg873qCLtsY9S55PuMGdbezPT Urd9AAD+MmMCaV5sK1zG7bmmbyaz9gHpTyBEa/gT/VhYKpl+o0IPhcLAvwQYFgoB MQWCXgvhAAkQeLxTl0cLp/BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9p YS1wZ3Aub3Jn0qvZX4SgljRdXgCbe30YQqNsmIbLrtZ7xFFYgpwYpGkCmwK+oAQZ FgoAbwWCXgvhAAkQMagZ8wPhYItHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2Vx dW9pYS1wZ3Aub3JnwPmDoogMZDWNdzNJmb3HJVi1iNx6PuCUkPWNlI/NQU0WIQSe hQ3N6g8K45HmRPMxqBnzA+FgiwAA0P0BAO5MvWMW1jAwVOunnazegxVxoVKQVRY7 QbwQUfttLFPVAQCA1OFvFPzz9+2Ay6Rfx/fUKzvQG8W2dYoBDg4sddWMABYhBCEo c7ucTMSfjlpv6ni8U5dHC6fwAABX5AEAzWiZijALhZPuZxvrQhIHPbOKfvic2g1K xoUAfkwktgsA/3Z7QZpihCLicLhwcB0k4zoOa/HC+nm/sYt23KUlnRIP =mkh8 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/userid-revoked/carol.pgp000064400000000000000000000035331046102023000207770ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAnS+hF8lRTjRqZ9SmMLOuAVMGSUzTwGtulzbc vPhcvPTCwAsEHxYKAH0Fgl4L4QADCwkHCRB4vFOXRwun8EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdp8UsdaFMW7VSNal1RzTa1yjLsrV8y yRLnjXmrih2YkAMVCggCmwECHgEWIQQhKHO7nEzEn45ab+p4vFOXRwun8AAA9sgB APjzQsgT3YQfm+Hv2pItsBZupMNOshbVRqwpLAZ2wxw4AQCGEwpFKcnHeLoxgGeE h2cZmW86thhb5iIgFKbp/qUNAs0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEHi8U5dHC6fwRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ2Pdm4KDVboczgRosvteO7d0zf8/3PAkJB+JcYG8UOfQAxUK CAKZAQKbAQIeARYhBCEoc7ucTMSfjlpv6ni8U5dHC6fwAADWQgD+KkAO+Y0nugJI 5UJNfeSID9+zInr525Z6/XY+QQGx3HsA/3XMV+F+gH/Tw5ko/if98h9MGwC523Pf OJ95/VO8WkoEwsAHBBAWCgB5BYJeg9mABYMJZ5o7A4UBWgkQhhv0L/SQxYFHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn8o6Xxq7Ywz4azIxu hm8vVKUHLqVMazG5H1HjoY15C8wWIQTqR5p3zQdEWOr+VrSGG/Qv9JDFgQAA6xAB AIaayWiR+KCK06P0235EaoUWaSvAze0g19pGz4dFkWJZAPwM4Jo/bUHw94lIQywV Q4tElPZPzqFm5R/FHYZELU0/DsLABwQQFgoAeQWCXjS/gAWDCWeaOwOFATwJEIYb 9C/0kMWBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZzvQ 3EjNB5ZbpTbqZnk9a58hqgzPB3KS8fiNGTsasbDgFiEE6kead80HRFjq/la0hhv0 L/SQxYEAAKwhAQD5QbkwYqkuJ/JPTjpSD2Dy5xvQT0Asn00d/UPRlXgQLQEA3ptN a5PGbWFUOxrP9Tm0FYDTP4+v8LSPyQIkbu402AbOMwReC+EAFgkrBgEEAdpHDwEB B0BkRlOljPBoKDaVzoPO96gi7bGPUueT7jBnW3sz01K3fcLAvwQYFgoBMQWCXgvh AAkQeLxTl0cLp/BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Au b3Jn0qvZX4SgljRdXgCbe30YQqNsmIbLrtZ7xFFYgpwYpGkCmwK+oAQZFgoAbwWC XgvhAAkQMagZ8wPhYItHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1w Z3Aub3JnwPmDoogMZDWNdzNJmb3HJVi1iNx6PuCUkPWNlI/NQU0WIQSehQ3N6g8K 45HmRPMxqBnzA+FgiwAA0P0BAO5MvWMW1jAwVOunnazegxVxoVKQVRY7QbwQUftt LFPVAQCA1OFvFPzz9+2Ay6Rfx/fUKzvQG8W2dYoBDg4sddWMABYhBCEoc7ucTMSf jlpv6ni8U5dHC6fwAABX5AEAzWiZijALhZPuZxvrQhIHPbOKfvic2g1KxoUAfkwk tgsA/3Z7QZpihCLicLhwcB0k4zoOa/HC+nm/sYt23KUlnRIP =yURh -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/userid-revoked.pgp000064400000000000000000000121471046102023000177000ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAhT+prBx3w03lEnZeQpaj+S12u/rPca03CKfq mwoG2CnCwAsEHxYKAH0Fgl4L4QADCwkHCRBzHOoJLEZfyEcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmeOw7CuFaS0toxI+CHivZQG3DfGwwo7 AhFoa23nqE2jtQMVCggCmwECHgEWIQQBZyu2fktAR+Wk7ApzHOoJLEZfyAAArVQA /308jglcUpVQmIxy1L1M800r/hkBzVrdI2ZDL+/ZJ3xYAP0QO0IUfmzbhJJ2NfMM Ox9Q4bT3MIoL/zUGhjgs+rKkAc0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEHMc6gksRl/IRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZyDvQJuJzCsisCLmdrLXbsCpRM/UiS9bUNNedWA0YM2tAxUK CAKZAQKbAQIeARYhBAFnK7Z+S0BH5aTsCnMc6gksRl/IAAAjTwD9EYpc/21MNmLZ 8yD6l7LwI5fzaaOGgzQzFQRFIOkN9NoA/ikhz3XnnwK6526jDc2uFetHvtmCZToL Vpt3R+YHoYMMzjMEXgvhABYJKwYBBAHaRw8BAQdA3WF+/meEa42HlKtzJ3lwzTYM hhUzptBhD634osiwuwzCwL8EGBYKATEFgl4L4QAJEHMc6gksRl/IRxQAAAAAAB4A IHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ1cJsO9arW70E7gz+dbG3FMh sbOx1jagrd6xmcT8cVLQApsCvqAEGRYKAG8Fgl4L4QAJEGFKGCgk1kTzRxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ48eqVw+tBIAHCld8kRT ZsCvRW76A3fR0B4xkc8qoNXNFiEEp/X9b1/I9HtQVKjCYUoYKCTWRPMAANxOAP9x jIGFSrKovegMzoEM+pA/Kh/wusVSX3rnOmDzhLcrmwD/V9qnMGknYRbVzqxUsb/2 hA2ru2O6spWLcWp2Bzp2PAsWIQQBZyu2fktAR+Wk7ApzHOoJLEZfyAAAff0A/3La Uo9qQOvZ0K+X/0A5jZRRWQ9T9oz6snuqq+g1jWMkAQCZreJP5q9dG/OL79Idu1f+ TyQ13UUKZrWk4ckTQ5CvDsYzBF4L4QAWCSsGAQQB2kcPAQEHQJ0voRfJUU40amfU pjCzrgFTBklM08Brbpc23Lz4XLz0wsALBB8WCgB9BYJeC+EAAwsJBwkQeLxTl0cL p/BHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnafFLHWhT Fu1UjWpdUc02tcoy7K1fMskS5415q4odmJADFQoIApsBAh4BFiEEIShzu5xMxJ+O Wm/qeLxTl0cLp/AAAPbIAQD480LIE92EH5vh79qSLbAWbqTDTrIW1UasKSwGdsMc OAEAhhMKRSnJx3i6MYBnhIdnGZlvOrYYW+YiIBSm6f6lDQLNEzxjYXJvbEBleGFt cGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkHCRB4vFOXRwun8EcUAAAAAAAeACBz YWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmdj3ZuCg1W6HM4EaLL7Xju3dM3/ P9zwJCQfiXGBvFDn0AMVCggCmQECmwECHgEWIQQhKHO7nEzEn45ab+p4vFOXRwun 8AAA1kIA/ipADvmNJ7oCSOVCTX3kiA/fsyJ6+duWev12PkEBsdx7AP91zFfhfoB/ 08OZKP4n/fIfTBsAudtz3zifef1TvFpKBMLABwQQFgoAeQWCXoPZgAWDCWeaOwOF AVoJEIYb9C/0kMWBRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdw Lm9yZ/KOl8au2MM+GsyMboZvL1SlBy6lTGsxuR9R46GNeQvMFiEE6kead80HRFjq /la0hhv0L/SQxYEAAOsQAQCGmslokfigitOj9Nt+RGqFFmkrwM3tINfaRs+HRZFi WQD8DOCaP21B8PeJSEMsFUOLRJT2T86hZuUfxR2GRC1NPw7CwAcEEBYKAHkFgl40 v4AFgwlnmjsDhQE8CRCGG/Qv9JDFgUcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5z ZXF1b2lhLXBncC5vcmc70NxIzQeWW6U26mZ5PWufIaoMzwdykvH4jRk7GrGw4BYh BOpHmnfNB0RY6v5WtIYb9C/0kMWBAACsIQEA+UG5MGKpLifyT046Ug9g8ucb0E9A LJ9NHf1D0ZV4EC0BAN6bTWuTxm1hVDsaz/U5tBWA0z+Pr/C0j8kCJG7uNNgGzjME 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 a5upBw== =XPdm -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/userid-revoked.sh000075500000000000000000000006031046102023000175210ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=userid-revoked ${@:+"$@"} set -e t0=20200101 t1=20200201 t2=20200301 t3=20200401 key -t $t0 alice key -t $t0 bob key -t $t0 carol set -x certify -t $t1 alice -a 60 -d 2 bob certify -t $t1 bob -a 60 -d 1 carol revoke -t $t2 -u '' bob retired certify -t $t3 alice -a 90 -d 2 bob certify -t $t3 bob -a 90 -d 1 carol finish sequoia-wot-0.11.0/tests/data/zero-trust/README.md000064400000000000000000000005001046102023000176430ustar 00000000000000If the most recent certification has a trust amount of 0, then that edge should not be considered. To test this, we use the following network: ``` A | 1/120 v B | 1/60 at t1; 1/0 at t2 v C ``` At t1, there is a path from A to C. At t2, there should be no path (not even one with a trust amount of 0!). sequoia-wot-0.11.0/tests/data/zero-trust/alice-priv.pgp000064400000000000000000000015651046102023000211430ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: 931E 51F9 9B89 6497 83A1 DFF2 6526 6E28 2460 40C2 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAM5OKjytaLNiib8GiEw777qWtdBVk3FCmbYIA Q5KgF0sAAQC8sb8/4YcUVhW6/RaizP+0MET3ovV5lZNLbmDICNLuQxHQwsALBB8W CgB9BYJeC+EAAwsJBwkQZSZuKCRgQMJHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jn8WQsXixkuTQCh3ow4Xikocbx9z91ffLopPtqwqqijwcD FQoIApsBAh4BFiEEkx5R+ZuJZJeDod/yZSZuKCRgQMIAAOEbAP4vFc9CcN9uahZ8 c9O+per0QzQH56tOo2zPmc1xXeRpMAD/fUjeYBa6oHEzAYlC+efjzQe46TLbrM0y LrL3/DO54gHNEzxhbGljZUBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRBlJm4oJGBAwkcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmf4PpyVWnZ2VH5MPxaQ3xgxknqH5rBafCcHycMOSzJeqQMVCggCmQECmwECHgEW IQSTHlH5m4lkl4Oh3/JlJm4oJGBAwgAAP/MA/3EiKAj6yA2ln1JytAmEtAzMGt54 NaejOTMSoQ6yKPHHAQCJqj28rEuiGkm9PhmuDTZnDtzqWFsmooHgHZHpCfi8Ag== =Siw1 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/zero-trust/alice.pgp000064400000000000000000000014771046102023000201670ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Comment: 931E 51F9 9B89 6497 83A1 DFF2 6526 6E28 2460 40C2 Comment: xjMEXgvhABYJKwYBBAHaRw8BAQdAM5OKjytaLNiib8GiEw777qWtdBVk3FCmbYIA Q5KgF0vCwAsEHxYKAH0Fgl4L4QADCwkHCRBlJm4oJGBAwkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfxZCxeLGS5NAKHejDheKShxvH3P3V9 8uik+2rCqqKPBwMVCggCmwECHgEWIQSTHlH5m4lkl4Oh3/JlJm4oJGBAwgAA4RsA /i8Vz0Jw325qFnxz076l6vRDNAfnq06jbM+ZzXFd5GkwAP99SN5gFrqgcTMBiUL5 5+PNB7jpMtuszTIusvf8M7niAc0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEGUmbigkYEDCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ/g+nJVadnZUfkw/FpDfGDGSeofmsFp8JwfJww5LMl6pAxUK CAKZAQKbAQIeARYhBJMeUfmbiWSXg6Hf8mUmbigkYEDCAAA/8wD/cSIoCPrIDaWf UnK0CYS0DMwa3ng1p6M5MxKhDrIo8ccBAImqPbysS6IaSb0+Ga4NNmcO3OpYWyai geAdkekJ+LwC =RsTE -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/zero-trust/bob-priv.pgp000064400000000000000000000015571046102023000206310ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: A104 2B15 7AFA 71F0 0520 8D64 5915 549D 8D21 A97B Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdAU0MMZ3ieXyZGcNaiXfYTozM2jn1Sv1tLrXh3 PUE45ocAAQCJG3sT6rM1NqnHEG/VSiyv1f4c9+7c1FK/Gv0KEpn5sREvwsALBB8W CgB9BYJeC+EAAwsJBwkQWRVUnY0hqXtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3JnGx3vmcd+NA7pHaBv2TJvHjgxWuNj7TAYDDMwVJJECYkD FQoIApsBAh4BFiEEoQQrFXr6cfAFII1kWRVUnY0hqXsAAMN3AQCS22AELSFsW0xT luBDPdfOYjF7sc/CbiqTVKEczZPjEgEAlNtNtixAnLlpwgtmQ9M96FTFrGpTQL8r wQN95QpwpgnNETxib2JAZXhhbXBsZS5vcmc+wsANBBMWCgCABYJeC+EAAwsJBwkQ WRVUnY0hqXtHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn h2JssZFWVJwZrTfNsi/8QrGYJrTX9WLWJBCTqWq24xsDFQoIApkBApsBAh4BFiEE oQQrFXr6cfAFII1kWRVUnY0hqXsAAKAYAPi0lblOOt4NGxXY3ddieIjZtlNgyR1S 8BfsSzmyhKuoAQCMxhGLz1C1wKnUeggJTBa4DZeW2MsuiCiPPXiFaz4QDQ== =CuP0 -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/zero-trust/bob.pgp000064400000000000000000000017561046102023000176540ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAU0MMZ3ieXyZGcNaiXfYTozM2jn1Sv1tLrXh3 PUE45ofCwAsEHxYKAH0Fgl4L4QADCwkHCRBZFVSdjSGpe0cUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcbHe+Zx340DukdoG/ZMm8eODFa42Pt MBgMMzBUkkQJiQMVCggCmwECHgEWIQShBCsVevpx8AUgjWRZFVSdjSGpewAAw3cB AJLbYAQtIWxbTFOW4EM9185iMXuxz8JuKpNUoRzNk+MSAQCU2022LECcuWnCC2ZD 0z3oVMWsalNAvyvBA33lCnCmCc0RPGJvYkBleGFtcGxlLm9yZz7CwA0EExYKAIAF gl4L4QADCwkHCRBZFVSdjSGpe0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1 b2lhLXBncC5vcmeHYmyxkVZUnBmtN82yL/xCsZgmtNf1YtYkEJOparbjGwMVCggC mQECmwECHgEWIQShBCsVevpx8AUgjWRZFVSdjSGpewAAoBgA+LSVuU463g0bFdjd 12J4iNm2U2DJHVLwF+xLObKEq6gBAIzGEYvPULXAqdR6CAlMFrgNl5bYyy6IKI89 eIVrPhANwsABBBAWCgBzBYJeNL+AA4UBeAkQZSZuKCRgQMJHFAAAAAAAHgAgc2Fs dEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1hnaPWUrv/iMzFU+H6fWdaxW2W/B bSKdUaAskxkzrLYWIQSTHlH5m4lkl4Oh3/JlJm4oJGBAwgAAqJsBAK+Y4Bw53JZ6 JBGgpNB6YJhkc6pQ1Y2oTdDUfEWX0I5iAQDCb4GEqwVWUOHSjrvKk+sMusBbc8FW P4+OE86l4/CABw== =RXn0 -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/zero-trust/carol-priv.pgp000064400000000000000000000015651046102023000211660ustar 00000000000000-----BEGIN PGP PRIVATE KEY BLOCK----- Comment: E06D B053 9D99 7596 81D7 EC85 08A2 67AE 8FA8 38F4 Comment: xVgEXgvhABYJKwYBBAHaRw8BAQdABzSu4nqgbUoagBEoODoNwvLmi2/GG4ylaMpL KEI+XTkAAP9FAACVNFerCiXUUa5gHuRgSeq6eCgDGY52WWv9oZJllg5vwsALBB8W CgB9BYJeC+EAAwsJBwkQCKJnro+oOPRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMu c2VxdW9pYS1wZ3Aub3Jnp1uuvL/kyvBpE89DdLSVw/+Myq7wrr/BXF6k7XWo8P8D FQoIApsBAh4BFiEE4G2wU52ZdZaB1+yFCKJnro+oOPQAAJl1AQCSeBbLAJuXmPgb LB/0cbvoldo46gVElj7qxhc0RQ2sIgD8DLkdDH/Bw3KUXuPQlfWBduLEXBuWEgdV OrqjP4+nBwTNEzxjYXJvbEBleGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkH CRAIomeuj6g49EcUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5v cmewYmAdd0cnHCfKHl+8XZiG371qBH+uAuZjl2y7d+IqQAMVCggCmQECmwECHgEW IQTgbbBTnZl1loHX7IUIomeuj6g49AAA7EYA/10pZz0esiDZCY4gF30cslAuJ6bH fWLi5PTLU6+xHzMvAQCo/LAK40knF/0yOkJt4gLc0iuSdiizd0TTCkoAAQiCCQ== =icKd -----END PGP PRIVATE KEY BLOCK----- sequoia-wot-0.11.0/tests/data/zero-trust/carol.pgp000064400000000000000000000023721046102023000202050ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdABzSu4nqgbUoagBEoODoNwvLmi2/GG4ylaMpL KEI+XTnCwAsEHxYKAH0Fgl4L4QADCwkHCRAIomeuj6g49EcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmenW668v+TK8GkTz0N0tJXD/4zKrvCu v8FcXqTtdajw/wMVCggCmwECHgEWIQTgbbBTnZl1loHX7IUIomeuj6g49AAAmXUB AJJ4FssAm5eY+BssH/Rxu+iV2jjqBUSWPurGFzRFDawiAPwMuR0Mf8HDcpRe49CV 9YF24sRcG5YSB1U6uqM/j6cHBM0TPGNhcm9sQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEAiiZ66PqDj0RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ7BiYB13RyccJ8oeX7xdmIbfvWoEf64C5mOXbLt34ipAAxUK CAKZAQKbAQIeARYhBOBtsFOdmXWWgdfshQiiZ66PqDj0AADsRgD/XSlnPR6yINkJ jiAXfRyyUC4npsd9YuLk9MtTr7EfMy8BAKj8sArjSScX/TI6Qm3iAtzSK5J2KLN3 RNMKSgABCIIJwsABBBAWCgBzBYJeWvsAA4UBAAkQWRVUnY0hqXtHFAAAAAAAHgAg c2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3JnOw00t/E3VuETlsw4egOP2EFp 4F/+3ycDTXrpWOEcAvoWIQShBCsVevpx8AUgjWRZFVSdjSGpewAATsEA/RYgybjS 3bcN3DsF4xZAyEpVKcO0YJAeAqDCYjN8gw6/APwM3NJBXlrueGNgU92e5cSkyKSA NOfuXAuS0Tf3+A0dDcLAAQQQFgoAcwWCXjS/gAOFATwJEFkVVJ2NIal7RxQAAAAA AB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9yZ6/wEoMPgY0MCooI65iC 8y69Zlh4PdRiMiAT5Qh3dvDqFiEEoQQrFXr6cfAFII1kWRVUnY0hqXsAAIF4AP9s OR1V1XXRjfpLpNC0K+VPgHmUDLv5kSnlOo3Gfxu5MQEAht7jhxdBjU/Iq6VRW7a0 ZYUW1Wsx08E2hzpKvLXdDwQ= =dJGb -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/zero-trust.pgp000064400000000000000000000054521046102023000171070ustar 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- xjMEXgvhABYJKwYBBAHaRw8BAQdAM5OKjytaLNiib8GiEw777qWtdBVk3FCmbYIA Q5KgF0vCwAsEHxYKAH0Fgl4L4QADCwkHCRBlJm4oJGBAwkcUAAAAAAAeACBzYWx0 QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmfxZCxeLGS5NAKHejDheKShxvH3P3V9 8uik+2rCqqKPBwMVCggCmwECHgEWIQSTHlH5m4lkl4Oh3/JlJm4oJGBAwgAA4RsA /i8Vz0Jw325qFnxz076l6vRDNAfnq06jbM+ZzXFd5GkwAP99SN5gFrqgcTMBiUL5 5+PNB7jpMtuszTIusvf8M7niAc0TPGFsaWNlQGV4YW1wbGUub3JnPsLADgQTFgoA gAWCXgvhAAMLCQcJEGUmbigkYEDCRxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNl cXVvaWEtcGdwLm9yZ/g+nJVadnZUfkw/FpDfGDGSeofmsFp8JwfJww5LMl6pAxUK CAKZAQKbAQIeARYhBJMeUfmbiWSXg6Hf8mUmbigkYEDCAAA/8wD/cSIoCPrIDaWf UnK0CYS0DMwa3ng1p6M5MxKhDrIo8ccBAImqPbysS6IaSb0+Ga4NNmcO3OpYWyai geAdkekJ+LwCxjMEXgvhABYJKwYBBAHaRw8BAQdAU0MMZ3ieXyZGcNaiXfYTozM2 jn1Sv1tLrXh3PUE45ofCwAsEHxYKAH0Fgl4L4QADCwkHCRBZFVSdjSGpe0cUAAAA AAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmcbHe+Zx340DukdoG/Z Mm8eODFa42PtMBgMMzBUkkQJiQMVCggCmwECHgEWIQShBCsVevpx8AUgjWRZFVSd jSGpewAAw3cBAJLbYAQtIWxbTFOW4EM9185iMXuxz8JuKpNUoRzNk+MSAQCU2022 LECcuWnCC2ZD0z3oVMWsalNAvyvBA33lCnCmCc0RPGJvYkBleGFtcGxlLm9yZz7C wA0EExYKAIAFgl4L4QADCwkHCRBZFVSdjSGpe0cUAAAAAAAeACBzYWx0QG5vdGF0 aW9ucy5zZXF1b2lhLXBncC5vcmeHYmyxkVZUnBmtN82yL/xCsZgmtNf1YtYkEJOp arbjGwMVCggCmQECmwECHgEWIQShBCsVevpx8AUgjWRZFVSdjSGpewAAoBgA+LSV uU463g0bFdjd12J4iNm2U2DJHVLwF+xLObKEq6gBAIzGEYvPULXAqdR6CAlMFrgN l5bYyy6IKI89eIVrPhANwsABBBAWCgBzBYJeNL+AA4UBeAkQZSZuKCRgQMJHFAAA AAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jn1hnaPWUrv/iMzFU+ H6fWdaxW2W/BbSKdUaAskxkzrLYWIQSTHlH5m4lkl4Oh3/JlJm4oJGBAwgAAqJsB AK+Y4Bw53JZ6JBGgpNB6YJhkc6pQ1Y2oTdDUfEWX0I5iAQDCb4GEqwVWUOHSjrvK k+sMusBbc8FWP4+OE86l4/CAB8YzBF4L4QAWCSsGAQQB2kcPAQEHQAc0ruJ6oG1K GoARKDg6DcLy5otvxhuMpWjKSyhCPl05wsALBB8WCgB9BYJeC+EAAwsJBwkQCKJn ro+oOPRHFAAAAAAAHgAgc2FsdEBub3RhdGlvbnMuc2VxdW9pYS1wZ3Aub3Jnp1uu vL/kyvBpE89DdLSVw/+Myq7wrr/BXF6k7XWo8P8DFQoIApsBAh4BFiEE4G2wU52Z dZaB1+yFCKJnro+oOPQAAJl1AQCSeBbLAJuXmPgbLB/0cbvoldo46gVElj7qxhc0 RQ2sIgD8DLkdDH/Bw3KUXuPQlfWBduLEXBuWEgdVOrqjP4+nBwTNEzxjYXJvbEBl eGFtcGxlLm9yZz7CwA4EExYKAIAFgl4L4QADCwkHCRAIomeuj6g49EcUAAAAAAAe ACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBncC5vcmewYmAdd0cnHCfKHl+8XZiG 371qBH+uAuZjl2y7d+IqQAMVCggCmQECmwECHgEWIQTgbbBTnZl1loHX7IUIomeu j6g49AAA7EYA/10pZz0esiDZCY4gF30cslAuJ6bHfWLi5PTLU6+xHzMvAQCo/LAK 40knF/0yOkJt4gLc0iuSdiizd0TTCkoAAQiCCcLAAQQQFgoAcwWCXlr7AAOFAQAJ EFkVVJ2NIal7RxQAAAAAAB4AIHNhbHRAbm90YXRpb25zLnNlcXVvaWEtcGdwLm9y ZzsNNLfxN1bhE5bMOHoDj9hBaeBf/t8nA0166VjhHAL6FiEEoQQrFXr6cfAFII1k WRVUnY0hqXsAAE7BAP0WIMm40t23Ddw7BeMWQMhKVSnDtGCQHgKgwmIzfIMOvwD8 DNzSQV5a7nhjYFPdnuXEpMikgDTn7lwLktE39/gNHQ3CwAEEEBYKAHMFgl40v4AD hQE8CRBZFVSdjSGpe0cUAAAAAAAeACBzYWx0QG5vdGF0aW9ucy5zZXF1b2lhLXBn cC5vcmev8BKDD4GNDAqKCOuYgvMuvWZYeD3UYjIgE+UId3bw6hYhBKEEKxV6+nHw BSCNZFkVVJ2NIal7AACBeAD/bDkdVdV10Y36S6TQtCvlT4B5lAy7+ZEp5TqNxn8b uTEBAIbe44cXQY1PyKulUVu2tGWFFtVrMdPBNoc6Sry13Q8E =QflV -----END PGP PUBLIC KEY BLOCK----- sequoia-wot-0.11.0/tests/data/zero-trust.sh000075500000000000000000000004251046102023000167310ustar 00000000000000#! /bin/bash . gen-helper.sh --directory=zero-trust ${@:+"$@"} set -e t0=20200101 t1=20200201 t2=20200301 key -t $t0 alice key -t $t0 bob key -t $t0 carol certify -t $t1 alice -a 120 -d 1 bob certify -t $t1 bob -a 60 -d 1 carol certify -t $t2 bob -a 0 -d 1 carol finish sequoia-wot-0.11.0/tests/gpg.rs000064400000000000000000000030731046102023000144500ustar 00000000000000use sequoia_openpgp as openpgp; use openpgp::Result; use assert_cmd::Command; #[macro_use] #[path = "../src/log.rs"] mod log; #[allow(unused)] #[path = "../src/gpg.rs"] mod gpg; const TRACE: bool = false; #[test] #[cfg(feature="cli")] fn gpg_trust_roots() -> Result<()> { let gnupghome = tempfile::tempdir()?; let gnupghome: &std::path::Path = gnupghome.as_ref(); std::env::set_var("GNUPGHOME", gnupghome); // Make sure the keyring is empty. assert_eq!(gpg::export().unwrap(), vec![]); // Import the test data. let certs = include_bytes!("data/gpg-trustroots.pgp"); gpg::import(certs)?; let ownertrust = b"\ # List of assigned trustvalues, created Wed 02 Mar 2022 12:01:08 PM CET # (Use \"gpg --import-ownertrust\" to restore them) D8330354E99DB503729A68D4AAE7E9EC2129CEC3:6: 80666EDD21A008D467243E47444D4C0F515D269A:4: A6D2F50B1C9544A717B7625395FD89DA7093B735:4: AFDD8AECD999F5CDC7027B23EECC4F0EA03A5F35:4: BB0333A98A05430FF6A784A706D474BF36A3D4F9:4: "; gpg::import_ownertrust(ownertrust)?; // Check that we can authenticate the target. let mut cmd = Command::cargo_bin("sq-wot")?; cmd.args(&[ "--gpg", "authenticate", "--partial", "30A185EA9319FF1D0BCBDBFCF2CD31DCC3DCAA02", "", ]); let assertion = cmd.assert().success(); let stdout = String::from_utf8_lossy(&assertion.get_output().stdout); assert!(stdout.contains( "[✓] 30A185EA9319FF1D0BCBDBFCF2CD31DCC3DCAA02 : partially authenticated (33%)")); Ok(()) } sequoia-wot-0.11.0/tests/tests.rs000064400000000000000000004135511046102023000150430ustar 00000000000000#[cfg(test)] mod integration { use std::collections::HashMap; use std::fmt::{Display, Formatter}; use std::fmt::Result as FMTResult; use std::path; use std::slice::Iter; use std::time; use assert_cmd::Command; use predicates::prelude::*; use sequoia_openpgp as openpgp; use openpgp::Fingerprint; use openpgp::Result; use openpgp::packet::UserID; /// Dot node fill colors /// /// These need to be synced with the ones in src/output/dot.rs const DOT_ROOT_FILL_COLOR: &'static str = "mediumpurple2"; const DOT_TARGET_OK_FILL_COLOR: &'static str = "lightgreen"; const DOT_TARGET_FAIL_FILL_COLOR: &'static str = "indianred2"; const DOT_NODE_FILL_COLOR: &'static str = "grey"; const HR_OK: &'static str = "[✓]"; const HR_NOT_OK: &'static str = "[ ]"; const HR_PATH: &'static str = "◯ "; /// Supported output types /// /// These need to be synced with the ones in src/cli.rs #[derive(Copy, Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)] enum OutputFormat { /// output in graphviz's DOT format Dot, /// output in human readable format HumanReadable, } impl OutputFormat { pub fn iterator() -> Iter<'static, OutputFormat> { static FORMATS: [OutputFormat; 2] = [OutputFormat::Dot, OutputFormat::HumanReadable]; FORMATS.iter() } } impl Display for OutputFormat { fn fmt(&self, f: &mut Formatter) -> FMTResult { write!( f, "{}", match self { OutputFormat::Dot => "dot", OutputFormat::HumanReadable => "human-readable", } ) } } fn dir() -> path::PathBuf { path::Path::new("tests").join("data") } /// Create a HashMap, containing per OutputFormat lists of occurrences /// of strings fn output_map<'a, S>( human: &'a [(usize, S)], dot: &'a [(usize, S)], ) -> HashMap where S: AsRef, { let mut output = HashMap::::new(); output.insert(OutputFormat::HumanReadable, &human); output.insert(OutputFormat::Dot, &dot); output } fn test<'a, R, S>( keyring: &str, trust_root: R, sqwot_args: &[&str], command: &str, args: &[&str], amount: usize, userid: Option<&UserID>, target: Option<&Fingerprint>, success: bool, output: &HashMap, ) -> Result<()> where R: Into>, S: AsRef, { let trust_root = trust_root.into(); for outputformat in OutputFormat::iterator() { let mut cmd = Command::cargo_bin("sq-wot")?; cmd.current_dir(&dir()) // Use the default crypto policy. .env("SEQUOIA_CRYPTO_POLICY", "") .args(&["--format", &format!("{}", outputformat)]) .args(sqwot_args) .args(&["--keyring", keyring]); if let Some(trust_root) = trust_root { cmd.args(&["--trust-root", &trust_root.to_string()]); } cmd.arg(command); if let Some(target) = target { cmd.arg(&target.to_string()); } if let Some(userid) = userid { cmd.arg(format!("{}", String::from_utf8_lossy(userid.value()))); } for arg in args { cmd.arg(arg); } cmd.args(&["--trust-amount", &format!("{}", amount)]); if success { let assertion = cmd.assert(); let assertion = assertion.success(); let stdout = String::from_utf8_lossy(&assertion.get_output().stdout); if let Some(output) = output.get(outputformat) { for (expected_occurrences, s) in *output { let s = s.as_ref(); let occurrences = stdout.split(s).count() - 1; assert_eq!( occurrences, *expected_occurrences, "Failed to find: '{}' {} times\n\ in stdout:\n\ {}", s, *expected_occurrences, stdout ); } } } else { let assertion = cmd.assert(); let assertion = assertion.code(predicate::eq(1)); let stdout = String::from_utf8_lossy(&assertion.get_output().stdout); if let Some(output) = output.get(outputformat) { for (expected_occurrences, s) in *output { let s = s.as_ref(); let occurrences = stdout.split(s).count() - 1; assert_eq!( occurrences, *expected_occurrences, "Failed to find: '{}' {} times\n\ in stdout:\n\ {}", s, *expected_occurrences, stdout ); } } // TODO: check stderr? } } Ok(()) } // Test authenticating a binding (User ID and certificate). #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn authenticate() -> Result<()> { let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 // defaults let keyring = "simple.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "authenticate"; let args = &[]; let no_output = HashMap::::new(); let human_output = [(1, format!("{} {} {}: ", HR_OK, &dave_fpr, &dave_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 100, Some(&dave_uid), Some(&dave_fpr), true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&dave_uid), Some(&dave_fpr), false, &no_output, ); // Not enough depth. test( keyring, trust_root, sqwot_args, command, args, 100, Some(&ellen_uid), Some(&ellen_fpr), false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&ellen_uid), Some(&ellen_fpr), false, &no_output, ); // No such User ID on dave's key. test( keyring, trust_root, sqwot_args, command, args, 100, Some(&ellen_uid), Some(&dave_fpr), false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&ellen_uid), Some(&dave_fpr), false, &no_output, ); Ok(()) } // Test authenticating bindings where we match on just the email // address, not the whole User ID. #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn authenticate_email() -> Result<()> { let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); let dave_email = UserID::from("dave@example.org"); let dave_email_uc1 = UserID::from("DAVE@example.org"); let dave_email_uc2 = UserID::from("DAVE@EXAMPLE.ORG"); let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); let ellen_email = UserID::from("ellen@example.org"); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 // defaults let keyring = "simple.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "authenticate"; let args = &["--email"]; let no_output = HashMap::::new(); test( keyring, trust_root, sqwot_args, command, args, 100, Some(&dave_uid), Some(&dave_fpr), false, &no_output, ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &dave_fpr, &dave_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 100, Some(&dave_email), Some(&dave_fpr), true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&dave_uid), Some(&dave_fpr), false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&dave_email), Some(&dave_fpr), false, &no_output, ); // Not enough depth. test( keyring, trust_root, sqwot_args, command, args, 100, Some(&ellen_uid), Some(&ellen_fpr), false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 100, Some(&ellen_email), Some(&ellen_fpr), false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&ellen_uid), Some(&ellen_fpr), false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&ellen_email), Some(&ellen_fpr), false, &no_output, ); // No such User ID on dave's key. test( keyring, trust_root, sqwot_args, command, args, 100, Some(&ellen_uid), Some(&dave_fpr), false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 100, Some(&ellen_email), Some(&dave_fpr), false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&ellen_uid), Some(&dave_fpr), false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&ellen_email), Some(&dave_fpr), false, &no_output, ); // Normalized. test( keyring, trust_root, sqwot_args, command, args, 100, Some(&dave_email_uc1), Some(&dave_fpr), true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 100, Some(&dave_email_uc2), Some(&dave_fpr), true, &output_map(&human_output, &dot_output), ); // Puny code and case normalization. let alice_fpr: Fingerprint = "B8DA8B318149B1C8C0CBD1ECB1CEC6D3CD00E69D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let alice_email = UserID::from("alice@example.org"); let hans_fpr: Fingerprint = "74767C4F2B15F57F3394FCA99DE867E6CA6A2756" .parse().expect("valid fingerprint"); let hans_uid = UserID::from(""); // Certified by: B8DA8B318149B1C8C0CBD1ECB1CEC6D3CD00E69D let hans_email = UserID::from("hÄNS@bücher.tld"); let hans_email_lowercase = UserID::from("häns@bücher.tld"); let hans_email_punycode = UserID::from("hÄNS@xn--bcher-kva.tld"); let hans_email_punycode_lowercase = UserID::from("häns@xn--bcher-kva.tld"); let carol_fpr: Fingerprint = "7432C123761B94EC50D50CF6562B9ADEE7F789F6" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 74767C4F2B15F57F3394FCA99DE867E6CA6A2756 let carol_email = UserID::from("carol@example.org"); // defaults let keyring = "puny-code.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "authenticate"; let args = &["--email"]; let human_output = [(1, format!("{} {} {}: ", HR_OK, &alice_fpr, &alice_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 120, Some(&alice_email), Some(&alice_fpr), true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &hans_fpr, &hans_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", hans_fpr, hans_uid, hans_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 100, Some(&hans_email), Some(&hans_fpr), true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 100, Some(&hans_email_lowercase), Some(&hans_fpr), true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 100, Some(&hans_email_punycode), Some(&hans_fpr), true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 100, Some(&hans_email_punycode_lowercase), Some(&hans_fpr), true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &carol_fpr, &carol_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", carol_fpr, carol_uid, carol_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 100, Some(&carol_email), Some(&carol_fpr), true, &output_map(&human_output, &dot_output), ); Ok(()) } // Test looking up a certificate by User ID. #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn lookup() -> Result<()> { let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let alice_uid_uppercase = UserID::from(""); let alice_uid_uppercase2 = UserID::from(""); let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); let dave_uid_uppercase = UserID::from(""); let dave_uid_uppercase2 = UserID::from(""); let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 // defaults let keyring = "simple.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "lookup"; let args = &[]; let no_output = HashMap::::new(); let human_output = [(1, format!("{} {} {}: ", HR_OK, &alice_fpr, &alice_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 100, Some(&alice_uid), None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&alice_uid), None, true, &output_map(&human_output, &dot_output), ); let human_output = [ (1, format!("{} {} {}: ", HR_OK, &dave_fpr, &dave_uid)), (1, format!("{}{} (\"{}\")", HR_PATH, &alice_fpr, &alice_uid)), ]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 100, Some(&dave_uid), None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&dave_uid), None, false, &no_output, ); // Not enough depth. test( keyring, trust_root, sqwot_args, command, args, 100, Some(&ellen_uid), None, false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&ellen_uid), None, false, &no_output, ); // No such User ID. test( keyring, trust_root, sqwot_args, command, args, 100, Some(&UserID::from("Gary ")), None, false, &no_output, ); // We need an exact match. test( keyring, trust_root, sqwot_args, command, args, 100, Some(&alice_uid_uppercase), None, false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 100, Some(&alice_uid_uppercase2), None, false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 100, Some(&dave_uid_uppercase), None, false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 100, Some(&dave_uid_uppercase2), None, false, &no_output, ); Ok(()) } // Test looking up a certificate by email address. #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn lookup_email() -> Result<()> { let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let alice_email = UserID::from("alice@example.org"); let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); let dave_email = UserID::from("dave@example.org"); let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); let ellen_email = UserID::from("ellen@example.org"); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 // defaults for test() call let keyring = "simple.pgp"; let trust_root = &alice_fpr; let sqwot_args = []; let command = "lookup"; let args = ["--email"]; let target = None; let no_output = HashMap::::new(); let human_output = [(1, format!("{} {} {}: ", HR_OK, alice_fpr, alice_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, &sqwot_args, command, &args, 100, Some(&alice_email), target, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, &sqwot_args, command, &args, 120, Some(&alice_email), target, true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_OK, dave_fpr, dave_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, &sqwot_args, command, &args, 100, Some(&dave_email), target, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, &sqwot_args, command, &args, 120, Some(&dave_email), target, false, &no_output, ); // Not enough depth. test( keyring, trust_root, &sqwot_args, command, &args, 100, Some(&ellen_email), target, false, &no_output, ); test( keyring, trust_root, &sqwot_args, command, &args, 120, Some(&ellen_email), target, false, &no_output, ); // No such User ID. test( keyring, trust_root, &sqwot_args, command, &args, 100, Some(&UserID::from("gary@some.org")), target, false, &no_output, ); Ok(()) } // Test identifying a certificate. #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn identify() -> Result<()> { let alice_fpr: Fingerprint = "2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "03182611B91B1E7E20B848E83DFC151ABFAD85D5" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let bob_some_org_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let carol_fpr: Fingerprint = "9CA36907B46FE7B6B9EE9601E78064C12B6D7902" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 03182611B91B1E7E20B848E83DFC151ABFAD85D5 let dave_fpr: Fingerprint = "C1BC6794A6C6281B968A6A41ACE2055D610CEA03" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 9CA36907B46FE7B6B9EE9601E78064C12B6D7902 // defaults for test() call let keyring = "multiple-userids-1.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "identify"; let args = &[]; let userid = None; let no_output = HashMap::::new(); let userids = &[&alice_uid]; let human_output = userids .iter() .map(|userid| { ( 1, format!("{} {} {}: ", HR_OK, &alice_fpr, userid) .to_string(), ) }) .chain(vec![(userids.len(), HR_OK.to_string())].into_iter()) .collect::>(); let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 100, userid, Some(&alice_fpr), true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 120, userid, Some(&alice_fpr), true, &output_map(&human_output, &dot_output), ); let userids = &[&dave_uid]; let human_output = userids .iter() .map(|userid| { ( 1, format!("{} {} {}: ", HR_OK, &dave_fpr, userid).to_string(), ) }) .chain(vec![(userids.len(), HR_OK.to_string())].into_iter()) .collect::>(); let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(41%)\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 50, userid, Some(&dave_fpr), true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 120, userid, Some(&dave_fpr), false, &no_output, ); let userids = &[&bob_uid, &bob_some_org_uid]; let human_output = userids .iter() .map(|userid| { ( 1, format!("{} {} {}: ", HR_OK, &bob_fpr, userid).to_string(), ) }) .chain(vec![(userids.len(), HR_OK.to_string())].into_iter()) .collect::>(); let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(58%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 50, userid, Some(&bob_fpr), true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 120, userid, Some(&bob_fpr), false, &no_output, ); Ok(()) } // List all authenticated bindings. #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn list() -> Result<()> { let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "39A479816C934B9E0464F1F4BC1DCFDEADA4EE90" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D let carol_fpr: Fingerprint = "43530F91B450EDB269AA58821A1CF4DC7F500F04" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 39A479816C934B9E0464F1F4BC1DCFDEADA4EE90 let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 43530F91B450EDB269AA58821A1CF4DC7F500F04 let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 let frank_fpr: Fingerprint = "2693237D2CED0BB68F118D78DC86A97CD2C819D9" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // defaults for test() call let keyring = "simple.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "list"; let args = &[]; let userid = None; let target = None; let bindings = &[(&alice_uid, &alice_fpr)]; let human_output = bindings .iter() .map(|(userid, target)| { (1, format!("{} {} {}: ", HR_OK, target, userid).to_string()) }) .chain(vec![(bindings.len(), HR_OK.to_string())].into_iter()) .collect::>(); let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_TARGET_FAIL_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_FAIL_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", carol_fpr, carol_uid, carol_uid, DOT_TARGET_FAIL_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 120, userid, target, true, &output_map(&human_output, &dot_output), ); let bindings = &[ (&alice_uid, &alice_fpr), (&bob_uid, &bob_fpr), (&carol_uid, &carol_fpr), (&dave_uid, &dave_fpr), ]; let human_output = bindings .iter() .map(|(userid, target)| { (1, format!("{} {} {}: ", HR_OK, target, userid).to_string()) }) .chain(vec![(bindings.len(), HR_OK.to_string())].into_iter()) .collect::>(); let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", carol_fpr, carol_uid, carol_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 50, userid, target, true, &output_map(&human_output, &dot_output), ); Ok(()) } // List all authenticated bindings matching a pattern. #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn list_pattern() -> Result<()> { let alice_fpr: Fingerprint = "2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "03182611B91B1E7E20B848E83DFC151ABFAD85D5" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let bob_some_org_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let carol_fpr: Fingerprint = "9CA36907B46FE7B6B9EE9601E78064C12B6D7902" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 03182611B91B1E7E20B848E83DFC151ABFAD85D5 let dave_fpr: Fingerprint = "C1BC6794A6C6281B968A6A41ACE2055D610CEA03" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 9CA36907B46FE7B6B9EE9601E78064C12B6D7902 // defaults let keyring = "multiple-userids-1.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "list"; let bindings = &[(&bob_uid, &bob_fpr), (&bob_some_org_uid, &bob_fpr)]; let human_output = bindings .iter() .map(|(userid, target)| { (1, format!("{} {} {}: ", HR_OK, target, userid).to_string()) }) .chain(vec![(bindings.len(), HR_OK.to_string())].into_iter()) .collect::>(); let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(58%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(58%)\", fillcolor={}];", bob_fpr, bob_some_org_uid, bob_some_org_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, &["bob"], 50, None, None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, &["BOB"], 50, None, None, true, &output_map(&human_output, &dot_output), ); let bindings = &[(&alice_uid, &alice_fpr), (&carol_uid, &carol_fpr)]; let human_output = bindings .iter() .map(|(userid, target)| { (1, format!("{} {} {}: ", HR_OK, target, userid).to_string()) }) .chain(vec![(bindings.len(), HR_OK.to_string())].into_iter()) .collect::>(); let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(41%)\", fillcolor={}];", carol_fpr, carol_uid, carol_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, &["@example.org"], 50, None, None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, &["@EXAMPLE.ORG"], 50, None, None, true, &output_map(&human_output, &dot_output), ); let bindings = &[(&bob_uid, &bob_fpr), (&dave_uid, &dave_fpr)]; let human_output = bindings .iter() .map(|(userid, target)| { (1, format!("{} {} {}: ", HR_OK, target, userid).to_string()) }) .chain(vec![(bindings.len(), HR_OK.to_string())].into_iter()) .collect::>(); let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(58%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(41%)\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, &["@OTHER.ORG"], 50, None, None, true, &output_map(&human_output, &dot_output), ); let bindings = &[ (&alice_uid, &alice_fpr), (&bob_uid, &bob_fpr), (&bob_some_org_uid, &bob_fpr), (&carol_uid, &carol_fpr), (&dave_uid, &dave_fpr), ]; let human_output = bindings .iter() .map(|(userid, target)| { (1, format!("{} {} {}: ", HR_OK, target, userid).to_string()) }) .chain(vec![(bindings.len(), HR_OK.to_string())].into_iter()) .collect::>(); let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(58%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(58%)\", fillcolor={}];", bob_fpr, bob_some_org_uid, bob_some_org_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(41%)\", fillcolor={}];", carol_fpr, carol_uid, carol_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(41%)\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, &["ORG"], 50, None, None, true, &output_map(&human_output, &dot_output), ); // Puny code. let alice_fpr: Fingerprint = "B8DA8B318149B1C8C0CBD1ECB1CEC6D3CD00E69D" .parse() .expect("valid fingerprint"); let alice_uid = UserID::from(""); let alice_email = UserID::from("alice@example.org"); let hans_fpr: Fingerprint = "74767C4F2B15F57F3394FCA99DE867E6CA6A2756" .parse() .expect("valid fingerprint"); let hans_uid = UserID::from(""); // Certified by: B8DA8B318149B1C8C0CBD1ECB1CEC6D3CD00E69D let hans_email = "hÄNS@bücher.tld"; let hans_email_punycode = "hÄNS@xn--bcher-kva.tld"; let hans_email_punycode_lowercase = "häns@xn--bcher-kva.tld"; let carol_fpr: Fingerprint = "7432C123761B94EC50D50CF6562B9ADEE7F789F6" .parse() .expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 74767C4F2B15F57F3394FCA99DE867E6CA6A2756 let carol_email = UserID::from("carol@example.org"); // defaults let keyring = "puny-code.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "list"; let no_output = HashMap::::new(); let bindings = &[(&hans_uid, &hans_fpr)]; let human_output = bindings .iter() .map(|(userid, target)| { (1, format!("{} {} {}: ", HR_OK, target, userid).to_string()) }) .chain(vec![(bindings.len(), HR_OK.to_string())].into_iter()) .collect::>(); let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", hans_fpr, hans_uid, hans_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; // If we don't provide --email, then we only case // insensitively match on the raw User ID; we don't perform // puny code normalization. test( keyring, trust_root, sqwot_args, command, &["bücher.tld"], 100, None, None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, &["BÜCHER.TLD"], 100, None, None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, &[hans_email], 100, None, None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, &[&format!("<{}>", hans_email)], 100, None, None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, &[hans_email_punycode], 100, None, None, false, &no_output, ); test( keyring, trust_root, sqwot_args, command, &[hans_email_punycode_lowercase], 100, None, None, false, &no_output, ); Ok(()) } // List all authenticated bindings where the email address matches // a pattern. #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn list_email_pattern() -> Result<()> { // Puny code and case normalization. let alice_fpr: Fingerprint = "B8DA8B318149B1C8C0CBD1ECB1CEC6D3CD00E69D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let alice_email = UserID::from("alice@example.org"); let hans_fpr: Fingerprint = "74767C4F2B15F57F3394FCA99DE867E6CA6A2756" .parse().expect("valid fingerprint"); let hans_uid = UserID::from(""); // Certified by: B8DA8B318149B1C8C0CBD1ECB1CEC6D3CD00E69D let hans_email = "hÄNS@bücher.tld"; let hans_email_punycode = "hÄNS@xn--bcher-kva.tld"; let hans_email_punycode_lowercase = "häns@xn--bcher-kva.tld"; let carol_fpr: Fingerprint = "7432C123761B94EC50D50CF6562B9ADEE7F789F6" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 74767C4F2B15F57F3394FCA99DE867E6CA6A2756 let carol_email = UserID::from("carol@example.org"); // defaults let keyring = "puny-code.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "list"; let no_output = HashMap::::new(); let bindings = &[(&hans_uid, &hans_fpr)]; let human_output = bindings .iter() .map(|(userid, target)| { (1, format!("{} {} {}: ", HR_OK, target, userid).to_string()) }) .chain(vec![(bindings.len(), HR_OK.to_string())].into_iter()) .collect::>(); let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", hans_fpr, hans_uid, hans_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, &["--email", "bücher.tld"], 100, None, None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, &["--email", "BÜCHER.TLD"], 100, None, None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, &["--email", hans_email], 100, None, None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, &["--email", &format!("<{}>", hans_email)], 100, None, None, false, &no_output, ); test( keyring, trust_root, sqwot_args, command, &["--email", hans_email_punycode], 100, None, None, true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, &["--email", hans_email_punycode_lowercase], 100, None, None, true, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn path_simple() -> Result<()> { let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "39A479816C934B9E0464F1F4BC1DCFDEADA4EE90" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D let carol_fpr: Fingerprint = "43530F91B450EDB269AA58821A1CF4DC7F500F04" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 39A479816C934B9E0464F1F4BC1DCFDEADA4EE90 let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 43530F91B450EDB269AA58821A1CF4DC7F500F04 let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 let frank_fpr: Fingerprint = "2693237D2CED0BB68F118D78DC86A97CD2C819D9" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // defaults let keyring = "simple.pgp"; let trust_root = None; // No trust root for path. let sqwot_args = &[]; let command = "path"; let no_output = HashMap::::new(); // Alice certifies Bob at trust amount = 100. (120 required). let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &bob_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &String::from_utf8_lossy(bob_uid.value()), ], 120, None, None, false, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}", HR_OK, bob_fpr, bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // As above, but we only require 100. test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &String::from_utf8_lossy(bob_uid.value()), ], 100, None, None, true, &output_map(&human_output, &dot_output), ); // Alice makes Bob a level 2 trusted introducer. // Bob certificates Carol, but for Bob. let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &carol_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &String::from_utf8_lossy(bob_uid.value()), ], 100, None, None, false, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}", HR_OK, carol_fpr, carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // Alice makes Bob a level 2 trusted introducer. // Bob certificates Carol. test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &String::from_utf8_lossy(carol_uid.value()), ], 100, None, None, true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}", HR_OK, dave_fpr, dave_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // Alice makes Bob a level 2 trusted introducer. // Bob makes Carol a level 1 trust introducer. // Carol certifies Dave. test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &dave_fpr.to_string(), &String::from_utf8_lossy(dave_uid.value()), ], 100, None, None, true, &output_map(&human_output, &dot_output), ); // Alice makes Bob a level 2 trusted introducer (require level 3). // Bob makes Carol a level 1 trusted introducer (require level 2). // Carol makes Dave a level 1 trusted introducer. // Dave certifies Ellen. let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &ellen_fpr, &ellen_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &dave_fpr.to_string(), &ellen_fpr.to_string(), &String::from_utf8_lossy(ellen_uid.value()), ], 100, None, None, false, &output_map(&human_output, &dot_output), ); // Alice makes Bob a level 2 trusted introducer. // Bob does *not* certify Dave. // Dave certifies Ellen. let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &ellen_fpr, &ellen_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &dave_fpr.to_string(), &ellen_fpr.to_string(), &String::from_utf8_lossy(ellen_uid.value()), ], 100, None, None, false, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn path_missing_certs() -> Result<()> { let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "39A479816C934B9E0464F1F4BC1DCFDEADA4EE90" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D let carol_fpr: Fingerprint = "43530F91B450EDB269AA58821A1CF4DC7F500F04" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 39A479816C934B9E0464F1F4BC1DCFDEADA4EE90 let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 43530F91B450EDB269AA58821A1CF4DC7F500F04 let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 let frank_fpr: Fingerprint = "2693237D2CED0BB68F118D78DC86A97CD2C819D9" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); let missing_fpr: Fingerprint = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" .parse().expect("valid fingerprint"); // defaults let keyring = "simple.pgp"; let trust_root = None; // No trust root for path. let sqwot_args = &[]; let command = "path"; let no_output = HashMap::::new(); let human_output = [(1, format!("{} {} {}", HR_OK, carol_fpr, carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // Alice tsigns Bob at depth = 2, trust amount = 100. // Bob certifies Carol, trust amount = 100. test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &String::from_utf8_lossy(carol_uid.value()), ], 100, None, None, true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &carol_fpr, &carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &missing_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &String::from_utf8_lossy(carol_uid.value()), ], 100, None, None, false, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &carol_fpr, &carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &missing_fpr.to_string(), &carol_fpr.to_string(), &String::from_utf8_lossy(carol_uid.value()), ], 100, None, None, false, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &missing_fpr, &carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &missing_fpr.to_string(), &String::from_utf8_lossy(carol_uid.value()), ], 100, None, None, false, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn path_singleton() -> Result<()> { let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "39A479816C934B9E0464F1F4BC1DCFDEADA4EE90" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D let carol_fpr: Fingerprint = "43530F91B450EDB269AA58821A1CF4DC7F500F04" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 39A479816C934B9E0464F1F4BC1DCFDEADA4EE90 let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 43530F91B450EDB269AA58821A1CF4DC7F500F04 let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 let frank_fpr: Fingerprint = "2693237D2CED0BB68F118D78DC86A97CD2C819D9" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); let missing_fpr: Fingerprint = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" .parse().expect("valid fingerprint"); // defaults let keyring = "simple.pgp"; let trust_root = None; // No trust root for path. let sqwot_args = &[]; let command = "path"; let no_output = HashMap::::new(); let human_output = [(1, format!("{} {} {}: ", HR_OK, &alice_fpr, &alice_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // A self signed User ID. test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &String::from_utf8_lossy(alice_uid.value()), ], 120, None, None, true, &output_map(&human_output, &dot_output), ); // A User ID that is not self signed. let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &alice_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &String::from_utf8_lossy(bob_uid.value()), ], 120, None, None, false, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn path_multiple_userids_1() -> Result<()> { let alice_fpr: Fingerprint = "2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "03182611B91B1E7E20B848E83DFC151ABFAD85D5" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let bob_some_org_uid = UserID::from(""); // Certified by: 2A2A4A23A7EEC119BC0B46642B3825DC02A05FEA let carol_fpr: Fingerprint = "9CA36907B46FE7B6B9EE9601E78064C12B6D7902" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 03182611B91B1E7E20B848E83DFC151ABFAD85D5 let dave_fpr: Fingerprint = "C1BC6794A6C6281B968A6A41ACE2055D610CEA03" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 9CA36907B46FE7B6B9EE9601E78064C12B6D7902 // defaults let keyring = "multiple-userids-1.pgp"; let trust_root = None; // No trust root for path. let sqwot_args = &[]; let command = "path"; let no_output = HashMap::::new(); // Alice certifies Bob as: // a level 2 trusted introducer, amount = 50 // a level 1 trusted introducer, amount = 70 // Bob certifies Carol as a level 2 trusted introducer // Carol certifies Dave let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &dave_fpr, &dave_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &dave_fpr.to_string(), &String::from_utf8_lossy(dave_uid.value()), ], 70, None, None, false, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}", HR_OK, dave_fpr, dave_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // As above, but test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &dave_fpr.to_string(), &String::from_utf8_lossy(dave_uid.value()), ], 50, None, None, true, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn path_multiple_users_2() -> Result<()> { // Note: this also tests regular expressions. let alice_fpr: Fingerprint = "F1C99C4019837703DD17C45440F8A0141DF278EA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "5528B9E5DAFC519ED2E37F0377B332E4111456CB" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: F1C99C4019837703DD17C45440F8A0141DF278EA let bob_some_org_uid = UserID::from(""); // Certified by: F1C99C4019837703DD17C45440F8A0141DF278EA let carol_fpr: Fingerprint = "6F8291428420AB53576BAB4BEFF6477D3E348D71" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 5528B9E5DAFC519ED2E37F0377B332E4111456CB let dave_fpr: Fingerprint = "62C57D90DAD253DEA01D5A86C7382FD6285C18F0" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 6F8291428420AB53576BAB4BEFF6477D3E348D71 let ed_fpr: Fingerprint = "0E974D0ACBA0C4D8F51D7CF68F048FF83B173504" .parse().expect("valid fingerprint"); let ed_uid = UserID::from(""); // Certified by: 6F8291428420AB53576BAB4BEFF6477D3E348D71 let frank_fpr: Fingerprint = "5BEE3D41F85B2FCBC300DE4E18CB2BDA65465F03" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // Certified by: 5528B9E5DAFC519ED2E37F0377B332E4111456CB // defaults let keyring = "multiple-userids-2.pgp"; let trust_root = None; // No trust root for path. let sqwot_args = &[]; let command = "path"; let no_output = HashMap::::new(); let human_output = [(1, format!("{} {}", HR_OK, frank_fpr))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // Alice certifies Bob as: // a level 255 trusted introducer, amount = 70 for other.org // a level 1 trusted introducer, amount = 50 // Bob certifies Frank@other.org test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &frank_fpr.to_string(), &String::from_utf8_lossy(frank_uid.value()), ], 70, None, None, true, &output_map(&human_output, &dot_output), ); // Alice certifies Bob as: // a level 255 trusted introducer, amount = 70 for other.org // a level 1 trusted introducer, amount = 50 // Bob certifies Carol@example.org let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &carol_fpr, &carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &String::from_utf8_lossy(carol_uid.value()), ], 70, None, None, false, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}", HR_OK, carol_fpr, carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // As above, but reduce the required trust amount to 50. test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &String::from_utf8_lossy(carol_uid.value()), ], 50, None, None, true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}", HR_OK, dave_fpr, dave_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // Alice certifies Bob as: // a level 255 trusted introducer, amount = 70 for other.org // a level 1 trusted introducer, amount = 50 // Bob certifies carol as a level 2 trusted introducer // Carol certifies dave@other.org test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &dave_fpr.to_string(), &String::from_utf8_lossy(dave_uid.value()), ], 70, None, None, true, &output_map(&human_output, &dot_output), ); // Alice certifies Bob as: // a level 255 trusted introducer, amount = 70 for other.org // a level 1 trusted introducer, amount = 50 // Bob certifies carol as a level 2 trusted introducer // Carol certifies ed@example.org let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &ed_fpr, &ed_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &ed_fpr.to_string(), &String::from_utf8_lossy(ed_uid.value()), ], 70, None, None, false, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn path_sha1() -> Result<()> { let alice_fpr: Fingerprint = "B5FA089BA76FE3E17DC11660960E53286738F94C" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "231BC4AB9D8CAB86D1622CE02C0CE554998EECDB" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: B5FA089BA76FE3E17DC11660960E53286738F94C // Certified by: B5FA089BA76FE3E17DC11660960E53286738F94C let carol_fpr: Fingerprint = "FABA8485B2D4D5BF1582AA963A8115E774FA9852" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 231BC4AB9D8CAB86D1622CE02C0CE554998EECDB // Certified by: 231BC4AB9D8CAB86D1622CE02C0CE554998EECDB // defaults let keyring = "sha1.pgp"; let trust_root = None; // No trust root for path. let sqwot_args = &[ "--time", "2023-01-10T15:07:01" ]; let command = "path"; let no_output = HashMap::::new(); // Alice certifies Bob as // a level 1 trusted introducer, amount = 120 using sha1 // a level 1 trusted introducer, amount = 60 using sha512 (future) // Bob certifies carol as a // a level 1 trusted introducer, amount = 120 using sha1 // a level 1 trusted introducer, amount = 60 using sha512 (future) // // The valid signatures won't be used because they are from // the future (after the reference time). let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &carol_fpr, &carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &String::from_utf8_lossy(carol_uid.value()), ], 120, None, None, false, &output_map(&human_output, &dot_output), ); // Again, but this time only require a trust amount of 60. let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &carol_fpr, &carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &String::from_utf8_lossy(carol_uid.value()), ], 60, None, None, false, &output_map(&human_output, &dot_output), ); // set sq-wot args again let sqwot_args = &[]; // Again, after the SHA256 certificates are valid. But with a // trust amount of 120. let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &carol_fpr, &carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &String::from_utf8_lossy(carol_uid.value()), ], 120, None, None, false, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}", HR_OK, carol_fpr, carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &String::from_utf8_lossy(carol_uid.value()), ], 60, None, None, true, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn authenticate_certification_network_simple() -> Result<()> { let alice_fpr: Fingerprint = "85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "39A479816C934B9E0464F1F4BC1DCFDEADA4EE90" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 85DAB65713B2D0ABFC5A4F28BC10C9CE4A699D8D let carol_fpr: Fingerprint = "43530F91B450EDB269AA58821A1CF4DC7F500F04" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 39A479816C934B9E0464F1F4BC1DCFDEADA4EE90 let dave_fpr: Fingerprint = "329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 43530F91B450EDB269AA58821A1CF4DC7F500F04 let ellen_fpr: Fingerprint = "A7319A9B166AB530A5FBAC8AB43CA77F7C176AF4" .parse().expect("valid fingerprint"); let ellen_uid = UserID::from(""); // Certified by: 329D5AAF73DC70B4E3DD2D11677CB70FFBFE1281 let frank_fpr: Fingerprint = "2693237D2CED0BB68F118D78DC86A97CD2C819D9" .parse().expect("valid fingerprint"); let frank_uid = UserID::from(""); // defaults let keyring = "simple.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "authenticate"; let args = &[]; let no_output = HashMap::::new(); test( keyring, trust_root, sqwot_args, command, args, 100, Some(&ellen_uid), Some(&ellen_fpr), false, &no_output, ); let sqwot_args = &["--certification-network"]; let human_output = [(1, format!("{} {} {}: ", HR_OK, &ellen_fpr, &ellen_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(83%)\", fillcolor={}];", ellen_fpr, ellen_uid, ellen_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 100, Some(&ellen_uid), Some(&ellen_fpr), true, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn authenticate_certification_network() -> Result<()> { let alice_fpr: Fingerprint = "B2B371214EF71AFD16E42C62D81360B4C0489225" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); // Certified by: 9A1AE937B5CB8BC46048AB63023CC01973ED9DF3 let bob_fpr: Fingerprint = "A68DF00EB82F9C49C27CC7723C5F5BBE6B790C05" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: B2B371214EF71AFD16E42C62D81360B4C0489225 let carol_fpr: Fingerprint = "AB9EF1C89631519842ED559697557DD147D99C97" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: A68DF00EB82F9C49C27CC7723C5F5BBE6B790C05 let dave_fpr: Fingerprint = "9A1AE937B5CB8BC46048AB63023CC01973ED9DF3" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: AB9EF1C89631519842ED559697557DD147D99C97 // defaults let keyring = "certification-network.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "authenticate"; let args = &[]; let no_output = HashMap::::new(); let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(100%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; // Alice does not make Bob a trusted introducer. So without // --certificate-network, she can only authenticate Bob, but // not Carol or Dave. test( keyring, trust_root, sqwot_args, command, args, 120, Some(&bob_uid), Some(&bob_fpr), true, &output_map(&human_output, &dot_output), ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&carol_uid), Some(&carol_fpr), false, &no_output, ); test( keyring, trust_root, sqwot_args, command, args, 120, Some(&dave_uid), Some(&dave_fpr), false, &no_output, ); // With --certification-network, she can authenticate them all. let sqwot_args = &["--certification-network"]; let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(100%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 120, Some(&bob_uid), Some(&bob_fpr), true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &carol_fpr, &carol_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(100%)\", fillcolor={}];", carol_fpr, carol_uid, carol_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 120, Some(&carol_uid), Some(&carol_fpr), true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &dave_fpr, &dave_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(100%)\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 120, Some(&dave_uid), Some(&dave_fpr), true, &output_map(&human_output, &dot_output), ); let sqwot_args = &[]; let trust_root = &dave_fpr; // dave authenticates alice for 60 of 120. test( keyring, trust_root, sqwot_args, command, args, 120, Some(&alice_uid), Some(&alice_fpr), false, &no_output, ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &alice_fpr, &alice_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(50%)\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", dave_fpr, dave_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 60, Some(&alice_uid), Some(&alice_fpr), true, &output_map(&human_output, &dot_output), ); // use --certification-network let sqwot_args = &["--certification-network"]; test( keyring, trust_root, sqwot_args, command, args, 120, Some(&alice_uid), Some(&alice_fpr), false, &no_output, ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &alice_fpr, &alice_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(50%)\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", dave_fpr, dave_uid, dave_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", dave_fpr, dave_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 60, Some(&alice_uid), Some(&alice_fpr), true, &output_map(&human_output, &dot_output), ); let sqwot_args = &[]; // use carol as trust root let trust_root = &carol_fpr; test( keyring, trust_root, sqwot_args, command, args, 60, Some(&alice_uid), Some(&alice_fpr), false, &no_output, ); // use --certification-network let sqwot_args = &["--certification-network"]; let human_output = [(1, format!("{} {} {}: ", HR_OK, &alice_fpr, &alice_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(50%)\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", carol_fpr, carol_uid, carol_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", carol_fpr, carol_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 60, Some(&alice_uid), Some(&alice_fpr), true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(50%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", carol_fpr, carol_uid, carol_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", carol_fpr, carol_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; test( keyring, trust_root, sqwot_args, command, args, 60, Some(&bob_uid), Some(&bob_fpr), true, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn path_certification_network() -> Result<()> { let alice_fpr: Fingerprint = "B2B371214EF71AFD16E42C62D81360B4C0489225" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); // Certified by: 9A1AE937B5CB8BC46048AB63023CC01973ED9DF3 let bob_fpr: Fingerprint = "A68DF00EB82F9C49C27CC7723C5F5BBE6B790C05" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: B2B371214EF71AFD16E42C62D81360B4C0489225 let carol_fpr: Fingerprint = "AB9EF1C89631519842ED559697557DD147D99C97" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: A68DF00EB82F9C49C27CC7723C5F5BBE6B790C05 let dave_fpr: Fingerprint = "9A1AE937B5CB8BC46048AB63023CC01973ED9DF3" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: AB9EF1C89631519842ED559697557DD147D99C97 // defaults let keyring = "certification-network.pgp"; let trust_root = &alice_fpr; let sqwot_args = &[]; let command = "path"; let no_output = HashMap::::new(); let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // Alice does not make Bob a trusted introducer. So without // --certificate-network, she can only authenticate Bob, but // not Carol or Dave. test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &bob_uid.to_string(), ], 120, None, None, true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &carol_fpr, &carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &carol_uid.to_string(), ], 120, None, None, false, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &dave_fpr, &dave_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &dave_fpr.to_string(), &dave_uid.to_string(), ], 120, None, None, false, &output_map(&human_output, &dot_output), ); // change sq-wot args let sqwot_args = &["--certification-network"]; let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // With --certification-network, she can authenticate them all. test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &bob_uid.to_string(), ], 120, None, None, true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &carol_fpr, &carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &carol_uid.to_string(), ], 120, None, None, true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &dave_fpr, &dave_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &carol_fpr.to_string(), &dave_fpr.to_string(), &dave_uid.to_string(), ], 120, None, None, true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &carol_fpr, &carol_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // But invalid paths should stay invalid. test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &carol_fpr.to_string(), &carol_uid.to_string(), ], 120, None, None, false, &output_map(&human_output, &dot_output), ); // set dave as trust root let trust_root = &dave_fpr; // reset sq-wot args again let sqwot_args = &[]; let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &alice_fpr, &alice_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; // dave authenticates alice for 60 of 120. test( keyring, trust_root, sqwot_args, command, &[ &dave_fpr.to_string(), &alice_fpr.to_string(), &alice_uid.to_string(), ], 120, None, None, false, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &alice_fpr, &alice_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &dave_fpr.to_string(), &alice_fpr.to_string(), &alice_uid.to_string(), ], 60, None, None, true, &output_map(&human_output, &dot_output), ); // set sq-wot args to use certification network let sqwot_args = &["--certification-network"]; let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &alice_fpr, &alice_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &dave_fpr.to_string(), &alice_fpr.to_string(), &alice_uid.to_string(), ], 120, None, None, false, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &alice_fpr, &alice_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &dave_fpr.to_string(), &alice_fpr.to_string(), &alice_uid.to_string(), ], 60, None, None, true, &output_map(&human_output, &dot_output), ); // set carol as trust root let trust_root = &carol_fpr; // reset sq-wot args again let sqwot_args = &[]; let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &alice_fpr, &alice_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &carol_fpr.to_string(), &dave_fpr.to_string(), &alice_fpr.to_string(), &alice_uid.to_string(), ], 60, None, None, false, &output_map(&human_output, &dot_output), ); // set sq-wot args to use certification network let sqwot_args = &["--certification-network"]; let human_output = [(1, format!("{} {} {}: ", HR_OK, &alice_fpr, &alice_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &carol_fpr.to_string(), &dave_fpr.to_string(), &alice_fpr.to_string(), &alice_uid.to_string(), ], 60, None, None, true, &output_map(&human_output, &dot_output), ); let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &carol_fpr.to_string(), &dave_fpr.to_string(), &alice_fpr.to_string(), &bob_fpr.to_string(), &bob_uid.to_string(), ], 60, None, None, true, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn gossip_certification_network() -> Result<()> { let alice_fpr: Fingerprint = "B2B371214EF71AFD16E42C62D81360B4C0489225" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); // Certified by: 9A1AE937B5CB8BC46048AB63023CC01973ED9DF3 let bob_fpr: Fingerprint = "A68DF00EB82F9C49C27CC7723C5F5BBE6B790C05" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: B2B371214EF71AFD16E42C62D81360B4C0489225 let carol_fpr: Fingerprint = "AB9EF1C89631519842ED559697557DD147D99C97" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: A68DF00EB82F9C49C27CC7723C5F5BBE6B790C05 let dave_fpr: Fingerprint = "9A1AE937B5CB8BC46048AB63023CC01973ED9DF3" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: AB9EF1C89631519842ED559697557DD147D99C97 // defaults let keyring = "certification-network.pgp"; let trust_root = None; let sqwot_args = &["--gossip"]; let command = "authenticate"; let args = &[]; let human_output = [(2, format!("{} {} {}: ", HR_NOT_OK, &bob_fpr, &bob_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(0%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_FAIL_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ]; // Alice certified Bob. We should print the path, but it // should be unauthenticated (this is gossip). test( keyring, trust_root, sqwot_args, command, args, 120, Some(&bob_uid), Some(&bob_fpr), true, &output_map(&human_output, &dot_output), ); let trust_root = &alice_fpr; let human_output = [(2, format!("{} {} {}: ", HR_NOT_OK, &bob_fpr, &bob_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(0%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_FAIL_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ]; // Make sure we don't authenticate when we specify a root // (which is ignored when --gossip is provided). test( keyring, trust_root, sqwot_args, command, args, 120, Some(&bob_uid), Some(&bob_fpr), true, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn target_cert_expired() -> Result<()> { let alice_fpr: Fingerprint = "1FA62523FB7C06E71EEFB82BB5159F3FC3EB3AC9" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "B166B31AE5F95600B3F7184FE74C6CE62821686F" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 1FA62523FB7C06E71EEFB82BB5159F3FC3EB3AC9 let carol_fpr: Fingerprint = "81CD118AC5BD9156DC113772626222D76ACDFFCF" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: B166B31AE5F95600B3F7184FE74C6CE62821686F // $ date '+%s' -d 20200202 // 1580598000 let t1 = std::time::UNIX_EPOCH + time::Duration::new(1580598000, 0); // $ date '+%s' -d 20200302 // 1583103600 let t2 = std::time::UNIX_EPOCH + time::Duration::new(1583103600, 0); // $ date '+%s' -d 20200402 // 1585778400 let t3 = std::time::UNIX_EPOCH + time::Duration::new(1585778400, 0); // At t1, Alice certifies Bob (amount = 60). // At t2, Bob's certificate expires. // defaults let keyring = "cert-expired.pgp"; let trust_root: Option<&Fingerprint> = Some(&alice_fpr); let sqwot_args = &[]; let command = "authenticate"; let no_output = HashMap::::new(); let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(50%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; // Bob's certificate is not yet expired. test( keyring, trust_root, sqwot_args, command, &["--time", "20200214"], 60, Some(&bob_uid), Some(&bob_fpr), true, &output_map(&human_output, &dot_output), ); let trust_root = None; // no trust root for path let command = "path"; let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ "--time", "20200214", &alice_fpr.to_string(), &bob_fpr.to_string(), &bob_uid.to_string(), ], 60, None, None, true, &output_map(&human_output, &dot_output), ); let trust_root = Some(&alice_fpr); let command = "authenticate"; // Bob's certificate is expired. test( keyring, trust_root, sqwot_args, command, &["--time", "20200216"], 60, Some(&bob_uid), Some(&bob_fpr), false, &no_output, ); let trust_root = None; let command = "path"; let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &bob_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ "--time", "20200216", &alice_fpr.to_string(), &bob_fpr.to_string(), &bob_uid.to_string(), ], 60, None, None, false, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn target_cert_hard_revoked() -> Result<()> { let alice_fpr: Fingerprint = "219AAB661C8AAF4526DBC31AA751A7A0532863BA" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "90E02BFB03FAA04714D1D3D87543157EF3B12BE9" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 219AAB661C8AAF4526DBC31AA751A7A0532863BA // Certified by: 219AAB661C8AAF4526DBC31AA751A7A0532863BA let carol_fpr: Fingerprint = "BF680710128E6BCCB2268154569F5F6BFB95C544" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 219AAB661C8AAF4526DBC31AA751A7A0532863BA let dave_fpr: Fingerprint = "46945292F8F643F0573AF71183F9C1A4759A16D6" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 90E02BFB03FAA04714D1D3D87543157EF3B12BE9 // Certified by: BF680710128E6BCCB2268154569F5F6BFB95C544 // Certified by: 90E02BFB03FAA04714D1D3D87543157EF3B12BE9 // defaults let keyring = "cert-revoked-hard.pgp"; let trust_root: Option<&Fingerprint> = Some(&alice_fpr); let sqwot_args = &[]; let command = "authenticate"; let no_output = HashMap::::new(); // Bob's certificate is hard revoked. test( keyring, trust_root, sqwot_args, command, &[], 60, Some(&bob_uid), Some(&bob_fpr), false, &no_output, ); let trust_root: Option<&Fingerprint> = None; let command = "path"; let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &bob_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &bob_uid.to_string(), ], 60, None, None, false, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn target_cert_soft_revoked() -> Result<()> { let alice_fpr: Fingerprint = "66037F98B444BBAFDFE98E871738DFAB86878262" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "4CD8737F76C2B897C4F058DBF28C47540FA2C3B3" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 66037F98B444BBAFDFE98E871738DFAB86878262 let carol_fpr: Fingerprint = "AB4E3F8EE8BBD3459754D75ACE570F9B8C7DC75D" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: 66037F98B444BBAFDFE98E871738DFAB86878262 let dave_fpr: Fingerprint = "DF6A440ED9DE723B0EBC7F50E24FBB1B9FADC999" .parse().expect("valid fingerprint"); let dave_uid = UserID::from(""); // Certified by: 4CD8737F76C2B897C4F058DBF28C47540FA2C3B3 // Certified by: AB4E3F8EE8BBD3459754D75ACE570F9B8C7DC75D // Certified by: 4CD8737F76C2B897C4F058DBF28C47540FA2C3B3 // defaults let keyring = "cert-revoked-soft.pgp"; let trust_root: Option<&Fingerprint> = Some(&alice_fpr); let sqwot_args = &["--time", "20200228"]; let command = "authenticate"; let args = &[]; let no_output = HashMap::::new(); let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(75%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; // Bob's certificate is soft revoked on 20200301. If the // reference time is before that, we should be able to // authenticate Bob. After that and we should fail to do so. test( keyring, trust_root, sqwot_args, command, args, 60, Some(&bob_uid), Some(&bob_fpr), true, &output_map(&human_output, &dot_output), ); let trust_root: Option<&Fingerprint> = None; // no trust root for binding let command = "path"; let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &bob_uid.to_string(), ], 60, None, None, true, &output_map(&human_output, &dot_output), ); let trust_root: Option<&Fingerprint> = Some(&alice_fpr); let command = "authenticate"; let sqwot_args = &["--time", "20200302"]; // setting time again test( keyring, trust_root, sqwot_args, command, &[], 60, Some(&bob_uid), Some(&bob_fpr), false, &no_output, ); let command = "path"; let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &bob_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &bob_uid.to_string(), ], 60, None, None, false, &output_map(&human_output, &dot_output), ); Ok(()) } #[test] #[allow(unused)] #[cfg(feature = "dot-writer")] fn target_userid_revoked() -> Result<()> { let alice_fpr: Fingerprint = "01672BB67E4B4047E5A4EC0A731CEA092C465FC8" .parse().expect("valid fingerprint"); let alice_uid = UserID::from(""); let bob_fpr: Fingerprint = "EA479A77CD074458EAFE56B4861BF42FF490C581" .parse().expect("valid fingerprint"); let bob_uid = UserID::from(""); // Certified by: 01672BB67E4B4047E5A4EC0A731CEA092C465FC8 // Certified by: 01672BB67E4B4047E5A4EC0A731CEA092C465FC8 let carol_fpr: Fingerprint = "212873BB9C4CC49F8E5A6FEA78BC5397470BA7F0" .parse().expect("valid fingerprint"); let carol_uid = UserID::from(""); // Certified by: EA479A77CD074458EAFE56B4861BF42FF490C581 // Certified by: EA479A77CD074458EAFE56B4861BF42FF490C581 // defaults let keyring = "userid-revoked.pgp"; let trust_root = Some(&alice_fpr); let sqwot_args = &["--time", "20200228"]; let command = "authenticate"; let no_output = HashMap::::new(); let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; let dot_output = [ ( 1, format!( "\"{}_{}\" [label=\"{}\n(50%)\", fillcolor={}];", bob_fpr, bob_uid, bob_uid, DOT_TARGET_OK_FILL_COLOR, ), ), ( 1, format!( "\"{}_{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_uid, alice_uid, DOT_NODE_FILL_COLOR, ), ), ( 1, format!( "\"{}\" [label=\"{}\", fillcolor={}];", alice_fpr, alice_fpr, DOT_ROOT_FILL_COLOR, ), ), ]; // Bob's User ID is soft revoked on 20200301. If the // reference time is before that, we should be able to // authenticate Bob. After that and we should fail to do so. test( keyring, trust_root, sqwot_args, command, &[], 60, Some(&bob_uid), Some(&bob_fpr), true, &output_map(&human_output, &dot_output), ); let trust_root = None; let command = "path"; let human_output = [(1, format!("{} {} {}: ", HR_OK, &bob_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &bob_uid.to_string(), ], 60, None, None, true, &output_map(&human_output, &dot_output), ); let trust_root = Some(&alice_fpr); let sqwot_args = &["--time", "20200302"]; let command = "authenticate"; test( keyring, trust_root, sqwot_args, command, &[], 60, Some(&bob_uid), Some(&bob_fpr), false, &no_output, ); let trust_root = None; let command = "path"; let human_output = [(1, format!("{} {} {}: ", HR_NOT_OK, &bob_fpr, &bob_uid))]; // TODO: add output to check against once sq-wot graph is supported let dot_output = []; test( keyring, trust_root, sqwot_args, command, &[ &alice_fpr.to_string(), &bob_fpr.to_string(), &bob_uid.to_string(), ], 60, None, None, false, &output_map(&human_output, &dot_output), ); Ok(()) } }